diff --git a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatclient/pom.xml b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatclient/pom.xml
deleted file mode 100644
index 4d8cee1..0000000
--- a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatclient/pom.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-<!--
- ! Licensed to the Apache Software Foundation (ASF) under one
- ! or more contributor license agreements.  See the NOTICE file
- ! distributed with this work for additional information
- ! regarding copyright ownership.  The ASF licenses this file
- ! to you 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.
- !-->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.hyracks.examples.compat</groupId>
-  <artifactId>hadoopcompatclient</artifactId>
-  <name>hadoopcompatclient</name>
-
-  <parent>
-    <groupId>org.apache.hyracks.examples</groupId>
-    <artifactId>hadoop-compat-example</artifactId>
-    <version>0.2.16-SNAPSHOT</version>
-  </parent>
-
-  <dependencies>
-  	<dependency>
-  		<groupId>org.apache.hyracks</groupId>
-  		<artifactId>hyracks-dataflow-std</artifactId>
-  		<version>0.2.16-SNAPSHOT</version>
-  		<scope>compile</scope>
-  	</dependency>
-  	<dependency>
-  		<groupId>org.apache.hyracks.examples.compat</groupId>
-  		<artifactId>hadoopcompathelper</artifactId>
-  		<version>0.2.16-SNAPSHOT</version>
-  		<type>jar</type>
-  		<scope>compile</scope>
-  	</dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <version>2.0.2</version>
-        <configuration>
-          <source>1.7</source>
-          <target>1.7</target>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>appassembler-maven-plugin</artifactId>
-        <version>1.3</version>
-        <executions>
-          <execution>
-            <configuration>
-              <programs>
-                <program>
-                  <mainClass>org.apache.hyracks.examples.compat.client.WordCountCompatibility</mainClass>
-                  <name>hadoopcompatclient</name>
-                </program>
-              </programs>
-              <repositoryLayout>flat</repositoryLayout>
-              <repositoryName>lib</repositoryName>
-            </configuration>
-            <phase>package</phase>
-            <goals>
-              <goal>assemble</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <version>2.2-beta-5</version>
-        <executions>
-          <execution>
-            <configuration>
-              <descriptors>
-                <descriptor>src/main/assembly/binary-assembly.xml</descriptor>
-              </descriptors>
-            </configuration>
-            <phase>package</phase>
-            <goals>
-              <goal>attached</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatclient/src/main/assembly/binary-assembly.xml b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatclient/src/main/assembly/binary-assembly.xml
deleted file mode 100644
index d4a2ea1..0000000
--- a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatclient/src/main/assembly/binary-assembly.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<!--
- ! Licensed to the Apache Software Foundation (ASF) under one
- ! or more contributor license agreements.  See the NOTICE file
- ! distributed with this work for additional information
- ! regarding copyright ownership.  The ASF licenses this file
- ! to you 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.
- !-->
-
-<assembly>
-  <id>binary-assembly</id>
-  <formats>
-    <format>zip</format>
-    <format>dir</format>
-  </formats>
-  <includeBaseDirectory>false</includeBaseDirectory>
-  <fileSets>
-    <fileSet>
-      <directory>target/appassembler/bin</directory>
-      <outputDirectory>bin</outputDirectory>
-      <fileMode>0755</fileMode>
-    </fileSet>
-    <fileSet>
-      <directory>target/appassembler/lib</directory>
-      <outputDirectory>lib</outputDirectory>
-    </fileSet>
-  </fileSets>
-</assembly>
diff --git a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatclient/src/main/java/org/apache/hyracks/examples/compat/client/WordCountCompatibility.java b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatclient/src/main/java/org/apache/hyracks/examples/compat/client/WordCountCompatibility.java
deleted file mode 100644
index 9fda692..0000000
--- a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatclient/src/main/java/org/apache/hyracks/examples/compat/client/WordCountCompatibility.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-package org.apache.hyracks.examples.compat.client;
-
-import org.apache.hyracks.hadoop.compat.driver.CompatibilityLayer;
-
-public class WordCountCompatibility {
-    public static void main(String[] args) throws Exception {
-        CompatibilityLayer.main(args);
-    }
-}
\ No newline at end of file
diff --git a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompathelper/pom.xml b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompathelper/pom.xml
deleted file mode 100644
index 21c52b2..0000000
--- a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompathelper/pom.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<!--
- ! Licensed to the Apache Software Foundation (ASF) under one
- ! or more contributor license agreements.  See the NOTICE file
- ! distributed with this work for additional information
- ! regarding copyright ownership.  The ASF licenses this file
- ! to you 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.
- !-->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.hyracks.examples.compat</groupId>
-  <artifactId>hadoopcompathelper</artifactId>
-  <name>hadoopcompathelper</name>
-
-  <parent>
-    <groupId>org.apache.hyracks.examples</groupId>
-    <artifactId>hadoop-compat-example</artifactId>
-    <version>0.2.16-SNAPSHOT</version>
-  </parent>
-
-  <dependencies>
-  	<dependency>
-  		<groupId>org.apache.hyracks</groupId>
-  		<artifactId>hyracks-dataflow-std</artifactId>
-  		<version>0.2.16-SNAPSHOT</version>
-  		<scope>compile</scope>
-  	</dependency>
-  	<dependency>
-  		<groupId>org.apache.hyracks</groupId>
-  		<artifactId>hyracks-api</artifactId>
-  		<version>0.2.16-SNAPSHOT</version>
-  		<scope>compile</scope>
-  	</dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <version>2.0.2</version>
-        <configuration>
-          <source>1.7</source>
-          <target>1.7</target>
-          <fork>true</fork>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompathelper/src/main/java/org/apache/hyracks/examples/wordcount/WordCount.java b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompathelper/src/main/java/org/apache/hyracks/examples/wordcount/WordCount.java
deleted file mode 100644
index 8da2c08..0000000
--- a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompathelper/src/main/java/org/apache/hyracks/examples/wordcount/WordCount.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-package org.apache.hyracks.examples.wordcount;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.Iterator;
-import java.util.StringTokenizer;
-
-import org.apache.hadoop.io.IntWritable;
-import org.apache.hadoop.io.LongWritable;
-import org.apache.hadoop.io.Text;
-import org.apache.hadoop.mapred.MapReduceBase;
-import org.apache.hadoop.mapred.Mapper;
-import org.apache.hadoop.mapred.OutputCollector;
-import org.apache.hadoop.mapred.Reducer;
-import org.apache.hadoop.mapred.Reporter;
-
-public class WordCount implements Serializable {
-    public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable>,
-            Serializable {
-
-        private final static IntWritable ONE = new IntWritable(1);
-        private Text word = new Text();
-
-        public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter)
-                throws IOException {
-            String line = value.toString();
-            StringTokenizer tokenizer = new StringTokenizer(line);
-            while (tokenizer.hasMoreTokens()) {
-                String token = tokenizer.nextToken();
-                word.set(token);
-                output.collect(word, ONE);
-            }
-        }
-    }
-
-    public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable>,
-            Serializable {
-
-        public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output,
-                Reporter reporter) throws IOException {
-            int sum = 0;
-            while (values.hasNext()) {
-                sum += values.next().get();
-            }
-            output.collect(key, new IntWritable(sum));
-        }
-    }
-}
\ No newline at end of file
diff --git a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/conf/local_cluster.conf b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/conf/local_cluster.conf
deleted file mode 100644
index 3669616..0000000
--- a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/conf/local_cluster.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-clusterControllerHost=localhost
-fs.default.name=file:///
diff --git a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/data/file1.txt b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/data/file1.txt
deleted file mode 100644
index c4c3130..0000000
--- a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/data/file1.txt
+++ /dev/null
@@ -1,13052 +0,0 @@
-﻿Project Gutenberg's The Adventures of Sherlock Holmes, by Arthur Conan Doyle
-
-This eBook is for the use of anyone anywhere at no cost and with
-almost no restrictions whatsoever.  You may copy it, give it away or
-re-use it under the terms of the Project Gutenberg License included
-with this eBook or online at www.gutenberg.net
-
-
-Title: The Adventures of Sherlock Holmes
-
-Author: Arthur Conan Doyle
-
-Posting Date: April 18, 2011 [EBook #1661]
-First Posted: November 29, 2002
-
-Language: English
-
-
-*** START OF THIS PROJECT GUTENBERG EBOOK THE ADVENTURES OF SHERLOCK HOLMES ***
-
-
-
-
-Produced by an anonymous Project Gutenberg volunteer and Jose Menendez
-
-
-
-
-
-
-
-
-
-THE ADVENTURES OF SHERLOCK HOLMES
-
-by
-
-SIR ARTHUR CONAN DOYLE
-
-
-
-   I. A Scandal in Bohemia
-  II. The Red-headed League
- III. A Case of Identity
-  IV. The Boscombe Valley Mystery
-   V. The Five Orange Pips
-  VI. The Man with the Twisted Lip
- VII. The Adventure of the Blue Carbuncle
-VIII. The Adventure of the Speckled Band
-  IX. The Adventure of the Engineer's Thumb
-   X. The Adventure of the Noble Bachelor
-  XI. The Adventure of the Beryl Coronet
- XII. The Adventure of the Copper Beeches
-
-
-
-
-ADVENTURE I. A SCANDAL IN BOHEMIA
-
-I.
-
-To Sherlock Holmes she is always THE woman. I have seldom heard
-him mention her under any other name. In his eyes she eclipses
-and predominates the whole of her sex. It was not that he felt
-any emotion akin to love for Irene Adler. All emotions, and that
-one particularly, were abhorrent to his cold, precise but
-admirably balanced mind. He was, I take it, the most perfect
-reasoning and observing machine that the world has seen, but as a
-lover he would have placed himself in a false position. He never
-spoke of the softer passions, save with a gibe and a sneer. They
-were admirable things for the observer--excellent for drawing the
-veil from men's motives and actions. But for the trained reasoner
-to admit such intrusions into his own delicate and finely
-adjusted temperament was to introduce a distracting factor which
-might throw a doubt upon all his mental results. Grit in a
-sensitive instrument, or a crack in one of his own high-power
-lenses, would not be more disturbing than a strong emotion in a
-nature such as his. And yet there was but one woman to him, and
-that woman was the late Irene Adler, of dubious and questionable
-memory.
-
-I had seen little of Holmes lately. My marriage had drifted us
-away from each other. My own complete happiness, and the
-home-centred interests which rise up around the man who first
-finds himself master of his own establishment, were sufficient to
-absorb all my attention, while Holmes, who loathed every form of
-society with his whole Bohemian soul, remained in our lodgings in
-Baker Street, buried among his old books, and alternating from
-week to week between cocaine and ambition, the drowsiness of the
-drug, and the fierce energy of his own keen nature. He was still,
-as ever, deeply attracted by the study of crime, and occupied his
-immense faculties and extraordinary powers of observation in
-following out those clues, and clearing up those mysteries which
-had been abandoned as hopeless by the official police. From time
-to time I heard some vague account of his doings: of his summons
-to Odessa in the case of the Trepoff murder, of his clearing up
-of the singular tragedy of the Atkinson brothers at Trincomalee,
-and finally of the mission which he had accomplished so
-delicately and successfully for the reigning family of Holland.
-Beyond these signs of his activity, however, which I merely
-shared with all the readers of the daily press, I knew little of
-my former friend and companion.
-
-One night--it was on the twentieth of March, 1888--I was
-returning from a journey to a patient (for I had now returned to
-civil practice), when my way led me through Baker Street. As I
-passed the well-remembered door, which must always be associated
-in my mind with my wooing, and with the dark incidents of the
-Study in Scarlet, I was seized with a keen desire to see Holmes
-again, and to know how he was employing his extraordinary powers.
-His rooms were brilliantly lit, and, even as I looked up, I saw
-his tall, spare figure pass twice in a dark silhouette against
-the blind. He was pacing the room swiftly, eagerly, with his head
-sunk upon his chest and his hands clasped behind him. To me, who
-knew his every mood and habit, his attitude and manner told their
-own story. He was at work again. He had risen out of his
-drug-created dreams and was hot upon the scent of some new
-problem. I rang the bell and was shown up to the chamber which
-had formerly been in part my own.
-
-His manner was not effusive. It seldom was; but he was glad, I
-think, to see me. With hardly a word spoken, but with a kindly
-eye, he waved me to an armchair, threw across his case of cigars,
-and indicated a spirit case and a gasogene in the corner. Then he
-stood before the fire and looked me over in his singular
-introspective fashion.
-
-"Wedlock suits you," he remarked. "I think, Watson, that you have
-put on seven and a half pounds since I saw you."
-
-"Seven!" I answered.
-
-"Indeed, I should have thought a little more. Just a trifle more,
-I fancy, Watson. And in practice again, I observe. You did not
-tell me that you intended to go into harness."
-
-"Then, how do you know?"
-
-"I see it, I deduce it. How do I know that you have been getting
-yourself very wet lately, and that you have a most clumsy and
-careless servant girl?"
-
-"My dear Holmes," said I, "this is too much. You would certainly
-have been burned, had you lived a few centuries ago. It is true
-that I had a country walk on Thursday and came home in a dreadful
-mess, but as I have changed my clothes I can't imagine how you
-deduce it. As to Mary Jane, she is incorrigible, and my wife has
-given her notice, but there, again, I fail to see how you work it
-out."
-
-He chuckled to himself and rubbed his long, nervous hands
-together.
-
-"It is simplicity itself," said he; "my eyes tell me that on the
-inside of your left shoe, just where the firelight strikes it,
-the leather is scored by six almost parallel cuts. Obviously they
-have been caused by someone who has very carelessly scraped round
-the edges of the sole in order to remove crusted mud from it.
-Hence, you see, my double deduction that you had been out in vile
-weather, and that you had a particularly malignant boot-slitting
-specimen of the London slavey. As to your practice, if a
-gentleman walks into my rooms smelling of iodoform, with a black
-mark of nitrate of silver upon his right forefinger, and a bulge
-on the right side of his top-hat to show where he has secreted
-his stethoscope, I must be dull, indeed, if I do not pronounce
-him to be an active member of the medical profession."
-
-I could not help laughing at the ease with which he explained his
-process of deduction. "When I hear you give your reasons," I
-remarked, "the thing always appears to me to be so ridiculously
-simple that I could easily do it myself, though at each
-successive instance of your reasoning I am baffled until you
-explain your process. And yet I believe that my eyes are as good
-as yours."
-
-"Quite so," he answered, lighting a cigarette, and throwing
-himself down into an armchair. "You see, but you do not observe.
-The distinction is clear. For example, you have frequently seen
-the steps which lead up from the hall to this room."
-
-"Frequently."
-
-"How often?"
-
-"Well, some hundreds of times."
-
-"Then how many are there?"
-
-"How many? I don't know."
-
-"Quite so! You have not observed. And yet you have seen. That is
-just my point. Now, I know that there are seventeen steps,
-because I have both seen and observed. By-the-way, since you are
-interested in these little problems, and since you are good
-enough to chronicle one or two of my trifling experiences, you
-may be interested in this." He threw over a sheet of thick,
-pink-tinted note-paper which had been lying open upon the table.
-"It came by the last post," said he. "Read it aloud."
-
-The note was undated, and without either signature or address.
-
-"There will call upon you to-night, at a quarter to eight
-o'clock," it said, "a gentleman who desires to consult you upon a
-matter of the very deepest moment. Your recent services to one of
-the royal houses of Europe have shown that you are one who may
-safely be trusted with matters which are of an importance which
-can hardly be exaggerated. This account of you we have from all
-quarters received. Be in your chamber then at that hour, and do
-not take it amiss if your visitor wear a mask."
-
-"This is indeed a mystery," I remarked. "What do you imagine that
-it means?"
-
-"I have no data yet. It is a capital mistake to theorize before
-one has data. Insensibly one begins to twist facts to suit
-theories, instead of theories to suit facts. But the note itself.
-What do you deduce from it?"
-
-I carefully examined the writing, and the paper upon which it was
-written.
-
-"The man who wrote it was presumably well to do," I remarked,
-endeavouring to imitate my companion's processes. "Such paper
-could not be bought under half a crown a packet. It is peculiarly
-strong and stiff."
-
-"Peculiar--that is the very word," said Holmes. "It is not an
-English paper at all. Hold it up to the light."
-
-I did so, and saw a large "E" with a small "g," a "P," and a
-large "G" with a small "t" woven into the texture of the paper.
-
-"What do you make of that?" asked Holmes.
-
-"The name of the maker, no doubt; or his monogram, rather."
-
-"Not at all. The 'G' with the small 't' stands for
-'Gesellschaft,' which is the German for 'Company.' It is a
-customary contraction like our 'Co.' 'P,' of course, stands for
-'Papier.' Now for the 'Eg.' Let us glance at our Continental
-Gazetteer." He took down a heavy brown volume from his shelves.
-"Eglow, Eglonitz--here we are, Egria. It is in a German-speaking
-country--in Bohemia, not far from Carlsbad. 'Remarkable as being
-the scene of the death of Wallenstein, and for its numerous
-glass-factories and paper-mills.' Ha, ha, my boy, what do you
-make of that?" His eyes sparkled, and he sent up a great blue
-triumphant cloud from his cigarette.
-
-"The paper was made in Bohemia," I said.
-
-"Precisely. And the man who wrote the note is a German. Do you
-note the peculiar construction of the sentence--'This account of
-you we have from all quarters received.' A Frenchman or Russian
-could not have written that. It is the German who is so
-uncourteous to his verbs. It only remains, therefore, to discover
-what is wanted by this German who writes upon Bohemian paper and
-prefers wearing a mask to showing his face. And here he comes, if
-I am not mistaken, to resolve all our doubts."
-
-As he spoke there was the sharp sound of horses' hoofs and
-grating wheels against the curb, followed by a sharp pull at the
-bell. Holmes whistled.
-
-"A pair, by the sound," said he. "Yes," he continued, glancing
-out of the window. "A nice little brougham and a pair of
-beauties. A hundred and fifty guineas apiece. There's money in
-this case, Watson, if there is nothing else."
-
-"I think that I had better go, Holmes."
-
-"Not a bit, Doctor. Stay where you are. I am lost without my
-Boswell. And this promises to be interesting. It would be a pity
-to miss it."
-
-"But your client--"
-
-"Never mind him. I may want your help, and so may he. Here he
-comes. Sit down in that armchair, Doctor, and give us your best
-attention."
-
-A slow and heavy step, which had been heard upon the stairs and
-in the passage, paused immediately outside the door. Then there
-was a loud and authoritative tap.
-
-"Come in!" said Holmes.
-
-A man entered who could hardly have been less than six feet six
-inches in height, with the chest and limbs of a Hercules. His
-dress was rich with a richness which would, in England, be looked
-upon as akin to bad taste. Heavy bands of astrakhan were slashed
-across the sleeves and fronts of his double-breasted coat, while
-the deep blue cloak which was thrown over his shoulders was lined
-with flame-coloured silk and secured at the neck with a brooch
-which consisted of a single flaming beryl. Boots which extended
-halfway up his calves, and which were trimmed at the tops with
-rich brown fur, completed the impression of barbaric opulence
-which was suggested by his whole appearance. He carried a
-broad-brimmed hat in his hand, while he wore across the upper
-part of his face, extending down past the cheekbones, a black
-vizard mask, which he had apparently adjusted that very moment,
-for his hand was still raised to it as he entered. From the lower
-part of the face he appeared to be a man of strong character,
-with a thick, hanging lip, and a long, straight chin suggestive
-of resolution pushed to the length of obstinacy.
-
-"You had my note?" he asked with a deep harsh voice and a
-strongly marked German accent. "I told you that I would call." He
-looked from one to the other of us, as if uncertain which to
-address.
-
-"Pray take a seat," said Holmes. "This is my friend and
-colleague, Dr. Watson, who is occasionally good enough to help me
-in my cases. Whom have I the honour to address?"
-
-"You may address me as the Count Von Kramm, a Bohemian nobleman.
-I understand that this gentleman, your friend, is a man of honour
-and discretion, whom I may trust with a matter of the most
-extreme importance. If not, I should much prefer to communicate
-with you alone."
-
-I rose to go, but Holmes caught me by the wrist and pushed me
-back into my chair. "It is both, or none," said he. "You may say
-before this gentleman anything which you may say to me."
-
-The Count shrugged his broad shoulders. "Then I must begin," said
-he, "by binding you both to absolute secrecy for two years; at
-the end of that time the matter will be of no importance. At
-present it is not too much to say that it is of such weight it
-may have an influence upon European history."
-
-"I promise," said Holmes.
-
-"And I."
-
-"You will excuse this mask," continued our strange visitor. "The
-august person who employs me wishes his agent to be unknown to
-you, and I may confess at once that the title by which I have
-just called myself is not exactly my own."
-
-"I was aware of it," said Holmes dryly.
-
-"The circumstances are of great delicacy, and every precaution
-has to be taken to quench what might grow to be an immense
-scandal and seriously compromise one of the reigning families of
-Europe. To speak plainly, the matter implicates the great House
-of Ormstein, hereditary kings of Bohemia."
-
-"I was also aware of that," murmured Holmes, settling himself
-down in his armchair and closing his eyes.
-
-Our visitor glanced with some apparent surprise at the languid,
-lounging figure of the man who had been no doubt depicted to him
-as the most incisive reasoner and most energetic agent in Europe.
-Holmes slowly reopened his eyes and looked impatiently at his
-gigantic client.
-
-"If your Majesty would condescend to state your case," he
-remarked, "I should be better able to advise you."
-
-The man sprang from his chair and paced up and down the room in
-uncontrollable agitation. Then, with a gesture of desperation, he
-tore the mask from his face and hurled it upon the ground. "You
-are right," he cried; "I am the King. Why should I attempt to
-conceal it?"
-
-"Why, indeed?" murmured Holmes. "Your Majesty had not spoken
-before I was aware that I was addressing Wilhelm Gottsreich
-Sigismond von Ormstein, Grand Duke of Cassel-Felstein, and
-hereditary King of Bohemia."
-
-"But you can understand," said our strange visitor, sitting down
-once more and passing his hand over his high white forehead, "you
-can understand that I am not accustomed to doing such business in
-my own person. Yet the matter was so delicate that I could not
-confide it to an agent without putting myself in his power. I
-have come incognito from Prague for the purpose of consulting
-you."
-
-"Then, pray consult," said Holmes, shutting his eyes once more.
-
-"The facts are briefly these: Some five years ago, during a
-lengthy visit to Warsaw, I made the acquaintance of the well-known
-adventuress, Irene Adler. The name is no doubt familiar to you."
-
-"Kindly look her up in my index, Doctor," murmured Holmes without
-opening his eyes. For many years he had adopted a system of
-docketing all paragraphs concerning men and things, so that it
-was difficult to name a subject or a person on which he could not
-at once furnish information. In this case I found her biography
-sandwiched in between that of a Hebrew rabbi and that of a
-staff-commander who had written a monograph upon the deep-sea
-fishes.
-
-"Let me see!" said Holmes. "Hum! Born in New Jersey in the year
-1858. Contralto--hum! La Scala, hum! Prima donna Imperial Opera
-of Warsaw--yes! Retired from operatic stage--ha! Living in
-London--quite so! Your Majesty, as I understand, became entangled
-with this young person, wrote her some compromising letters, and
-is now desirous of getting those letters back."
-
-"Precisely so. But how--"
-
-"Was there a secret marriage?"
-
-"None."
-
-"No legal papers or certificates?"
-
-"None."
-
-"Then I fail to follow your Majesty. If this young person should
-produce her letters for blackmailing or other purposes, how is
-she to prove their authenticity?"
-
-"There is the writing."
-
-"Pooh, pooh! Forgery."
-
-"My private note-paper."
-
-"Stolen."
-
-"My own seal."
-
-"Imitated."
-
-"My photograph."
-
-"Bought."
-
-"We were both in the photograph."
-
-"Oh, dear! That is very bad! Your Majesty has indeed committed an
-indiscretion."
-
-"I was mad--insane."
-
-"You have compromised yourself seriously."
-
-"I was only Crown Prince then. I was young. I am but thirty now."
-
-"It must be recovered."
-
-"We have tried and failed."
-
-"Your Majesty must pay. It must be bought."
-
-"She will not sell."
-
-"Stolen, then."
-
-"Five attempts have been made. Twice burglars in my pay ransacked
-her house. Once we diverted her luggage when she travelled. Twice
-she has been waylaid. There has been no result."
-
-"No sign of it?"
-
-"Absolutely none."
-
-Holmes laughed. "It is quite a pretty little problem," said he.
-
-"But a very serious one to me," returned the King reproachfully.
-
-"Very, indeed. And what does she propose to do with the
-photograph?"
-
-"To ruin me."
-
-"But how?"
-
-"I am about to be married."
-
-"So I have heard."
-
-"To Clotilde Lothman von Saxe-Meningen, second daughter of the
-King of Scandinavia. You may know the strict principles of her
-family. She is herself the very soul of delicacy. A shadow of a
-doubt as to my conduct would bring the matter to an end."
-
-"And Irene Adler?"
-
-"Threatens to send them the photograph. And she will do it. I
-know that she will do it. You do not know her, but she has a soul
-of steel. She has the face of the most beautiful of women, and
-the mind of the most resolute of men. Rather than I should marry
-another woman, there are no lengths to which she would not
-go--none."
-
-"You are sure that she has not sent it yet?"
-
-"I am sure."
-
-"And why?"
-
-"Because she has said that she would send it on the day when the
-betrothal was publicly proclaimed. That will be next Monday."
-
-"Oh, then we have three days yet," said Holmes with a yawn. "That
-is very fortunate, as I have one or two matters of importance to
-look into just at present. Your Majesty will, of course, stay in
-London for the present?"
-
-"Certainly. You will find me at the Langham under the name of the
-Count Von Kramm."
-
-"Then I shall drop you a line to let you know how we progress."
-
-"Pray do so. I shall be all anxiety."
-
-"Then, as to money?"
-
-"You have carte blanche."
-
-"Absolutely?"
-
-"I tell you that I would give one of the provinces of my kingdom
-to have that photograph."
-
-"And for present expenses?"
-
-The King took a heavy chamois leather bag from under his cloak
-and laid it on the table.
-
-"There are three hundred pounds in gold and seven hundred in
-notes," he said.
-
-Holmes scribbled a receipt upon a sheet of his note-book and
-handed it to him.
-
-"And Mademoiselle's address?" he asked.
-
-"Is Briony Lodge, Serpentine Avenue, St. John's Wood."
-
-Holmes took a note of it. "One other question," said he. "Was the
-photograph a cabinet?"
-
-"It was."
-
-"Then, good-night, your Majesty, and I trust that we shall soon
-have some good news for you. And good-night, Watson," he added,
-as the wheels of the royal brougham rolled down the street. "If
-you will be good enough to call to-morrow afternoon at three
-o'clock I should like to chat this little matter over with you."
-
-
-II.
-
-At three o'clock precisely I was at Baker Street, but Holmes had
-not yet returned. The landlady informed me that he had left the
-house shortly after eight o'clock in the morning. I sat down
-beside the fire, however, with the intention of awaiting him,
-however long he might be. I was already deeply interested in his
-inquiry, for, though it was surrounded by none of the grim and
-strange features which were associated with the two crimes which
-I have already recorded, still, the nature of the case and the
-exalted station of his client gave it a character of its own.
-Indeed, apart from the nature of the investigation which my
-friend had on hand, there was something in his masterly grasp of
-a situation, and his keen, incisive reasoning, which made it a
-pleasure to me to study his system of work, and to follow the
-quick, subtle methods by which he disentangled the most
-inextricable mysteries. So accustomed was I to his invariable
-success that the very possibility of his failing had ceased to
-enter into my head.
-
-It was close upon four before the door opened, and a
-drunken-looking groom, ill-kempt and side-whiskered, with an
-inflamed face and disreputable clothes, walked into the room.
-Accustomed as I was to my friend's amazing powers in the use of
-disguises, I had to look three times before I was certain that it
-was indeed he. With a nod he vanished into the bedroom, whence he
-emerged in five minutes tweed-suited and respectable, as of old.
-Putting his hands into his pockets, he stretched out his legs in
-front of the fire and laughed heartily for some minutes.
-
-"Well, really!" he cried, and then he choked and laughed again
-until he was obliged to lie back, limp and helpless, in the
-chair.
-
-"What is it?"
-
-"It's quite too funny. I am sure you could never guess how I
-employed my morning, or what I ended by doing."
-
-"I can't imagine. I suppose that you have been watching the
-habits, and perhaps the house, of Miss Irene Adler."
-
-"Quite so; but the sequel was rather unusual. I will tell you,
-however. I left the house a little after eight o'clock this
-morning in the character of a groom out of work. There is a
-wonderful sympathy and freemasonry among horsey men. Be one of
-them, and you will know all that there is to know. I soon found
-Briony Lodge. It is a bijou villa, with a garden at the back, but
-built out in front right up to the road, two stories. Chubb lock
-to the door. Large sitting-room on the right side, well
-furnished, with long windows almost to the floor, and those
-preposterous English window fasteners which a child could open.
-Behind there was nothing remarkable, save that the passage window
-could be reached from the top of the coach-house. I walked round
-it and examined it closely from every point of view, but without
-noting anything else of interest.
-
-"I then lounged down the street and found, as I expected, that
-there was a mews in a lane which runs down by one wall of the
-garden. I lent the ostlers a hand in rubbing down their horses,
-and received in exchange twopence, a glass of half and half, two
-fills of shag tobacco, and as much information as I could desire
-about Miss Adler, to say nothing of half a dozen other people in
-the neighbourhood in whom I was not in the least interested, but
-whose biographies I was compelled to listen to."
-
-"And what of Irene Adler?" I asked.
-
-"Oh, she has turned all the men's heads down in that part. She is
-the daintiest thing under a bonnet on this planet. So say the
-Serpentine-mews, to a man. She lives quietly, sings at concerts,
-drives out at five every day, and returns at seven sharp for
-dinner. Seldom goes out at other times, except when she sings.
-Has only one male visitor, but a good deal of him. He is dark,
-handsome, and dashing, never calls less than once a day, and
-often twice. He is a Mr. Godfrey Norton, of the Inner Temple. See
-the advantages of a cabman as a confidant. They had driven him
-home a dozen times from Serpentine-mews, and knew all about him.
-When I had listened to all they had to tell, I began to walk up
-and down near Briony Lodge once more, and to think over my plan
-of campaign.
-
-"This Godfrey Norton was evidently an important factor in the
-matter. He was a lawyer. That sounded ominous. What was the
-relation between them, and what the object of his repeated
-visits? Was she his client, his friend, or his mistress? If the
-former, she had probably transferred the photograph to his
-keeping. If the latter, it was less likely. On the issue of this
-question depended whether I should continue my work at Briony
-Lodge, or turn my attention to the gentleman's chambers in the
-Temple. It was a delicate point, and it widened the field of my
-inquiry. I fear that I bore you with these details, but I have to
-let you see my little difficulties, if you are to understand the
-situation."
-
-"I am following you closely," I answered.
-
-"I was still balancing the matter in my mind when a hansom cab
-drove up to Briony Lodge, and a gentleman sprang out. He was a
-remarkably handsome man, dark, aquiline, and moustached--evidently
-the man of whom I had heard. He appeared to be in a
-great hurry, shouted to the cabman to wait, and brushed past the
-maid who opened the door with the air of a man who was thoroughly
-at home.
-
-"He was in the house about half an hour, and I could catch
-glimpses of him in the windows of the sitting-room, pacing up and
-down, talking excitedly, and waving his arms. Of her I could see
-nothing. Presently he emerged, looking even more flurried than
-before. As he stepped up to the cab, he pulled a gold watch from
-his pocket and looked at it earnestly, 'Drive like the devil,' he
-shouted, 'first to Gross & Hankey's in Regent Street, and then to
-the Church of St. Monica in the Edgeware Road. Half a guinea if
-you do it in twenty minutes!'
-
-"Away they went, and I was just wondering whether I should not do
-well to follow them when up the lane came a neat little landau,
-the coachman with his coat only half-buttoned, and his tie under
-his ear, while all the tags of his harness were sticking out of
-the buckles. It hadn't pulled up before she shot out of the hall
-door and into it. I only caught a glimpse of her at the moment,
-but she was a lovely woman, with a face that a man might die for.
-
-"'The Church of St. Monica, John,' she cried, 'and half a
-sovereign if you reach it in twenty minutes.'
-
-"This was quite too good to lose, Watson. I was just balancing
-whether I should run for it, or whether I should perch behind her
-landau when a cab came through the street. The driver looked
-twice at such a shabby fare, but I jumped in before he could
-object. 'The Church of St. Monica,' said I, 'and half a sovereign
-if you reach it in twenty minutes.' It was twenty-five minutes to
-twelve, and of course it was clear enough what was in the wind.
-
-"My cabby drove fast. I don't think I ever drove faster, but the
-others were there before us. The cab and the landau with their
-steaming horses were in front of the door when I arrived. I paid
-the man and hurried into the church. There was not a soul there
-save the two whom I had followed and a surpliced clergyman, who
-seemed to be expostulating with them. They were all three
-standing in a knot in front of the altar. I lounged up the side
-aisle like any other idler who has dropped into a church.
-Suddenly, to my surprise, the three at the altar faced round to
-me, and Godfrey Norton came running as hard as he could towards
-me.
-
-"'Thank God,' he cried. 'You'll do. Come! Come!'
-
-"'What then?' I asked.
-
-"'Come, man, come, only three minutes, or it won't be legal.'
-
-"I was half-dragged up to the altar, and before I knew where I was
-I found myself mumbling responses which were whispered in my ear,
-and vouching for things of which I knew nothing, and generally
-assisting in the secure tying up of Irene Adler, spinster, to
-Godfrey Norton, bachelor. It was all done in an instant, and
-there was the gentleman thanking me on the one side and the lady
-on the other, while the clergyman beamed on me in front. It was
-the most preposterous position in which I ever found myself in my
-life, and it was the thought of it that started me laughing just
-now. It seems that there had been some informality about their
-license, that the clergyman absolutely refused to marry them
-without a witness of some sort, and that my lucky appearance
-saved the bridegroom from having to sally out into the streets in
-search of a best man. The bride gave me a sovereign, and I mean
-to wear it on my watch-chain in memory of the occasion."
-
-"This is a very unexpected turn of affairs," said I; "and what
-then?"
-
-"Well, I found my plans very seriously menaced. It looked as if
-the pair might take an immediate departure, and so necessitate
-very prompt and energetic measures on my part. At the church
-door, however, they separated, he driving back to the Temple, and
-she to her own house. 'I shall drive out in the park at five as
-usual,' she said as she left him. I heard no more. They drove
-away in different directions, and I went off to make my own
-arrangements."
-
-"Which are?"
-
-"Some cold beef and a glass of beer," he answered, ringing the
-bell. "I have been too busy to think of food, and I am likely to
-be busier still this evening. By the way, Doctor, I shall want
-your co-operation."
-
-"I shall be delighted."
-
-"You don't mind breaking the law?"
-
-"Not in the least."
-
-"Nor running a chance of arrest?"
-
-"Not in a good cause."
-
-"Oh, the cause is excellent!"
-
-"Then I am your man."
-
-"I was sure that I might rely on you."
-
-"But what is it you wish?"
-
-"When Mrs. Turner has brought in the tray I will make it clear to
-you. Now," he said as he turned hungrily on the simple fare that
-our landlady had provided, "I must discuss it while I eat, for I
-have not much time. It is nearly five now. In two hours we must
-be on the scene of action. Miss Irene, or Madame, rather, returns
-from her drive at seven. We must be at Briony Lodge to meet her."
-
-"And what then?"
-
-"You must leave that to me. I have already arranged what is to
-occur. There is only one point on which I must insist. You must
-not interfere, come what may. You understand?"
-
-"I am to be neutral?"
-
-"To do nothing whatever. There will probably be some small
-unpleasantness. Do not join in it. It will end in my being
-conveyed into the house. Four or five minutes afterwards the
-sitting-room window will open. You are to station yourself close
-to that open window."
-
-"Yes."
-
-"You are to watch me, for I will be visible to you."
-
-"Yes."
-
-"And when I raise my hand--so--you will throw into the room what
-I give you to throw, and will, at the same time, raise the cry of
-fire. You quite follow me?"
-
-"Entirely."
-
-"It is nothing very formidable," he said, taking a long cigar-shaped
-roll from his pocket. "It is an ordinary plumber's smoke-rocket,
-fitted with a cap at either end to make it self-lighting.
-Your task is confined to that. When you raise your cry of fire,
-it will be taken up by quite a number of people. You may then
-walk to the end of the street, and I will rejoin you in ten
-minutes. I hope that I have made myself clear?"
-
-"I am to remain neutral, to get near the window, to watch you,
-and at the signal to throw in this object, then to raise the cry
-of fire, and to wait you at the corner of the street."
-
-"Precisely."
-
-"Then you may entirely rely on me."
-
-"That is excellent. I think, perhaps, it is almost time that I
-prepare for the new role I have to play."
-
-He disappeared into his bedroom and returned in a few minutes in
-the character of an amiable and simple-minded Nonconformist
-clergyman. His broad black hat, his baggy trousers, his white
-tie, his sympathetic smile, and general look of peering and
-benevolent curiosity were such as Mr. John Hare alone could have
-equalled. It was not merely that Holmes changed his costume. His
-expression, his manner, his very soul seemed to vary with every
-fresh part that he assumed. The stage lost a fine actor, even as
-science lost an acute reasoner, when he became a specialist in
-crime.
-
-It was a quarter past six when we left Baker Street, and it still
-wanted ten minutes to the hour when we found ourselves in
-Serpentine Avenue. It was already dusk, and the lamps were just
-being lighted as we paced up and down in front of Briony Lodge,
-waiting for the coming of its occupant. The house was just such
-as I had pictured it from Sherlock Holmes' succinct description,
-but the locality appeared to be less private than I expected. On
-the contrary, for a small street in a quiet neighbourhood, it was
-remarkably animated. There was a group of shabbily dressed men
-smoking and laughing in a corner, a scissors-grinder with his
-wheel, two guardsmen who were flirting with a nurse-girl, and
-several well-dressed young men who were lounging up and down with
-cigars in their mouths.
-
-"You see," remarked Holmes, as we paced to and fro in front of
-the house, "this marriage rather simplifies matters. The
-photograph becomes a double-edged weapon now. The chances are
-that she would be as averse to its being seen by Mr. Godfrey
-Norton, as our client is to its coming to the eyes of his
-princess. Now the question is, Where are we to find the
-photograph?"
-
-"Where, indeed?"
-
-"It is most unlikely that she carries it about with her. It is
-cabinet size. Too large for easy concealment about a woman's
-dress. She knows that the King is capable of having her waylaid
-and searched. Two attempts of the sort have already been made. We
-may take it, then, that she does not carry it about with her."
-
-"Where, then?"
-
-"Her banker or her lawyer. There is that double possibility. But
-I am inclined to think neither. Women are naturally secretive,
-and they like to do their own secreting. Why should she hand it
-over to anyone else? She could trust her own guardianship, but
-she could not tell what indirect or political influence might be
-brought to bear upon a business man. Besides, remember that she
-had resolved to use it within a few days. It must be where she
-can lay her hands upon it. It must be in her own house."
-
-"But it has twice been burgled."
-
-"Pshaw! They did not know how to look."
-
-"But how will you look?"
-
-"I will not look."
-
-"What then?"
-
-"I will get her to show me."
-
-"But she will refuse."
-
-"She will not be able to. But I hear the rumble of wheels. It is
-her carriage. Now carry out my orders to the letter."
-
-As he spoke the gleam of the side-lights of a carriage came round
-the curve of the avenue. It was a smart little landau which
-rattled up to the door of Briony Lodge. As it pulled up, one of
-the loafing men at the corner dashed forward to open the door in
-the hope of earning a copper, but was elbowed away by another
-loafer, who had rushed up with the same intention. A fierce
-quarrel broke out, which was increased by the two guardsmen, who
-took sides with one of the loungers, and by the scissors-grinder,
-who was equally hot upon the other side. A blow was struck, and
-in an instant the lady, who had stepped from her carriage, was
-the centre of a little knot of flushed and struggling men, who
-struck savagely at each other with their fists and sticks. Holmes
-dashed into the crowd to protect the lady; but just as he reached
-her he gave a cry and dropped to the ground, with the blood
-running freely down his face. At his fall the guardsmen took to
-their heels in one direction and the loungers in the other, while
-a number of better-dressed people, who had watched the scuffle
-without taking part in it, crowded in to help the lady and to
-attend to the injured man. Irene Adler, as I will still call her,
-had hurried up the steps; but she stood at the top with her
-superb figure outlined against the lights of the hall, looking
-back into the street.
-
-"Is the poor gentleman much hurt?" she asked.
-
-"He is dead," cried several voices.
-
-"No, no, there's life in him!" shouted another. "But he'll be
-gone before you can get him to hospital."
-
-"He's a brave fellow," said a woman. "They would have had the
-lady's purse and watch if it hadn't been for him. They were a
-gang, and a rough one, too. Ah, he's breathing now."
-
-"He can't lie in the street. May we bring him in, marm?"
-
-"Surely. Bring him into the sitting-room. There is a comfortable
-sofa. This way, please!"
-
-Slowly and solemnly he was borne into Briony Lodge and laid out
-in the principal room, while I still observed the proceedings
-from my post by the window. The lamps had been lit, but the
-blinds had not been drawn, so that I could see Holmes as he lay
-upon the couch. I do not know whether he was seized with
-compunction at that moment for the part he was playing, but I
-know that I never felt more heartily ashamed of myself in my life
-than when I saw the beautiful creature against whom I was
-conspiring, or the grace and kindliness with which she waited
-upon the injured man. And yet it would be the blackest treachery
-to Holmes to draw back now from the part which he had intrusted
-to me. I hardened my heart, and took the smoke-rocket from under
-my ulster. After all, I thought, we are not injuring her. We are
-but preventing her from injuring another.
-
-Holmes had sat up upon the couch, and I saw him motion like a man
-who is in need of air. A maid rushed across and threw open the
-window. At the same instant I saw him raise his hand and at the
-signal I tossed my rocket into the room with a cry of "Fire!" The
-word was no sooner out of my mouth than the whole crowd of
-spectators, well dressed and ill--gentlemen, ostlers, and
-servant-maids--joined in a general shriek of "Fire!" Thick clouds
-of smoke curled through the room and out at the open window. I
-caught a glimpse of rushing figures, and a moment later the voice
-of Holmes from within assuring them that it was a false alarm.
-Slipping through the shouting crowd I made my way to the corner
-of the street, and in ten minutes was rejoiced to find my
-friend's arm in mine, and to get away from the scene of uproar.
-He walked swiftly and in silence for some few minutes until we
-had turned down one of the quiet streets which lead towards the
-Edgeware Road.
-
-"You did it very nicely, Doctor," he remarked. "Nothing could
-have been better. It is all right."
-
-"You have the photograph?"
-
-"I know where it is."
-
-"And how did you find out?"
-
-"She showed me, as I told you she would."
-
-"I am still in the dark."
-
-"I do not wish to make a mystery," said he, laughing. "The matter
-was perfectly simple. You, of course, saw that everyone in the
-street was an accomplice. They were all engaged for the evening."
-
-"I guessed as much."
-
-"Then, when the row broke out, I had a little moist red paint in
-the palm of my hand. I rushed forward, fell down, clapped my hand
-to my face, and became a piteous spectacle. It is an old trick."
-
-"That also I could fathom."
-
-"Then they carried me in. She was bound to have me in. What else
-could she do? And into her sitting-room, which was the very room
-which I suspected. It lay between that and her bedroom, and I was
-determined to see which. They laid me on a couch, I motioned for
-air, they were compelled to open the window, and you had your
-chance."
-
-"How did that help you?"
-
-"It was all-important. When a woman thinks that her house is on
-fire, her instinct is at once to rush to the thing which she
-values most. It is a perfectly overpowering impulse, and I have
-more than once taken advantage of it. In the case of the
-Darlington substitution scandal it was of use to me, and also in
-the Arnsworth Castle business. A married woman grabs at her baby;
-an unmarried one reaches for her jewel-box. Now it was clear to
-me that our lady of to-day had nothing in the house more precious
-to her than what we are in quest of. She would rush to secure it.
-The alarm of fire was admirably done. The smoke and shouting were
-enough to shake nerves of steel. She responded beautifully. The
-photograph is in a recess behind a sliding panel just above the
-right bell-pull. She was there in an instant, and I caught a
-glimpse of it as she half-drew it out. When I cried out that it
-was a false alarm, she replaced it, glanced at the rocket, rushed
-from the room, and I have not seen her since. I rose, and, making
-my excuses, escaped from the house. I hesitated whether to
-attempt to secure the photograph at once; but the coachman had
-come in, and as he was watching me narrowly it seemed safer to
-wait. A little over-precipitance may ruin all."
-
-"And now?" I asked.
-
-"Our quest is practically finished. I shall call with the King
-to-morrow, and with you, if you care to come with us. We will be
-shown into the sitting-room to wait for the lady, but it is
-probable that when she comes she may find neither us nor the
-photograph. It might be a satisfaction to his Majesty to regain
-it with his own hands."
-
-"And when will you call?"
-
-"At eight in the morning. She will not be up, so that we shall
-have a clear field. Besides, we must be prompt, for this marriage
-may mean a complete change in her life and habits. I must wire to
-the King without delay."
-
-We had reached Baker Street and had stopped at the door. He was
-searching his pockets for the key when someone passing said:
-
-"Good-night, Mister Sherlock Holmes."
-
-There were several people on the pavement at the time, but the
-greeting appeared to come from a slim youth in an ulster who had
-hurried by.
-
-"I've heard that voice before," said Holmes, staring down the
-dimly lit street. "Now, I wonder who the deuce that could have
-been."
-
-
-III.
-
-I slept at Baker Street that night, and we were engaged upon our
-toast and coffee in the morning when the King of Bohemia rushed
-into the room.
-
-"You have really got it!" he cried, grasping Sherlock Holmes by
-either shoulder and looking eagerly into his face.
-
-"Not yet."
-
-"But you have hopes?"
-
-"I have hopes."
-
-"Then, come. I am all impatience to be gone."
-
-"We must have a cab."
-
-"No, my brougham is waiting."
-
-"Then that will simplify matters." We descended and started off
-once more for Briony Lodge.
-
-"Irene Adler is married," remarked Holmes.
-
-"Married! When?"
-
-"Yesterday."
-
-"But to whom?"
-
-"To an English lawyer named Norton."
-
-"But she could not love him."
-
-"I am in hopes that she does."
-
-"And why in hopes?"
-
-"Because it would spare your Majesty all fear of future
-annoyance. If the lady loves her husband, she does not love your
-Majesty. If she does not love your Majesty, there is no reason
-why she should interfere with your Majesty's plan."
-
-"It is true. And yet--Well! I wish she had been of my own
-station! What a queen she would have made!" He relapsed into a
-moody silence, which was not broken until we drew up in
-Serpentine Avenue.
-
-The door of Briony Lodge was open, and an elderly woman stood
-upon the steps. She watched us with a sardonic eye as we stepped
-from the brougham.
-
-"Mr. Sherlock Holmes, I believe?" said she.
-
-"I am Mr. Holmes," answered my companion, looking at her with a
-questioning and rather startled gaze.
-
-"Indeed! My mistress told me that you were likely to call. She
-left this morning with her husband by the 5:15 train from Charing
-Cross for the Continent."
-
-"What!" Sherlock Holmes staggered back, white with chagrin and
-surprise. "Do you mean that she has left England?"
-
-"Never to return."
-
-"And the papers?" asked the King hoarsely. "All is lost."
-
-"We shall see." He pushed past the servant and rushed into the
-drawing-room, followed by the King and myself. The furniture was
-scattered about in every direction, with dismantled shelves and
-open drawers, as if the lady had hurriedly ransacked them before
-her flight. Holmes rushed at the bell-pull, tore back a small
-sliding shutter, and, plunging in his hand, pulled out a
-photograph and a letter. The photograph was of Irene Adler
-herself in evening dress, the letter was superscribed to
-"Sherlock Holmes, Esq. To be left till called for." My friend
-tore it open and we all three read it together. It was dated at
-midnight of the preceding night and ran in this way:
-
-"MY DEAR MR. SHERLOCK HOLMES,--You really did it very well. You
-took me in completely. Until after the alarm of fire, I had not a
-suspicion. But then, when I found how I had betrayed myself, I
-began to think. I had been warned against you months ago. I had
-been told that if the King employed an agent it would certainly
-be you. And your address had been given me. Yet, with all this,
-you made me reveal what you wanted to know. Even after I became
-suspicious, I found it hard to think evil of such a dear, kind
-old clergyman. But, you know, I have been trained as an actress
-myself. Male costume is nothing new to me. I often take advantage
-of the freedom which it gives. I sent John, the coachman, to
-watch you, ran up stairs, got into my walking-clothes, as I call
-them, and came down just as you departed.
-
-"Well, I followed you to your door, and so made sure that I was
-really an object of interest to the celebrated Mr. Sherlock
-Holmes. Then I, rather imprudently, wished you good-night, and
-started for the Temple to see my husband.
-
-"We both thought the best resource was flight, when pursued by
-so formidable an antagonist; so you will find the nest empty when
-you call to-morrow. As to the photograph, your client may rest in
-peace. I love and am loved by a better man than he. The King may
-do what he will without hindrance from one whom he has cruelly
-wronged. I keep it only to safeguard myself, and to preserve a
-weapon which will always secure me from any steps which he might
-take in the future. I leave a photograph which he might care to
-possess; and I remain, dear Mr. Sherlock Holmes,
-
-                                      "Very truly yours,
-                                   "IRENE NORTON, née ADLER."
-
-"What a woman--oh, what a woman!" cried the King of Bohemia, when
-we had all three read this epistle. "Did I not tell you how quick
-and resolute she was? Would she not have made an admirable queen?
-Is it not a pity that she was not on my level?"
-
-"From what I have seen of the lady she seems indeed to be on a
-very different level to your Majesty," said Holmes coldly. "I am
-sorry that I have not been able to bring your Majesty's business
-to a more successful conclusion."
-
-"On the contrary, my dear sir," cried the King; "nothing could be
-more successful. I know that her word is inviolate. The
-photograph is now as safe as if it were in the fire."
-
-"I am glad to hear your Majesty say so."
-
-"I am immensely indebted to you. Pray tell me in what way I can
-reward you. This ring--" He slipped an emerald snake ring from
-his finger and held it out upon the palm of his hand.
-
-"Your Majesty has something which I should value even more
-highly," said Holmes.
-
-"You have but to name it."
-
-"This photograph!"
-
-The King stared at him in amazement.
-
-"Irene's photograph!" he cried. "Certainly, if you wish it."
-
-"I thank your Majesty. Then there is no more to be done in the
-matter. I have the honour to wish you a very good-morning." He
-bowed, and, turning away without observing the hand which the
-King had stretched out to him, he set off in my company for his
-chambers.
-
-And that was how a great scandal threatened to affect the kingdom
-of Bohemia, and how the best plans of Mr. Sherlock Holmes were
-beaten by a woman's wit. He used to make merry over the
-cleverness of women, but I have not heard him do it of late. And
-when he speaks of Irene Adler, or when he refers to her
-photograph, it is always under the honourable title of the woman.
-
-
-
-ADVENTURE II. THE RED-HEADED LEAGUE
-
-I had called upon my friend, Mr. Sherlock Holmes, one day in the
-autumn of last year and found him in deep conversation with a
-very stout, florid-faced, elderly gentleman with fiery red hair.
-With an apology for my intrusion, I was about to withdraw when
-Holmes pulled me abruptly into the room and closed the door
-behind me.
-
-"You could not possibly have come at a better time, my dear
-Watson," he said cordially.
-
-"I was afraid that you were engaged."
-
-"So I am. Very much so."
-
-"Then I can wait in the next room."
-
-"Not at all. This gentleman, Mr. Wilson, has been my partner and
-helper in many of my most successful cases, and I have no
-doubt that he will be of the utmost use to me in yours also."
-
-The stout gentleman half rose from his chair and gave a bob of
-greeting, with a quick little questioning glance from his small
-fat-encircled eyes.
-
-"Try the settee," said Holmes, relapsing into his armchair and
-putting his fingertips together, as was his custom when in
-judicial moods. "I know, my dear Watson, that you share my love
-of all that is bizarre and outside the conventions and humdrum
-routine of everyday life. You have shown your relish for it by
-the enthusiasm which has prompted you to chronicle, and, if you
-will excuse my saying so, somewhat to embellish so many of my own
-little adventures."
-
-"Your cases have indeed been of the greatest interest to me," I
-observed.
-
-"You will remember that I remarked the other day, just before we
-went into the very simple problem presented by Miss Mary
-Sutherland, that for strange effects and extraordinary
-combinations we must go to life itself, which is always far more
-daring than any effort of the imagination."
-
-"A proposition which I took the liberty of doubting."
-
-"You did, Doctor, but none the less you must come round to my
-view, for otherwise I shall keep on piling fact upon fact on you
-until your reason breaks down under them and acknowledges me to
-be right. Now, Mr. Jabez Wilson here has been good enough to call
-upon me this morning, and to begin a narrative which promises to
-be one of the most singular which I have listened to for some
-time. You have heard me remark that the strangest and most unique
-things are very often connected not with the larger but with the
-smaller crimes, and occasionally, indeed, where there is room for
-doubt whether any positive crime has been committed. As far as I
-have heard it is impossible for me to say whether the present
-case is an instance of crime or not, but the course of events is
-certainly among the most singular that I have ever listened to.
-Perhaps, Mr. Wilson, you would have the great kindness to
-recommence your narrative. I ask you not merely because my friend
-Dr. Watson has not heard the opening part but also because the
-peculiar nature of the story makes me anxious to have every
-possible detail from your lips. As a rule, when I have heard some
-slight indication of the course of events, I am able to guide
-myself by the thousands of other similar cases which occur to my
-memory. In the present instance I am forced to admit that the
-facts are, to the best of my belief, unique."
-
-The portly client puffed out his chest with an appearance of some
-little pride and pulled a dirty and wrinkled newspaper from the
-inside pocket of his greatcoat. As he glanced down the
-advertisement column, with his head thrust forward and the paper
-flattened out upon his knee, I took a good look at the man and
-endeavoured, after the fashion of my companion, to read the
-indications which might be presented by his dress or appearance.
-
-I did not gain very much, however, by my inspection. Our visitor
-bore every mark of being an average commonplace British
-tradesman, obese, pompous, and slow. He wore rather baggy grey
-shepherd's check trousers, a not over-clean black frock-coat,
-unbuttoned in the front, and a drab waistcoat with a heavy brassy
-Albert chain, and a square pierced bit of metal dangling down as
-an ornament. A frayed top-hat and a faded brown overcoat with a
-wrinkled velvet collar lay upon a chair beside him. Altogether,
-look as I would, there was nothing remarkable about the man save
-his blazing red head, and the expression of extreme chagrin and
-discontent upon his features.
-
-Sherlock Holmes' quick eye took in my occupation, and he shook
-his head with a smile as he noticed my questioning glances.
-"Beyond the obvious facts that he has at some time done manual
-labour, that he takes snuff, that he is a Freemason, that he has
-been in China, and that he has done a considerable amount of
-writing lately, I can deduce nothing else."
-
-Mr. Jabez Wilson started up in his chair, with his forefinger
-upon the paper, but his eyes upon my companion.
-
-"How, in the name of good-fortune, did you know all that, Mr.
-Holmes?" he asked. "How did you know, for example, that I did
-manual labour. It's as true as gospel, for I began as a ship's
-carpenter."
-
-"Your hands, my dear sir. Your right hand is quite a size larger
-than your left. You have worked with it, and the muscles are more
-developed."
-
-"Well, the snuff, then, and the Freemasonry?"
-
-"I won't insult your intelligence by telling you how I read that,
-especially as, rather against the strict rules of your order, you
-use an arc-and-compass breastpin."
-
-"Ah, of course, I forgot that. But the writing?"
-
-"What else can be indicated by that right cuff so very shiny for
-five inches, and the left one with the smooth patch near the
-elbow where you rest it upon the desk?"
-
-"Well, but China?"
-
-"The fish that you have tattooed immediately above your right
-wrist could only have been done in China. I have made a small
-study of tattoo marks and have even contributed to the literature
-of the subject. That trick of staining the fishes' scales of a
-delicate pink is quite peculiar to China. When, in addition, I
-see a Chinese coin hanging from your watch-chain, the matter
-becomes even more simple."
-
-Mr. Jabez Wilson laughed heavily. "Well, I never!" said he. "I
-thought at first that you had done something clever, but I see
-that there was nothing in it, after all."
-
-"I begin to think, Watson," said Holmes, "that I make a mistake
-in explaining. 'Omne ignotum pro magnifico,' you know, and my
-poor little reputation, such as it is, will suffer shipwreck if I
-am so candid. Can you not find the advertisement, Mr. Wilson?"
-
-"Yes, I have got it now," he answered with his thick red finger
-planted halfway down the column. "Here it is. This is what began
-it all. You just read it for yourself, sir."
-
-I took the paper from him and read as follows:
-
-"TO THE RED-HEADED LEAGUE: On account of the bequest of the late
-Ezekiah Hopkins, of Lebanon, Pennsylvania, U. S. A., there is now
-another vacancy open which entitles a member of the League to a
-salary of 4 pounds a week for purely nominal services. All
-red-headed men who are sound in body and mind and above the age
-of twenty-one years, are eligible. Apply in person on Monday, at
-eleven o'clock, to Duncan Ross, at the offices of the League, 7
-Pope's Court, Fleet Street."
-
-"What on earth does this mean?" I ejaculated after I had twice
-read over the extraordinary announcement.
-
-Holmes chuckled and wriggled in his chair, as was his habit when
-in high spirits. "It is a little off the beaten track, isn't it?"
-said he. "And now, Mr. Wilson, off you go at scratch and tell us
-all about yourself, your household, and the effect which this
-advertisement had upon your fortunes. You will first make a note,
-Doctor, of the paper and the date."
-
-"It is The Morning Chronicle of April 27, 1890. Just two months
-ago."
-
-"Very good. Now, Mr. Wilson?"
-
-"Well, it is just as I have been telling you, Mr. Sherlock
-Holmes," said Jabez Wilson, mopping his forehead; "I have a small
-pawnbroker's business at Coburg Square, near the City. It's not a
-very large affair, and of late years it has not done more than
-just give me a living. I used to be able to keep two assistants,
-but now I only keep one; and I would have a job to pay him but
-that he is willing to come for half wages so as to learn the
-business."
-
-"What is the name of this obliging youth?" asked Sherlock Holmes.
-
-"His name is Vincent Spaulding, and he's not such a youth,
-either. It's hard to say his age. I should not wish a smarter
-assistant, Mr. Holmes; and I know very well that he could better
-himself and earn twice what I am able to give him. But, after
-all, if he is satisfied, why should I put ideas in his head?"
-
-"Why, indeed? You seem most fortunate in having an employé who
-comes under the full market price. It is not a common experience
-among employers in this age. I don't know that your assistant is
-not as remarkable as your advertisement."
-
-"Oh, he has his faults, too," said Mr. Wilson. "Never was such a
-fellow for photography. Snapping away with a camera when he ought
-to be improving his mind, and then diving down into the cellar
-like a rabbit into its hole to develop his pictures. That is his
-main fault, but on the whole he's a good worker. There's no vice
-in him."
-
-"He is still with you, I presume?"
-
-"Yes, sir. He and a girl of fourteen, who does a bit of simple
-cooking and keeps the place clean--that's all I have in the
-house, for I am a widower and never had any family. We live very
-quietly, sir, the three of us; and we keep a roof over our heads
-and pay our debts, if we do nothing more.
-
-"The first thing that put us out was that advertisement.
-Spaulding, he came down into the office just this day eight
-weeks, with this very paper in his hand, and he says:
-
-"'I wish to the Lord, Mr. Wilson, that I was a red-headed man.'
-
-"'Why that?' I asks.
-
-"'Why,' says he, 'here's another vacancy on the League of the
-Red-headed Men. It's worth quite a little fortune to any man who
-gets it, and I understand that there are more vacancies than
-there are men, so that the trustees are at their wits' end what
-to do with the money. If my hair would only change colour, here's
-a nice little crib all ready for me to step into.'
-
-"'Why, what is it, then?' I asked. You see, Mr. Holmes, I am a
-very stay-at-home man, and as my business came to me instead of
-my having to go to it, I was often weeks on end without putting
-my foot over the door-mat. In that way I didn't know much of what
-was going on outside, and I was always glad of a bit of news.
-
-"'Have you never heard of the League of the Red-headed Men?' he
-asked with his eyes open.
-
-"'Never.'
-
-"'Why, I wonder at that, for you are eligible yourself for one
-of the vacancies.'
-
-"'And what are they worth?' I asked.
-
-"'Oh, merely a couple of hundred a year, but the work is slight,
-and it need not interfere very much with one's other
-occupations.'
-
-"Well, you can easily think that that made me prick up my ears,
-for the business has not been over-good for some years, and an
-extra couple of hundred would have been very handy.
-
-"'Tell me all about it,' said I.
-
-"'Well,' said he, showing me the advertisement, 'you can see for
-yourself that the League has a vacancy, and there is the address
-where you should apply for particulars. As far as I can make out,
-the League was founded by an American millionaire, Ezekiah
-Hopkins, who was very peculiar in his ways. He was himself
-red-headed, and he had a great sympathy for all red-headed men;
-so when he died it was found that he had left his enormous
-fortune in the hands of trustees, with instructions to apply the
-interest to the providing of easy berths to men whose hair is of
-that colour. From all I hear it is splendid pay and very little to
-do.'
-
-"'But,' said I, 'there would be millions of red-headed men who
-would apply.'
-
-"'Not so many as you might think,' he answered. 'You see it is
-really confined to Londoners, and to grown men. This American had
-started from London when he was young, and he wanted to do the
-old town a good turn. Then, again, I have heard it is no use your
-applying if your hair is light red, or dark red, or anything but
-real bright, blazing, fiery red. Now, if you cared to apply, Mr.
-Wilson, you would just walk in; but perhaps it would hardly be
-worth your while to put yourself out of the way for the sake of a
-few hundred pounds.'
-
-"Now, it is a fact, gentlemen, as you may see for yourselves,
-that my hair is of a very full and rich tint, so that it seemed
-to me that if there was to be any competition in the matter I
-stood as good a chance as any man that I had ever met. Vincent
-Spaulding seemed to know so much about it that I thought he might
-prove useful, so I just ordered him to put up the shutters for
-the day and to come right away with me. He was very willing to
-have a holiday, so we shut the business up and started off for
-the address that was given us in the advertisement.
-
-"I never hope to see such a sight as that again, Mr. Holmes. From
-north, south, east, and west every man who had a shade of red in
-his hair had tramped into the city to answer the advertisement.
-Fleet Street was choked with red-headed folk, and Pope's Court
-looked like a coster's orange barrow. I should not have thought
-there were so many in the whole country as were brought together
-by that single advertisement. Every shade of colour they
-were--straw, lemon, orange, brick, Irish-setter, liver, clay;
-but, as Spaulding said, there were not many who had the real
-vivid flame-coloured tint. When I saw how many were waiting, I
-would have given it up in despair; but Spaulding would not hear
-of it. How he did it I could not imagine, but he pushed and
-pulled and butted until he got me through the crowd, and right up
-to the steps which led to the office. There was a double stream
-upon the stair, some going up in hope, and some coming back
-dejected; but we wedged in as well as we could and soon found
-ourselves in the office."
-
-"Your experience has been a most entertaining one," remarked
-Holmes as his client paused and refreshed his memory with a huge
-pinch of snuff. "Pray continue your very interesting statement."
-
-"There was nothing in the office but a couple of wooden chairs
-and a deal table, behind which sat a small man with a head that
-was even redder than mine. He said a few words to each candidate
-as he came up, and then he always managed to find some fault in
-them which would disqualify them. Getting a vacancy did not seem
-to be such a very easy matter, after all. However, when our turn
-came the little man was much more favourable to me than to any of
-the others, and he closed the door as we entered, so that he
-might have a private word with us.
-
-"'This is Mr. Jabez Wilson,' said my assistant, 'and he is
-willing to fill a vacancy in the League.'
-
-"'And he is admirably suited for it,' the other answered. 'He has
-every requirement. I cannot recall when I have seen anything so
-fine.' He took a step backward, cocked his head on one side, and
-gazed at my hair until I felt quite bashful. Then suddenly he
-plunged forward, wrung my hand, and congratulated me warmly on my
-success.
-
-"'It would be injustice to hesitate,' said he. 'You will,
-however, I am sure, excuse me for taking an obvious precaution.'
-With that he seized my hair in both his hands, and tugged until I
-yelled with the pain. 'There is water in your eyes,' said he as
-he released me. 'I perceive that all is as it should be. But we
-have to be careful, for we have twice been deceived by wigs and
-once by paint. I could tell you tales of cobbler's wax which
-would disgust you with human nature.' He stepped over to the
-window and shouted through it at the top of his voice that the
-vacancy was filled. A groan of disappointment came up from below,
-and the folk all trooped away in different directions until there
-was not a red-head to be seen except my own and that of the
-manager.
-
-"'My name,' said he, 'is Mr. Duncan Ross, and I am myself one of
-the pensioners upon the fund left by our noble benefactor. Are
-you a married man, Mr. Wilson? Have you a family?'
-
-"I answered that I had not.
-
-"His face fell immediately.
-
-"'Dear me!' he said gravely, 'that is very serious indeed! I am
-sorry to hear you say that. The fund was, of course, for the
-propagation and spread of the red-heads as well as for their
-maintenance. It is exceedingly unfortunate that you should be a
-bachelor.'
-
-"My face lengthened at this, Mr. Holmes, for I thought that I was
-not to have the vacancy after all; but after thinking it over for
-a few minutes he said that it would be all right.
-
-"'In the case of another,' said he, 'the objection might be
-fatal, but we must stretch a point in favour of a man with such a
-head of hair as yours. When shall you be able to enter upon your
-new duties?'
-
-"'Well, it is a little awkward, for I have a business already,'
-said I.
-
-"'Oh, never mind about that, Mr. Wilson!' said Vincent Spaulding.
-'I should be able to look after that for you.'
-
-"'What would be the hours?' I asked.
-
-"'Ten to two.'
-
-"Now a pawnbroker's business is mostly done of an evening, Mr.
-Holmes, especially Thursday and Friday evening, which is just
-before pay-day; so it would suit me very well to earn a little in
-the mornings. Besides, I knew that my assistant was a good man,
-and that he would see to anything that turned up.
-
-"'That would suit me very well,' said I. 'And the pay?'
-
-"'Is 4 pounds a week.'
-
-"'And the work?'
-
-"'Is purely nominal.'
-
-"'What do you call purely nominal?'
-
-"'Well, you have to be in the office, or at least in the
-building, the whole time. If you leave, you forfeit your whole
-position forever. The will is very clear upon that point. You
-don't comply with the conditions if you budge from the office
-during that time.'
-
-"'It's only four hours a day, and I should not think of leaving,'
-said I.
-
-"'No excuse will avail,' said Mr. Duncan Ross; 'neither sickness
-nor business nor anything else. There you must stay, or you lose
-your billet.'
-
-"'And the work?'
-
-"'Is to copy out the "Encyclopaedia Britannica." There is the first
-volume of it in that press. You must find your own ink, pens, and
-blotting-paper, but we provide this table and chair. Will you be
-ready to-morrow?'
-
-"'Certainly,' I answered.
-
-"'Then, good-bye, Mr. Jabez Wilson, and let me congratulate you
-once more on the important position which you have been fortunate
-enough to gain.' He bowed me out of the room and I went home with
-my assistant, hardly knowing what to say or do, I was so pleased
-at my own good fortune.
-
-"Well, I thought over the matter all day, and by evening I was in
-low spirits again; for I had quite persuaded myself that the
-whole affair must be some great hoax or fraud, though what its
-object might be I could not imagine. It seemed altogether past
-belief that anyone could make such a will, or that they would pay
-such a sum for doing anything so simple as copying out the
-'Encyclopaedia Britannica.' Vincent Spaulding did what he could to
-cheer me up, but by bedtime I had reasoned myself out of the
-whole thing. However, in the morning I determined to have a look
-at it anyhow, so I bought a penny bottle of ink, and with a
-quill-pen, and seven sheets of foolscap paper, I started off for
-Pope's Court.
-
-"Well, to my surprise and delight, everything was as right as
-possible. The table was set out ready for me, and Mr. Duncan Ross
-was there to see that I got fairly to work. He started me off
-upon the letter A, and then he left me; but he would drop in from
-time to time to see that all was right with me. At two o'clock he
-bade me good-day, complimented me upon the amount that I had
-written, and locked the door of the office after me.
-
-"This went on day after day, Mr. Holmes, and on Saturday the
-manager came in and planked down four golden sovereigns for my
-week's work. It was the same next week, and the same the week
-after. Every morning I was there at ten, and every afternoon I
-left at two. By degrees Mr. Duncan Ross took to coming in only
-once of a morning, and then, after a time, he did not come in at
-all. Still, of course, I never dared to leave the room for an
-instant, for I was not sure when he might come, and the billet
-was such a good one, and suited me so well, that I would not risk
-the loss of it.
-
-"Eight weeks passed away like this, and I had written about
-Abbots and Archery and Armour and Architecture and Attica, and
-hoped with diligence that I might get on to the B's before very
-long. It cost me something in foolscap, and I had pretty nearly
-filled a shelf with my writings. And then suddenly the whole
-business came to an end."
-
-"To an end?"
-
-"Yes, sir. And no later than this morning. I went to my work as
-usual at ten o'clock, but the door was shut and locked, with a
-little square of cardboard hammered on to the middle of the
-panel with a tack. Here it is, and you can read for yourself."
-
-He held up a piece of white cardboard about the size of a sheet
-of note-paper. It read in this fashion:
-
-                  THE RED-HEADED LEAGUE
-
-                           IS
-
-                        DISSOLVED.
-
-                     October 9, 1890.
-
-Sherlock Holmes and I surveyed this curt announcement and the
-rueful face behind it, until the comical side of the affair so
-completely overtopped every other consideration that we both
-burst out into a roar of laughter.
-
-"I cannot see that there is anything very funny," cried our
-client, flushing up to the roots of his flaming head. "If you can
-do nothing better than laugh at me, I can go elsewhere."
-
-"No, no," cried Holmes, shoving him back into the chair from
-which he had half risen. "I really wouldn't miss your case for
-the world. It is most refreshingly unusual. But there is, if you
-will excuse my saying so, something just a little funny about it.
-Pray what steps did you take when you found the card upon the
-door?"
-
-"I was staggered, sir. I did not know what to do. Then I called
-at the offices round, but none of them seemed to know anything
-about it. Finally, I went to the landlord, who is an accountant
-living on the ground-floor, and I asked him if he could tell me
-what had become of the Red-headed League. He said that he had
-never heard of any such body. Then I asked him who Mr. Duncan
-Ross was. He answered that the name was new to him.
-
-"'Well,' said I, 'the gentleman at No. 4.'
-
-"'What, the red-headed man?'
-
-"'Yes.'
-
-"'Oh,' said he, 'his name was William Morris. He was a solicitor
-and was using my room as a temporary convenience until his new
-premises were ready. He moved out yesterday.'
-
-"'Where could I find him?'
-
-"'Oh, at his new offices. He did tell me the address. Yes, 17
-King Edward Street, near St. Paul's.'
-
-"I started off, Mr. Holmes, but when I got to that address it was
-a manufactory of artificial knee-caps, and no one in it had ever
-heard of either Mr. William Morris or Mr. Duncan Ross."
-
-"And what did you do then?" asked Holmes.
-
-"I went home to Saxe-Coburg Square, and I took the advice of my
-assistant. But he could not help me in any way. He could only say
-that if I waited I should hear by post. But that was not quite
-good enough, Mr. Holmes. I did not wish to lose such a place
-without a struggle, so, as I had heard that you were good enough
-to give advice to poor folk who were in need of it, I came right
-away to you."
-
-"And you did very wisely," said Holmes. "Your case is an
-exceedingly remarkable one, and I shall be happy to look into it.
-From what you have told me I think that it is possible that
-graver issues hang from it than might at first sight appear."
-
-"Grave enough!" said Mr. Jabez Wilson. "Why, I have lost four
-pound a week."
-
-"As far as you are personally concerned," remarked Holmes, "I do
-not see that you have any grievance against this extraordinary
-league. On the contrary, you are, as I understand, richer by some
-30 pounds, to say nothing of the minute knowledge which you have
-gained on every subject which comes under the letter A. You have
-lost nothing by them."
-
-"No, sir. But I want to find out about them, and who they are,
-and what their object was in playing this prank--if it was a
-prank--upon me. It was a pretty expensive joke for them, for it
-cost them two and thirty pounds."
-
-"We shall endeavour to clear up these points for you. And, first,
-one or two questions, Mr. Wilson. This assistant of yours who
-first called your attention to the advertisement--how long had he
-been with you?"
-
-"About a month then."
-
-"How did he come?"
-
-"In answer to an advertisement."
-
-"Was he the only applicant?"
-
-"No, I had a dozen."
-
-"Why did you pick him?"
-
-"Because he was handy and would come cheap."
-
-"At half-wages, in fact."
-
-"Yes."
-
-"What is he like, this Vincent Spaulding?"
-
-"Small, stout-built, very quick in his ways, no hair on his face,
-though he's not short of thirty. Has a white splash of acid upon
-his forehead."
-
-Holmes sat up in his chair in considerable excitement. "I thought
-as much," said he. "Have you ever observed that his ears are
-pierced for earrings?"
-
-"Yes, sir. He told me that a gipsy had done it for him when he
-was a lad."
-
-"Hum!" said Holmes, sinking back in deep thought. "He is still
-with you?"
-
-"Oh, yes, sir; I have only just left him."
-
-"And has your business been attended to in your absence?"
-
-"Nothing to complain of, sir. There's never very much to do of a
-morning."
-
-"That will do, Mr. Wilson. I shall be happy to give you an
-opinion upon the subject in the course of a day or two. To-day is
-Saturday, and I hope that by Monday we may come to a conclusion."
-
-"Well, Watson," said Holmes when our visitor had left us, "what
-do you make of it all?"
-
-"I make nothing of it," I answered frankly. "It is a most
-mysterious business."
-
-"As a rule," said Holmes, "the more bizarre a thing is the less
-mysterious it proves to be. It is your commonplace, featureless
-crimes which are really puzzling, just as a commonplace face is
-the most difficult to identify. But I must be prompt over this
-matter."
-
-"What are you going to do, then?" I asked.
-
-"To smoke," he answered. "It is quite a three pipe problem, and I
-beg that you won't speak to me for fifty minutes." He curled
-himself up in his chair, with his thin knees drawn up to his
-hawk-like nose, and there he sat with his eyes closed and his
-black clay pipe thrusting out like the bill of some strange bird.
-I had come to the conclusion that he had dropped asleep, and
-indeed was nodding myself, when he suddenly sprang out of his
-chair with the gesture of a man who has made up his mind and put
-his pipe down upon the mantelpiece.
-
-"Sarasate plays at the St. James's Hall this afternoon," he
-remarked. "What do you think, Watson? Could your patients spare
-you for a few hours?"
-
-"I have nothing to do to-day. My practice is never very
-absorbing."
-
-"Then put on your hat and come. I am going through the City
-first, and we can have some lunch on the way. I observe that
-there is a good deal of German music on the programme, which is
-rather more to my taste than Italian or French. It is
-introspective, and I want to introspect. Come along!"
-
-We travelled by the Underground as far as Aldersgate; and a short
-walk took us to Saxe-Coburg Square, the scene of the singular
-story which we had listened to in the morning. It was a poky,
-little, shabby-genteel place, where four lines of dingy
-two-storied brick houses looked out into a small railed-in
-enclosure, where a lawn of weedy grass and a few clumps of faded
-laurel-bushes made a hard fight against a smoke-laden and
-uncongenial atmosphere. Three gilt balls and a brown board with
-"JABEZ WILSON" in white letters, upon a corner house, announced
-the place where our red-headed client carried on his business.
-Sherlock Holmes stopped in front of it with his head on one side
-and looked it all over, with his eyes shining brightly between
-puckered lids. Then he walked slowly up the street, and then down
-again to the corner, still looking keenly at the houses. Finally
-he returned to the pawnbroker's, and, having thumped vigorously
-upon the pavement with his stick two or three times, he went up
-to the door and knocked. It was instantly opened by a
-bright-looking, clean-shaven young fellow, who asked him to step
-in.
-
-"Thank you," said Holmes, "I only wished to ask you how you would
-go from here to the Strand."
-
-"Third right, fourth left," answered the assistant promptly,
-closing the door.
-
-"Smart fellow, that," observed Holmes as we walked away. "He is,
-in my judgment, the fourth smartest man in London, and for daring
-I am not sure that he has not a claim to be third. I have known
-something of him before."
-
-"Evidently," said I, "Mr. Wilson's assistant counts for a good
-deal in this mystery of the Red-headed League. I am sure that you
-inquired your way merely in order that you might see him."
-
-"Not him."
-
-"What then?"
-
-"The knees of his trousers."
-
-"And what did you see?"
-
-"What I expected to see."
-
-"Why did you beat the pavement?"
-
-"My dear doctor, this is a time for observation, not for talk. We
-are spies in an enemy's country. We know something of Saxe-Coburg
-Square. Let us now explore the parts which lie behind it."
-
-The road in which we found ourselves as we turned round the
-corner from the retired Saxe-Coburg Square presented as great a
-contrast to it as the front of a picture does to the back. It was
-one of the main arteries which conveyed the traffic of the City
-to the north and west. The roadway was blocked with the immense
-stream of commerce flowing in a double tide inward and outward,
-while the footpaths were black with the hurrying swarm of
-pedestrians. It was difficult to realise as we looked at the line
-of fine shops and stately business premises that they really
-abutted on the other side upon the faded and stagnant square
-which we had just quitted.
-
-"Let me see," said Holmes, standing at the corner and glancing
-along the line, "I should like just to remember the order of the
-houses here. It is a hobby of mine to have an exact knowledge of
-London. There is Mortimer's, the tobacconist, the little
-newspaper shop, the Coburg branch of the City and Suburban Bank,
-the Vegetarian Restaurant, and McFarlane's carriage-building
-depot. That carries us right on to the other block. And now,
-Doctor, we've done our work, so it's time we had some play. A
-sandwich and a cup of coffee, and then off to violin-land, where
-all is sweetness and delicacy and harmony, and there are no
-red-headed clients to vex us with their conundrums."
-
-My friend was an enthusiastic musician, being himself not only a
-very capable performer but a composer of no ordinary merit. All
-the afternoon he sat in the stalls wrapped in the most perfect
-happiness, gently waving his long, thin fingers in time to the
-music, while his gently smiling face and his languid, dreamy eyes
-were as unlike those of Holmes the sleuth-hound, Holmes the
-relentless, keen-witted, ready-handed criminal agent, as it was
-possible to conceive. In his singular character the dual nature
-alternately asserted itself, and his extreme exactness and
-astuteness represented, as I have often thought, the reaction
-against the poetic and contemplative mood which occasionally
-predominated in him. The swing of his nature took him from
-extreme languor to devouring energy; and, as I knew well, he was
-never so truly formidable as when, for days on end, he had been
-lounging in his armchair amid his improvisations and his
-black-letter editions. Then it was that the lust of the chase
-would suddenly come upon him, and that his brilliant reasoning
-power would rise to the level of intuition, until those who were
-unacquainted with his methods would look askance at him as on a
-man whose knowledge was not that of other mortals. When I saw him
-that afternoon so enwrapped in the music at St. James's Hall I
-felt that an evil time might be coming upon those whom he had set
-himself to hunt down.
-
-"You want to go home, no doubt, Doctor," he remarked as we
-emerged.
-
-"Yes, it would be as well."
-
-"And I have some business to do which will take some hours. This
-business at Coburg Square is serious."
-
-"Why serious?"
-
-"A considerable crime is in contemplation. I have every reason to
-believe that we shall be in time to stop it. But to-day being
-Saturday rather complicates matters. I shall want your help
-to-night."
-
-"At what time?"
-
-"Ten will be early enough."
-
-"I shall be at Baker Street at ten."
-
-"Very well. And, I say, Doctor, there may be some little danger,
-so kindly put your army revolver in your pocket." He waved his
-hand, turned on his heel, and disappeared in an instant among the
-crowd.
-
-I trust that I am not more dense than my neighbours, but I was
-always oppressed with a sense of my own stupidity in my dealings
-with Sherlock Holmes. Here I had heard what he had heard, I had
-seen what he had seen, and yet from his words it was evident that
-he saw clearly not only what had happened but what was about to
-happen, while to me the whole business was still confused and
-grotesque. As I drove home to my house in Kensington I thought
-over it all, from the extraordinary story of the red-headed
-copier of the "Encyclopaedia" down to the visit to Saxe-Coburg
-Square, and the ominous words with which he had parted from me.
-What was this nocturnal expedition, and why should I go armed?
-Where were we going, and what were we to do? I had the hint from
-Holmes that this smooth-faced pawnbroker's assistant was a
-formidable man--a man who might play a deep game. I tried to
-puzzle it out, but gave it up in despair and set the matter aside
-until night should bring an explanation.
-
-It was a quarter-past nine when I started from home and made my
-way across the Park, and so through Oxford Street to Baker
-Street. Two hansoms were standing at the door, and as I entered
-the passage I heard the sound of voices from above. On entering
-his room I found Holmes in animated conversation with two men,
-one of whom I recognised as Peter Jones, the official police
-agent, while the other was a long, thin, sad-faced man, with a
-very shiny hat and oppressively respectable frock-coat.
-
-"Ha! Our party is complete," said Holmes, buttoning up his
-pea-jacket and taking his heavy hunting crop from the rack.
-"Watson, I think you know Mr. Jones, of Scotland Yard? Let me
-introduce you to Mr. Merryweather, who is to be our companion in
-to-night's adventure."
-
-"We're hunting in couples again, Doctor, you see," said Jones in
-his consequential way. "Our friend here is a wonderful man for
-starting a chase. All he wants is an old dog to help him to do
-the running down."
-
-"I hope a wild goose may not prove to be the end of our chase,"
-observed Mr. Merryweather gloomily.
-
-"You may place considerable confidence in Mr. Holmes, sir," said
-the police agent loftily. "He has his own little methods, which
-are, if he won't mind my saying so, just a little too theoretical
-and fantastic, but he has the makings of a detective in him. It
-is not too much to say that once or twice, as in that business of
-the Sholto murder and the Agra treasure, he has been more nearly
-correct than the official force."
-
-"Oh, if you say so, Mr. Jones, it is all right," said the
-stranger with deference. "Still, I confess that I miss my rubber.
-It is the first Saturday night for seven-and-twenty years that I
-have not had my rubber."
-
-"I think you will find," said Sherlock Holmes, "that you will
-play for a higher stake to-night than you have ever done yet, and
-that the play will be more exciting. For you, Mr. Merryweather,
-the stake will be some 30,000 pounds; and for you, Jones, it will
-be the man upon whom you wish to lay your hands."
-
-"John Clay, the murderer, thief, smasher, and forger. He's a
-young man, Mr. Merryweather, but he is at the head of his
-profession, and I would rather have my bracelets on him than on
-any criminal in London. He's a remarkable man, is young John
-Clay. His grandfather was a royal duke, and he himself has been
-to Eton and Oxford. His brain is as cunning as his fingers, and
-though we meet signs of him at every turn, we never know where to
-find the man himself. He'll crack a crib in Scotland one week,
-and be raising money to build an orphanage in Cornwall the next.
-I've been on his track for years and have never set eyes on him
-yet."
-
-"I hope that I may have the pleasure of introducing you to-night.
-I've had one or two little turns also with Mr. John Clay, and I
-agree with you that he is at the head of his profession. It is
-past ten, however, and quite time that we started. If you two
-will take the first hansom, Watson and I will follow in the
-second."
-
-Sherlock Holmes was not very communicative during the long drive
-and lay back in the cab humming the tunes which he had heard in
-the afternoon. We rattled through an endless labyrinth of gas-lit
-streets until we emerged into Farrington Street.
-
-"We are close there now," my friend remarked. "This fellow
-Merryweather is a bank director, and personally interested in the
-matter. I thought it as well to have Jones with us also. He is
-not a bad fellow, though an absolute imbecile in his profession.
-He has one positive virtue. He is as brave as a bulldog and as
-tenacious as a lobster if he gets his claws upon anyone. Here we
-are, and they are waiting for us."
-
-We had reached the same crowded thoroughfare in which we had
-found ourselves in the morning. Our cabs were dismissed, and,
-following the guidance of Mr. Merryweather, we passed down a
-narrow passage and through a side door, which he opened for us.
-Within there was a small corridor, which ended in a very massive
-iron gate. This also was opened, and led down a flight of winding
-stone steps, which terminated at another formidable gate. Mr.
-Merryweather stopped to light a lantern, and then conducted us
-down a dark, earth-smelling passage, and so, after opening a
-third door, into a huge vault or cellar, which was piled all
-round with crates and massive boxes.
-
-"You are not very vulnerable from above," Holmes remarked as he
-held up the lantern and gazed about him.
-
-"Nor from below," said Mr. Merryweather, striking his stick upon
-the flags which lined the floor. "Why, dear me, it sounds quite
-hollow!" he remarked, looking up in surprise.
-
-"I must really ask you to be a little more quiet!" said Holmes
-severely. "You have already imperilled the whole success of our
-expedition. Might I beg that you would have the goodness to sit
-down upon one of those boxes, and not to interfere?"
-
-The solemn Mr. Merryweather perched himself upon a crate, with a
-very injured expression upon his face, while Holmes fell upon his
-knees upon the floor and, with the lantern and a magnifying lens,
-began to examine minutely the cracks between the stones. A few
-seconds sufficed to satisfy him, for he sprang to his feet again
-and put his glass in his pocket.
-
-"We have at least an hour before us," he remarked, "for they can
-hardly take any steps until the good pawnbroker is safely in bed.
-Then they will not lose a minute, for the sooner they do their
-work the longer time they will have for their escape. We are at
-present, Doctor--as no doubt you have divined--in the cellar of
-the City branch of one of the principal London banks. Mr.
-Merryweather is the chairman of directors, and he will explain to
-you that there are reasons why the more daring criminals of
-London should take a considerable interest in this cellar at
-present."
-
-"It is our French gold," whispered the director. "We have had
-several warnings that an attempt might be made upon it."
-
-"Your French gold?"
-
-"Yes. We had occasion some months ago to strengthen our resources
-and borrowed for that purpose 30,000 napoleons from the Bank of
-France. It has become known that we have never had occasion to
-unpack the money, and that it is still lying in our cellar. The
-crate upon which I sit contains 2,000 napoleons packed between
-layers of lead foil. Our reserve of bullion is much larger at
-present than is usually kept in a single branch office, and the
-directors have had misgivings upon the subject."
-
-"Which were very well justified," observed Holmes. "And now it is
-time that we arranged our little plans. I expect that within an
-hour matters will come to a head. In the meantime Mr.
-Merryweather, we must put the screen over that dark lantern."
-
-"And sit in the dark?"
-
-"I am afraid so. I had brought a pack of cards in my pocket, and
-I thought that, as we were a partie carrée, you might have your
-rubber after all. But I see that the enemy's preparations have
-gone so far that we cannot risk the presence of a light. And,
-first of all, we must choose our positions. These are daring men,
-and though we shall take them at a disadvantage, they may do us
-some harm unless we are careful. I shall stand behind this crate,
-and do you conceal yourselves behind those. Then, when I flash a
-light upon them, close in swiftly. If they fire, Watson, have no
-compunction about shooting them down."
-
-I placed my revolver, cocked, upon the top of the wooden case
-behind which I crouched. Holmes shot the slide across the front
-of his lantern and left us in pitch darkness--such an absolute
-darkness as I have never before experienced. The smell of hot
-metal remained to assure us that the light was still there, ready
-to flash out at a moment's notice. To me, with my nerves worked
-up to a pitch of expectancy, there was something depressing and
-subduing in the sudden gloom, and in the cold dank air of the
-vault.
-
-"They have but one retreat," whispered Holmes. "That is back
-through the house into Saxe-Coburg Square. I hope that you have
-done what I asked you, Jones?"
-
-"I have an inspector and two officers waiting at the front door."
-
-"Then we have stopped all the holes. And now we must be silent
-and wait."
-
-What a time it seemed! From comparing notes afterwards it was but
-an hour and a quarter, yet it appeared to me that the night must
-have almost gone and the dawn be breaking above us. My limbs
-were weary and stiff, for I feared to change my position; yet my
-nerves were worked up to the highest pitch of tension, and my
-hearing was so acute that I could not only hear the gentle
-breathing of my companions, but I could distinguish the deeper,
-heavier in-breath of the bulky Jones from the thin, sighing note
-of the bank director. From my position I could look over the case
-in the direction of the floor. Suddenly my eyes caught the glint
-of a light.
-
-At first it was but a lurid spark upon the stone pavement. Then
-it lengthened out until it became a yellow line, and then,
-without any warning or sound, a gash seemed to open and a hand
-appeared, a white, almost womanly hand, which felt about in the
-centre of the little area of light. For a minute or more the
-hand, with its writhing fingers, protruded out of the floor. Then
-it was withdrawn as suddenly as it appeared, and all was dark
-again save the single lurid spark which marked a chink between
-the stones.
-
-Its disappearance, however, was but momentary. With a rending,
-tearing sound, one of the broad, white stones turned over upon
-its side and left a square, gaping hole, through which streamed
-the light of a lantern. Over the edge there peeped a clean-cut,
-boyish face, which looked keenly about it, and then, with a hand
-on either side of the aperture, drew itself shoulder-high and
-waist-high, until one knee rested upon the edge. In another
-instant he stood at the side of the hole and was hauling after
-him a companion, lithe and small like himself, with a pale face
-and a shock of very red hair.
-
-"It's all clear," he whispered. "Have you the chisel and the
-bags? Great Scott! Jump, Archie, jump, and I'll swing for it!"
-
-Sherlock Holmes had sprung out and seized the intruder by the
-collar. The other dived down the hole, and I heard the sound of
-rending cloth as Jones clutched at his skirts. The light flashed
-upon the barrel of a revolver, but Holmes' hunting crop came
-down on the man's wrist, and the pistol clinked upon the stone
-floor.
-
-"It's no use, John Clay," said Holmes blandly. "You have no
-chance at all."
-
-"So I see," the other answered with the utmost coolness. "I fancy
-that my pal is all right, though I see you have got his
-coat-tails."
-
-"There are three men waiting for him at the door," said Holmes.
-
-"Oh, indeed! You seem to have done the thing very completely. I
-must compliment you."
-
-"And I you," Holmes answered. "Your red-headed idea was very new
-and effective."
-
-"You'll see your pal again presently," said Jones. "He's quicker
-at climbing down holes than I am. Just hold out while I fix the
-derbies."
-
-"I beg that you will not touch me with your filthy hands,"
-remarked our prisoner as the handcuffs clattered upon his wrists.
-"You may not be aware that I have royal blood in my veins. Have
-the goodness, also, when you address me always to say 'sir' and
-'please.'"
-
-"All right," said Jones with a stare and a snigger. "Well, would
-you please, sir, march upstairs, where we can get a cab to carry
-your Highness to the police-station?"
-
-"That is better," said John Clay serenely. He made a sweeping bow
-to the three of us and walked quietly off in the custody of the
-detective.
-
-"Really, Mr. Holmes," said Mr. Merryweather as we followed them
-from the cellar, "I do not know how the bank can thank you or
-repay you. There is no doubt that you have detected and defeated
-in the most complete manner one of the most determined attempts
-at bank robbery that have ever come within my experience."
-
-"I have had one or two little scores of my own to settle with Mr.
-John Clay," said Holmes. "I have been at some small expense over
-this matter, which I shall expect the bank to refund, but beyond
-that I am amply repaid by having had an experience which is in
-many ways unique, and by hearing the very remarkable narrative of
-the Red-headed League."
-
-
-"You see, Watson," he explained in the early hours of the morning
-as we sat over a glass of whisky and soda in Baker Street, "it
-was perfectly obvious from the first that the only possible
-object of this rather fantastic business of the advertisement of
-the League, and the copying of the 'Encyclopaedia,' must be to get
-this not over-bright pawnbroker out of the way for a number of
-hours every day. It was a curious way of managing it, but,
-really, it would be difficult to suggest a better. The method was
-no doubt suggested to Clay's ingenious mind by the colour of his
-accomplice's hair. The 4 pounds a week was a lure which must draw
-him, and what was it to them, who were playing for thousands?
-They put in the advertisement, one rogue has the temporary
-office, the other rogue incites the man to apply for it, and
-together they manage to secure his absence every morning in the
-week. From the time that I heard of the assistant having come for
-half wages, it was obvious to me that he had some strong motive
-for securing the situation."
-
-"But how could you guess what the motive was?"
-
-"Had there been women in the house, I should have suspected a
-mere vulgar intrigue. That, however, was out of the question. The
-man's business was a small one, and there was nothing in his
-house which could account for such elaborate preparations, and
-such an expenditure as they were at. It must, then, be something
-out of the house. What could it be? I thought of the assistant's
-fondness for photography, and his trick of vanishing into the
-cellar. The cellar! There was the end of this tangled clue. Then
-I made inquiries as to this mysterious assistant and found that I
-had to deal with one of the coolest and most daring criminals in
-London. He was doing something in the cellar--something which
-took many hours a day for months on end. What could it be, once
-more? I could think of nothing save that he was running a tunnel
-to some other building.
-
-"So far I had got when we went to visit the scene of action. I
-surprised you by beating upon the pavement with my stick. I was
-ascertaining whether the cellar stretched out in front or behind.
-It was not in front. Then I rang the bell, and, as I hoped, the
-assistant answered it. We have had some skirmishes, but we had
-never set eyes upon each other before. I hardly looked at his
-face. His knees were what I wished to see. You must yourself have
-remarked how worn, wrinkled, and stained they were. They spoke of
-those hours of burrowing. The only remaining point was what they
-were burrowing for. I walked round the corner, saw the City and
-Suburban Bank abutted on our friend's premises, and felt that I
-had solved my problem. When you drove home after the concert I
-called upon Scotland Yard and upon the chairman of the bank
-directors, with the result that you have seen."
-
-"And how could you tell that they would make their attempt
-to-night?" I asked.
-
-"Well, when they closed their League offices that was a sign that
-they cared no longer about Mr. Jabez Wilson's presence--in other
-words, that they had completed their tunnel. But it was essential
-that they should use it soon, as it might be discovered, or the
-bullion might be removed. Saturday would suit them better than
-any other day, as it would give them two days for their escape.
-For all these reasons I expected them to come to-night."
-
-"You reasoned it out beautifully," I exclaimed in unfeigned
-admiration. "It is so long a chain, and yet every link rings
-true."
-
-"It saved me from ennui," he answered, yawning. "Alas! I already
-feel it closing in upon me. My life is spent in one long effort
-to escape from the commonplaces of existence. These little
-problems help me to do so."
-
-"And you are a benefactor of the race," said I.
-
-He shrugged his shoulders. "Well, perhaps, after all, it is of
-some little use," he remarked. "'L'homme c'est rien--l'oeuvre
-c'est tout,' as Gustave Flaubert wrote to George Sand."
-
-
-
-ADVENTURE III. A CASE OF IDENTITY
-
-"My dear fellow," said Sherlock Holmes as we sat on either side
-of the fire in his lodgings at Baker Street, "life is infinitely
-stranger than anything which the mind of man could invent. We
-would not dare to conceive the things which are really mere
-commonplaces of existence. If we could fly out of that window
-hand in hand, hover over this great city, gently remove the
-roofs, and peep in at the queer things which are going on, the
-strange coincidences, the plannings, the cross-purposes, the
-wonderful chains of events, working through generations, and
-leading to the most outré results, it would make all fiction with
-its conventionalities and foreseen conclusions most stale and
-unprofitable."
-
-"And yet I am not convinced of it," I answered. "The cases which
-come to light in the papers are, as a rule, bald enough, and
-vulgar enough. We have in our police reports realism pushed to
-its extreme limits, and yet the result is, it must be confessed,
-neither fascinating nor artistic."
-
-"A certain selection and discretion must be used in producing a
-realistic effect," remarked Holmes. "This is wanting in the
-police report, where more stress is laid, perhaps, upon the
-platitudes of the magistrate than upon the details, which to an
-observer contain the vital essence of the whole matter. Depend
-upon it, there is nothing so unnatural as the commonplace."
-
-I smiled and shook my head. "I can quite understand your thinking
-so," I said. "Of course, in your position of unofficial adviser
-and helper to everybody who is absolutely puzzled, throughout
-three continents, you are brought in contact with all that is
-strange and bizarre. But here"--I picked up the morning paper
-from the ground--"let us put it to a practical test. Here is the
-first heading upon which I come. 'A husband's cruelty to his
-wife.' There is half a column of print, but I know without
-reading it that it is all perfectly familiar to me. There is, of
-course, the other woman, the drink, the push, the blow, the
-bruise, the sympathetic sister or landlady. The crudest of
-writers could invent nothing more crude."
-
-"Indeed, your example is an unfortunate one for your argument,"
-said Holmes, taking the paper and glancing his eye down it. "This
-is the Dundas separation case, and, as it happens, I was engaged
-in clearing up some small points in connection with it. The
-husband was a teetotaler, there was no other woman, and the
-conduct complained of was that he had drifted into the habit of
-winding up every meal by taking out his false teeth and hurling
-them at his wife, which, you will allow, is not an action likely
-to occur to the imagination of the average story-teller. Take a
-pinch of snuff, Doctor, and acknowledge that I have scored over
-you in your example."
-
-He held out his snuffbox of old gold, with a great amethyst in
-the centre of the lid. Its splendour was in such contrast to his
-homely ways and simple life that I could not help commenting upon
-it.
-
-"Ah," said he, "I forgot that I had not seen you for some weeks.
-It is a little souvenir from the King of Bohemia in return for my
-assistance in the case of the Irene Adler papers."
-
-"And the ring?" I asked, glancing at a remarkable brilliant which
-sparkled upon his finger.
-
-"It was from the reigning family of Holland, though the matter in
-which I served them was of such delicacy that I cannot confide it
-even to you, who have been good enough to chronicle one or two of
-my little problems."
-
-"And have you any on hand just now?" I asked with interest.
-
-"Some ten or twelve, but none which present any feature of
-interest. They are important, you understand, without being
-interesting. Indeed, I have found that it is usually in
-unimportant matters that there is a field for the observation,
-and for the quick analysis of cause and effect which gives the
-charm to an investigation. The larger crimes are apt to be the
-simpler, for the bigger the crime the more obvious, as a rule, is
-the motive. In these cases, save for one rather intricate matter
-which has been referred to me from Marseilles, there is nothing
-which presents any features of interest. It is possible, however,
-that I may have something better before very many minutes are
-over, for this is one of my clients, or I am much mistaken."
-
-He had risen from his chair and was standing between the parted
-blinds gazing down into the dull neutral-tinted London street.
-Looking over his shoulder, I saw that on the pavement opposite
-there stood a large woman with a heavy fur boa round her neck,
-and a large curling red feather in a broad-brimmed hat which was
-tilted in a coquettish Duchess of Devonshire fashion over her
-ear. From under this great panoply she peeped up in a nervous,
-hesitating fashion at our windows, while her body oscillated
-backward and forward, and her fingers fidgeted with her glove
-buttons. Suddenly, with a plunge, as of the swimmer who leaves
-the bank, she hurried across the road, and we heard the sharp
-clang of the bell.
-
-"I have seen those symptoms before," said Holmes, throwing his
-cigarette into the fire. "Oscillation upon the pavement always
-means an affaire de coeur. She would like advice, but is not sure
-that the matter is not too delicate for communication. And yet
-even here we may discriminate. When a woman has been seriously
-wronged by a man she no longer oscillates, and the usual symptom
-is a broken bell wire. Here we may take it that there is a love
-matter, but that the maiden is not so much angry as perplexed, or
-grieved. But here she comes in person to resolve our doubts."
-
-As he spoke there was a tap at the door, and the boy in buttons
-entered to announce Miss Mary Sutherland, while the lady herself
-loomed behind his small black figure like a full-sailed
-merchant-man behind a tiny pilot boat. Sherlock Holmes welcomed
-her with the easy courtesy for which he was remarkable, and,
-having closed the door and bowed her into an armchair, he looked
-her over in the minute and yet abstracted fashion which was
-peculiar to him.
-
-"Do you not find," he said, "that with your short sight it is a
-little trying to do so much typewriting?"
-
-"I did at first," she answered, "but now I know where the letters
-are without looking." Then, suddenly realising the full purport
-of his words, she gave a violent start and looked up, with fear
-and astonishment upon her broad, good-humoured face. "You've
-heard about me, Mr. Holmes," she cried, "else how could you know
-all that?"
-
-"Never mind," said Holmes, laughing; "it is my business to know
-things. Perhaps I have trained myself to see what others
-overlook. If not, why should you come to consult me?"
-
-"I came to you, sir, because I heard of you from Mrs. Etherege,
-whose husband you found so easy when the police and everyone had
-given him up for dead. Oh, Mr. Holmes, I wish you would do as
-much for me. I'm not rich, but still I have a hundred a year in
-my own right, besides the little that I make by the machine, and
-I would give it all to know what has become of Mr. Hosmer Angel."
-
-"Why did you come away to consult me in such a hurry?" asked
-Sherlock Holmes, with his finger-tips together and his eyes to
-the ceiling.
-
-Again a startled look came over the somewhat vacuous face of Miss
-Mary Sutherland. "Yes, I did bang out of the house," she said,
-"for it made me angry to see the easy way in which Mr.
-Windibank--that is, my father--took it all. He would not go to
-the police, and he would not go to you, and so at last, as he
-would do nothing and kept on saying that there was no harm done,
-it made me mad, and I just on with my things and came right away
-to you."
-
-"Your father," said Holmes, "your stepfather, surely, since the
-name is different."
-
-"Yes, my stepfather. I call him father, though it sounds funny,
-too, for he is only five years and two months older than myself."
-
-"And your mother is alive?"
-
-"Oh, yes, mother is alive and well. I wasn't best pleased, Mr.
-Holmes, when she married again so soon after father's death, and
-a man who was nearly fifteen years younger than herself. Father
-was a plumber in the Tottenham Court Road, and he left a tidy
-business behind him, which mother carried on with Mr. Hardy, the
-foreman; but when Mr. Windibank came he made her sell the
-business, for he was very superior, being a traveller in wines.
-They got 4700 pounds for the goodwill and interest, which wasn't
-near as much as father could have got if he had been alive."
-
-I had expected to see Sherlock Holmes impatient under this
-rambling and inconsequential narrative, but, on the contrary, he
-had listened with the greatest concentration of attention.
-
-"Your own little income," he asked, "does it come out of the
-business?"
-
-"Oh, no, sir. It is quite separate and was left me by my uncle
-Ned in Auckland. It is in New Zealand stock, paying 4 1/2 per
-cent. Two thousand five hundred pounds was the amount, but I can
-only touch the interest."
-
-"You interest me extremely," said Holmes. "And since you draw so
-large a sum as a hundred a year, with what you earn into the
-bargain, you no doubt travel a little and indulge yourself in
-every way. I believe that a single lady can get on very nicely
-upon an income of about 60 pounds."
-
-"I could do with much less than that, Mr. Holmes, but you
-understand that as long as I live at home I don't wish to be a
-burden to them, and so they have the use of the money just while
-I am staying with them. Of course, that is only just for the
-time. Mr. Windibank draws my interest every quarter and pays it
-over to mother, and I find that I can do pretty well with what I
-earn at typewriting. It brings me twopence a sheet, and I can
-often do from fifteen to twenty sheets in a day."
-
-"You have made your position very clear to me," said Holmes.
-"This is my friend, Dr. Watson, before whom you can speak as
-freely as before myself. Kindly tell us now all about your
-connection with Mr. Hosmer Angel."
-
-A flush stole over Miss Sutherland's face, and she picked
-nervously at the fringe of her jacket. "I met him first at the
-gasfitters' ball," she said. "They used to send father tickets
-when he was alive, and then afterwards they remembered us, and
-sent them to mother. Mr. Windibank did not wish us to go. He
-never did wish us to go anywhere. He would get quite mad if I
-wanted so much as to join a Sunday-school treat. But this time I
-was set on going, and I would go; for what right had he to
-prevent? He said the folk were not fit for us to know, when all
-father's friends were to be there. And he said that I had nothing
-fit to wear, when I had my purple plush that I had never so much
-as taken out of the drawer. At last, when nothing else would do,
-he went off to France upon the business of the firm, but we went,
-mother and I, with Mr. Hardy, who used to be our foreman, and it
-was there I met Mr. Hosmer Angel."
-
-"I suppose," said Holmes, "that when Mr. Windibank came back from
-France he was very annoyed at your having gone to the ball."
-
-"Oh, well, he was very good about it. He laughed, I remember, and
-shrugged his shoulders, and said there was no use denying
-anything to a woman, for she would have her way."
-
-"I see. Then at the gasfitters' ball you met, as I understand, a
-gentleman called Mr. Hosmer Angel."
-
-"Yes, sir. I met him that night, and he called next day to ask if
-we had got home all safe, and after that we met him--that is to
-say, Mr. Holmes, I met him twice for walks, but after that father
-came back again, and Mr. Hosmer Angel could not come to the house
-any more."
-
-"No?"
-
-"Well, you know father didn't like anything of the sort. He
-wouldn't have any visitors if he could help it, and he used to
-say that a woman should be happy in her own family circle. But
-then, as I used to say to mother, a woman wants her own circle to
-begin with, and I had not got mine yet."
-
-"But how about Mr. Hosmer Angel? Did he make no attempt to see
-you?"
-
-"Well, father was going off to France again in a week, and Hosmer
-wrote and said that it would be safer and better not to see each
-other until he had gone. We could write in the meantime, and he
-used to write every day. I took the letters in in the morning, so
-there was no need for father to know."
-
-"Were you engaged to the gentleman at this time?"
-
-"Oh, yes, Mr. Holmes. We were engaged after the first walk that
-we took. Hosmer--Mr. Angel--was a cashier in an office in
-Leadenhall Street--and--"
-
-"What office?"
-
-"That's the worst of it, Mr. Holmes, I don't know."
-
-"Where did he live, then?"
-
-"He slept on the premises."
-
-"And you don't know his address?"
-
-"No--except that it was Leadenhall Street."
-
-"Where did you address your letters, then?"
-
-"To the Leadenhall Street Post Office, to be left till called
-for. He said that if they were sent to the office he would be
-chaffed by all the other clerks about having letters from a lady,
-so I offered to typewrite them, like he did his, but he wouldn't
-have that, for he said that when I wrote them they seemed to come
-from me, but when they were typewritten he always felt that the
-machine had come between us. That will just show you how fond he
-was of me, Mr. Holmes, and the little things that he would think
-of."
-
-"It was most suggestive," said Holmes. "It has long been an axiom
-of mine that the little things are infinitely the most important.
-Can you remember any other little things about Mr. Hosmer Angel?"
-
-"He was a very shy man, Mr. Holmes. He would rather walk with me
-in the evening than in the daylight, for he said that he hated to
-be conspicuous. Very retiring and gentlemanly he was. Even his
-voice was gentle. He'd had the quinsy and swollen glands when he
-was young, he told me, and it had left him with a weak throat,
-and a hesitating, whispering fashion of speech. He was always
-well dressed, very neat and plain, but his eyes were weak, just
-as mine are, and he wore tinted glasses against the glare."
-
-"Well, and what happened when Mr. Windibank, your stepfather,
-returned to France?"
-
-"Mr. Hosmer Angel came to the house again and proposed that we
-should marry before father came back. He was in dreadful earnest
-and made me swear, with my hands on the Testament, that whatever
-happened I would always be true to him. Mother said he was quite
-right to make me swear, and that it was a sign of his passion.
-Mother was all in his favour from the first and was even fonder
-of him than I was. Then, when they talked of marrying within the
-week, I began to ask about father; but they both said never to
-mind about father, but just to tell him afterwards, and mother
-said she would make it all right with him. I didn't quite like
-that, Mr. Holmes. It seemed funny that I should ask his leave, as
-he was only a few years older than me; but I didn't want to do
-anything on the sly, so I wrote to father at Bordeaux, where the
-company has its French offices, but the letter came back to me on
-the very morning of the wedding."
-
-"It missed him, then?"
-
-"Yes, sir; for he had started to England just before it arrived."
-
-"Ha! that was unfortunate. Your wedding was arranged, then, for
-the Friday. Was it to be in church?"
-
-"Yes, sir, but very quietly. It was to be at St. Saviour's, near
-King's Cross, and we were to have breakfast afterwards at the St.
-Pancras Hotel. Hosmer came for us in a hansom, but as there were
-two of us he put us both into it and stepped himself into a
-four-wheeler, which happened to be the only other cab in the
-street. We got to the church first, and when the four-wheeler
-drove up we waited for him to step out, but he never did, and
-when the cabman got down from the box and looked there was no one
-there! The cabman said that he could not imagine what had become
-of him, for he had seen him get in with his own eyes. That was
-last Friday, Mr. Holmes, and I have never seen or heard anything
-since then to throw any light upon what became of him."
-
-"It seems to me that you have been very shamefully treated," said
-Holmes.
-
-"Oh, no, sir! He was too good and kind to leave me so. Why, all
-the morning he was saying to me that, whatever happened, I was to
-be true; and that even if something quite unforeseen occurred to
-separate us, I was always to remember that I was pledged to him,
-and that he would claim his pledge sooner or later. It seemed
-strange talk for a wedding-morning, but what has happened since
-gives a meaning to it."
-
-"Most certainly it does. Your own opinion is, then, that some
-unforeseen catastrophe has occurred to him?"
-
-"Yes, sir. I believe that he foresaw some danger, or else he
-would not have talked so. And then I think that what he foresaw
-happened."
-
-"But you have no notion as to what it could have been?"
-
-"None."
-
-"One more question. How did your mother take the matter?"
-
-"She was angry, and said that I was never to speak of the matter
-again."
-
-"And your father? Did you tell him?"
-
-"Yes; and he seemed to think, with me, that something had
-happened, and that I should hear of Hosmer again. As he said,
-what interest could anyone have in bringing me to the doors of
-the church, and then leaving me? Now, if he had borrowed my
-money, or if he had married me and got my money settled on him,
-there might be some reason, but Hosmer was very independent about
-money and never would look at a shilling of mine. And yet, what
-could have happened? And why could he not write? Oh, it drives me
-half-mad to think of it, and I can't sleep a wink at night." She
-pulled a little handkerchief out of her muff and began to sob
-heavily into it.
-
-"I shall glance into the case for you," said Holmes, rising, "and
-I have no doubt that we shall reach some definite result. Let the
-weight of the matter rest upon me now, and do not let your mind
-dwell upon it further. Above all, try to let Mr. Hosmer Angel
-vanish from your memory, as he has done from your life."
-
-"Then you don't think I'll see him again?"
-
-"I fear not."
-
-"Then what has happened to him?"
-
-"You will leave that question in my hands. I should like an
-accurate description of him and any letters of his which you can
-spare."
-
-"I advertised for him in last Saturday's Chronicle," said she.
-"Here is the slip and here are four letters from him."
-
-"Thank you. And your address?"
-
-"No. 31 Lyon Place, Camberwell."
-
-"Mr. Angel's address you never had, I understand. Where is your
-father's place of business?"
-
-"He travels for Westhouse & Marbank, the great claret importers
-of Fenchurch Street."
-
-"Thank you. You have made your statement very clearly. You will
-leave the papers here, and remember the advice which I have given
-you. Let the whole incident be a sealed book, and do not allow it
-to affect your life."
-
-"You are very kind, Mr. Holmes, but I cannot do that. I shall be
-true to Hosmer. He shall find me ready when he comes back."
-
-For all the preposterous hat and the vacuous face, there was
-something noble in the simple faith of our visitor which
-compelled our respect. She laid her little bundle of papers upon
-the table and went her way, with a promise to come again whenever
-she might be summoned.
-
-Sherlock Holmes sat silent for a few minutes with his fingertips
-still pressed together, his legs stretched out in front of him,
-and his gaze directed upward to the ceiling. Then he took down
-from the rack the old and oily clay pipe, which was to him as a
-counsellor, and, having lit it, he leaned back in his chair, with
-the thick blue cloud-wreaths spinning up from him, and a look of
-infinite languor in his face.
-
-"Quite an interesting study, that maiden," he observed. "I found
-her more interesting than her little problem, which, by the way,
-is rather a trite one. You will find parallel cases, if you
-consult my index, in Andover in '77, and there was something of
-the sort at The Hague last year. Old as is the idea, however,
-there were one or two details which were new to me. But the
-maiden herself was most instructive."
-
-"You appeared to read a good deal upon her which was quite
-invisible to me," I remarked.
-
-"Not invisible but unnoticed, Watson. You did not know where to
-look, and so you missed all that was important. I can never bring
-you to realise the importance of sleeves, the suggestiveness of
-thumb-nails, or the great issues that may hang from a boot-lace.
-Now, what did you gather from that woman's appearance? Describe
-it."
-
-"Well, she had a slate-coloured, broad-brimmed straw hat, with a
-feather of a brickish red. Her jacket was black, with black beads
-sewn upon it, and a fringe of little black jet ornaments. Her
-dress was brown, rather darker than coffee colour, with a little
-purple plush at the neck and sleeves. Her gloves were greyish and
-were worn through at the right forefinger. Her boots I didn't
-observe. She had small round, hanging gold earrings, and a
-general air of being fairly well-to-do in a vulgar, comfortable,
-easy-going way."
-
-Sherlock Holmes clapped his hands softly together and chuckled.
-
-"'Pon my word, Watson, you are coming along wonderfully. You have
-really done very well indeed. It is true that you have missed
-everything of importance, but you have hit upon the method, and
-you have a quick eye for colour. Never trust to general
-impressions, my boy, but concentrate yourself upon details. My
-first glance is always at a woman's sleeve. In a man it is
-perhaps better first to take the knee of the trouser. As you
-observe, this woman had plush upon her sleeves, which is a most
-useful material for showing traces. The double line a little
-above the wrist, where the typewritist presses against the table,
-was beautifully defined. The sewing-machine, of the hand type,
-leaves a similar mark, but only on the left arm, and on the side
-of it farthest from the thumb, instead of being right across the
-broadest part, as this was. I then glanced at her face, and,
-observing the dint of a pince-nez at either side of her nose, I
-ventured a remark upon short sight and typewriting, which seemed
-to surprise her."
-
-"It surprised me."
-
-"But, surely, it was obvious. I was then much surprised and
-interested on glancing down to observe that, though the boots
-which she was wearing were not unlike each other, they were
-really odd ones; the one having a slightly decorated toe-cap, and
-the other a plain one. One was buttoned only in the two lower
-buttons out of five, and the other at the first, third, and
-fifth. Now, when you see that a young lady, otherwise neatly
-dressed, has come away from home with odd boots, half-buttoned,
-it is no great deduction to say that she came away in a hurry."
-
-"And what else?" I asked, keenly interested, as I always was, by
-my friend's incisive reasoning.
-
-"I noted, in passing, that she had written a note before leaving
-home but after being fully dressed. You observed that her right
-glove was torn at the forefinger, but you did not apparently see
-that both glove and finger were stained with violet ink. She had
-written in a hurry and dipped her pen too deep. It must have been
-this morning, or the mark would not remain clear upon the finger.
-All this is amusing, though rather elementary, but I must go back
-to business, Watson. Would you mind reading me the advertised
-description of Mr. Hosmer Angel?"
-
-I held the little printed slip to the light.
-
-"Missing," it said, "on the morning of the fourteenth, a gentleman
-named Hosmer Angel. About five ft. seven in. in height;
-strongly built, sallow complexion, black hair, a little bald in
-the centre, bushy, black side-whiskers and moustache; tinted
-glasses, slight infirmity of speech. Was dressed, when last seen,
-in black frock-coat faced with silk, black waistcoat, gold Albert
-chain, and grey Harris tweed trousers, with brown gaiters over
-elastic-sided boots. Known to have been employed in an office in
-Leadenhall Street. Anybody bringing--"
-
-"That will do," said Holmes. "As to the letters," he continued,
-glancing over them, "they are very commonplace. Absolutely no
-clue in them to Mr. Angel, save that he quotes Balzac once. There
-is one remarkable point, however, which will no doubt strike
-you."
-
-"They are typewritten," I remarked.
-
-"Not only that, but the signature is typewritten. Look at the
-neat little 'Hosmer Angel' at the bottom. There is a date, you
-see, but no superscription except Leadenhall Street, which is
-rather vague. The point about the signature is very suggestive--in
-fact, we may call it conclusive."
-
-"Of what?"
-
-"My dear fellow, is it possible you do not see how strongly it
-bears upon the case?"
-
-"I cannot say that I do unless it were that he wished to be able
-to deny his signature if an action for breach of promise were
-instituted."
-
-"No, that was not the point. However, I shall write two letters,
-which should settle the matter. One is to a firm in the City, the
-other is to the young lady's stepfather, Mr. Windibank, asking
-him whether he could meet us here at six o'clock tomorrow
-evening. It is just as well that we should do business with the
-male relatives. And now, Doctor, we can do nothing until the
-answers to those letters come, so we may put our little problem
-upon the shelf for the interim."
-
-I had had so many reasons to believe in my friend's subtle powers
-of reasoning and extraordinary energy in action that I felt that
-he must have some solid grounds for the assured and easy
-demeanour with which he treated the singular mystery which he had
-been called upon to fathom. Once only had I known him to fail, in
-the case of the King of Bohemia and of the Irene Adler
-photograph; but when I looked back to the weird business of the
-Sign of Four, and the extraordinary circumstances connected with
-the Study in Scarlet, I felt that it would be a strange tangle
-indeed which he could not unravel.
-
-I left him then, still puffing at his black clay pipe, with the
-conviction that when I came again on the next evening I would
-find that he held in his hands all the clues which would lead up
-to the identity of the disappearing bridegroom of Miss Mary
-Sutherland.
-
-A professional case of great gravity was engaging my own
-attention at the time, and the whole of next day I was busy at
-the bedside of the sufferer. It was not until close upon six
-o'clock that I found myself free and was able to spring into a
-hansom and drive to Baker Street, half afraid that I might be too
-late to assist at the dénouement of the little mystery. I found
-Sherlock Holmes alone, however, half asleep, with his long, thin
-form curled up in the recesses of his armchair. A formidable
-array of bottles and test-tubes, with the pungent cleanly smell
-of hydrochloric acid, told me that he had spent his day in the
-chemical work which was so dear to him.
-
-"Well, have you solved it?" I asked as I entered.
-
-"Yes. It was the bisulphate of baryta."
-
-"No, no, the mystery!" I cried.
-
-"Oh, that! I thought of the salt that I have been working upon.
-There was never any mystery in the matter, though, as I said
-yesterday, some of the details are of interest. The only drawback
-is that there is no law, I fear, that can touch the scoundrel."
-
-"Who was he, then, and what was his object in deserting Miss
-Sutherland?"
-
-The question was hardly out of my mouth, and Holmes had not yet
-opened his lips to reply, when we heard a heavy footfall in the
-passage and a tap at the door.
-
-"This is the girl's stepfather, Mr. James Windibank," said
-Holmes. "He has written to me to say that he would be here at
-six. Come in!"
-
-The man who entered was a sturdy, middle-sized fellow, some
-thirty years of age, clean-shaven, and sallow-skinned, with a
-bland, insinuating manner, and a pair of wonderfully sharp and
-penetrating grey eyes. He shot a questioning glance at each of
-us, placed his shiny top-hat upon the sideboard, and with a
-slight bow sidled down into the nearest chair.
-
-"Good-evening, Mr. James Windibank," said Holmes. "I think that
-this typewritten letter is from you, in which you made an
-appointment with me for six o'clock?"
-
-"Yes, sir. I am afraid that I am a little late, but I am not
-quite my own master, you know. I am sorry that Miss Sutherland
-has troubled you about this little matter, for I think it is far
-better not to wash linen of the sort in public. It was quite
-against my wishes that she came, but she is a very excitable,
-impulsive girl, as you may have noticed, and she is not easily
-controlled when she has made up her mind on a point. Of course, I
-did not mind you so much, as you are not connected with the
-official police, but it is not pleasant to have a family
-misfortune like this noised abroad. Besides, it is a useless
-expense, for how could you possibly find this Hosmer Angel?"
-
-"On the contrary," said Holmes quietly; "I have every reason to
-believe that I will succeed in discovering Mr. Hosmer Angel."
-
-Mr. Windibank gave a violent start and dropped his gloves. "I am
-delighted to hear it," he said.
-
-"It is a curious thing," remarked Holmes, "that a typewriter has
-really quite as much individuality as a man's handwriting. Unless
-they are quite new, no two of them write exactly alike. Some
-letters get more worn than others, and some wear only on one
-side. Now, you remark in this note of yours, Mr. Windibank, that
-in every case there is some little slurring over of the 'e,' and
-a slight defect in the tail of the 'r.' There are fourteen other
-characteristics, but those are the more obvious."
-
-"We do all our correspondence with this machine at the office,
-and no doubt it is a little worn," our visitor answered, glancing
-keenly at Holmes with his bright little eyes.
-
-"And now I will show you what is really a very interesting study,
-Mr. Windibank," Holmes continued. "I think of writing another
-little monograph some of these days on the typewriter and its
-relation to crime. It is a subject to which I have devoted some
-little attention. I have here four letters which purport to come
-from the missing man. They are all typewritten. In each case, not
-only are the 'e's' slurred and the 'r's' tailless, but you will
-observe, if you care to use my magnifying lens, that the fourteen
-other characteristics to which I have alluded are there as well."
-
-Mr. Windibank sprang out of his chair and picked up his hat. "I
-cannot waste time over this sort of fantastic talk, Mr. Holmes,"
-he said. "If you can catch the man, catch him, and let me know
-when you have done it."
-
-"Certainly," said Holmes, stepping over and turning the key in
-the door. "I let you know, then, that I have caught him!"
-
-"What! where?" shouted Mr. Windibank, turning white to his lips
-and glancing about him like a rat in a trap.
-
-"Oh, it won't do--really it won't," said Holmes suavely. "There
-is no possible getting out of it, Mr. Windibank. It is quite too
-transparent, and it was a very bad compliment when you said that
-it was impossible for me to solve so simple a question. That's
-right! Sit down and let us talk it over."
-
-Our visitor collapsed into a chair, with a ghastly face and a
-glitter of moisture on his brow. "It--it's not actionable," he
-stammered.
-
-"I am very much afraid that it is not. But between ourselves,
-Windibank, it was as cruel and selfish and heartless a trick in a
-petty way as ever came before me. Now, let me just run over the
-course of events, and you will contradict me if I go wrong."
-
-The man sat huddled up in his chair, with his head sunk upon his
-breast, like one who is utterly crushed. Holmes stuck his feet up
-on the corner of the mantelpiece and, leaning back with his hands
-in his pockets, began talking, rather to himself, as it seemed,
-than to us.
-
-"The man married a woman very much older than himself for her
-money," said he, "and he enjoyed the use of the money of the
-daughter as long as she lived with them. It was a considerable
-sum, for people in their position, and the loss of it would have
-made a serious difference. It was worth an effort to preserve it.
-The daughter was of a good, amiable disposition, but affectionate
-and warm-hearted in her ways, so that it was evident that with
-her fair personal advantages, and her little income, she would
-not be allowed to remain single long. Now her marriage would
-mean, of course, the loss of a hundred a year, so what does her
-stepfather do to prevent it? He takes the obvious course of
-keeping her at home and forbidding her to seek the company of
-people of her own age. But soon he found that that would not
-answer forever. She became restive, insisted upon her rights, and
-finally announced her positive intention of going to a certain
-ball. What does her clever stepfather do then? He conceives an
-idea more creditable to his head than to his heart. With the
-connivance and assistance of his wife he disguised himself,
-covered those keen eyes with tinted glasses, masked the face with
-a moustache and a pair of bushy whiskers, sunk that clear voice
-into an insinuating whisper, and doubly secure on account of the
-girl's short sight, he appears as Mr. Hosmer Angel, and keeps off
-other lovers by making love himself."
-
-"It was only a joke at first," groaned our visitor. "We never
-thought that she would have been so carried away."
-
-"Very likely not. However that may be, the young lady was very
-decidedly carried away, and, having quite made up her mind that
-her stepfather was in France, the suspicion of treachery never
-for an instant entered her mind. She was flattered by the
-gentleman's attentions, and the effect was increased by the
-loudly expressed admiration of her mother. Then Mr. Angel began
-to call, for it was obvious that the matter should be pushed as
-far as it would go if a real effect were to be produced. There
-were meetings, and an engagement, which would finally secure the
-girl's affections from turning towards anyone else. But the
-deception could not be kept up forever. These pretended journeys
-to France were rather cumbrous. The thing to do was clearly to
-bring the business to an end in such a dramatic manner that it
-would leave a permanent impression upon the young lady's mind and
-prevent her from looking upon any other suitor for some time to
-come. Hence those vows of fidelity exacted upon a Testament, and
-hence also the allusions to a possibility of something happening
-on the very morning of the wedding. James Windibank wished Miss
-Sutherland to be so bound to Hosmer Angel, and so uncertain as to
-his fate, that for ten years to come, at any rate, she would not
-listen to another man. As far as the church door he brought her,
-and then, as he could go no farther, he conveniently vanished
-away by the old trick of stepping in at one door of a
-four-wheeler and out at the other. I think that was the chain of
-events, Mr. Windibank!"
-
-Our visitor had recovered something of his assurance while Holmes
-had been talking, and he rose from his chair now with a cold
-sneer upon his pale face.
-
-"It may be so, or it may not, Mr. Holmes," said he, "but if you
-are so very sharp you ought to be sharp enough to know that it is
-you who are breaking the law now, and not me. I have done nothing
-actionable from the first, but as long as you keep that door
-locked you lay yourself open to an action for assault and illegal
-constraint."
-
-"The law cannot, as you say, touch you," said Holmes, unlocking
-and throwing open the door, "yet there never was a man who
-deserved punishment more. If the young lady has a brother or a
-friend, he ought to lay a whip across your shoulders. By Jove!"
-he continued, flushing up at the sight of the bitter sneer upon
-the man's face, "it is not part of my duties to my client, but
-here's a hunting crop handy, and I think I shall just treat
-myself to--" He took two swift steps to the whip, but before he
-could grasp it there was a wild clatter of steps upon the stairs,
-the heavy hall door banged, and from the window we could see Mr.
-James Windibank running at the top of his speed down the road.
-
-"There's a cold-blooded scoundrel!" said Holmes, laughing, as he
-threw himself down into his chair once more. "That fellow will
-rise from crime to crime until he does something very bad, and
-ends on a gallows. The case has, in some respects, been not
-entirely devoid of interest."
-
-"I cannot now entirely see all the steps of your reasoning," I
-remarked.
-
-"Well, of course it was obvious from the first that this Mr.
-Hosmer Angel must have some strong object for his curious
-conduct, and it was equally clear that the only man who really
-profited by the incident, as far as we could see, was the
-stepfather. Then the fact that the two men were never together,
-but that the one always appeared when the other was away, was
-suggestive. So were the tinted spectacles and the curious voice,
-which both hinted at a disguise, as did the bushy whiskers. My
-suspicions were all confirmed by his peculiar action in
-typewriting his signature, which, of course, inferred that his
-handwriting was so familiar to her that she would recognise even
-the smallest sample of it. You see all these isolated facts,
-together with many minor ones, all pointed in the same
-direction."
-
-"And how did you verify them?"
-
-"Having once spotted my man, it was easy to get corroboration. I
-knew the firm for which this man worked. Having taken the printed
-description. I eliminated everything from it which could be the
-result of a disguise--the whiskers, the glasses, the voice, and I
-sent it to the firm, with a request that they would inform me
-whether it answered to the description of any of their
-travellers. I had already noticed the peculiarities of the
-typewriter, and I wrote to the man himself at his business
-address asking him if he would come here. As I expected, his
-reply was typewritten and revealed the same trivial but
-characteristic defects. The same post brought me a letter from
-Westhouse & Marbank, of Fenchurch Street, to say that the
-description tallied in every respect with that of their employé,
-James Windibank. Voilà tout!"
-
-"And Miss Sutherland?"
-
-"If I tell her she will not believe me. You may remember the old
-Persian saying, 'There is danger for him who taketh the tiger
-cub, and danger also for whoso snatches a delusion from a woman.'
-There is as much sense in Hafiz as in Horace, and as much
-knowledge of the world."
-
-
-
-ADVENTURE IV. THE BOSCOMBE VALLEY MYSTERY
-
-We were seated at breakfast one morning, my wife and I, when the
-maid brought in a telegram. It was from Sherlock Holmes and ran
-in this way:
-
-"Have you a couple of days to spare? Have just been wired for from
-the west of England in connection with Boscombe Valley tragedy.
-Shall be glad if you will come with me. Air and scenery perfect.
-Leave Paddington by the 11:15."
-
-"What do you say, dear?" said my wife, looking across at me.
-"Will you go?"
-
-"I really don't know what to say. I have a fairly long list at
-present."
-
-"Oh, Anstruther would do your work for you. You have been looking
-a little pale lately. I think that the change would do you good,
-and you are always so interested in Mr. Sherlock Holmes' cases."
-
-"I should be ungrateful if I were not, seeing what I gained
-through one of them," I answered. "But if I am to go, I must pack
-at once, for I have only half an hour."
-
-My experience of camp life in Afghanistan had at least had the
-effect of making me a prompt and ready traveller. My wants were
-few and simple, so that in less than the time stated I was in a
-cab with my valise, rattling away to Paddington Station. Sherlock
-Holmes was pacing up and down the platform, his tall, gaunt
-figure made even gaunter and taller by his long grey
-travelling-cloak and close-fitting cloth cap.
-
-"It is really very good of you to come, Watson," said he. "It
-makes a considerable difference to me, having someone with me on
-whom I can thoroughly rely. Local aid is always either worthless
-or else biassed. If you will keep the two corner seats I shall
-get the tickets."
-
-We had the carriage to ourselves save for an immense litter of
-papers which Holmes had brought with him. Among these he rummaged
-and read, with intervals of note-taking and of meditation, until
-we were past Reading. Then he suddenly rolled them all into a
-gigantic ball and tossed them up onto the rack.
-
-"Have you heard anything of the case?" he asked.
-
-"Not a word. I have not seen a paper for some days."
-
-"The London press has not had very full accounts. I have just
-been looking through all the recent papers in order to master the
-particulars. It seems, from what I gather, to be one of those
-simple cases which are so extremely difficult."
-
-"That sounds a little paradoxical."
-
-"But it is profoundly true. Singularity is almost invariably a
-clue. The more featureless and commonplace a crime is, the more
-difficult it is to bring it home. In this case, however, they
-have established a very serious case against the son of the
-murdered man."
-
-"It is a murder, then?"
-
-"Well, it is conjectured to be so. I shall take nothing for
-granted until I have the opportunity of looking personally into
-it. I will explain the state of things to you, as far as I have
-been able to understand it, in a very few words.
-
-"Boscombe Valley is a country district not very far from Ross, in
-Herefordshire. The largest landed proprietor in that part is a
-Mr. John Turner, who made his money in Australia and returned
-some years ago to the old country. One of the farms which he
-held, that of Hatherley, was let to Mr. Charles McCarthy, who was
-also an ex-Australian. The men had known each other in the
-colonies, so that it was not unnatural that when they came to
-settle down they should do so as near each other as possible.
-Turner was apparently the richer man, so McCarthy became his
-tenant but still remained, it seems, upon terms of perfect
-equality, as they were frequently together. McCarthy had one son,
-a lad of eighteen, and Turner had an only daughter of the same
-age, but neither of them had wives living. They appear to have
-avoided the society of the neighbouring English families and to
-have led retired lives, though both the McCarthys were fond of
-sport and were frequently seen at the race-meetings of the
-neighbourhood. McCarthy kept two servants--a man and a girl.
-Turner had a considerable household, some half-dozen at the
-least. That is as much as I have been able to gather about the
-families. Now for the facts.
-
-"On June 3rd, that is, on Monday last, McCarthy left his house at
-Hatherley about three in the afternoon and walked down to the
-Boscombe Pool, which is a small lake formed by the spreading out
-of the stream which runs down the Boscombe Valley. He had been
-out with his serving-man in the morning at Ross, and he had told
-the man that he must hurry, as he had an appointment of
-importance to keep at three. From that appointment he never came
-back alive.
-
-"From Hatherley Farm-house to the Boscombe Pool is a quarter of a
-mile, and two people saw him as he passed over this ground. One
-was an old woman, whose name is not mentioned, and the other was
-William Crowder, a game-keeper in the employ of Mr. Turner. Both
-these witnesses depose that Mr. McCarthy was walking alone. The
-game-keeper adds that within a few minutes of his seeing Mr.
-McCarthy pass he had seen his son, Mr. James McCarthy, going the
-same way with a gun under his arm. To the best of his belief, the
-father was actually in sight at the time, and the son was
-following him. He thought no more of the matter until he heard in
-the evening of the tragedy that had occurred.
-
-"The two McCarthys were seen after the time when William Crowder,
-the game-keeper, lost sight of them. The Boscombe Pool is thickly
-wooded round, with just a fringe of grass and of reeds round the
-edge. A girl of fourteen, Patience Moran, who is the daughter of
-the lodge-keeper of the Boscombe Valley estate, was in one of the
-woods picking flowers. She states that while she was there she
-saw, at the border of the wood and close by the lake, Mr.
-McCarthy and his son, and that they appeared to be having a
-violent quarrel. She heard Mr. McCarthy the elder using very
-strong language to his son, and she saw the latter raise up his
-hand as if to strike his father. She was so frightened by their
-violence that she ran away and told her mother when she reached
-home that she had left the two McCarthys quarrelling near
-Boscombe Pool, and that she was afraid that they were going to
-fight. She had hardly said the words when young Mr. McCarthy came
-running up to the lodge to say that he had found his father dead
-in the wood, and to ask for the help of the lodge-keeper. He was
-much excited, without either his gun or his hat, and his right
-hand and sleeve were observed to be stained with fresh blood. On
-following him they found the dead body stretched out upon the
-grass beside the pool. The head had been beaten in by repeated
-blows of some heavy and blunt weapon. The injuries were such as
-might very well have been inflicted by the butt-end of his son's
-gun, which was found lying on the grass within a few paces of the
-body. Under these circumstances the young man was instantly
-arrested, and a verdict of 'wilful murder' having been returned
-at the inquest on Tuesday, he was on Wednesday brought before the
-magistrates at Ross, who have referred the case to the next
-Assizes. Those are the main facts of the case as they came out
-before the coroner and the police-court."
-
-"I could hardly imagine a more damning case," I remarked. "If
-ever circumstantial evidence pointed to a criminal it does so
-here."
-
-"Circumstantial evidence is a very tricky thing," answered Holmes
-thoughtfully. "It may seem to point very straight to one thing,
-but if you shift your own point of view a little, you may find it
-pointing in an equally uncompromising manner to something
-entirely different. It must be confessed, however, that the case
-looks exceedingly grave against the young man, and it is very
-possible that he is indeed the culprit. There are several people
-in the neighbourhood, however, and among them Miss Turner, the
-daughter of the neighbouring landowner, who believe in his
-innocence, and who have retained Lestrade, whom you may recollect
-in connection with the Study in Scarlet, to work out the case in
-his interest. Lestrade, being rather puzzled, has referred the
-case to me, and hence it is that two middle-aged gentlemen are
-flying westward at fifty miles an hour instead of quietly
-digesting their breakfasts at home."
-
-"I am afraid," said I, "that the facts are so obvious that you
-will find little credit to be gained out of this case."
-
-"There is nothing more deceptive than an obvious fact," he
-answered, laughing. "Besides, we may chance to hit upon some
-other obvious facts which may have been by no means obvious to
-Mr. Lestrade. You know me too well to think that I am boasting
-when I say that I shall either confirm or destroy his theory by
-means which he is quite incapable of employing, or even of
-understanding. To take the first example to hand, I very clearly
-perceive that in your bedroom the window is upon the right-hand
-side, and yet I question whether Mr. Lestrade would have noted
-even so self-evident a thing as that."
-
-"How on earth--"
-
-"My dear fellow, I know you well. I know the military neatness
-which characterises you. You shave every morning, and in this
-season you shave by the sunlight; but since your shaving is less
-and less complete as we get farther back on the left side, until
-it becomes positively slovenly as we get round the angle of the
-jaw, it is surely very clear that that side is less illuminated
-than the other. I could not imagine a man of your habits looking
-at himself in an equal light and being satisfied with such a
-result. I only quote this as a trivial example of observation and
-inference. Therein lies my métier, and it is just possible that
-it may be of some service in the investigation which lies before
-us. There are one or two minor points which were brought out in
-the inquest, and which are worth considering."
-
-"What are they?"
-
-"It appears that his arrest did not take place at once, but after
-the return to Hatherley Farm. On the inspector of constabulary
-informing him that he was a prisoner, he remarked that he was not
-surprised to hear it, and that it was no more than his deserts.
-This observation of his had the natural effect of removing any
-traces of doubt which might have remained in the minds of the
-coroner's jury."
-
-"It was a confession," I ejaculated.
-
-"No, for it was followed by a protestation of innocence."
-
-"Coming on the top of such a damning series of events, it was at
-least a most suspicious remark."
-
-"On the contrary," said Holmes, "it is the brightest rift which I
-can at present see in the clouds. However innocent he might be,
-he could not be such an absolute imbecile as not to see that the
-circumstances were very black against him. Had he appeared
-surprised at his own arrest, or feigned indignation at it, I
-should have looked upon it as highly suspicious, because such
-surprise or anger would not be natural under the circumstances,
-and yet might appear to be the best policy to a scheming man. His
-frank acceptance of the situation marks him as either an innocent
-man, or else as a man of considerable self-restraint and
-firmness. As to his remark about his deserts, it was also not
-unnatural if you consider that he stood beside the dead body of
-his father, and that there is no doubt that he had that very day
-so far forgotten his filial duty as to bandy words with him, and
-even, according to the little girl whose evidence is so
-important, to raise his hand as if to strike him. The
-self-reproach and contrition which are displayed in his remark
-appear to me to be the signs of a healthy mind rather than of a
-guilty one."
-
-I shook my head. "Many men have been hanged on far slighter
-evidence," I remarked.
-
-"So they have. And many men have been wrongfully hanged."
-
-"What is the young man's own account of the matter?"
-
-"It is, I am afraid, not very encouraging to his supporters,
-though there are one or two points in it which are suggestive.
-You will find it here, and may read it for yourself."
-
-He picked out from his bundle a copy of the local Herefordshire
-paper, and having turned down the sheet he pointed out the
-paragraph in which the unfortunate young man had given his own
-statement of what had occurred. I settled myself down in the
-corner of the carriage and read it very carefully. It ran in this
-way:
-
-"Mr. James McCarthy, the only son of the deceased, was then called
-and gave evidence as follows: 'I had been away from home for
-three days at Bristol, and had only just returned upon the
-morning of last Monday, the 3rd. My father was absent from home at
-the time of my arrival, and I was informed by the maid that he
-had driven over to Ross with John Cobb, the groom. Shortly after
-my return I heard the wheels of his trap in the yard, and,
-looking out of my window, I saw him get out and walk rapidly out
-of the yard, though I was not aware in which direction he was
-going. I then took my gun and strolled out in the direction of
-the Boscombe Pool, with the intention of visiting the rabbit
-warren which is upon the other side. On my way I saw William
-Crowder, the game-keeper, as he had stated in his evidence; but
-he is mistaken in thinking that I was following my father. I had
-no idea that he was in front of me. When about a hundred yards
-from the pool I heard a cry of "Cooee!" which was a usual signal
-between my father and myself. I then hurried forward, and found
-him standing by the pool. He appeared to be much surprised at
-seeing me and asked me rather roughly what I was doing there. A
-conversation ensued which led to high words and almost to blows,
-for my father was a man of a very violent temper. Seeing that his
-passion was becoming ungovernable, I left him and returned
-towards Hatherley Farm. I had not gone more than 150 yards,
-however, when I heard a hideous outcry behind me, which caused me
-to run back again. I found my father expiring upon the ground,
-with his head terribly injured. I dropped my gun and held him in
-my arms, but he almost instantly expired. I knelt beside him for
-some minutes, and then made my way to Mr. Turner's lodge-keeper,
-his house being the nearest, to ask for assistance. I saw no one
-near my father when I returned, and I have no idea how he came by
-his injuries. He was not a popular man, being somewhat cold and
-forbidding in his manners, but he had, as far as I know, no
-active enemies. I know nothing further of the matter.'
-
-"The Coroner: Did your father make any statement to you before
-he died?
-
-"Witness: He mumbled a few words, but I could only catch some
-allusion to a rat.
-
-"The Coroner: What did you understand by that?
-
-"Witness: It conveyed no meaning to me. I thought that he was
-delirious.
-
-"The Coroner: What was the point upon which you and your father
-had this final quarrel?
-
-"Witness: I should prefer not to answer.
-
-"The Coroner: I am afraid that I must press it.
-
-"Witness: It is really impossible for me to tell you. I can
-assure you that it has nothing to do with the sad tragedy which
-followed.
-
-"The Coroner: That is for the court to decide. I need not point
-out to you that your refusal to answer will prejudice your case
-considerably in any future proceedings which may arise.
-
-"Witness: I must still refuse.
-
-"The Coroner: I understand that the cry of 'Cooee' was a common
-signal between you and your father?
-
-"Witness: It was.
-
-"The Coroner: How was it, then, that he uttered it before he saw
-you, and before he even knew that you had returned from Bristol?
-
-"Witness (with considerable confusion): I do not know.
-
-"A Juryman: Did you see nothing which aroused your suspicions
-when you returned on hearing the cry and found your father
-fatally injured?
-
-"Witness: Nothing definite.
-
-"The Coroner: What do you mean?
-
-"Witness: I was so disturbed and excited as I rushed out into
-the open, that I could think of nothing except of my father. Yet
-I have a vague impression that as I ran forward something lay
-upon the ground to the left of me. It seemed to me to be
-something grey in colour, a coat of some sort, or a plaid perhaps.
-When I rose from my father I looked round for it, but it was
-gone.
-
-"'Do you mean that it disappeared before you went for help?'
-
-"'Yes, it was gone.'
-
-"'You cannot say what it was?'
-
-"'No, I had a feeling something was there.'
-
-"'How far from the body?'
-
-"'A dozen yards or so.'
-
-"'And how far from the edge of the wood?'
-
-"'About the same.'
-
-"'Then if it was removed it was while you were within a dozen
-yards of it?'
-
-"'Yes, but with my back towards it.'
-
-"This concluded the examination of the witness."
-
-"I see," said I as I glanced down the column, "that the coroner
-in his concluding remarks was rather severe upon young McCarthy.
-He calls attention, and with reason, to the discrepancy about his
-father having signalled to him before seeing him, also to his
-refusal to give details of his conversation with his father, and
-his singular account of his father's dying words. They are all,
-as he remarks, very much against the son."
-
-Holmes laughed softly to himself and stretched himself out upon
-the cushioned seat. "Both you and the coroner have been at some
-pains," said he, "to single out the very strongest points in the
-young man's favour. Don't you see that you alternately give him
-credit for having too much imagination and too little? Too
-little, if he could not invent a cause of quarrel which would
-give him the sympathy of the jury; too much, if he evolved from
-his own inner consciousness anything so outré as a dying
-reference to a rat, and the incident of the vanishing cloth. No,
-sir, I shall approach this case from the point of view that what
-this young man says is true, and we shall see whither that
-hypothesis will lead us. And now here is my pocket Petrarch, and
-not another word shall I say of this case until we are on the
-scene of action. We lunch at Swindon, and I see that we shall be
-there in twenty minutes."
-
-It was nearly four o'clock when we at last, after passing through
-the beautiful Stroud Valley, and over the broad gleaming Severn,
-found ourselves at the pretty little country-town of Ross. A
-lean, ferret-like man, furtive and sly-looking, was waiting for
-us upon the platform. In spite of the light brown dustcoat and
-leather-leggings which he wore in deference to his rustic
-surroundings, I had no difficulty in recognising Lestrade, of
-Scotland Yard. With him we drove to the Hereford Arms where a
-room had already been engaged for us.
-
-"I have ordered a carriage," said Lestrade as we sat over a cup
-of tea. "I knew your energetic nature, and that you would not be
-happy until you had been on the scene of the crime."
-
-"It was very nice and complimentary of you," Holmes answered. "It
-is entirely a question of barometric pressure."
-
-Lestrade looked startled. "I do not quite follow," he said.
-
-"How is the glass? Twenty-nine, I see. No wind, and not a cloud
-in the sky. I have a caseful of cigarettes here which need
-smoking, and the sofa is very much superior to the usual country
-hotel abomination. I do not think that it is probable that I
-shall use the carriage to-night."
-
-Lestrade laughed indulgently. "You have, no doubt, already formed
-your conclusions from the newspapers," he said. "The case is as
-plain as a pikestaff, and the more one goes into it the plainer
-it becomes. Still, of course, one can't refuse a lady, and such a
-very positive one, too. She has heard of you, and would have your
-opinion, though I repeatedly told her that there was nothing
-which you could do which I had not already done. Why, bless my
-soul! here is her carriage at the door."
-
-He had hardly spoken before there rushed into the room one of the
-most lovely young women that I have ever seen in my life. Her
-violet eyes shining, her lips parted, a pink flush upon her
-cheeks, all thought of her natural reserve lost in her
-overpowering excitement and concern.
-
-"Oh, Mr. Sherlock Holmes!" she cried, glancing from one to the
-other of us, and finally, with a woman's quick intuition,
-fastening upon my companion, "I am so glad that you have come. I
-have driven down to tell you so. I know that James didn't do it.
-I know it, and I want you to start upon your work knowing it,
-too. Never let yourself doubt upon that point. We have known each
-other since we were little children, and I know his faults as no
-one else does; but he is too tender-hearted to hurt a fly. Such a
-charge is absurd to anyone who really knows him."
-
-"I hope we may clear him, Miss Turner," said Sherlock Holmes.
-"You may rely upon my doing all that I can."
-
-"But you have read the evidence. You have formed some conclusion?
-Do you not see some loophole, some flaw? Do you not yourself
-think that he is innocent?"
-
-"I think that it is very probable."
-
-"There, now!" she cried, throwing back her head and looking
-defiantly at Lestrade. "You hear! He gives me hopes."
-
-Lestrade shrugged his shoulders. "I am afraid that my colleague
-has been a little quick in forming his conclusions," he said.
-
-"But he is right. Oh! I know that he is right. James never did
-it. And about his quarrel with his father, I am sure that the
-reason why he would not speak about it to the coroner was because
-I was concerned in it."
-
-"In what way?" asked Holmes.
-
-"It is no time for me to hide anything. James and his father had
-many disagreements about me. Mr. McCarthy was very anxious that
-there should be a marriage between us. James and I have always
-loved each other as brother and sister; but of course he is young
-and has seen very little of life yet, and--and--well, he
-naturally did not wish to do anything like that yet. So there
-were quarrels, and this, I am sure, was one of them."
-
-"And your father?" asked Holmes. "Was he in favour of such a
-union?"
-
-"No, he was averse to it also. No one but Mr. McCarthy was in
-favour of it." A quick blush passed over her fresh young face as
-Holmes shot one of his keen, questioning glances at her.
-
-"Thank you for this information," said he. "May I see your father
-if I call to-morrow?"
-
-"I am afraid the doctor won't allow it."
-
-"The doctor?"
-
-"Yes, have you not heard? Poor father has never been strong for
-years back, but this has broken him down completely. He has taken
-to his bed, and Dr. Willows says that he is a wreck and that his
-nervous system is shattered. Mr. McCarthy was the only man alive
-who had known dad in the old days in Victoria."
-
-"Ha! In Victoria! That is important."
-
-"Yes, at the mines."
-
-"Quite so; at the gold-mines, where, as I understand, Mr. Turner
-made his money."
-
-"Yes, certainly."
-
-"Thank you, Miss Turner. You have been of material assistance to
-me."
-
-"You will tell me if you have any news to-morrow. No doubt you
-will go to the prison to see James. Oh, if you do, Mr. Holmes, do
-tell him that I know him to be innocent."
-
-"I will, Miss Turner."
-
-"I must go home now, for dad is very ill, and he misses me so if
-I leave him. Good-bye, and God help you in your undertaking." She
-hurried from the room as impulsively as she had entered, and we
-heard the wheels of her carriage rattle off down the street.
-
-"I am ashamed of you, Holmes," said Lestrade with dignity after a
-few minutes' silence. "Why should you raise up hopes which you
-are bound to disappoint? I am not over-tender of heart, but I
-call it cruel."
-
-"I think that I see my way to clearing James McCarthy," said
-Holmes. "Have you an order to see him in prison?"
-
-"Yes, but only for you and me."
-
-"Then I shall reconsider my resolution about going out. We have
-still time to take a train to Hereford and see him to-night?"
-
-"Ample."
-
-"Then let us do so. Watson, I fear that you will find it very
-slow, but I shall only be away a couple of hours."
-
-I walked down to the station with them, and then wandered through
-the streets of the little town, finally returning to the hotel,
-where I lay upon the sofa and tried to interest myself in a
-yellow-backed novel. The puny plot of the story was so thin,
-however, when compared to the deep mystery through which we were
-groping, and I found my attention wander so continually from the
-action to the fact, that I at last flung it across the room and
-gave myself up entirely to a consideration of the events of the
-day. Supposing that this unhappy young man's story were
-absolutely true, then what hellish thing, what absolutely
-unforeseen and extraordinary calamity could have occurred between
-the time when he parted from his father, and the moment when,
-drawn back by his screams, he rushed into the glade? It was
-something terrible and deadly. What could it be? Might not the
-nature of the injuries reveal something to my medical instincts?
-I rang the bell and called for the weekly county paper, which
-contained a verbatim account of the inquest. In the surgeon's
-deposition it was stated that the posterior third of the left
-parietal bone and the left half of the occipital bone had been
-shattered by a heavy blow from a blunt weapon. I marked the spot
-upon my own head. Clearly such a blow must have been struck from
-behind. That was to some extent in favour of the accused, as when
-seen quarrelling he was face to face with his father. Still, it
-did not go for very much, for the older man might have turned his
-back before the blow fell. Still, it might be worth while to call
-Holmes' attention to it. Then there was the peculiar dying
-reference to a rat. What could that mean? It could not be
-delirium. A man dying from a sudden blow does not commonly become
-delirious. No, it was more likely to be an attempt to explain how
-he met his fate. But what could it indicate? I cudgelled my
-brains to find some possible explanation. And then the incident
-of the grey cloth seen by young McCarthy. If that were true the
-murderer must have dropped some part of his dress, presumably his
-overcoat, in his flight, and must have had the hardihood to
-return and to carry it away at the instant when the son was
-kneeling with his back turned not a dozen paces off. What a
-tissue of mysteries and improbabilities the whole thing was! I
-did not wonder at Lestrade's opinion, and yet I had so much faith
-in Sherlock Holmes' insight that I could not lose hope as long
-as every fresh fact seemed to strengthen his conviction of young
-McCarthy's innocence.
-
-It was late before Sherlock Holmes returned. He came back alone,
-for Lestrade was staying in lodgings in the town.
-
-"The glass still keeps very high," he remarked as he sat down.
-"It is of importance that it should not rain before we are able
-to go over the ground. On the other hand, a man should be at his
-very best and keenest for such nice work as that, and I did not
-wish to do it when fagged by a long journey. I have seen young
-McCarthy."
-
-"And what did you learn from him?"
-
-"Nothing."
-
-"Could he throw no light?"
-
-"None at all. I was inclined to think at one time that he knew
-who had done it and was screening him or her, but I am convinced
-now that he is as puzzled as everyone else. He is not a very
-quick-witted youth, though comely to look at and, I should think,
-sound at heart."
-
-"I cannot admire his taste," I remarked, "if it is indeed a fact
-that he was averse to a marriage with so charming a young lady as
-this Miss Turner."
-
-"Ah, thereby hangs a rather painful tale. This fellow is madly,
-insanely, in love with her, but some two years ago, when he was
-only a lad, and before he really knew her, for she had been away
-five years at a boarding-school, what does the idiot do but get
-into the clutches of a barmaid in Bristol and marry her at a
-registry office? No one knows a word of the matter, but you can
-imagine how maddening it must be to him to be upbraided for not
-doing what he would give his very eyes to do, but what he knows
-to be absolutely impossible. It was sheer frenzy of this sort
-which made him throw his hands up into the air when his father,
-at their last interview, was goading him on to propose to Miss
-Turner. On the other hand, he had no means of supporting himself,
-and his father, who was by all accounts a very hard man, would
-have thrown him over utterly had he known the truth. It was with
-his barmaid wife that he had spent the last three days in
-Bristol, and his father did not know where he was. Mark that
-point. It is of importance. Good has come out of evil, however,
-for the barmaid, finding from the papers that he is in serious
-trouble and likely to be hanged, has thrown him over utterly and
-has written to him to say that she has a husband already in the
-Bermuda Dockyard, so that there is really no tie between them. I
-think that that bit of news has consoled young McCarthy for all
-that he has suffered."
-
-"But if he is innocent, who has done it?"
-
-"Ah! who? I would call your attention very particularly to two
-points. One is that the murdered man had an appointment with
-someone at the pool, and that the someone could not have been his
-son, for his son was away, and he did not know when he would
-return. The second is that the murdered man was heard to cry
-'Cooee!' before he knew that his son had returned. Those are the
-crucial points upon which the case depends. And now let us talk
-about George Meredith, if you please, and we shall leave all
-minor matters until to-morrow."
-
-There was no rain, as Holmes had foretold, and the morning broke
-bright and cloudless. At nine o'clock Lestrade called for us with
-the carriage, and we set off for Hatherley Farm and the Boscombe
-Pool.
-
-"There is serious news this morning," Lestrade observed. "It is
-said that Mr. Turner, of the Hall, is so ill that his life is
-despaired of."
-
-"An elderly man, I presume?" said Holmes.
-
-"About sixty; but his constitution has been shattered by his life
-abroad, and he has been in failing health for some time. This
-business has had a very bad effect upon him. He was an old friend
-of McCarthy's, and, I may add, a great benefactor to him, for I
-have learned that he gave him Hatherley Farm rent free."
-
-"Indeed! That is interesting," said Holmes.
-
-"Oh, yes! In a hundred other ways he has helped him. Everybody
-about here speaks of his kindness to him."
-
-"Really! Does it not strike you as a little singular that this
-McCarthy, who appears to have had little of his own, and to have
-been under such obligations to Turner, should still talk of
-marrying his son to Turner's daughter, who is, presumably,
-heiress to the estate, and that in such a very cocksure manner,
-as if it were merely a case of a proposal and all else would
-follow? It is the more strange, since we know that Turner himself
-was averse to the idea. The daughter told us as much. Do you not
-deduce something from that?"
-
-"We have got to the deductions and the inferences," said
-Lestrade, winking at me. "I find it hard enough to tackle facts,
-Holmes, without flying away after theories and fancies."
-
-"You are right," said Holmes demurely; "you do find it very hard
-to tackle the facts."
-
-"Anyhow, I have grasped one fact which you seem to find it
-difficult to get hold of," replied Lestrade with some warmth.
-
-"And that is--"
-
-"That McCarthy senior met his death from McCarthy junior and that
-all theories to the contrary are the merest moonshine."
-
-"Well, moonshine is a brighter thing than fog," said Holmes,
-laughing. "But I am very much mistaken if this is not Hatherley
-Farm upon the left."
-
-"Yes, that is it." It was a widespread, comfortable-looking
-building, two-storied, slate-roofed, with great yellow blotches
-of lichen upon the grey walls. The drawn blinds and the smokeless
-chimneys, however, gave it a stricken look, as though the weight
-of this horror still lay heavy upon it. We called at the door,
-when the maid, at Holmes' request, showed us the boots which her
-master wore at the time of his death, and also a pair of the
-son's, though not the pair which he had then had. Having measured
-these very carefully from seven or eight different points, Holmes
-desired to be led to the court-yard, from which we all followed
-the winding track which led to Boscombe Pool.
-
-Sherlock Holmes was transformed when he was hot upon such a scent
-as this. Men who had only known the quiet thinker and logician of
-Baker Street would have failed to recognise him. His face flushed
-and darkened. His brows were drawn into two hard black lines,
-while his eyes shone out from beneath them with a steely glitter.
-His face was bent downward, his shoulders bowed, his lips
-compressed, and the veins stood out like whipcord in his long,
-sinewy neck. His nostrils seemed to dilate with a purely animal
-lust for the chase, and his mind was so absolutely concentrated
-upon the matter before him that a question or remark fell
-unheeded upon his ears, or, at the most, only provoked a quick,
-impatient snarl in reply. Swiftly and silently he made his way
-along the track which ran through the meadows, and so by way of
-the woods to the Boscombe Pool. It was damp, marshy ground, as is
-all that district, and there were marks of many feet, both upon
-the path and amid the short grass which bounded it on either
-side. Sometimes Holmes would hurry on, sometimes stop dead, and
-once he made quite a little detour into the meadow. Lestrade and
-I walked behind him, the detective indifferent and contemptuous,
-while I watched my friend with the interest which sprang from the
-conviction that every one of his actions was directed towards a
-definite end.
-
-The Boscombe Pool, which is a little reed-girt sheet of water
-some fifty yards across, is situated at the boundary between the
-Hatherley Farm and the private park of the wealthy Mr. Turner.
-Above the woods which lined it upon the farther side we could see
-the red, jutting pinnacles which marked the site of the rich
-landowner's dwelling. On the Hatherley side of the pool the woods
-grew very thick, and there was a narrow belt of sodden grass
-twenty paces across between the edge of the trees and the reeds
-which lined the lake. Lestrade showed us the exact spot at which
-the body had been found, and, indeed, so moist was the ground,
-that I could plainly see the traces which had been left by the
-fall of the stricken man. To Holmes, as I could see by his eager
-face and peering eyes, very many other things were to be read
-upon the trampled grass. He ran round, like a dog who is picking
-up a scent, and then turned upon my companion.
-
-"What did you go into the pool for?" he asked.
-
-"I fished about with a rake. I thought there might be some weapon
-or other trace. But how on earth--"
-
-"Oh, tut, tut! I have no time! That left foot of yours with its
-inward twist is all over the place. A mole could trace it, and
-there it vanishes among the reeds. Oh, how simple it would all
-have been had I been here before they came like a herd of buffalo
-and wallowed all over it. Here is where the party with the
-lodge-keeper came, and they have covered all tracks for six or
-eight feet round the body. But here are three separate tracks of
-the same feet." He drew out a lens and lay down upon his
-waterproof to have a better view, talking all the time rather to
-himself than to us. "These are young McCarthy's feet. Twice he
-was walking, and once he ran swiftly, so that the soles are
-deeply marked and the heels hardly visible. That bears out his
-story. He ran when he saw his father on the ground. Then here are
-the father's feet as he paced up and down. What is this, then? It
-is the butt-end of the gun as the son stood listening. And this?
-Ha, ha! What have we here? Tiptoes! tiptoes! Square, too, quite
-unusual boots! They come, they go, they come again--of course
-that was for the cloak. Now where did they come from?" He ran up
-and down, sometimes losing, sometimes finding the track until we
-were well within the edge of the wood and under the shadow of a
-great beech, the largest tree in the neighbourhood. Holmes traced
-his way to the farther side of this and lay down once more upon
-his face with a little cry of satisfaction. For a long time he
-remained there, turning over the leaves and dried sticks,
-gathering up what seemed to me to be dust into an envelope and
-examining with his lens not only the ground but even the bark of
-the tree as far as he could reach. A jagged stone was lying among
-the moss, and this also he carefully examined and retained. Then
-he followed a pathway through the wood until he came to the
-highroad, where all traces were lost.
-
-"It has been a case of considerable interest," he remarked,
-returning to his natural manner. "I fancy that this grey house on
-the right must be the lodge. I think that I will go in and have a
-word with Moran, and perhaps write a little note. Having done
-that, we may drive back to our luncheon. You may walk to the cab,
-and I shall be with you presently."
-
-It was about ten minutes before we regained our cab and drove
-back into Ross, Holmes still carrying with him the stone which he
-had picked up in the wood.
-
-"This may interest you, Lestrade," he remarked, holding it out.
-"The murder was done with it."
-
-"I see no marks."
-
-"There are none."
-
-"How do you know, then?"
-
-"The grass was growing under it. It had only lain there a few
-days. There was no sign of a place whence it had been taken. It
-corresponds with the injuries. There is no sign of any other
-weapon."
-
-"And the murderer?"
-
-"Is a tall man, left-handed, limps with the right leg, wears
-thick-soled shooting-boots and a grey cloak, smokes Indian
-cigars, uses a cigar-holder, and carries a blunt pen-knife in his
-pocket. There are several other indications, but these may be
-enough to aid us in our search."
-
-Lestrade laughed. "I am afraid that I am still a sceptic," he
-said. "Theories are all very well, but we have to deal with a
-hard-headed British jury."
-
-"Nous verrons," answered Holmes calmly. "You work your own
-method, and I shall work mine. I shall be busy this afternoon,
-and shall probably return to London by the evening train."
-
-"And leave your case unfinished?"
-
-"No, finished."
-
-"But the mystery?"
-
-"It is solved."
-
-"Who was the criminal, then?"
-
-"The gentleman I describe."
-
-"But who is he?"
-
-"Surely it would not be difficult to find out. This is not such a
-populous neighbourhood."
-
-Lestrade shrugged his shoulders. "I am a practical man," he said,
-"and I really cannot undertake to go about the country looking
-for a left-handed gentleman with a game leg. I should become the
-laughing-stock of Scotland Yard."
-
-"All right," said Holmes quietly. "I have given you the chance.
-Here are your lodgings. Good-bye. I shall drop you a line before
-I leave."
-
-Having left Lestrade at his rooms, we drove to our hotel, where
-we found lunch upon the table. Holmes was silent and buried in
-thought with a pained expression upon his face, as one who finds
-himself in a perplexing position.
-
-"Look here, Watson," he said when the cloth was cleared "just sit
-down in this chair and let me preach to you for a little. I don't
-know quite what to do, and I should value your advice. Light a
-cigar and let me expound."
-
- "Pray do so."
-
-"Well, now, in considering this case there are two points about
-young McCarthy's narrative which struck us both instantly,
-although they impressed me in his favour and you against him. One
-was the fact that his father should, according to his account,
-cry 'Cooee!' before seeing him. The other was his singular dying
-reference to a rat. He mumbled several words, you understand, but
-that was all that caught the son's ear. Now from this double
-point our research must commence, and we will begin it by
-presuming that what the lad says is absolutely true."
-
-"What of this 'Cooee!' then?"
-
-"Well, obviously it could not have been meant for the son. The
-son, as far as he knew, was in Bristol. It was mere chance that
-he was within earshot. The 'Cooee!' was meant to attract the
-attention of whoever it was that he had the appointment with. But
-'Cooee' is a distinctly Australian cry, and one which is used
-between Australians. There is a strong presumption that the
-person whom McCarthy expected to meet him at Boscombe Pool was
-someone who had been in Australia."
-
-"What of the rat, then?"
-
-Sherlock Holmes took a folded paper from his pocket and flattened
-it out on the table. "This is a map of the Colony of Victoria,"
-he said. "I wired to Bristol for it last night." He put his hand
-over part of the map. "What do you read?"
-
-"ARAT," I read.
-
-"And now?" He raised his hand.
-
-"BALLARAT."
-
-"Quite so. That was the word the man uttered, and of which his
-son only caught the last two syllables. He was trying to utter
-the name of his murderer. So and so, of Ballarat."
-
-"It is wonderful!" I exclaimed.
-
-"It is obvious. And now, you see, I had narrowed the field down
-considerably. The possession of a grey garment was a third point
-which, granting the son's statement to be correct, was a
-certainty. We have come now out of mere vagueness to the definite
-conception of an Australian from Ballarat with a grey cloak."
-
-"Certainly."
-
-"And one who was at home in the district, for the pool can only
-be approached by the farm or by the estate, where strangers could
-hardly wander."
-
-"Quite so."
-
-"Then comes our expedition of to-day. By an examination of the
-ground I gained the trifling details which I gave to that
-imbecile Lestrade, as to the personality of the criminal."
-
-"But how did you gain them?"
-
-"You know my method. It is founded upon the observation of
-trifles."
-
-"His height I know that you might roughly judge from the length
-of his stride. His boots, too, might be told from their traces."
-
-"Yes, they were peculiar boots."
-
-"But his lameness?"
-
-"The impression of his right foot was always less distinct than
-his left. He put less weight upon it. Why? Because he limped--he
-was lame."
-
-"But his left-handedness."
-
-"You were yourself struck by the nature of the injury as recorded
-by the surgeon at the inquest. The blow was struck from
-immediately behind, and yet was upon the left side. Now, how can
-that be unless it were by a left-handed man? He had stood behind
-that tree during the interview between the father and son. He had
-even smoked there. I found the ash of a cigar, which my special
-knowledge of tobacco ashes enables me to pronounce as an Indian
-cigar. I have, as you know, devoted some attention to this, and
-written a little monograph on the ashes of 140 different
-varieties of pipe, cigar, and cigarette tobacco. Having found the
-ash, I then looked round and discovered the stump among the moss
-where he had tossed it. It was an Indian cigar, of the variety
-which are rolled in Rotterdam."
-
-"And the cigar-holder?"
-
-"I could see that the end had not been in his mouth. Therefore he
-used a holder. The tip had been cut off, not bitten off, but the
-cut was not a clean one, so I deduced a blunt pen-knife."
-
-"Holmes," I said, "you have drawn a net round this man from which
-he cannot escape, and you have saved an innocent human life as
-truly as if you had cut the cord which was hanging him. I see the
-direction in which all this points. The culprit is--"
-
-"Mr. John Turner," cried the hotel waiter, opening the door of
-our sitting-room, and ushering in a visitor.
-
-The man who entered was a strange and impressive figure. His
-slow, limping step and bowed shoulders gave the appearance of
-decrepitude, and yet his hard, deep-lined, craggy features, and
-his enormous limbs showed that he was possessed of unusual
-strength of body and of character. His tangled beard, grizzled
-hair, and outstanding, drooping eyebrows combined to give an air
-of dignity and power to his appearance, but his face was of an
-ashen white, while his lips and the corners of his nostrils were
-tinged with a shade of blue. It was clear to me at a glance that
-he was in the grip of some deadly and chronic disease.
-
-"Pray sit down on the sofa," said Holmes gently. "You had my
-note?"
-
-"Yes, the lodge-keeper brought it up. You said that you wished to
-see me here to avoid scandal."
-
-"I thought people would talk if I went to the Hall."
-
-"And why did you wish to see me?" He looked across at my
-companion with despair in his weary eyes, as though his question
-was already answered.
-
-"Yes," said Holmes, answering the look rather than the words. "It
-is so. I know all about McCarthy."
-
-The old man sank his face in his hands. "God help me!" he cried.
-"But I would not have let the young man come to harm. I give you
-my word that I would have spoken out if it went against him at
-the Assizes."
-
-"I am glad to hear you say so," said Holmes gravely.
-
-"I would have spoken now had it not been for my dear girl. It
-would break her heart--it will break her heart when she hears
-that I am arrested."
-
-"It may not come to that," said Holmes.
-
-"What?"
-
-"I am no official agent. I understand that it was your daughter
-who required my presence here, and I am acting in her interests.
-Young McCarthy must be got off, however."
-
-"I am a dying man," said old Turner. "I have had diabetes for
-years. My doctor says it is a question whether I shall live a
-month. Yet I would rather die under my own roof than in a gaol."
-
-Holmes rose and sat down at the table with his pen in his hand
-and a bundle of paper before him. "Just tell us the truth," he
-said. "I shall jot down the facts. You will sign it, and Watson
-here can witness it. Then I could produce your confession at the
-last extremity to save young McCarthy. I promise you that I shall
-not use it unless it is absolutely needed."
-
-"It's as well," said the old man; "it's a question whether I
-shall live to the Assizes, so it matters little to me, but I
-should wish to spare Alice the shock. And now I will make the
-thing clear to you; it has been a long time in the acting, but
-will not take me long to tell.
-
-"You didn't know this dead man, McCarthy. He was a devil
-incarnate. I tell you that. God keep you out of the clutches of
-such a man as he. His grip has been upon me these twenty years,
-and he has blasted my life. I'll tell you first how I came to be
-in his power.
-
-"It was in the early '60's at the diggings. I was a young chap
-then, hot-blooded and reckless, ready to turn my hand at
-anything; I got among bad companions, took to drink, had no luck
-with my claim, took to the bush, and in a word became what you
-would call over here a highway robber. There were six of us, and
-we had a wild, free life of it, sticking up a station from time
-to time, or stopping the wagons on the road to the diggings.
-Black Jack of Ballarat was the name I went under, and our party
-is still remembered in the colony as the Ballarat Gang.
-
-"One day a gold convoy came down from Ballarat to Melbourne, and
-we lay in wait for it and attacked it. There were six troopers
-and six of us, so it was a close thing, but we emptied four of
-their saddles at the first volley. Three of our boys were killed,
-however, before we got the swag. I put my pistol to the head of
-the wagon-driver, who was this very man McCarthy. I wish to the
-Lord that I had shot him then, but I spared him, though I saw his
-wicked little eyes fixed on my face, as though to remember every
-feature. We got away with the gold, became wealthy men, and made
-our way over to England without being suspected. There I parted
-from my old pals and determined to settle down to a quiet and
-respectable life. I bought this estate, which chanced to be in
-the market, and I set myself to do a little good with my money,
-to make up for the way in which I had earned it. I married, too,
-and though my wife died young she left me my dear little Alice.
-Even when she was just a baby her wee hand seemed to lead me down
-the right path as nothing else had ever done. In a word, I turned
-over a new leaf and did my best to make up for the past. All was
-going well when McCarthy laid his grip upon me.
-
-"I had gone up to town about an investment, and I met him in
-Regent Street with hardly a coat to his back or a boot to his
-foot.
-
-"'Here we are, Jack,' says he, touching me on the arm; 'we'll be
-as good as a family to you. There's two of us, me and my son, and
-you can have the keeping of us. If you don't--it's a fine,
-law-abiding country is England, and there's always a policeman
-within hail.'
-
-"Well, down they came to the west country, there was no shaking
-them off, and there they have lived rent free on my best land
-ever since. There was no rest for me, no peace, no forgetfulness;
-turn where I would, there was his cunning, grinning face at my
-elbow. It grew worse as Alice grew up, for he soon saw I was more
-afraid of her knowing my past than of the police. Whatever he
-wanted he must have, and whatever it was I gave him without
-question, land, money, houses, until at last he asked a thing
-which I could not give. He asked for Alice.
-
-"His son, you see, had grown up, and so had my girl, and as I was
-known to be in weak health, it seemed a fine stroke to him that
-his lad should step into the whole property. But there I was
-firm. I would not have his cursed stock mixed with mine; not that
-I had any dislike to the lad, but his blood was in him, and that
-was enough. I stood firm. McCarthy threatened. I braved him to do
-his worst. We were to meet at the pool midway between our houses
-to talk it over.
-
-"When I went down there I found him talking with his son, so I
-smoked a cigar and waited behind a tree until he should be alone.
-But as I listened to his talk all that was black and bitter in
-me seemed to come uppermost. He was urging his son to marry my
-daughter with as little regard for what she might think as if she
-were a slut from off the streets. It drove me mad to think that I
-and all that I held most dear should be in the power of such a
-man as this. Could I not snap the bond? I was already a dying and
-a desperate man. Though clear of mind and fairly strong of limb,
-I knew that my own fate was sealed. But my memory and my girl!
-Both could be saved if I could but silence that foul tongue. I
-did it, Mr. Holmes. I would do it again. Deeply as I have sinned,
-I have led a life of martyrdom to atone for it. But that my girl
-should be entangled in the same meshes which held me was more
-than I could suffer. I struck him down with no more compunction
-than if he had been some foul and venomous beast. His cry brought
-back his son; but I had gained the cover of the wood, though I
-was forced to go back to fetch the cloak which I had dropped in
-my flight. That is the true story, gentlemen, of all that
-occurred."
-
-"Well, it is not for me to judge you," said Holmes as the old man
-signed the statement which had been drawn out. "I pray that we
-may never be exposed to such a temptation."
-
-"I pray not, sir. And what do you intend to do?"
-
-"In view of your health, nothing. You are yourself aware that you
-will soon have to answer for your deed at a higher court than the
-Assizes. I will keep your confession, and if McCarthy is
-condemned I shall be forced to use it. If not, it shall never be
-seen by mortal eye; and your secret, whether you be alive or
-dead, shall be safe with us."
-
-"Farewell, then," said the old man solemnly. "Your own deathbeds,
-when they come, will be the easier for the thought of the peace
-which you have given to mine." Tottering and shaking in all his
-giant frame, he stumbled slowly from the room.
-
-"God help us!" said Holmes after a long silence. "Why does fate
-play such tricks with poor, helpless worms? I never hear of such
-a case as this that I do not think of Baxter's words, and say,
-'There, but for the grace of God, goes Sherlock Holmes.'"
-
-James McCarthy was acquitted at the Assizes on the strength of a
-number of objections which had been drawn out by Holmes and
-submitted to the defending counsel. Old Turner lived for seven
-months after our interview, but he is now dead; and there is
-every prospect that the son and daughter may come to live happily
-together in ignorance of the black cloud which rests upon their
-past.
-
-
-
-ADVENTURE V. THE FIVE ORANGE PIPS
-
-When I glance over my notes and records of the Sherlock Holmes
-cases between the years '82 and '90, I am faced by so many which
-present strange and interesting features that it is no easy
-matter to know which to choose and which to leave. Some, however,
-have already gained publicity through the papers, and others have
-not offered a field for those peculiar qualities which my friend
-possessed in so high a degree, and which it is the object of
-these papers to illustrate. Some, too, have baffled his
-analytical skill, and would be, as narratives, beginnings without
-an ending, while others have been but partially cleared up, and
-have their explanations founded rather upon conjecture and
-surmise than on that absolute logical proof which was so dear to
-him. There is, however, one of these last which was so remarkable
-in its details and so startling in its results that I am tempted
-to give some account of it in spite of the fact that there are
-points in connection with it which never have been, and probably
-never will be, entirely cleared up.
-
-The year '87 furnished us with a long series of cases of greater
-or less interest, of which I retain the records. Among my
-headings under this one twelve months I find an account of the
-adventure of the Paradol Chamber, of the Amateur Mendicant
-Society, who held a luxurious club in the lower vault of a
-furniture warehouse, of the facts connected with the loss of the
-British barque "Sophy Anderson", of the singular adventures of the
-Grice Patersons in the island of Uffa, and finally of the
-Camberwell poisoning case. In the latter, as may be remembered,
-Sherlock Holmes was able, by winding up the dead man's watch, to
-prove that it had been wound up two hours before, and that
-therefore the deceased had gone to bed within that time--a
-deduction which was of the greatest importance in clearing up the
-case. All these I may sketch out at some future date, but none of
-them present such singular features as the strange train of
-circumstances which I have now taken up my pen to describe.
-
-It was in the latter days of September, and the equinoctial gales
-had set in with exceptional violence. All day the wind had
-screamed and the rain had beaten against the windows, so that
-even here in the heart of great, hand-made London we were forced
-to raise our minds for the instant from the routine of life and
-to recognise the presence of those great elemental forces which
-shriek at mankind through the bars of his civilisation, like
-untamed beasts in a cage. As evening drew in, the storm grew
-higher and louder, and the wind cried and sobbed like a child in
-the chimney. Sherlock Holmes sat moodily at one side of the
-fireplace cross-indexing his records of crime, while I at the
-other was deep in one of Clark Russell's fine sea-stories until
-the howl of the gale from without seemed to blend with the text,
-and the splash of the rain to lengthen out into the long swash of
-the sea waves. My wife was on a visit to her mother's, and for a
-few days I was a dweller once more in my old quarters at Baker
-Street.
-
-"Why," said I, glancing up at my companion, "that was surely the
-bell. Who could come to-night? Some friend of yours, perhaps?"
-
-"Except yourself I have none," he answered. "I do not encourage
-visitors."
-
-"A client, then?"
-
-"If so, it is a serious case. Nothing less would bring a man out
-on such a day and at such an hour. But I take it that it is more
-likely to be some crony of the landlady's."
-
-Sherlock Holmes was wrong in his conjecture, however, for there
-came a step in the passage and a tapping at the door. He
-stretched out his long arm to turn the lamp away from himself and
-towards the vacant chair upon which a newcomer must sit.
-
-"Come in!" said he.
-
-The man who entered was young, some two-and-twenty at the
-outside, well-groomed and trimly clad, with something of
-refinement and delicacy in his bearing. The streaming umbrella
-which he held in his hand, and his long shining waterproof told
-of the fierce weather through which he had come. He looked about
-him anxiously in the glare of the lamp, and I could see that his
-face was pale and his eyes heavy, like those of a man who is
-weighed down with some great anxiety.
-
-"I owe you an apology," he said, raising his golden pince-nez to
-his eyes. "I trust that I am not intruding. I fear that I have
-brought some traces of the storm and rain into your snug
-chamber."
-
-"Give me your coat and umbrella," said Holmes. "They may rest
-here on the hook and will be dry presently. You have come up from
-the south-west, I see."
-
-"Yes, from Horsham."
-
-"That clay and chalk mixture which I see upon your toe caps is
-quite distinctive."
-
-"I have come for advice."
-
-"That is easily got."
-
-"And help."
-
-"That is not always so easy."
-
-"I have heard of you, Mr. Holmes. I heard from Major Prendergast
-how you saved him in the Tankerville Club scandal."
-
-"Ah, of course. He was wrongfully accused of cheating at cards."
-
-"He said that you could solve anything."
-
-"He said too much."
-
-"That you are never beaten."
-
-"I have been beaten four times--three times by men, and once by a
-woman."
-
-"But what is that compared with the number of your successes?"
-
-"It is true that I have been generally successful."
-
-"Then you may be so with me."
-
-"I beg that you will draw your chair up to the fire and favour me
-with some details as to your case."
-
-"It is no ordinary one."
-
-"None of those which come to me are. I am the last court of
-appeal."
-
-"And yet I question, sir, whether, in all your experience, you
-have ever listened to a more mysterious and inexplicable chain of
-events than those which have happened in my own family."
-
-"You fill me with interest," said Holmes. "Pray give us the
-essential facts from the commencement, and I can afterwards
-question you as to those details which seem to me to be most
-important."
-
-The young man pulled his chair up and pushed his wet feet out
-towards the blaze.
-
-"My name," said he, "is John Openshaw, but my own affairs have,
-as far as I can understand, little to do with this awful
-business. It is a hereditary matter; so in order to give you an
-idea of the facts, I must go back to the commencement of the
-affair.
-
-"You must know that my grandfather had two sons--my uncle Elias
-and my father Joseph. My father had a small factory at Coventry,
-which he enlarged at the time of the invention of bicycling. He
-was a patentee of the Openshaw unbreakable tire, and his business
-met with such success that he was able to sell it and to retire
-upon a handsome competence.
-
-"My uncle Elias emigrated to America when he was a young man and
-became a planter in Florida, where he was reported to have done
-very well. At the time of the war he fought in Jackson's army,
-and afterwards under Hood, where he rose to be a colonel. When
-Lee laid down his arms my uncle returned to his plantation, where
-he remained for three or four years. About 1869 or 1870 he came
-back to Europe and took a small estate in Sussex, near Horsham.
-He had made a very considerable fortune in the States, and his
-reason for leaving them was his aversion to the negroes, and his
-dislike of the Republican policy in extending the franchise to
-them. He was a singular man, fierce and quick-tempered, very
-foul-mouthed when he was angry, and of a most retiring
-disposition. During all the years that he lived at Horsham, I
-doubt if ever he set foot in the town. He had a garden and two or
-three fields round his house, and there he would take his
-exercise, though very often for weeks on end he would never leave
-his room. He drank a great deal of brandy and smoked very
-heavily, but he would see no society and did not want any
-friends, not even his own brother.
-
-"He didn't mind me; in fact, he took a fancy to me, for at the
-time when he saw me first I was a youngster of twelve or so. This
-would be in the year 1878, after he had been eight or nine years
-in England. He begged my father to let me live with him and he
-was very kind to me in his way. When he was sober he used to be
-fond of playing backgammon and draughts with me, and he would
-make me his representative both with the servants and with the
-tradespeople, so that by the time that I was sixteen I was quite
-master of the house. I kept all the keys and could go where I
-liked and do what I liked, so long as I did not disturb him in
-his privacy. There was one singular exception, however, for he
-had a single room, a lumber-room up among the attics, which was
-invariably locked, and which he would never permit either me or
-anyone else to enter. With a boy's curiosity I have peeped
-through the keyhole, but I was never able to see more than such a
-collection of old trunks and bundles as would be expected in such
-a room.
-
-"One day--it was in March, 1883--a letter with a foreign stamp
-lay upon the table in front of the colonel's plate. It was not a
-common thing for him to receive letters, for his bills were all
-paid in ready money, and he had no friends of any sort. 'From
-India!' said he as he took it up, 'Pondicherry postmark! What can
-this be?' Opening it hurriedly, out there jumped five little
-dried orange pips, which pattered down upon his plate. I began to
-laugh at this, but the laugh was struck from my lips at the sight
-of his face. His lip had fallen, his eyes were protruding, his
-skin the colour of putty, and he glared at the envelope which he
-still held in his trembling hand, 'K. K. K.!' he shrieked, and
-then, 'My God, my God, my sins have overtaken me!'
-
-"'What is it, uncle?' I cried.
-
-"'Death,' said he, and rising from the table he retired to his
-room, leaving me palpitating with horror. I took up the envelope
-and saw scrawled in red ink upon the inner flap, just above the
-gum, the letter K three times repeated. There was nothing else
-save the five dried pips. What could be the reason of his
-overpowering terror? I left the breakfast-table, and as I
-ascended the stair I met him coming down with an old rusty key,
-which must have belonged to the attic, in one hand, and a small
-brass box, like a cashbox, in the other.
-
-"'They may do what they like, but I'll checkmate them still,'
-said he with an oath. 'Tell Mary that I shall want a fire in my
-room to-day, and send down to Fordham, the Horsham lawyer.'
-
-"I did as he ordered, and when the lawyer arrived I was asked to
-step up to the room. The fire was burning brightly, and in the
-grate there was a mass of black, fluffy ashes, as of burned
-paper, while the brass box stood open and empty beside it. As I
-glanced at the box I noticed, with a start, that upon the lid was
-printed the treble K which I had read in the morning upon the
-envelope.
-
-"'I wish you, John,' said my uncle, 'to witness my will. I leave
-my estate, with all its advantages and all its disadvantages, to
-my brother, your father, whence it will, no doubt, descend to
-you. If you can enjoy it in peace, well and good! If you find you
-cannot, take my advice, my boy, and leave it to your deadliest
-enemy. I am sorry to give you such a two-edged thing, but I can't
-say what turn things are going to take. Kindly sign the paper
-where Mr. Fordham shows you.'
-
-"I signed the paper as directed, and the lawyer took it away with
-him. The singular incident made, as you may think, the deepest
-impression upon me, and I pondered over it and turned it every
-way in my mind without being able to make anything of it. Yet I
-could not shake off the vague feeling of dread which it left
-behind, though the sensation grew less keen as the weeks passed
-and nothing happened to disturb the usual routine of our lives. I
-could see a change in my uncle, however. He drank more than ever,
-and he was less inclined for any sort of society. Most of his
-time he would spend in his room, with the door locked upon the
-inside, but sometimes he would emerge in a sort of drunken frenzy
-and would burst out of the house and tear about the garden with a
-revolver in his hand, screaming out that he was afraid of no man,
-and that he was not to be cooped up, like a sheep in a pen, by
-man or devil. When these hot fits were over, however, he would
-rush tumultuously in at the door and lock and bar it behind him,
-like a man who can brazen it out no longer against the terror
-which lies at the roots of his soul. At such times I have seen
-his face, even on a cold day, glisten with moisture, as though it
-were new raised from a basin.
-
-"Well, to come to an end of the matter, Mr. Holmes, and not to
-abuse your patience, there came a night when he made one of those
-drunken sallies from which he never came back. We found him, when
-we went to search for him, face downward in a little
-green-scummed pool, which lay at the foot of the garden. There
-was no sign of any violence, and the water was but two feet deep,
-so that the jury, having regard to his known eccentricity,
-brought in a verdict of 'suicide.' But I, who knew how he winced
-from the very thought of death, had much ado to persuade myself
-that he had gone out of his way to meet it. The matter passed,
-however, and my father entered into possession of the estate, and
-of some 14,000 pounds, which lay to his credit at the bank."
-
-"One moment," Holmes interposed, "your statement is, I foresee,
-one of the most remarkable to which I have ever listened. Let me
-have the date of the reception by your uncle of the letter, and
-the date of his supposed suicide."
-
-"The letter arrived on March 10, 1883. His death was seven weeks
-later, upon the night of May 2nd."
-
-"Thank you. Pray proceed."
-
-"When my father took over the Horsham property, he, at my
-request, made a careful examination of the attic, which had been
-always locked up. We found the brass box there, although its
-contents had been destroyed. On the inside of the cover was a
-paper label, with the initials of K. K. K. repeated upon it, and
-'Letters, memoranda, receipts, and a register' written beneath.
-These, we presume, indicated the nature of the papers which had
-been destroyed by Colonel Openshaw. For the rest, there was
-nothing of much importance in the attic save a great many
-scattered papers and note-books bearing upon my uncle's life in
-America. Some of them were of the war time and showed that he had
-done his duty well and had borne the repute of a brave soldier.
-Others were of a date during the reconstruction of the Southern
-states, and were mostly concerned with politics, for he had
-evidently taken a strong part in opposing the carpet-bag
-politicians who had been sent down from the North.
-
-"Well, it was the beginning of '84 when my father came to live at
-Horsham, and all went as well as possible with us until the
-January of '85. On the fourth day after the new year I heard my
-father give a sharp cry of surprise as we sat together at the
-breakfast-table. There he was, sitting with a newly opened
-envelope in one hand and five dried orange pips in the
-outstretched palm of the other one. He had always laughed at what
-he called my cock-and-bull story about the colonel, but he looked
-very scared and puzzled now that the same thing had come upon
-himself.
-
-"'Why, what on earth does this mean, John?' he stammered.
-
-"My heart had turned to lead. 'It is K. K. K.,' said I.
-
-"He looked inside the envelope. 'So it is,' he cried. 'Here are
-the very letters. But what is this written above them?'
-
-"'Put the papers on the sundial,' I read, peeping over his
-shoulder.
-
-"'What papers? What sundial?' he asked.
-
-"'The sundial in the garden. There is no other,' said I; 'but the
-papers must be those that are destroyed.'
-
-"'Pooh!' said he, gripping hard at his courage. 'We are in a
-civilised land here, and we can't have tomfoolery of this kind.
-Where does the thing come from?'
-
-"'From Dundee,' I answered, glancing at the postmark.
-
-"'Some preposterous practical joke,' said he. 'What have I to do
-with sundials and papers? I shall take no notice of such
-nonsense.'
-
-"'I should certainly speak to the police,' I said.
-
-"'And be laughed at for my pains. Nothing of the sort.'
-
-"'Then let me do so?'
-
-"'No, I forbid you. I won't have a fuss made about such
-nonsense.'
-
-"It was in vain to argue with him, for he was a very obstinate
-man. I went about, however, with a heart which was full of
-forebodings.
-
-"On the third day after the coming of the letter my father went
-from home to visit an old friend of his, Major Freebody, who is
-in command of one of the forts upon Portsdown Hill. I was glad
-that he should go, for it seemed to me that he was farther from
-danger when he was away from home. In that, however, I was in
-error. Upon the second day of his absence I received a telegram
-from the major, imploring me to come at once. My father had
-fallen over one of the deep chalk-pits which abound in the
-neighbourhood, and was lying senseless, with a shattered skull. I
-hurried to him, but he passed away without having ever recovered
-his consciousness. He had, as it appears, been returning from
-Fareham in the twilight, and as the country was unknown to him,
-and the chalk-pit unfenced, the jury had no hesitation in
-bringing in a verdict of 'death from accidental causes.'
-Carefully as I examined every fact connected with his death, I
-was unable to find anything which could suggest the idea of
-murder. There were no signs of violence, no footmarks, no
-robbery, no record of strangers having been seen upon the roads.
-And yet I need not tell you that my mind was far from at ease,
-and that I was well-nigh certain that some foul plot had been
-woven round him.
-
-"In this sinister way I came into my inheritance. You will ask me
-why I did not dispose of it? I answer, because I was well
-convinced that our troubles were in some way dependent upon an
-incident in my uncle's life, and that the danger would be as
-pressing in one house as in another.
-
-"It was in January, '85, that my poor father met his end, and two
-years and eight months have elapsed since then. During that time
-I have lived happily at Horsham, and I had begun to hope that
-this curse had passed away from the family, and that it had ended
-with the last generation. I had begun to take comfort too soon,
-however; yesterday morning the blow fell in the very shape in
-which it had come upon my father."
-
-The young man took from his waistcoat a crumpled envelope, and
-turning to the table he shook out upon it five little dried
-orange pips.
-
-"This is the envelope," he continued. "The postmark is
-London--eastern division. Within are the very words which were
-upon my father's last message: 'K. K. K.'; and then 'Put the
-papers on the sundial.'"
-
-"What have you done?" asked Holmes.
-
-"Nothing."
-
-"Nothing?"
-
-"To tell the truth"--he sank his face into his thin, white
-hands--"I have felt helpless. I have felt like one of those poor
-rabbits when the snake is writhing towards it. I seem to be in
-the grasp of some resistless, inexorable evil, which no foresight
-and no precautions can guard against."
-
-"Tut! tut!" cried Sherlock Holmes. "You must act, man, or you are
-lost. Nothing but energy can save you. This is no time for
-despair."
-
-"I have seen the police."
-
-"Ah!"
-
-"But they listened to my story with a smile. I am convinced that
-the inspector has formed the opinion that the letters are all
-practical jokes, and that the deaths of my relations were really
-accidents, as the jury stated, and were not to be connected with
-the warnings."
-
-Holmes shook his clenched hands in the air. "Incredible
-imbecility!" he cried.
-
-"They have, however, allowed me a policeman, who may remain in
-the house with me."
-
-"Has he come with you to-night?"
-
-"No. His orders were to stay in the house."
-
-Again Holmes raved in the air.
-
-"Why did you come to me," he cried, "and, above all, why did you
-not come at once?"
-
-"I did not know. It was only to-day that I spoke to Major
-Prendergast about my troubles and was advised by him to come to
-you."
-
-"It is really two days since you had the letter. We should have
-acted before this. You have no further evidence, I suppose, than
-that which you have placed before us--no suggestive detail which
-might help us?"
-
-"There is one thing," said John Openshaw. He rummaged in his coat
-pocket, and, drawing out a piece of discoloured, blue-tinted
-paper, he laid it out upon the table. "I have some remembrance,"
-said he, "that on the day when my uncle burned the papers I
-observed that the small, unburned margins which lay amid the
-ashes were of this particular colour. I found this single sheet
-upon the floor of his room, and I am inclined to think that it
-may be one of the papers which has, perhaps, fluttered out from
-among the others, and in that way has escaped destruction. Beyond
-the mention of pips, I do not see that it helps us much. I think
-myself that it is a page from some private diary. The writing is
-undoubtedly my uncle's."
-
-Holmes moved the lamp, and we both bent over the sheet of paper,
-which showed by its ragged edge that it had indeed been torn from
-a book. It was headed, "March, 1869," and beneath were the
-following enigmatical notices:
-
-"4th. Hudson came. Same old platform.
-
-"7th. Set the pips on McCauley, Paramore, and
-      John Swain, of St. Augustine.
-
-"9th. McCauley cleared.
-
-"10th. John Swain cleared.
-
-"12th. Visited Paramore. All well."
-
-"Thank you!" said Holmes, folding up the paper and returning it
-to our visitor. "And now you must on no account lose another
-instant. We cannot spare time even to discuss what you have told
-me. You must get home instantly and act."
-
-"What shall I do?"
-
-"There is but one thing to do. It must be done at once. You must
-put this piece of paper which you have shown us into the brass
-box which you have described. You must also put in a note to say
-that all the other papers were burned by your uncle, and that
-this is the only one which remains. You must assert that in such
-words as will carry conviction with them. Having done this, you
-must at once put the box out upon the sundial, as directed. Do
-you understand?"
-
-"Entirely."
-
-"Do not think of revenge, or anything of the sort, at present. I
-think that we may gain that by means of the law; but we have our
-web to weave, while theirs is already woven. The first
-consideration is to remove the pressing danger which threatens
-you. The second is to clear up the mystery and to punish the
-guilty parties."
-
-"I thank you," said the young man, rising and pulling on his
-overcoat. "You have given me fresh life and hope. I shall
-certainly do as you advise."
-
-"Do not lose an instant. And, above all, take care of yourself in
-the meanwhile, for I do not think that there can be a doubt that
-you are threatened by a very real and imminent danger. How do you
-go back?"
-
-"By train from Waterloo."
-
-"It is not yet nine. The streets will be crowded, so I trust that
-you may be in safety. And yet you cannot guard yourself too
-closely."
-
-"I am armed."
-
-"That is well. To-morrow I shall set to work upon your case."
-
-"I shall see you at Horsham, then?"
-
-"No, your secret lies in London. It is there that I shall seek
-it."
-
-"Then I shall call upon you in a day, or in two days, with news
-as to the box and the papers. I shall take your advice in every
-particular." He shook hands with us and took his leave. Outside
-the wind still screamed and the rain splashed and pattered
-against the windows. This strange, wild story seemed to have come
-to us from amid the mad elements--blown in upon us like a sheet
-of sea-weed in a gale--and now to have been reabsorbed by them
-once more.
-
-Sherlock Holmes sat for some time in silence, with his head sunk
-forward and his eyes bent upon the red glow of the fire. Then he
-lit his pipe, and leaning back in his chair he watched the blue
-smoke-rings as they chased each other up to the ceiling.
-
-"I think, Watson," he remarked at last, "that of all our cases we
-have had none more fantastic than this."
-
-"Save, perhaps, the Sign of Four."
-
-"Well, yes. Save, perhaps, that. And yet this John Openshaw seems
-to me to be walking amid even greater perils than did the
-Sholtos."
-
-"But have you," I asked, "formed any definite conception as to
-what these perils are?"
-
-"There can be no question as to their nature," he answered.
-
-"Then what are they? Who is this K. K. K., and why does he pursue
-this unhappy family?"
-
-Sherlock Holmes closed his eyes and placed his elbows upon the
-arms of his chair, with his finger-tips together. "The ideal
-reasoner," he remarked, "would, when he had once been shown a
-single fact in all its bearings, deduce from it not only all the
-chain of events which led up to it but also all the results which
-would follow from it. As Cuvier could correctly describe a whole
-animal by the contemplation of a single bone, so the observer who
-has thoroughly understood one link in a series of incidents
-should be able to accurately state all the other ones, both
-before and after. We have not yet grasped the results which the
-reason alone can attain to. Problems may be solved in the study
-which have baffled all those who have sought a solution by the
-aid of their senses. To carry the art, however, to its highest
-pitch, it is necessary that the reasoner should be able to
-utilise all the facts which have come to his knowledge; and this
-in itself implies, as you will readily see, a possession of all
-knowledge, which, even in these days of free education and
-encyclopaedias, is a somewhat rare accomplishment. It is not so
-impossible, however, that a man should possess all knowledge
-which is likely to be useful to him in his work, and this I have
-endeavoured in my case to do. If I remember rightly, you on one
-occasion, in the early days of our friendship, defined my limits
-in a very precise fashion."
-
-"Yes," I answered, laughing. "It was a singular document.
-Philosophy, astronomy, and politics were marked at zero, I
-remember. Botany variable, geology profound as regards the
-mud-stains from any region within fifty miles of town, chemistry
-eccentric, anatomy unsystematic, sensational literature and crime
-records unique, violin-player, boxer, swordsman, lawyer, and
-self-poisoner by cocaine and tobacco. Those, I think, were the
-main points of my analysis."
-
-Holmes grinned at the last item. "Well," he said, "I say now, as
-I said then, that a man should keep his little brain-attic
-stocked with all the furniture that he is likely to use, and the
-rest he can put away in the lumber-room of his library, where he
-can get it if he wants it. Now, for such a case as the one which
-has been submitted to us to-night, we need certainly to muster
-all our resources. Kindly hand me down the letter K of the
-'American Encyclopaedia' which stands upon the shelf beside you.
-Thank you. Now let us consider the situation and see what may be
-deduced from it. In the first place, we may start with a strong
-presumption that Colonel Openshaw had some very strong reason for
-leaving America. Men at his time of life do not change all their
-habits and exchange willingly the charming climate of Florida for
-the lonely life of an English provincial town. His extreme love
-of solitude in England suggests the idea that he was in fear of
-someone or something, so we may assume as a working hypothesis
-that it was fear of someone or something which drove him from
-America. As to what it was he feared, we can only deduce that by
-considering the formidable letters which were received by himself
-and his successors. Did you remark the postmarks of those
-letters?"
-
-"The first was from Pondicherry, the second from Dundee, and the
-third from London."
-
-"From East London. What do you deduce from that?"
-
-"They are all seaports. That the writer was on board of a ship."
-
-"Excellent. We have already a clue. There can be no doubt that
-the probability--the strong probability--is that the writer was
-on board of a ship. And now let us consider another point. In the
-case of Pondicherry, seven weeks elapsed between the threat and
-its fulfilment, in Dundee it was only some three or four days.
-Does that suggest anything?"
-
-"A greater distance to travel."
-
-"But the letter had also a greater distance to come."
-
-"Then I do not see the point."
-
-"There is at least a presumption that the vessel in which the man
-or men are is a sailing-ship. It looks as if they always send
-their singular warning or token before them when starting upon
-their mission. You see how quickly the deed followed the sign
-when it came from Dundee. If they had come from Pondicherry in a
-steamer they would have arrived almost as soon as their letter.
-But, as a matter of fact, seven weeks elapsed. I think that those
-seven weeks represented the difference between the mail-boat which
-brought the letter and the sailing vessel which brought the
-writer."
-
-"It is possible."
-
-"More than that. It is probable. And now you see the deadly
-urgency of this new case, and why I urged young Openshaw to
-caution. The blow has always fallen at the end of the time which
-it would take the senders to travel the distance. But this one
-comes from London, and therefore we cannot count upon delay."
-
-"Good God!" I cried. "What can it mean, this relentless
-persecution?"
-
-"The papers which Openshaw carried are obviously of vital
-importance to the person or persons in the sailing-ship. I think
-that it is quite clear that there must be more than one of them.
-A single man could not have carried out two deaths in such a way
-as to deceive a coroner's jury. There must have been several in
-it, and they must have been men of resource and determination.
-Their papers they mean to have, be the holder of them who it may.
-In this way you see K. K. K. ceases to be the initials of an
-individual and becomes the badge of a society."
-
-"But of what society?"
-
-"Have you never--" said Sherlock Holmes, bending forward and
-sinking his voice--"have you never heard of the Ku Klux Klan?"
-
-"I never have."
-
-Holmes turned over the leaves of the book upon his knee. "Here it
-is," said he presently:
-
-"'Ku Klux Klan. A name derived from the fanciful resemblance to
-the sound produced by cocking a rifle. This terrible secret
-society was formed by some ex-Confederate soldiers in the
-Southern states after the Civil War, and it rapidly formed local
-branches in different parts of the country, notably in Tennessee,
-Louisiana, the Carolinas, Georgia, and Florida. Its power was
-used for political purposes, principally for the terrorising of
-the negro voters and the murdering and driving from the country
-of those who were opposed to its views. Its outrages were usually
-preceded by a warning sent to the marked man in some fantastic
-but generally recognised shape--a sprig of oak-leaves in some
-parts, melon seeds or orange pips in others. On receiving this
-the victim might either openly abjure his former ways, or might
-fly from the country. If he braved the matter out, death would
-unfailingly come upon him, and usually in some strange and
-unforeseen manner. So perfect was the organisation of the
-society, and so systematic its methods, that there is hardly a
-case upon record where any man succeeded in braving it with
-impunity, or in which any of its outrages were traced home to the
-perpetrators. For some years the organisation flourished in spite
-of the efforts of the United States government and of the better
-classes of the community in the South. Eventually, in the year
-1869, the movement rather suddenly collapsed, although there have
-been sporadic outbreaks of the same sort since that date.'
-
-"You will observe," said Holmes, laying down the volume, "that
-the sudden breaking up of the society was coincident with the
-disappearance of Openshaw from America with their papers. It may
-well have been cause and effect. It is no wonder that he and his
-family have some of the more implacable spirits upon their track.
-You can understand that this register and diary may implicate
-some of the first men in the South, and that there may be many
-who will not sleep easy at night until it is recovered."
-
-"Then the page we have seen--"
-
-"Is such as we might expect. It ran, if I remember right, 'sent
-the pips to A, B, and C'--that is, sent the society's warning to
-them. Then there are successive entries that A and B cleared, or
-left the country, and finally that C was visited, with, I fear, a
-sinister result for C. Well, I think, Doctor, that we may let
-some light into this dark place, and I believe that the only
-chance young Openshaw has in the meantime is to do what I have
-told him. There is nothing more to be said or to be done
-to-night, so hand me over my violin and let us try to forget for
-half an hour the miserable weather and the still more miserable
-ways of our fellow-men."
-
-
-It had cleared in the morning, and the sun was shining with a
-subdued brightness through the dim veil which hangs over the
-great city. Sherlock Holmes was already at breakfast when I came
-down.
-
-"You will excuse me for not waiting for you," said he; "I have, I
-foresee, a very busy day before me in looking into this case of
-young Openshaw's."
-
-"What steps will you take?" I asked.
-
-"It will very much depend upon the results of my first inquiries.
-I may have to go down to Horsham, after all."
-
-"You will not go there first?"
-
-"No, I shall commence with the City. Just ring the bell and the
-maid will bring up your coffee."
-
-As I waited, I lifted the unopened newspaper from the table and
-glanced my eye over it. It rested upon a heading which sent a
-chill to my heart.
-
-"Holmes," I cried, "you are too late."
-
-"Ah!" said he, laying down his cup, "I feared as much. How was it
-done?" He spoke calmly, but I could see that he was deeply moved.
-
-"My eye caught the name of Openshaw, and the heading 'Tragedy
-Near Waterloo Bridge.' Here is the account:
-
-"Between nine and ten last night Police-Constable Cook, of the H
-Division, on duty near Waterloo Bridge, heard a cry for help and
-a splash in the water. The night, however, was extremely dark and
-stormy, so that, in spite of the help of several passers-by, it
-was quite impossible to effect a rescue. The alarm, however, was
-given, and, by the aid of the water-police, the body was
-eventually recovered. It proved to be that of a young gentleman
-whose name, as it appears from an envelope which was found in his
-pocket, was John Openshaw, and whose residence is near Horsham.
-It is conjectured that he may have been hurrying down to catch
-the last train from Waterloo Station, and that in his haste and
-the extreme darkness he missed his path and walked over the edge
-of one of the small landing-places for river steamboats. The body
-exhibited no traces of violence, and there can be no doubt that
-the deceased had been the victim of an unfortunate accident,
-which should have the effect of calling the attention of the
-authorities to the condition of the riverside landing-stages."
-
-We sat in silence for some minutes, Holmes more depressed and
-shaken than I had ever seen him.
-
-"That hurts my pride, Watson," he said at last. "It is a petty
-feeling, no doubt, but it hurts my pride. It becomes a personal
-matter with me now, and, if God sends me health, I shall set my
-hand upon this gang. That he should come to me for help, and that
-I should send him away to his death--!" He sprang from his chair
-and paced about the room in uncontrollable agitation, with a
-flush upon his sallow cheeks and a nervous clasping and
-unclasping of his long thin hands.
-
-"They must be cunning devils," he exclaimed at last. "How could
-they have decoyed him down there? The Embankment is not on the
-direct line to the station. The bridge, no doubt, was too
-crowded, even on such a night, for their purpose. Well, Watson,
-we shall see who will win in the long run. I am going out now!"
-
-"To the police?"
-
-"No; I shall be my own police. When I have spun the web they may
-take the flies, but not before."
-
-All day I was engaged in my professional work, and it was late in
-the evening before I returned to Baker Street. Sherlock Holmes
-had not come back yet. It was nearly ten o'clock before he
-entered, looking pale and worn. He walked up to the sideboard,
-and tearing a piece from the loaf he devoured it voraciously,
-washing it down with a long draught of water.
-
-"You are hungry," I remarked.
-
-"Starving. It had escaped my memory. I have had nothing since
-breakfast."
-
-"Nothing?"
-
-"Not a bite. I had no time to think of it."
-
-"And how have you succeeded?"
-
-"Well."
-
-"You have a clue?"
-
-"I have them in the hollow of my hand. Young Openshaw shall not
-long remain unavenged. Why, Watson, let us put their own devilish
-trade-mark upon them. It is well thought of!"
-
-"What do you mean?"
-
-He took an orange from the cupboard, and tearing it to pieces he
-squeezed out the pips upon the table. Of these he took five and
-thrust them into an envelope. On the inside of the flap he wrote
-"S. H. for J. O." Then he sealed it and addressed it to "Captain
-James Calhoun, Barque 'Lone Star,' Savannah, Georgia."
-
-"That will await him when he enters port," said he, chuckling.
-"It may give him a sleepless night. He will find it as sure a
-precursor of his fate as Openshaw did before him."
-
-"And who is this Captain Calhoun?"
-
-"The leader of the gang. I shall have the others, but he first."
-
-"How did you trace it, then?"
-
-He took a large sheet of paper from his pocket, all covered with
-dates and names.
-
-"I have spent the whole day," said he, "over Lloyd's registers
-and files of the old papers, following the future career of every
-vessel which touched at Pondicherry in January and February in
-'83. There were thirty-six ships of fair tonnage which were
-reported there during those months. Of these, one, the 'Lone Star,'
-instantly attracted my attention, since, although it was reported
-as having cleared from London, the name is that which is given to
-one of the states of the Union."
-
-"Texas, I think."
-
-"I was not and am not sure which; but I knew that the ship must
-have an American origin."
-
-"What then?"
-
-"I searched the Dundee records, and when I found that the barque
-'Lone Star' was there in January, '85, my suspicion became a
-certainty. I then inquired as to the vessels which lay at present
-in the port of London."
-
-"Yes?"
-
-"The 'Lone Star' had arrived here last week. I went down to the
-Albert Dock and found that she had been taken down the river by
-the early tide this morning, homeward bound to Savannah. I wired
-to Gravesend and learned that she had passed some time ago, and
-as the wind is easterly I have no doubt that she is now past the
-Goodwins and not very far from the Isle of Wight."
-
-"What will you do, then?"
-
-"Oh, I have my hand upon him. He and the two mates, are as I
-learn, the only native-born Americans in the ship. The others are
-Finns and Germans. I know, also, that they were all three away
-from the ship last night. I had it from the stevedore who has
-been loading their cargo. By the time that their sailing-ship
-reaches Savannah the mail-boat will have carried this letter, and
-the cable will have informed the police of Savannah that these
-three gentlemen are badly wanted here upon a charge of murder."
-
-There is ever a flaw, however, in the best laid of human plans,
-and the murderers of John Openshaw were never to receive the
-orange pips which would show them that another, as cunning and as
-resolute as themselves, was upon their track. Very long and very
-severe were the equinoctial gales that year. We waited long for
-news of the "Lone Star" of Savannah, but none ever reached us. We
-did at last hear that somewhere far out in the Atlantic a
-shattered stern-post of a boat was seen swinging in the trough
-of a wave, with the letters "L. S." carved upon it, and that is
-all which we shall ever know of the fate of the "Lone Star."
-
-
-
-ADVENTURE VI. THE MAN WITH THE TWISTED LIP
-
-Isa Whitney, brother of the late Elias Whitney, D.D., Principal
-of the Theological College of St. George's, was much addicted to
-opium. The habit grew upon him, as I understand, from some
-foolish freak when he was at college; for having read De
-Quincey's description of his dreams and sensations, he had
-drenched his tobacco with laudanum in an attempt to produce the
-same effects. He found, as so many more have done, that the
-practice is easier to attain than to get rid of, and for many
-years he continued to be a slave to the drug, an object of
-mingled horror and pity to his friends and relatives. I can see
-him now, with yellow, pasty face, drooping lids, and pin-point
-pupils, all huddled in a chair, the wreck and ruin of a noble
-man.
-
-One night--it was in June, '89--there came a ring to my bell,
-about the hour when a man gives his first yawn and glances at the
-clock. I sat up in my chair, and my wife laid her needle-work
-down in her lap and made a little face of disappointment.
-
-"A patient!" said she. "You'll have to go out."
-
-I groaned, for I was newly come back from a weary day.
-
-We heard the door open, a few hurried words, and then quick steps
-upon the linoleum. Our own door flew open, and a lady, clad in
-some dark-coloured stuff, with a black veil, entered the room.
-
-"You will excuse my calling so late," she began, and then,
-suddenly losing her self-control, she ran forward, threw her arms
-about my wife's neck, and sobbed upon her shoulder. "Oh, I'm in
-such trouble!" she cried; "I do so want a little help."
-
-"Why," said my wife, pulling up her veil, "it is Kate Whitney.
-How you startled me, Kate! I had not an idea who you were when
-you came in."
-
-"I didn't know what to do, so I came straight to you." That was
-always the way. Folk who were in grief came to my wife like birds
-to a light-house.
-
-"It was very sweet of you to come. Now, you must have some wine
-and water, and sit here comfortably and tell us all about it. Or
-should you rather that I sent James off to bed?"
-
-"Oh, no, no! I want the doctor's advice and help, too. It's about
-Isa. He has not been home for two days. I am so frightened about
-him!"
-
-It was not the first time that she had spoken to us of her
-husband's trouble, to me as a doctor, to my wife as an old friend
-and school companion. We soothed and comforted her by such words
-as we could find. Did she know where her husband was? Was it
-possible that we could bring him back to her?
-
-It seems that it was. She had the surest information that of late
-he had, when the fit was on him, made use of an opium den in the
-farthest east of the City. Hitherto his orgies had always been
-confined to one day, and he had come back, twitching and
-shattered, in the evening. But now the spell had been upon him
-eight-and-forty hours, and he lay there, doubtless among the
-dregs of the docks, breathing in the poison or sleeping off the
-effects. There he was to be found, she was sure of it, at the Bar
-of Gold, in Upper Swandam Lane. But what was she to do? How could
-she, a young and timid woman, make her way into such a place and
-pluck her husband out from among the ruffians who surrounded him?
-
-There was the case, and of course there was but one way out of
-it. Might I not escort her to this place? And then, as a second
-thought, why should she come at all? I was Isa Whitney's medical
-adviser, and as such I had influence over him. I could manage it
-better if I were alone. I promised her on my word that I would
-send him home in a cab within two hours if he were indeed at the
-address which she had given me. And so in ten minutes I had left
-my armchair and cheery sitting-room behind me, and was speeding
-eastward in a hansom on a strange errand, as it seemed to me at
-the time, though the future only could show how strange it was to
-be.
-
-But there was no great difficulty in the first stage of my
-adventure. Upper Swandam Lane is a vile alley lurking behind the
-high wharves which line the north side of the river to the east
-of London Bridge. Between a slop-shop and a gin-shop, approached
-by a steep flight of steps leading down to a black gap like the
-mouth of a cave, I found the den of which I was in search.
-Ordering my cab to wait, I passed down the steps, worn hollow in
-the centre by the ceaseless tread of drunken feet; and by the
-light of a flickering oil-lamp above the door I found the latch
-and made my way into a long, low room, thick and heavy with the
-brown opium smoke, and terraced with wooden berths, like the
-forecastle of an emigrant ship.
-
-Through the gloom one could dimly catch a glimpse of bodies lying
-in strange fantastic poses, bowed shoulders, bent knees, heads
-thrown back, and chins pointing upward, with here and there a
-dark, lack-lustre eye turned upon the newcomer. Out of the black
-shadows there glimmered little red circles of light, now bright,
-now faint, as the burning poison waxed or waned in the bowls of
-the metal pipes. The most lay silent, but some muttered to
-themselves, and others talked together in a strange, low,
-monotonous voice, their conversation coming in gushes, and then
-suddenly tailing off into silence, each mumbling out his own
-thoughts and paying little heed to the words of his neighbour. At
-the farther end was a small brazier of burning charcoal, beside
-which on a three-legged wooden stool there sat a tall, thin old
-man, with his jaw resting upon his two fists, and his elbows upon
-his knees, staring into the fire.
-
-As I entered, a sallow Malay attendant had hurried up with a pipe
-for me and a supply of the drug, beckoning me to an empty berth.
-
-"Thank you. I have not come to stay," said I. "There is a friend
-of mine here, Mr. Isa Whitney, and I wish to speak with him."
-
-There was a movement and an exclamation from my right, and
-peering through the gloom, I saw Whitney, pale, haggard, and
-unkempt, staring out at me.
-
-"My God! It's Watson," said he. He was in a pitiable state of
-reaction, with every nerve in a twitter. "I say, Watson, what
-o'clock is it?"
-
-"Nearly eleven."
-
-"Of what day?"
-
-"Of Friday, June 19th."
-
-"Good heavens! I thought it was Wednesday. It is Wednesday. What
-d'you want to frighten a chap for?" He sank his face onto his
-arms and began to sob in a high treble key.
-
-"I tell you that it is Friday, man. Your wife has been waiting
-this two days for you. You should be ashamed of yourself!"
-
-"So I am. But you've got mixed, Watson, for I have only been here
-a few hours, three pipes, four pipes--I forget how many. But I'll
-go home with you. I wouldn't frighten Kate--poor little Kate.
-Give me your hand! Have you a cab?"
-
-"Yes, I have one waiting."
-
-"Then I shall go in it. But I must owe something. Find what I
-owe, Watson. I am all off colour. I can do nothing for myself."
-
-I walked down the narrow passage between the double row of
-sleepers, holding my breath to keep out the vile, stupefying
-fumes of the drug, and looking about for the manager. As I passed
-the tall man who sat by the brazier I felt a sudden pluck at my
-skirt, and a low voice whispered, "Walk past me, and then look
-back at me." The words fell quite distinctly upon my ear. I
-glanced down. They could only have come from the old man at my
-side, and yet he sat now as absorbed as ever, very thin, very
-wrinkled, bent with age, an opium pipe dangling down from between
-his knees, as though it had dropped in sheer lassitude from his
-fingers. I took two steps forward and looked back. It took all my
-self-control to prevent me from breaking out into a cry of
-astonishment. He had turned his back so that none could see him
-but I. His form had filled out, his wrinkles were gone, the dull
-eyes had regained their fire, and there, sitting by the fire and
-grinning at my surprise, was none other than Sherlock Holmes. He
-made a slight motion to me to approach him, and instantly, as he
-turned his face half round to the company once more, subsided
-into a doddering, loose-lipped senility.
-
-"Holmes!" I whispered, "what on earth are you doing in this den?"
-
-"As low as you can," he answered; "I have excellent ears. If you
-would have the great kindness to get rid of that sottish friend
-of yours I should be exceedingly glad to have a little talk with
-you."
-
-"I have a cab outside."
-
-"Then pray send him home in it. You may safely trust him, for he
-appears to be too limp to get into any mischief. I should
-recommend you also to send a note by the cabman to your wife to
-say that you have thrown in your lot with me. If you will wait
-outside, I shall be with you in five minutes."
-
-It was difficult to refuse any of Sherlock Holmes' requests, for
-they were always so exceedingly definite, and put forward with
-such a quiet air of mastery. I felt, however, that when Whitney
-was once confined in the cab my mission was practically
-accomplished; and for the rest, I could not wish anything better
-than to be associated with my friend in one of those singular
-adventures which were the normal condition of his existence. In a
-few minutes I had written my note, paid Whitney's bill, led him
-out to the cab, and seen him driven through the darkness. In a
-very short time a decrepit figure had emerged from the opium den,
-and I was walking down the street with Sherlock Holmes. For two
-streets he shuffled along with a bent back and an uncertain foot.
-Then, glancing quickly round, he straightened himself out and
-burst into a hearty fit of laughter.
-
-"I suppose, Watson," said he, "that you imagine that I have added
-opium-smoking to cocaine injections, and all the other little
-weaknesses on which you have favoured me with your medical
-views."
-
-"I was certainly surprised to find you there."
-
-"But not more so than I to find you."
-
-"I came to find a friend."
-
-"And I to find an enemy."
-
-"An enemy?"
-
-"Yes; one of my natural enemies, or, shall I say, my natural
-prey. Briefly, Watson, I am in the midst of a very remarkable
-inquiry, and I have hoped to find a clue in the incoherent
-ramblings of these sots, as I have done before now. Had I been
-recognised in that den my life would not have been worth an
-hour's purchase; for I have used it before now for my own
-purposes, and the rascally Lascar who runs it has sworn to have
-vengeance upon me. There is a trap-door at the back of that
-building, near the corner of Paul's Wharf, which could tell some
-strange tales of what has passed through it upon the moonless
-nights."
-
-"What! You do not mean bodies?"
-
-"Ay, bodies, Watson. We should be rich men if we had 1000 pounds
-for every poor devil who has been done to death in that den. It
-is the vilest murder-trap on the whole riverside, and I fear that
-Neville St. Clair has entered it never to leave it more. But our
-trap should be here." He put his two forefingers between his
-teeth and whistled shrilly--a signal which was answered by a
-similar whistle from the distance, followed shortly by the rattle
-of wheels and the clink of horses' hoofs.
-
-"Now, Watson," said Holmes, as a tall dog-cart dashed up through
-the gloom, throwing out two golden tunnels of yellow light from
-its side lanterns. "You'll come with me, won't you?"
-
-"If I can be of use."
-
-"Oh, a trusty comrade is always of use; and a chronicler still
-more so. My room at The Cedars is a double-bedded one."
-
-"The Cedars?"
-
-"Yes; that is Mr. St. Clair's house. I am staying there while I
-conduct the inquiry."
-
-"Where is it, then?"
-
-"Near Lee, in Kent. We have a seven-mile drive before us."
-
-"But I am all in the dark."
-
-"Of course you are. You'll know all about it presently. Jump up
-here. All right, John; we shall not need you. Here's half a
-crown. Look out for me to-morrow, about eleven. Give her her
-head. So long, then!"
-
-He flicked the horse with his whip, and we dashed away through
-the endless succession of sombre and deserted streets, which
-widened gradually, until we were flying across a broad
-balustraded bridge, with the murky river flowing sluggishly
-beneath us. Beyond lay another dull wilderness of bricks and
-mortar, its silence broken only by the heavy, regular footfall of
-the policeman, or the songs and shouts of some belated party of
-revellers. A dull wrack was drifting slowly across the sky, and a
-star or two twinkled dimly here and there through the rifts of
-the clouds. Holmes drove in silence, with his head sunk upon his
-breast, and the air of a man who is lost in thought, while I sat
-beside him, curious to learn what this new quest might be which
-seemed to tax his powers so sorely, and yet afraid to break in
-upon the current of his thoughts. We had driven several miles,
-and were beginning to get to the fringe of the belt of suburban
-villas, when he shook himself, shrugged his shoulders, and lit up
-his pipe with the air of a man who has satisfied himself that he
-is acting for the best.
-
-"You have a grand gift of silence, Watson," said he. "It makes
-you quite invaluable as a companion. 'Pon my word, it is a great
-thing for me to have someone to talk to, for my own thoughts are
-not over-pleasant. I was wondering what I should say to this dear
-little woman to-night when she meets me at the door."
-
-"You forget that I know nothing about it."
-
-"I shall just have time to tell you the facts of the case before
-we get to Lee. It seems absurdly simple, and yet, somehow I can
-get nothing to go upon. There's plenty of thread, no doubt, but I
-can't get the end of it into my hand. Now, I'll state the case
-clearly and concisely to you, Watson, and maybe you can see a
-spark where all is dark to me."
-
-"Proceed, then."
-
-"Some years ago--to be definite, in May, 1884--there came to Lee
-a gentleman, Neville St. Clair by name, who appeared to have
-plenty of money. He took a large villa, laid out the grounds very
-nicely, and lived generally in good style. By degrees he made
-friends in the neighbourhood, and in 1887 he married the daughter
-of a local brewer, by whom he now has two children. He had no
-occupation, but was interested in several companies and went into
-town as a rule in the morning, returning by the 5:14 from Cannon
-Street every night. Mr. St. Clair is now thirty-seven years of
-age, is a man of temperate habits, a good husband, a very
-affectionate father, and a man who is popular with all who know
-him. I may add that his whole debts at the present moment, as far
-as we have been able to ascertain, amount to 88 pounds 10s., while
-he has 220 pounds standing to his credit in the Capital and
-Counties Bank. There is no reason, therefore, to think that money
-troubles have been weighing upon his mind.
-
-"Last Monday Mr. Neville St. Clair went into town rather earlier
-than usual, remarking before he started that he had two important
-commissions to perform, and that he would bring his little boy
-home a box of bricks. Now, by the merest chance, his wife
-received a telegram upon this same Monday, very shortly after his
-departure, to the effect that a small parcel of considerable
-value which she had been expecting was waiting for her at the
-offices of the Aberdeen Shipping Company. Now, if you are well up
-in your London, you will know that the office of the company is
-in Fresno Street, which branches out of Upper Swandam Lane, where
-you found me to-night. Mrs. St. Clair had her lunch, started for
-the City, did some shopping, proceeded to the company's office,
-got her packet, and found herself at exactly 4:35 walking through
-Swandam Lane on her way back to the station. Have you followed me
-so far?"
-
-"It is very clear."
-
-"If you remember, Monday was an exceedingly hot day, and Mrs. St.
-Clair walked slowly, glancing about in the hope of seeing a cab,
-as she did not like the neighbourhood in which she found herself.
-While she was walking in this way down Swandam Lane, she suddenly
-heard an ejaculation or cry, and was struck cold to see her
-husband looking down at her and, as it seemed to her, beckoning
-to her from a second-floor window. The window was open, and she
-distinctly saw his face, which she describes as being terribly
-agitated. He waved his hands frantically to her, and then
-vanished from the window so suddenly that it seemed to her that
-he had been plucked back by some irresistible force from behind.
-One singular point which struck her quick feminine eye was that
-although he wore some dark coat, such as he had started to town
-in, he had on neither collar nor necktie.
-
-"Convinced that something was amiss with him, she rushed down the
-steps--for the house was none other than the opium den in which
-you found me to-night--and running through the front room she
-attempted to ascend the stairs which led to the first floor. At
-the foot of the stairs, however, she met this Lascar scoundrel of
-whom I have spoken, who thrust her back and, aided by a Dane, who
-acts as assistant there, pushed her out into the street. Filled
-with the most maddening doubts and fears, she rushed down the
-lane and, by rare good-fortune, met in Fresno Street a number of
-constables with an inspector, all on their way to their beat. The
-inspector and two men accompanied her back, and in spite of the
-continued resistance of the proprietor, they made their way to
-the room in which Mr. St. Clair had last been seen. There was no
-sign of him there. In fact, in the whole of that floor there was
-no one to be found save a crippled wretch of hideous aspect, who,
-it seems, made his home there. Both he and the Lascar stoutly
-swore that no one else had been in the front room during the
-afternoon. So determined was their denial that the inspector was
-staggered, and had almost come to believe that Mrs. St. Clair had
-been deluded when, with a cry, she sprang at a small deal box
-which lay upon the table and tore the lid from it. Out there fell
-a cascade of children's bricks. It was the toy which he had
-promised to bring home.
-
-"This discovery, and the evident confusion which the cripple
-showed, made the inspector realise that the matter was serious.
-The rooms were carefully examined, and results all pointed to an
-abominable crime. The front room was plainly furnished as a
-sitting-room and led into a small bedroom, which looked out upon
-the back of one of the wharves. Between the wharf and the bedroom
-window is a narrow strip, which is dry at low tide but is covered
-at high tide with at least four and a half feet of water. The
-bedroom window was a broad one and opened from below. On
-examination traces of blood were to be seen upon the windowsill,
-and several scattered drops were visible upon the wooden floor of
-the bedroom. Thrust away behind a curtain in the front room were
-all the clothes of Mr. Neville St. Clair, with the exception of
-his coat. His boots, his socks, his hat, and his watch--all were
-there. There were no signs of violence upon any of these
-garments, and there were no other traces of Mr. Neville St.
-Clair. Out of the window he must apparently have gone for no
-other exit could be discovered, and the ominous bloodstains upon
-the sill gave little promise that he could save himself by
-swimming, for the tide was at its very highest at the moment of
-the tragedy.
-
-"And now as to the villains who seemed to be immediately
-implicated in the matter. The Lascar was known to be a man of the
-vilest antecedents, but as, by Mrs. St. Clair's story, he was
-known to have been at the foot of the stair within a very few
-seconds of her husband's appearance at the window, he could
-hardly have been more than an accessory to the crime. His defence
-was one of absolute ignorance, and he protested that he had no
-knowledge as to the doings of Hugh Boone, his lodger, and that he
-could not account in any way for the presence of the missing
-gentleman's clothes.
-
-"So much for the Lascar manager. Now for the sinister cripple who
-lives upon the second floor of the opium den, and who was
-certainly the last human being whose eyes rested upon Neville St.
-Clair. His name is Hugh Boone, and his hideous face is one which
-is familiar to every man who goes much to the City. He is a
-professional beggar, though in order to avoid the police
-regulations he pretends to a small trade in wax vestas. Some
-little distance down Threadneedle Street, upon the left-hand
-side, there is, as you may have remarked, a small angle in the
-wall. Here it is that this creature takes his daily seat,
-cross-legged with his tiny stock of matches on his lap, and as he
-is a piteous spectacle a small rain of charity descends into the
-greasy leather cap which lies upon the pavement beside him. I
-have watched the fellow more than once before ever I thought of
-making his professional acquaintance, and I have been surprised
-at the harvest which he has reaped in a short time. His
-appearance, you see, is so remarkable that no one can pass him
-without observing him. A shock of orange hair, a pale face
-disfigured by a horrible scar, which, by its contraction, has
-turned up the outer edge of his upper lip, a bulldog chin, and a
-pair of very penetrating dark eyes, which present a singular
-contrast to the colour of his hair, all mark him out from amid
-the common crowd of mendicants and so, too, does his wit, for he
-is ever ready with a reply to any piece of chaff which may be
-thrown at him by the passers-by. This is the man whom we now
-learn to have been the lodger at the opium den, and to have been
-the last man to see the gentleman of whom we are in quest."
-
-"But a cripple!" said I. "What could he have done single-handed
-against a man in the prime of life?"
-
-"He is a cripple in the sense that he walks with a limp; but in
-other respects he appears to be a powerful and well-nurtured man.
-Surely your medical experience would tell you, Watson, that
-weakness in one limb is often compensated for by exceptional
-strength in the others."
-
-"Pray continue your narrative."
-
-"Mrs. St. Clair had fainted at the sight of the blood upon the
-window, and she was escorted home in a cab by the police, as her
-presence could be of no help to them in their investigations.
-Inspector Barton, who had charge of the case, made a very careful
-examination of the premises, but without finding anything which
-threw any light upon the matter. One mistake had been made in not
-arresting Boone instantly, as he was allowed some few minutes
-during which he might have communicated with his friend the
-Lascar, but this fault was soon remedied, and he was seized and
-searched, without anything being found which could incriminate
-him. There were, it is true, some blood-stains upon his right
-shirt-sleeve, but he pointed to his ring-finger, which had been
-cut near the nail, and explained that the bleeding came from
-there, adding that he had been to the window not long before, and
-that the stains which had been observed there came doubtless from
-the same source. He denied strenuously having ever seen Mr.
-Neville St. Clair and swore that the presence of the clothes in
-his room was as much a mystery to him as to the police. As to
-Mrs. St. Clair's assertion that she had actually seen her husband
-at the window, he declared that she must have been either mad or
-dreaming. He was removed, loudly protesting, to the
-police-station, while the inspector remained upon the premises in
-the hope that the ebbing tide might afford some fresh clue.
-
-"And it did, though they hardly found upon the mud-bank what they
-had feared to find. It was Neville St. Clair's coat, and not
-Neville St. Clair, which lay uncovered as the tide receded. And
-what do you think they found in the pockets?"
-
-"I cannot imagine."
-
-"No, I don't think you would guess. Every pocket stuffed with
-pennies and half-pennies--421 pennies and 270 half-pennies. It
-was no wonder that it had not been swept away by the tide. But a
-human body is a different matter. There is a fierce eddy between
-the wharf and the house. It seemed likely enough that the
-weighted coat had remained when the stripped body had been sucked
-away into the river."
-
-"But I understand that all the other clothes were found in the
-room. Would the body be dressed in a coat alone?"
-
-"No, sir, but the facts might be met speciously enough. Suppose
-that this man Boone had thrust Neville St. Clair through the
-window, there is no human eye which could have seen the deed.
-What would he do then? It would of course instantly strike him
-that he must get rid of the tell-tale garments. He would seize
-the coat, then, and be in the act of throwing it out, when it
-would occur to him that it would swim and not sink. He has little
-time, for he has heard the scuffle downstairs when the wife tried
-to force her way up, and perhaps he has already heard from his
-Lascar confederate that the police are hurrying up the street.
-There is not an instant to be lost. He rushes to some secret
-hoard, where he has accumulated the fruits of his beggary, and he
-stuffs all the coins upon which he can lay his hands into the
-pockets to make sure of the coat's sinking. He throws it out, and
-would have done the same with the other garments had not he heard
-the rush of steps below, and only just had time to close the
-window when the police appeared."
-
-"It certainly sounds feasible."
-
-"Well, we will take it as a working hypothesis for want of a
-better. Boone, as I have told you, was arrested and taken to the
-station, but it could not be shown that there had ever before
-been anything against him. He had for years been known as a
-professional beggar, but his life appeared to have been a very
-quiet and innocent one. There the matter stands at present, and
-the questions which have to be solved--what Neville St. Clair was
-doing in the opium den, what happened to him when there, where is
-he now, and what Hugh Boone had to do with his disappearance--are
-all as far from a solution as ever. I confess that I cannot
-recall any case within my experience which looked at the first
-glance so simple and yet which presented such difficulties."
-
-While Sherlock Holmes had been detailing this singular series of
-events, we had been whirling through the outskirts of the great
-town until the last straggling houses had been left behind, and
-we rattled along with a country hedge upon either side of us.
-Just as he finished, however, we drove through two scattered
-villages, where a few lights still glimmered in the windows.
-
-"We are on the outskirts of Lee," said my companion. "We have
-touched on three English counties in our short drive, starting in
-Middlesex, passing over an angle of Surrey, and ending in Kent.
-See that light among the trees? That is The Cedars, and beside
-that lamp sits a woman whose anxious ears have already, I have
-little doubt, caught the clink of our horse's feet."
-
-"But why are you not conducting the case from Baker Street?" I
-asked.
-
-"Because there are many inquiries which must be made out here.
-Mrs. St. Clair has most kindly put two rooms at my disposal, and
-you may rest assured that she will have nothing but a welcome for
-my friend and colleague. I hate to meet her, Watson, when I have
-no news of her husband. Here we are. Whoa, there, whoa!"
-
-We had pulled up in front of a large villa which stood within its
-own grounds. A stable-boy had run out to the horse's head, and
-springing down, I followed Holmes up the small, winding
-gravel-drive which led to the house. As we approached, the door
-flew open, and a little blonde woman stood in the opening, clad
-in some sort of light mousseline de soie, with a touch of fluffy
-pink chiffon at her neck and wrists. She stood with her figure
-outlined against the flood of light, one hand upon the door, one
-half-raised in her eagerness, her body slightly bent, her head
-and face protruded, with eager eyes and parted lips, a standing
-question.
-
-"Well?" she cried, "well?" And then, seeing that there were two
-of us, she gave a cry of hope which sank into a groan as she saw
-that my companion shook his head and shrugged his shoulders.
-
-"No good news?"
-
-"None."
-
-"No bad?"
-
-"No."
-
-"Thank God for that. But come in. You must be weary, for you have
-had a long day."
-
-"This is my friend, Dr. Watson. He has been of most vital use to
-me in several of my cases, and a lucky chance has made it
-possible for me to bring him out and associate him with this
-investigation."
-
-"I am delighted to see you," said she, pressing my hand warmly.
-"You will, I am sure, forgive anything that may be wanting in our
-arrangements, when you consider the blow which has come so
-suddenly upon us."
-
-"My dear madam," said I, "I am an old campaigner, and if I were
-not I can very well see that no apology is needed. If I can be of
-any assistance, either to you or to my friend here, I shall be
-indeed happy."
-
-"Now, Mr. Sherlock Holmes," said the lady as we entered a
-well-lit dining-room, upon the table of which a cold supper had
-been laid out, "I should very much like to ask you one or two
-plain questions, to which I beg that you will give a plain
-answer."
-
-"Certainly, madam."
-
-"Do not trouble about my feelings. I am not hysterical, nor given
-to fainting. I simply wish to hear your real, real opinion."
-
-"Upon what point?"
-
-"In your heart of hearts, do you think that Neville is alive?"
-
-Sherlock Holmes seemed to be embarrassed by the question.
-"Frankly, now!" she repeated, standing upon the rug and looking
-keenly down at him as he leaned back in a basket-chair.
-
-"Frankly, then, madam, I do not."
-
-"You think that he is dead?"
-
-"I do."
-
-"Murdered?"
-
-"I don't say that. Perhaps."
-
-"And on what day did he meet his death?"
-
-"On Monday."
-
-"Then perhaps, Mr. Holmes, you will be good enough to explain how
-it is that I have received a letter from him to-day."
-
-Sherlock Holmes sprang out of his chair as if he had been
-galvanised.
-
-"What!" he roared.
-
-"Yes, to-day." She stood smiling, holding up a little slip of
-paper in the air.
-
-"May I see it?"
-
-"Certainly."
-
-He snatched it from her in his eagerness, and smoothing it out
-upon the table he drew over the lamp and examined it intently. I
-had left my chair and was gazing at it over his shoulder. The
-envelope was a very coarse one and was stamped with the Gravesend
-postmark and with the date of that very day, or rather of the day
-before, for it was considerably after midnight.
-
-"Coarse writing," murmured Holmes. "Surely this is not your
-husband's writing, madam."
-
-"No, but the enclosure is."
-
-"I perceive also that whoever addressed the envelope had to go
-and inquire as to the address."
-
-"How can you tell that?"
-
-"The name, you see, is in perfectly black ink, which has dried
-itself. The rest is of the greyish colour, which shows that
-blotting-paper has been used. If it had been written straight
-off, and then blotted, none would be of a deep black shade. This
-man has written the name, and there has then been a pause before
-he wrote the address, which can only mean that he was not
-familiar with it. It is, of course, a trifle, but there is
-nothing so important as trifles. Let us now see the letter. Ha!
-there has been an enclosure here!"
-
-"Yes, there was a ring. His signet-ring."
-
-"And you are sure that this is your husband's hand?"
-
-"One of his hands."
-
-"One?"
-
-"His hand when he wrote hurriedly. It is very unlike his usual
-writing, and yet I know it well."
-
-"'Dearest do not be frightened. All will come well. There is a
-huge error which it may take some little time to rectify.
-Wait in patience.--NEVILLE.' Written in pencil upon the fly-leaf
-of a book, octavo size, no water-mark. Hum! Posted to-day in
-Gravesend by a man with a dirty thumb. Ha! And the flap has been
-gummed, if I am not very much in error, by a person who had been
-chewing tobacco. And you have no doubt that it is your husband's
-hand, madam?"
-
-"None. Neville wrote those words."
-
-"And they were posted to-day at Gravesend. Well, Mrs. St. Clair,
-the clouds lighten, though I should not venture to say that the
-danger is over."
-
-"But he must be alive, Mr. Holmes."
-
-"Unless this is a clever forgery to put us on the wrong scent.
-The ring, after all, proves nothing. It may have been taken from
-him."
-
-"No, no; it is, it is his very own writing!"
-
-"Very well. It may, however, have been written on Monday and only
-posted to-day."
-
-"That is possible."
-
-"If so, much may have happened between."
-
-"Oh, you must not discourage me, Mr. Holmes. I know that all is
-well with him. There is so keen a sympathy between us that I
-should know if evil came upon him. On the very day that I saw him
-last he cut himself in the bedroom, and yet I in the dining-room
-rushed upstairs instantly with the utmost certainty that
-something had happened. Do you think that I would respond to such
-a trifle and yet be ignorant of his death?"
-
-"I have seen too much not to know that the impression of a woman
-may be more valuable than the conclusion of an analytical
-reasoner. And in this letter you certainly have a very strong
-piece of evidence to corroborate your view. But if your husband
-is alive and able to write letters, why should he remain away
-from you?"
-
-"I cannot imagine. It is unthinkable."
-
-"And on Monday he made no remarks before leaving you?"
-
-"No."
-
-"And you were surprised to see him in Swandam Lane?"
-
-"Very much so."
-
-"Was the window open?"
-
-"Yes."
-
-"Then he might have called to you?"
-
-"He might."
-
-"He only, as I understand, gave an inarticulate cry?"
-
-"Yes."
-
-"A call for help, you thought?"
-
-"Yes. He waved his hands."
-
-"But it might have been a cry of surprise. Astonishment at the
-unexpected sight of you might cause him to throw up his hands?"
-
-"It is possible."
-
-"And you thought he was pulled back?"
-
-"He disappeared so suddenly."
-
-"He might have leaped back. You did not see anyone else in the
-room?"
-
-"No, but this horrible man confessed to having been there, and
-the Lascar was at the foot of the stairs."
-
-"Quite so. Your husband, as far as you could see, had his
-ordinary clothes on?"
-
-"But without his collar or tie. I distinctly saw his bare
-throat."
-
-"Had he ever spoken of Swandam Lane?"
-
-"Never."
-
-"Had he ever showed any signs of having taken opium?"
-
-"Never."
-
-"Thank you, Mrs. St. Clair. Those are the principal points about
-which I wished to be absolutely clear. We shall now have a little
-supper and then retire, for we may have a very busy day
-to-morrow."
-
-A large and comfortable double-bedded room had been placed at our
-disposal, and I was quickly between the sheets, for I was weary
-after my night of adventure. Sherlock Holmes was a man, however,
-who, when he had an unsolved problem upon his mind, would go for
-days, and even for a week, without rest, turning it over,
-rearranging his facts, looking at it from every point of view
-until he had either fathomed it or convinced himself that his
-data were insufficient. It was soon evident to me that he was now
-preparing for an all-night sitting. He took off his coat and
-waistcoat, put on a large blue dressing-gown, and then wandered
-about the room collecting pillows from his bed and cushions from
-the sofa and armchairs. With these he constructed a sort of
-Eastern divan, upon which he perched himself cross-legged, with
-an ounce of shag tobacco and a box of matches laid out in front
-of him. In the dim light of the lamp I saw him sitting there, an
-old briar pipe between his lips, his eyes fixed vacantly upon the
-corner of the ceiling, the blue smoke curling up from him,
-silent, motionless, with the light shining upon his strong-set
-aquiline features. So he sat as I dropped off to sleep, and so he
-sat when a sudden ejaculation caused me to wake up, and I found
-the summer sun shining into the apartment. The pipe was still
-between his lips, the smoke still curled upward, and the room was
-full of a dense tobacco haze, but nothing remained of the heap of
-shag which I had seen upon the previous night.
-
-"Awake, Watson?" he asked.
-
-"Yes."
-
-"Game for a morning drive?"
-
-"Certainly."
-
-"Then dress. No one is stirring yet, but I know where the
-stable-boy sleeps, and we shall soon have the trap out." He
-chuckled to himself as he spoke, his eyes twinkled, and he seemed
-a different man to the sombre thinker of the previous night.
-
-As I dressed I glanced at my watch. It was no wonder that no one
-was stirring. It was twenty-five minutes past four. I had hardly
-finished when Holmes returned with the news that the boy was
-putting in the horse.
-
-"I want to test a little theory of mine," said he, pulling on his
-boots. "I think, Watson, that you are now standing in the
-presence of one of the most absolute fools in Europe. I deserve
-to be kicked from here to Charing Cross. But I think I have the
-key of the affair now."
-
-"And where is it?" I asked, smiling.
-
-"In the bathroom," he answered. "Oh, yes, I am not joking," he
-continued, seeing my look of incredulity. "I have just been
-there, and I have taken it out, and I have got it in this
-Gladstone bag. Come on, my boy, and we shall see whether it will
-not fit the lock."
-
-We made our way downstairs as quietly as possible, and out into
-the bright morning sunshine. In the road stood our horse and
-trap, with the half-clad stable-boy waiting at the head. We both
-sprang in, and away we dashed down the London Road. A few country
-carts were stirring, bearing in vegetables to the metropolis, but
-the lines of villas on either side were as silent and lifeless as
-some city in a dream.
-
-"It has been in some points a singular case," said Holmes,
-flicking the horse on into a gallop. "I confess that I have been
-as blind as a mole, but it is better to learn wisdom late than
-never to learn it at all."
-
-In town the earliest risers were just beginning to look sleepily
-from their windows as we drove through the streets of the Surrey
-side. Passing down the Waterloo Bridge Road we crossed over the
-river, and dashing up Wellington Street wheeled sharply to the
-right and found ourselves in Bow Street. Sherlock Holmes was well
-known to the force, and the two constables at the door saluted
-him. One of them held the horse's head while the other led us in.
-
-"Who is on duty?" asked Holmes.
-
-"Inspector Bradstreet, sir."
-
-"Ah, Bradstreet, how are you?" A tall, stout official had come
-down the stone-flagged passage, in a peaked cap and frogged
-jacket. "I wish to have a quiet word with you, Bradstreet."
-"Certainly, Mr. Holmes. Step into my room here." It was a small,
-office-like room, with a huge ledger upon the table, and a
-telephone projecting from the wall. The inspector sat down at his
-desk.
-
-"What can I do for you, Mr. Holmes?"
-
-"I called about that beggarman, Boone--the one who was charged
-with being concerned in the disappearance of Mr. Neville St.
-Clair, of Lee."
-
-"Yes. He was brought up and remanded for further inquiries."
-
-"So I heard. You have him here?"
-
-"In the cells."
-
-"Is he quiet?"
-
-"Oh, he gives no trouble. But he is a dirty scoundrel."
-
-"Dirty?"
-
-"Yes, it is all we can do to make him wash his hands, and his
-face is as black as a tinker's. Well, when once his case has been
-settled, he will have a regular prison bath; and I think, if you
-saw him, you would agree with me that he needed it."
-
-"I should like to see him very much."
-
-"Would you? That is easily done. Come this way. You can leave
-your bag."
-
-"No, I think that I'll take it."
-
-"Very good. Come this way, if you please." He led us down a
-passage, opened a barred door, passed down a winding stair, and
-brought us to a whitewashed corridor with a line of doors on each
-side.
-
-"The third on the right is his," said the inspector. "Here it
-is!" He quietly shot back a panel in the upper part of the door
-and glanced through.
-
-"He is asleep," said he. "You can see him very well."
-
-We both put our eyes to the grating. The prisoner lay with his
-face towards us, in a very deep sleep, breathing slowly and
-heavily. He was a middle-sized man, coarsely clad as became his
-calling, with a coloured shirt protruding through the rent in his
-tattered coat. He was, as the inspector had said, extremely
-dirty, but the grime which covered his face could not conceal its
-repulsive ugliness. A broad wheal from an old scar ran right
-across it from eye to chin, and by its contraction had turned up
-one side of the upper lip, so that three teeth were exposed in a
-perpetual snarl. A shock of very bright red hair grew low over
-his eyes and forehead.
-
-"He's a beauty, isn't he?" said the inspector.
-
-"He certainly needs a wash," remarked Holmes. "I had an idea that
-he might, and I took the liberty of bringing the tools with me."
-He opened the Gladstone bag as he spoke, and took out, to my
-astonishment, a very large bath-sponge.
-
-"He! he! You are a funny one," chuckled the inspector.
-
-"Now, if you will have the great goodness to open that door very
-quietly, we will soon make him cut a much more respectable
-figure."
-
-"Well, I don't know why not," said the inspector. "He doesn't
-look a credit to the Bow Street cells, does he?" He slipped his
-key into the lock, and we all very quietly entered the cell. The
-sleeper half turned, and then settled down once more into a deep
-slumber. Holmes stooped to the water-jug, moistened his sponge,
-and then rubbed it twice vigorously across and down the
-prisoner's face.
-
-"Let me introduce you," he shouted, "to Mr. Neville St. Clair, of
-Lee, in the county of Kent."
-
-Never in my life have I seen such a sight. The man's face peeled
-off under the sponge like the bark from a tree. Gone was the
-coarse brown tint! Gone, too, was the horrid scar which had
-seamed it across, and the twisted lip which had given the
-repulsive sneer to the face! A twitch brought away the tangled
-red hair, and there, sitting up in his bed, was a pale,
-sad-faced, refined-looking man, black-haired and smooth-skinned,
-rubbing his eyes and staring about him with sleepy bewilderment.
-Then suddenly realising the exposure, he broke into a scream and
-threw himself down with his face to the pillow.
-
-"Great heavens!" cried the inspector, "it is, indeed, the missing
-man. I know him from the photograph."
-
-The prisoner turned with the reckless air of a man who abandons
-himself to his destiny. "Be it so," said he. "And pray what am I
-charged with?"
-
-"With making away with Mr. Neville St.-- Oh, come, you can't be
-charged with that unless they make a case of attempted suicide of
-it," said the inspector with a grin. "Well, I have been
-twenty-seven years in the force, but this really takes the cake."
-
-"If I am Mr. Neville St. Clair, then it is obvious that no crime
-has been committed, and that, therefore, I am illegally
-detained."
-
-"No crime, but a very great error has been committed," said
-Holmes. "You would have done better to have trusted your wife."
-
-"It was not the wife; it was the children," groaned the prisoner.
-"God help me, I would not have them ashamed of their father. My
-God! What an exposure! What can I do?"
-
-Sherlock Holmes sat down beside him on the couch and patted him
-kindly on the shoulder.
-
-"If you leave it to a court of law to clear the matter up," said
-he, "of course you can hardly avoid publicity. On the other hand,
-if you convince the police authorities that there is no possible
-case against you, I do not know that there is any reason that the
-details should find their way into the papers. Inspector
-Bradstreet would, I am sure, make notes upon anything which you
-might tell us and submit it to the proper authorities. The case
-would then never go into court at all."
-
-"God bless you!" cried the prisoner passionately. "I would have
-endured imprisonment, ay, even execution, rather than have left
-my miserable secret as a family blot to my children.
-
-"You are the first who have ever heard my story. My father was a
-schoolmaster in Chesterfield, where I received an excellent
-education. I travelled in my youth, took to the stage, and
-finally became a reporter on an evening paper in London. One day
-my editor wished to have a series of articles upon begging in the
-metropolis, and I volunteered to supply them. There was the point
-from which all my adventures started. It was only by trying
-begging as an amateur that I could get the facts upon which to
-base my articles. When an actor I had, of course, learned all the
-secrets of making up, and had been famous in the green-room for
-my skill. I took advantage now of my attainments. I painted my
-face, and to make myself as pitiable as possible I made a good
-scar and fixed one side of my lip in a twist by the aid of a
-small slip of flesh-coloured plaster. Then with a red head of
-hair, and an appropriate dress, I took my station in the business
-part of the city, ostensibly as a match-seller but really as a
-beggar. For seven hours I plied my trade, and when I returned
-home in the evening I found to my surprise that I had received no
-less than 26s. 4d.
-
-"I wrote my articles and thought little more of the matter until,
-some time later, I backed a bill for a friend and had a writ
-served upon me for 25 pounds. I was at my wit's end where to get
-the money, but a sudden idea came to me. I begged a fortnight's
-grace from the creditor, asked for a holiday from my employers,
-and spent the time in begging in the City under my disguise. In
-ten days I had the money and had paid the debt.
-
-"Well, you can imagine how hard it was to settle down to arduous
-work at 2 pounds a week when I knew that I could earn as much in
-a day by smearing my face with a little paint, laying my cap on
-the ground, and sitting still. It was a long fight between my
-pride and the money, but the dollars won at last, and I threw up
-reporting and sat day after day in the corner which I had first
-chosen, inspiring pity by my ghastly face and filling my pockets
-with coppers. Only one man knew my secret. He was the keeper of a
-low den in which I used to lodge in Swandam Lane, where I could
-every morning emerge as a squalid beggar and in the evenings
-transform myself into a well-dressed man about town. This fellow,
-a Lascar, was well paid by me for his rooms, so that I knew that
-my secret was safe in his possession.
-
-"Well, very soon I found that I was saving considerable sums of
-money. I do not mean that any beggar in the streets of London
-could earn 700 pounds a year--which is less than my average
-takings--but I had exceptional advantages in my power of making
-up, and also in a facility of repartee, which improved by
-practice and made me quite a recognised character in the City.
-All day a stream of pennies, varied by silver, poured in upon me,
-and it was a very bad day in which I failed to take 2 pounds.
-
-"As I grew richer I grew more ambitious, took a house in the
-country, and eventually married, without anyone having a
-suspicion as to my real occupation. My dear wife knew that I had
-business in the City. She little knew what.
-
-"Last Monday I had finished for the day and was dressing in my
-room above the opium den when I looked out of my window and saw,
-to my horror and astonishment, that my wife was standing in the
-street, with her eyes fixed full upon me. I gave a cry of
-surprise, threw up my arms to cover my face, and, rushing to my
-confidant, the Lascar, entreated him to prevent anyone from
-coming up to me. I heard her voice downstairs, but I knew that
-she could not ascend. Swiftly I threw off my clothes, pulled on
-those of a beggar, and put on my pigments and wig. Even a wife's
-eyes could not pierce so complete a disguise. But then it
-occurred to me that there might be a search in the room, and that
-the clothes might betray me. I threw open the window, reopening
-by my violence a small cut which I had inflicted upon myself in
-the bedroom that morning. Then I seized my coat, which was
-weighted by the coppers which I had just transferred to it from
-the leather bag in which I carried my takings. I hurled it out of
-the window, and it disappeared into the Thames. The other clothes
-would have followed, but at that moment there was a rush of
-constables up the stair, and a few minutes after I found, rather,
-I confess, to my relief, that instead of being identified as Mr.
-Neville St. Clair, I was arrested as his murderer.
-
-"I do not know that there is anything else for me to explain. I
-was determined to preserve my disguise as long as possible, and
-hence my preference for a dirty face. Knowing that my wife would
-be terribly anxious, I slipped off my ring and confided it to the
-Lascar at a moment when no constable was watching me, together
-with a hurried scrawl, telling her that she had no cause to
-fear."
-
-"That note only reached her yesterday," said Holmes.
-
-"Good God! What a week she must have spent!"
-
-"The police have watched this Lascar," said Inspector Bradstreet,
-"and I can quite understand that he might find it difficult to
-post a letter unobserved. Probably he handed it to some sailor
-customer of his, who forgot all about it for some days."
-
-"That was it," said Holmes, nodding approvingly; "I have no doubt
-of it. But have you never been prosecuted for begging?"
-
-"Many times; but what was a fine to me?"
-
-"It must stop here, however," said Bradstreet. "If the police are
-to hush this thing up, there must be no more of Hugh Boone."
-
-"I have sworn it by the most solemn oaths which a man can take."
-
-"In that case I think that it is probable that no further steps
-may be taken. But if you are found again, then all must come out.
-I am sure, Mr. Holmes, that we are very much indebted to you for
-having cleared the matter up. I wish I knew how you reach your
-results."
-
-"I reached this one," said my friend, "by sitting upon five
-pillows and consuming an ounce of shag. I think, Watson, that if
-we drive to Baker Street we shall just be in time for breakfast."
-
-
-
-VII. THE ADVENTURE OF THE BLUE CARBUNCLE
-
-I had called upon my friend Sherlock Holmes upon the second
-morning after Christmas, with the intention of wishing him the
-compliments of the season. He was lounging upon the sofa in a
-purple dressing-gown, a pipe-rack within his reach upon the
-right, and a pile of crumpled morning papers, evidently newly
-studied, near at hand. Beside the couch was a wooden chair, and
-on the angle of the back hung a very seedy and disreputable
-hard-felt hat, much the worse for wear, and cracked in several
-places. A lens and a forceps lying upon the seat of the chair
-suggested that the hat had been suspended in this manner for the
-purpose of examination.
-
-"You are engaged," said I; "perhaps I interrupt you."
-
-"Not at all. I am glad to have a friend with whom I can discuss
-my results. The matter is a perfectly trivial one"--he jerked his
-thumb in the direction of the old hat--"but there are points in
-connection with it which are not entirely devoid of interest and
-even of instruction."
-
-I seated myself in his armchair and warmed my hands before his
-crackling fire, for a sharp frost had set in, and the windows
-were thick with the ice crystals. "I suppose," I remarked, "that,
-homely as it looks, this thing has some deadly story linked on to
-it--that it is the clue which will guide you in the solution of
-some mystery and the punishment of some crime."
-
-"No, no. No crime," said Sherlock Holmes, laughing. "Only one of
-those whimsical little incidents which will happen when you have
-four million human beings all jostling each other within the
-space of a few square miles. Amid the action and reaction of so
-dense a swarm of humanity, every possible combination of events
-may be expected to take place, and many a little problem will be
-presented which may be striking and bizarre without being
-criminal. We have already had experience of such."
-
-"So much so," I remarked, "that of the last six cases which I
-have added to my notes, three have been entirely free of any
-legal crime."
-
-"Precisely. You allude to my attempt to recover the Irene Adler
-papers, to the singular case of Miss Mary Sutherland, and to the
-adventure of the man with the twisted lip. Well, I have no doubt
-that this small matter will fall into the same innocent category.
-You know Peterson, the commissionaire?"
-
-"Yes."
-
-"It is to him that this trophy belongs."
-
-"It is his hat."
-
-"No, no, he found it. Its owner is unknown. I beg that you will
-look upon it not as a battered billycock but as an intellectual
-problem. And, first, as to how it came here. It arrived upon
-Christmas morning, in company with a good fat goose, which is, I
-have no doubt, roasting at this moment in front of Peterson's
-fire. The facts are these: about four o'clock on Christmas
-morning, Peterson, who, as you know, is a very honest fellow, was
-returning from some small jollification and was making his way
-homeward down Tottenham Court Road. In front of him he saw, in
-the gaslight, a tallish man, walking with a slight stagger, and
-carrying a white goose slung over his shoulder. As he reached the
-corner of Goodge Street, a row broke out between this stranger
-and a little knot of roughs. One of the latter knocked off the
-man's hat, on which he raised his stick to defend himself and,
-swinging it over his head, smashed the shop window behind him.
-Peterson had rushed forward to protect the stranger from his
-assailants; but the man, shocked at having broken the window, and
-seeing an official-looking person in uniform rushing towards him,
-dropped his goose, took to his heels, and vanished amid the
-labyrinth of small streets which lie at the back of Tottenham
-Court Road. The roughs had also fled at the appearance of
-Peterson, so that he was left in possession of the field of
-battle, and also of the spoils of victory in the shape of this
-battered hat and a most unimpeachable Christmas goose."
-
-"Which surely he restored to their owner?"
-
-"My dear fellow, there lies the problem. It is true that 'For
-Mrs. Henry Baker' was printed upon a small card which was tied to
-the bird's left leg, and it is also true that the initials 'H.
-B.' are legible upon the lining of this hat, but as there are
-some thousands of Bakers, and some hundreds of Henry Bakers in
-this city of ours, it is not easy to restore lost property to any
-one of them."
-
-"What, then, did Peterson do?"
-
-"He brought round both hat and goose to me on Christmas morning,
-knowing that even the smallest problems are of interest to me.
-The goose we retained until this morning, when there were signs
-that, in spite of the slight frost, it would be well that it
-should be eaten without unnecessary delay. Its finder has carried
-it off, therefore, to fulfil the ultimate destiny of a goose,
-while I continue to retain the hat of the unknown gentleman who
-lost his Christmas dinner."
-
-"Did he not advertise?"
-
-"No."
-
-"Then, what clue could you have as to his identity?"
-
-"Only as much as we can deduce."
-
-"From his hat?"
-
-"Precisely."
-
-"But you are joking. What can you gather from this old battered
-felt?"
-
-"Here is my lens. You know my methods. What can you gather
-yourself as to the individuality of the man who has worn this
-article?"
-
-I took the tattered object in my hands and turned it over rather
-ruefully. It was a very ordinary black hat of the usual round
-shape, hard and much the worse for wear. The lining had been of
-red silk, but was a good deal discoloured. There was no maker's
-name; but, as Holmes had remarked, the initials "H. B." were
-scrawled upon one side. It was pierced in the brim for a
-hat-securer, but the elastic was missing. For the rest, it was
-cracked, exceedingly dusty, and spotted in several places,
-although there seemed to have been some attempt to hide the
-discoloured patches by smearing them with ink.
-
-"I can see nothing," said I, handing it back to my friend.
-
-"On the contrary, Watson, you can see everything. You fail,
-however, to reason from what you see. You are too timid in
-drawing your inferences."
-
-"Then, pray tell me what it is that you can infer from this hat?"
-
-He picked it up and gazed at it in the peculiar introspective
-fashion which was characteristic of him. "It is perhaps less
-suggestive than it might have been," he remarked, "and yet there
-are a few inferences which are very distinct, and a few others
-which represent at least a strong balance of probability. That
-the man was highly intellectual is of course obvious upon the
-face of it, and also that he was fairly well-to-do within the
-last three years, although he has now fallen upon evil days. He
-had foresight, but has less now than formerly, pointing to a
-moral retrogression, which, when taken with the decline of his
-fortunes, seems to indicate some evil influence, probably drink,
-at work upon him. This may account also for the obvious fact that
-his wife has ceased to love him."
-
-"My dear Holmes!"
-
-"He has, however, retained some degree of self-respect," he
-continued, disregarding my remonstrance. "He is a man who leads a
-sedentary life, goes out little, is out of training entirely, is
-middle-aged, has grizzled hair which he has had cut within the
-last few days, and which he anoints with lime-cream. These are
-the more patent facts which are to be deduced from his hat. Also,
-by the way, that it is extremely improbable that he has gas laid
-on in his house."
-
-"You are certainly joking, Holmes."
-
-"Not in the least. Is it possible that even now, when I give you
-these results, you are unable to see how they are attained?"
-
-"I have no doubt that I am very stupid, but I must confess that I
-am unable to follow you. For example, how did you deduce that
-this man was intellectual?"
-
-For answer Holmes clapped the hat upon his head. It came right
-over the forehead and settled upon the bridge of his nose. "It is
-a question of cubic capacity," said he; "a man with so large a
-brain must have something in it."
-
-"The decline of his fortunes, then?"
-
-"This hat is three years old. These flat brims curled at the edge
-came in then. It is a hat of the very best quality. Look at the
-band of ribbed silk and the excellent lining. If this man could
-afford to buy so expensive a hat three years ago, and has had no
-hat since, then he has assuredly gone down in the world."
-
-"Well, that is clear enough, certainly. But how about the
-foresight and the moral retrogression?"
-
-Sherlock Holmes laughed. "Here is the foresight," said he putting
-his finger upon the little disc and loop of the hat-securer.
-"They are never sold upon hats. If this man ordered one, it is a
-sign of a certain amount of foresight, since he went out of his
-way to take this precaution against the wind. But since we see
-that he has broken the elastic and has not troubled to replace
-it, it is obvious that he has less foresight now than formerly,
-which is a distinct proof of a weakening nature. On the other
-hand, he has endeavoured to conceal some of these stains upon the
-felt by daubing them with ink, which is a sign that he has not
-entirely lost his self-respect."
-
-"Your reasoning is certainly plausible."
-
-"The further points, that he is middle-aged, that his hair is
-grizzled, that it has been recently cut, and that he uses
-lime-cream, are all to be gathered from a close examination of the
-lower part of the lining. The lens discloses a large number of
-hair-ends, clean cut by the scissors of the barber. They all
-appear to be adhesive, and there is a distinct odour of
-lime-cream. This dust, you will observe, is not the gritty, grey
-dust of the street but the fluffy brown dust of the house,
-showing that it has been hung up indoors most of the time, while
-the marks of moisture upon the inside are proof positive that the
-wearer perspired very freely, and could therefore, hardly be in
-the best of training."
-
-"But his wife--you said that she had ceased to love him."
-
-"This hat has not been brushed for weeks. When I see you, my dear
-Watson, with a week's accumulation of dust upon your hat, and
-when your wife allows you to go out in such a state, I shall fear
-that you also have been unfortunate enough to lose your wife's
-affection."
-
-"But he might be a bachelor."
-
-"Nay, he was bringing home the goose as a peace-offering to his
-wife. Remember the card upon the bird's leg."
-
-"You have an answer to everything. But how on earth do you deduce
-that the gas is not laid on in his house?"
-
-"One tallow stain, or even two, might come by chance; but when I
-see no less than five, I think that there can be little doubt
-that the individual must be brought into frequent contact with
-burning tallow--walks upstairs at night probably with his hat in
-one hand and a guttering candle in the other. Anyhow, he never
-got tallow-stains from a gas-jet. Are you satisfied?"
-
-"Well, it is very ingenious," said I, laughing; "but since, as
-you said just now, there has been no crime committed, and no harm
-done save the loss of a goose, all this seems to be rather a
-waste of energy."
-
-Sherlock Holmes had opened his mouth to reply, when the door flew
-open, and Peterson, the commissionaire, rushed into the apartment
-with flushed cheeks and the face of a man who is dazed with
-astonishment.
-
-"The goose, Mr. Holmes! The goose, sir!" he gasped.
-
-"Eh? What of it, then? Has it returned to life and flapped off
-through the kitchen window?" Holmes twisted himself round upon
-the sofa to get a fairer view of the man's excited face.
-
-"See here, sir! See what my wife found in its crop!" He held out
-his hand and displayed upon the centre of the palm a brilliantly
-scintillating blue stone, rather smaller than a bean in size, but
-of such purity and radiance that it twinkled like an electric
-point in the dark hollow of his hand.
-
-Sherlock Holmes sat up with a whistle. "By Jove, Peterson!" said
-he, "this is treasure trove indeed. I suppose you know what you
-have got?"
-
-"A diamond, sir? A precious stone. It cuts into glass as though
-it were putty."
-
-"It's more than a precious stone. It is the precious stone."
-
-"Not the Countess of Morcar's blue carbuncle!" I ejaculated.
-
-"Precisely so. I ought to know its size and shape, seeing that I
-have read the advertisement about it in The Times every day
-lately. It is absolutely unique, and its value can only be
-conjectured, but the reward offered of 1000 pounds is certainly
-not within a twentieth part of the market price."
-
-"A thousand pounds! Great Lord of mercy!" The commissionaire
-plumped down into a chair and stared from one to the other of us.
-
-"That is the reward, and I have reason to know that there are
-sentimental considerations in the background which would induce
-the Countess to part with half her fortune if she could but
-recover the gem."
-
-"It was lost, if I remember aright, at the Hotel Cosmopolitan," I
-remarked.
-
-"Precisely so, on December 22nd, just five days ago. John Horner,
-a plumber, was accused of having abstracted it from the lady's
-jewel-case. The evidence against him was so strong that the case
-has been referred to the Assizes. I have some account of the
-matter here, I believe." He rummaged amid his newspapers,
-glancing over the dates, until at last he smoothed one out,
-doubled it over, and read the following paragraph:
-
-"Hotel Cosmopolitan Jewel Robbery. John Horner, 26, plumber, was
-brought up upon the charge of having upon the 22nd inst.,
-abstracted from the jewel-case of the Countess of Morcar the
-valuable gem known as the blue carbuncle. James Ryder,
-upper-attendant at the hotel, gave his evidence to the effect
-that he had shown Horner up to the dressing-room of the Countess
-of Morcar upon the day of the robbery in order that he might
-solder the second bar of the grate, which was loose. He had
-remained with Horner some little time, but had finally been
-called away. On returning, he found that Horner had disappeared,
-that the bureau had been forced open, and that the small morocco
-casket in which, as it afterwards transpired, the Countess was
-accustomed to keep her jewel, was lying empty upon the
-dressing-table. Ryder instantly gave the alarm, and Horner was
-arrested the same evening; but the stone could not be found
-either upon his person or in his rooms. Catherine Cusack, maid to
-the Countess, deposed to having heard Ryder's cry of dismay on
-discovering the robbery, and to having rushed into the room,
-where she found matters as described by the last witness.
-Inspector Bradstreet, B division, gave evidence as to the arrest
-of Horner, who struggled frantically, and protested his innocence
-in the strongest terms. Evidence of a previous conviction for
-robbery having been given against the prisoner, the magistrate
-refused to deal summarily with the offence, but referred it to
-the Assizes. Horner, who had shown signs of intense emotion
-during the proceedings, fainted away at the conclusion and was
-carried out of court."
-
-"Hum! So much for the police-court," said Holmes thoughtfully,
-tossing aside the paper. "The question for us now to solve is the
-sequence of events leading from a rifled jewel-case at one end to
-the crop of a goose in Tottenham Court Road at the other. You
-see, Watson, our little deductions have suddenly assumed a much
-more important and less innocent aspect. Here is the stone; the
-stone came from the goose, and the goose came from Mr. Henry
-Baker, the gentleman with the bad hat and all the other
-characteristics with which I have bored you. So now we must set
-ourselves very seriously to finding this gentleman and
-ascertaining what part he has played in this little mystery. To
-do this, we must try the simplest means first, and these lie
-undoubtedly in an advertisement in all the evening papers. If
-this fail, I shall have recourse to other methods."
-
-"What will you say?"
-
-"Give me a pencil and that slip of paper. Now, then: 'Found at
-the corner of Goodge Street, a goose and a black felt hat. Mr.
-Henry Baker can have the same by applying at 6:30 this evening at
-221B, Baker Street.' That is clear and concise."
-
-"Very. But will he see it?"
-
-"Well, he is sure to keep an eye on the papers, since, to a poor
-man, the loss was a heavy one. He was clearly so scared by his
-mischance in breaking the window and by the approach of Peterson
-that he thought of nothing but flight, but since then he must
-have bitterly regretted the impulse which caused him to drop his
-bird. Then, again, the introduction of his name will cause him to
-see it, for everyone who knows him will direct his attention to
-it. Here you are, Peterson, run down to the advertising agency
-and have this put in the evening papers."
-
-"In which, sir?"
-
-"Oh, in the Globe, Star, Pall Mall, St. James's, Evening News,
-Standard, Echo, and any others that occur to you."
-
-"Very well, sir. And this stone?"
-
-"Ah, yes, I shall keep the stone. Thank you. And, I say,
-Peterson, just buy a goose on your way back and leave it here
-with me, for we must have one to give to this gentleman in place
-of the one which your family is now devouring."
-
-When the commissionaire had gone, Holmes took up the stone and
-held it against the light. "It's a bonny thing," said he. "Just
-see how it glints and sparkles. Of course it is a nucleus and
-focus of crime. Every good stone is. They are the devil's pet
-baits. In the larger and older jewels every facet may stand for a
-bloody deed. This stone is not yet twenty years old. It was found
-in the banks of the Amoy River in southern China and is remarkable
-in having every characteristic of the carbuncle, save that it is
-blue in shade instead of ruby red. In spite of its youth, it has
-already a sinister history. There have been two murders, a
-vitriol-throwing, a suicide, and several robberies brought about
-for the sake of this forty-grain weight of crystallised charcoal.
-Who would think that so pretty a toy would be a purveyor to the
-gallows and the prison? I'll lock it up in my strong box now and
-drop a line to the Countess to say that we have it."
-
-"Do you think that this man Horner is innocent?"
-
-"I cannot tell."
-
-"Well, then, do you imagine that this other one, Henry Baker, had
-anything to do with the matter?"
-
-"It is, I think, much more likely that Henry Baker is an
-absolutely innocent man, who had no idea that the bird which he
-was carrying was of considerably more value than if it were made
-of solid gold. That, however, I shall determine by a very simple
-test if we have an answer to our advertisement."
-
-"And you can do nothing until then?"
-
-"Nothing."
-
-"In that case I shall continue my professional round. But I shall
-come back in the evening at the hour you have mentioned, for I
-should like to see the solution of so tangled a business."
-
-"Very glad to see you. I dine at seven. There is a woodcock, I
-believe. By the way, in view of recent occurrences, perhaps I
-ought to ask Mrs. Hudson to examine its crop."
-
-I had been delayed at a case, and it was a little after half-past
-six when I found myself in Baker Street once more. As I
-approached the house I saw a tall man in a Scotch bonnet with a
-coat which was buttoned up to his chin waiting outside in the
-bright semicircle which was thrown from the fanlight. Just as I
-arrived the door was opened, and we were shown up together to
-Holmes' room.
-
-"Mr. Henry Baker, I believe," said he, rising from his armchair
-and greeting his visitor with the easy air of geniality which he
-could so readily assume. "Pray take this chair by the fire, Mr.
-Baker. It is a cold night, and I observe that your circulation is
-more adapted for summer than for winter. Ah, Watson, you have
-just come at the right time. Is that your hat, Mr. Baker?"
-
-"Yes, sir, that is undoubtedly my hat."
-
-He was a large man with rounded shoulders, a massive head, and a
-broad, intelligent face, sloping down to a pointed beard of
-grizzled brown. A touch of red in nose and cheeks, with a slight
-tremor of his extended hand, recalled Holmes' surmise as to his
-habits. His rusty black frock-coat was buttoned right up in
-front, with the collar turned up, and his lank wrists protruded
-from his sleeves without a sign of cuff or shirt. He spoke in a
-slow staccato fashion, choosing his words with care, and gave the
-impression generally of a man of learning and letters who had had
-ill-usage at the hands of fortune.
-
-"We have retained these things for some days," said Holmes,
-"because we expected to see an advertisement from you giving your
-address. I am at a loss to know now why you did not advertise."
-
-Our visitor gave a rather shamefaced laugh. "Shillings have not
-been so plentiful with me as they once were," he remarked. "I had
-no doubt that the gang of roughs who assaulted me had carried off
-both my hat and the bird. I did not care to spend more money in a
-hopeless attempt at recovering them."
-
-"Very naturally. By the way, about the bird, we were compelled to
-eat it."
-
-"To eat it!" Our visitor half rose from his chair in his
-excitement.
-
-"Yes, it would have been of no use to anyone had we not done so.
-But I presume that this other goose upon the sideboard, which is
-about the same weight and perfectly fresh, will answer your
-purpose equally well?"
-
-"Oh, certainly, certainly," answered Mr. Baker with a sigh of
-relief.
-
-"Of course, we still have the feathers, legs, crop, and so on of
-your own bird, so if you wish--"
-
-The man burst into a hearty laugh. "They might be useful to me as
-relics of my adventure," said he, "but beyond that I can hardly
-see what use the disjecta membra of my late acquaintance are
-going to be to me. No, sir, I think that, with your permission, I
-will confine my attentions to the excellent bird which I perceive
-upon the sideboard."
-
-Sherlock Holmes glanced sharply across at me with a slight shrug
-of his shoulders.
-
-"There is your hat, then, and there your bird," said he. "By the
-way, would it bore you to tell me where you got the other one
-from? I am somewhat of a fowl fancier, and I have seldom seen a
-better grown goose."
-
-"Certainly, sir," said Baker, who had risen and tucked his newly
-gained property under his arm. "There are a few of us who
-frequent the Alpha Inn, near the Museum--we are to be found in
-the Museum itself during the day, you understand. This year our
-good host, Windigate by name, instituted a goose club, by which,
-on consideration of some few pence every week, we were each to
-receive a bird at Christmas. My pence were duly paid, and the
-rest is familiar to you. I am much indebted to you, sir, for a
-Scotch bonnet is fitted neither to my years nor my gravity." With
-a comical pomposity of manner he bowed solemnly to both of us and
-strode off upon his way.
-
-"So much for Mr. Henry Baker," said Holmes when he had closed the
-door behind him. "It is quite certain that he knows nothing
-whatever about the matter. Are you hungry, Watson?"
-
-"Not particularly."
-
-"Then I suggest that we turn our dinner into a supper and follow
-up this clue while it is still hot."
-
-"By all means."
-
-It was a bitter night, so we drew on our ulsters and wrapped
-cravats about our throats. Outside, the stars were shining coldly
-in a cloudless sky, and the breath of the passers-by blew out
-into smoke like so many pistol shots. Our footfalls rang out
-crisply and loudly as we swung through the doctors' quarter,
-Wimpole Street, Harley Street, and so through Wigmore Street into
-Oxford Street. In a quarter of an hour we were in Bloomsbury at
-the Alpha Inn, which is a small public-house at the corner of one
-of the streets which runs down into Holborn. Holmes pushed open
-the door of the private bar and ordered two glasses of beer from
-the ruddy-faced, white-aproned landlord.
-
-"Your beer should be excellent if it is as good as your geese,"
-said he.
-
-"My geese!" The man seemed surprised.
-
-"Yes. I was speaking only half an hour ago to Mr. Henry Baker,
-who was a member of your goose club."
-
-"Ah! yes, I see. But you see, sir, them's not our geese."
-
-"Indeed! Whose, then?"
-
-"Well, I got the two dozen from a salesman in Covent Garden."
-
-"Indeed? I know some of them. Which was it?"
-
-"Breckinridge is his name."
-
-"Ah! I don't know him. Well, here's your good health landlord,
-and prosperity to your house. Good-night."
-
-"Now for Mr. Breckinridge," he continued, buttoning up his coat
-as we came out into the frosty air. "Remember, Watson that though
-we have so homely a thing as a goose at one end of this chain, we
-have at the other a man who will certainly get seven years' penal
-servitude unless we can establish his innocence. It is possible
-that our inquiry may but confirm his guilt; but, in any case, we
-have a line of investigation which has been missed by the police,
-and which a singular chance has placed in our hands. Let us
-follow it out to the bitter end. Faces to the south, then, and
-quick march!"
-
-We passed across Holborn, down Endell Street, and so through a
-zigzag of slums to Covent Garden Market. One of the largest
-stalls bore the name of Breckinridge upon it, and the proprietor
-a horsey-looking man, with a sharp face and trim side-whiskers was
-helping a boy to put up the shutters.
-
-"Good-evening. It's a cold night," said Holmes.
-
-The salesman nodded and shot a questioning glance at my
-companion.
-
-"Sold out of geese, I see," continued Holmes, pointing at the
-bare slabs of marble.
-
-"Let you have five hundred to-morrow morning."
-
-"That's no good."
-
-"Well, there are some on the stall with the gas-flare."
-
-"Ah, but I was recommended to you."
-
-"Who by?"
-
-"The landlord of the Alpha."
-
-"Oh, yes; I sent him a couple of dozen."
-
-"Fine birds they were, too. Now where did you get them from?"
-
-To my surprise the question provoked a burst of anger from the
-salesman.
-
-"Now, then, mister," said he, with his head cocked and his arms
-akimbo, "what are you driving at? Let's have it straight, now."
-
-"It is straight enough. I should like to know who sold you the
-geese which you supplied to the Alpha."
-
-"Well then, I shan't tell you. So now!"
-
-"Oh, it is a matter of no importance; but I don't know why you
-should be so warm over such a trifle."
-
-"Warm! You'd be as warm, maybe, if you were as pestered as I am.
-When I pay good money for a good article there should be an end
-of the business; but it's 'Where are the geese?' and 'Who did you
-sell the geese to?' and 'What will you take for the geese?' One
-would think they were the only geese in the world, to hear the
-fuss that is made over them."
-
-"Well, I have no connection with any other people who have been
-making inquiries," said Holmes carelessly. "If you won't tell us
-the bet is off, that is all. But I'm always ready to back my
-opinion on a matter of fowls, and I have a fiver on it that the
-bird I ate is country bred."
-
-"Well, then, you've lost your fiver, for it's town bred," snapped
-the salesman.
-
-"It's nothing of the kind."
-
-"I say it is."
-
-"I don't believe it."
-
-"D'you think you know more about fowls than I, who have handled
-them ever since I was a nipper? I tell you, all those birds that
-went to the Alpha were town bred."
-
-"You'll never persuade me to believe that."
-
-"Will you bet, then?"
-
-"It's merely taking your money, for I know that I am right. But
-I'll have a sovereign on with you, just to teach you not to be
-obstinate."
-
-The salesman chuckled grimly. "Bring me the books, Bill," said
-he.
-
-The small boy brought round a small thin volume and a great
-greasy-backed one, laying them out together beneath the hanging
-lamp.
-
-"Now then, Mr. Cocksure," said the salesman, "I thought that I
-was out of geese, but before I finish you'll find that there is
-still one left in my shop. You see this little book?"
-
-"Well?"
-
-"That's the list of the folk from whom I buy. D'you see? Well,
-then, here on this page are the country folk, and the numbers
-after their names are where their accounts are in the big ledger.
-Now, then! You see this other page in red ink? Well, that is a
-list of my town suppliers. Now, look at that third name. Just
-read it out to me."
-
-"Mrs. Oakshott, 117, Brixton Road--249," read Holmes.
-
-"Quite so. Now turn that up in the ledger."
-
-Holmes turned to the page indicated. "Here you are, 'Mrs.
-Oakshott, 117, Brixton Road, egg and poultry supplier.'"
-
-"Now, then, what's the last entry?"
-
-"'December 22nd. Twenty-four geese at 7s. 6d.'"
-
-"Quite so. There you are. And underneath?"
-
-"'Sold to Mr. Windigate of the Alpha, at 12s.'"
-
-"What have you to say now?"
-
-Sherlock Holmes looked deeply chagrined. He drew a sovereign from
-his pocket and threw it down upon the slab, turning away with the
-air of a man whose disgust is too deep for words. A few yards off
-he stopped under a lamp-post and laughed in the hearty, noiseless
-fashion which was peculiar to him.
-
-"When you see a man with whiskers of that cut and the 'Pink 'un'
-protruding out of his pocket, you can always draw him by a bet,"
-said he. "I daresay that if I had put 100 pounds down in front of
-him, that man would not have given me such complete information
-as was drawn from him by the idea that he was doing me on a
-wager. Well, Watson, we are, I fancy, nearing the end of our
-quest, and the only point which remains to be determined is
-whether we should go on to this Mrs. Oakshott to-night, or
-whether we should reserve it for to-morrow. It is clear from what
-that surly fellow said that there are others besides ourselves
-who are anxious about the matter, and I should--"
-
-His remarks were suddenly cut short by a loud hubbub which broke
-out from the stall which we had just left. Turning round we saw a
-little rat-faced fellow standing in the centre of the circle of
-yellow light which was thrown by the swinging lamp, while
-Breckinridge, the salesman, framed in the door of his stall, was
-shaking his fists fiercely at the cringing figure.
-
-"I've had enough of you and your geese," he shouted. "I wish you
-were all at the devil together. If you come pestering me any more
-with your silly talk I'll set the dog at you. You bring Mrs.
-Oakshott here and I'll answer her, but what have you to do with
-it? Did I buy the geese off you?"
-
-"No; but one of them was mine all the same," whined the little
-man.
-
-"Well, then, ask Mrs. Oakshott for it."
-
-"She told me to ask you."
-
-"Well, you can ask the King of Proosia, for all I care. I've had
-enough of it. Get out of this!" He rushed fiercely forward, and
-the inquirer flitted away into the darkness.
-
-"Ha! this may save us a visit to Brixton Road," whispered Holmes.
-"Come with me, and we will see what is to be made of this
-fellow." Striding through the scattered knots of people who
-lounged round the flaring stalls, my companion speedily overtook
-the little man and touched him upon the shoulder. He sprang
-round, and I could see in the gas-light that every vestige of
-colour had been driven from his face.
-
-"Who are you, then? What do you want?" he asked in a quavering
-voice.
-
-"You will excuse me," said Holmes blandly, "but I could not help
-overhearing the questions which you put to the salesman just now.
-I think that I could be of assistance to you."
-
-"You? Who are you? How could you know anything of the matter?"
-
-"My name is Sherlock Holmes. It is my business to know what other
-people don't know."
-
-"But you can know nothing of this?"
-
-"Excuse me, I know everything of it. You are endeavouring to
-trace some geese which were sold by Mrs. Oakshott, of Brixton
-Road, to a salesman named Breckinridge, by him in turn to Mr.
-Windigate, of the Alpha, and by him to his club, of which Mr.
-Henry Baker is a member."
-
-"Oh, sir, you are the very man whom I have longed to meet," cried
-the little fellow with outstretched hands and quivering fingers.
-"I can hardly explain to you how interested I am in this matter."
-
-Sherlock Holmes hailed a four-wheeler which was passing. "In that
-case we had better discuss it in a cosy room rather than in this
-wind-swept market-place," said he. "But pray tell me, before we
-go farther, who it is that I have the pleasure of assisting."
-
-The man hesitated for an instant. "My name is John Robinson," he
-answered with a sidelong glance.
-
-"No, no; the real name," said Holmes sweetly. "It is always
-awkward doing business with an alias."
-
-A flush sprang to the white cheeks of the stranger. "Well then,"
-said he, "my real name is James Ryder."
-
-"Precisely so. Head attendant at the Hotel Cosmopolitan. Pray
-step into the cab, and I shall soon be able to tell you
-everything which you would wish to know."
-
-The little man stood glancing from one to the other of us with
-half-frightened, half-hopeful eyes, as one who is not sure
-whether he is on the verge of a windfall or of a catastrophe.
-Then he stepped into the cab, and in half an hour we were back in
-the sitting-room at Baker Street. Nothing had been said during
-our drive, but the high, thin breathing of our new companion, and
-the claspings and unclaspings of his hands, spoke of the nervous
-tension within him.
-
-"Here we are!" said Holmes cheerily as we filed into the room.
-"The fire looks very seasonable in this weather. You look cold,
-Mr. Ryder. Pray take the basket-chair. I will just put on my
-slippers before we settle this little matter of yours. Now, then!
-You want to know what became of those geese?"
-
-"Yes, sir."
-
-"Or rather, I fancy, of that goose. It was one bird, I imagine in
-which you were interested--white, with a black bar across the
-tail."
-
-Ryder quivered with emotion. "Oh, sir," he cried, "can you tell
-me where it went to?"
-
-"It came here."
-
-"Here?"
-
-"Yes, and a most remarkable bird it proved. I don't wonder that
-you should take an interest in it. It laid an egg after it was
-dead--the bonniest, brightest little blue egg that ever was seen.
-I have it here in my museum."
-
-Our visitor staggered to his feet and clutched the mantelpiece
-with his right hand. Holmes unlocked his strong-box and held up
-the blue carbuncle, which shone out like a star, with a cold,
-brilliant, many-pointed radiance. Ryder stood glaring with a
-drawn face, uncertain whether to claim or to disown it.
-
-"The game's up, Ryder," said Holmes quietly. "Hold up, man, or
-you'll be into the fire! Give him an arm back into his chair,
-Watson. He's not got blood enough to go in for felony with
-impunity. Give him a dash of brandy. So! Now he looks a little
-more human. What a shrimp it is, to be sure!"
-
-For a moment he had staggered and nearly fallen, but the brandy
-brought a tinge of colour into his cheeks, and he sat staring
-with frightened eyes at his accuser.
-
-"I have almost every link in my hands, and all the proofs which I
-could possibly need, so there is little which you need tell me.
-Still, that little may as well be cleared up to make the case
-complete. You had heard, Ryder, of this blue stone of the
-Countess of Morcar's?"
-
-"It was Catherine Cusack who told me of it," said he in a
-crackling voice.
-
-"I see--her ladyship's waiting-maid. Well, the temptation of
-sudden wealth so easily acquired was too much for you, as it has
-been for better men before you; but you were not very scrupulous
-in the means you used. It seems to me, Ryder, that there is the
-making of a very pretty villain in you. You knew that this man
-Horner, the plumber, had been concerned in some such matter
-before, and that suspicion would rest the more readily upon him.
-What did you do, then? You made some small job in my lady's
-room--you and your confederate Cusack--and you managed that he
-should be the man sent for. Then, when he had left, you rifled
-the jewel-case, raised the alarm, and had this unfortunate man
-arrested. You then--"
-
-Ryder threw himself down suddenly upon the rug and clutched at my
-companion's knees. "For God's sake, have mercy!" he shrieked.
-"Think of my father! Of my mother! It would break their hearts. I
-never went wrong before! I never will again. I swear it. I'll
-swear it on a Bible. Oh, don't bring it into court! For Christ's
-sake, don't!"
-
-"Get back into your chair!" said Holmes sternly. "It is very well
-to cringe and crawl now, but you thought little enough of this
-poor Horner in the dock for a crime of which he knew nothing."
-
-"I will fly, Mr. Holmes. I will leave the country, sir. Then the
-charge against him will break down."
-
-"Hum! We will talk about that. And now let us hear a true account
-of the next act. How came the stone into the goose, and how came
-the goose into the open market? Tell us the truth, for there lies
-your only hope of safety."
-
-Ryder passed his tongue over his parched lips. "I will tell you
-it just as it happened, sir," said he. "When Horner had been
-arrested, it seemed to me that it would be best for me to get
-away with the stone at once, for I did not know at what moment
-the police might not take it into their heads to search me and my
-room. There was no place about the hotel where it would be safe.
-I went out, as if on some commission, and I made for my sister's
-house. She had married a man named Oakshott, and lived in Brixton
-Road, where she fattened fowls for the market. All the way there
-every man I met seemed to me to be a policeman or a detective;
-and, for all that it was a cold night, the sweat was pouring down
-my face before I came to the Brixton Road. My sister asked me
-what was the matter, and why I was so pale; but I told her that I
-had been upset by the jewel robbery at the hotel. Then I went
-into the back yard and smoked a pipe and wondered what it would
-be best to do.
-
-"I had a friend once called Maudsley, who went to the bad, and
-has just been serving his time in Pentonville. One day he had met
-me, and fell into talk about the ways of thieves, and how they
-could get rid of what they stole. I knew that he would be true to
-me, for I knew one or two things about him; so I made up my mind
-to go right on to Kilburn, where he lived, and take him into my
-confidence. He would show me how to turn the stone into money.
-But how to get to him in safety? I thought of the agonies I had
-gone through in coming from the hotel. I might at any moment be
-seized and searched, and there would be the stone in my waistcoat
-pocket. I was leaning against the wall at the time and looking at
-the geese which were waddling about round my feet, and suddenly
-an idea came into my head which showed me how I could beat the
-best detective that ever lived.
-
-"My sister had told me some weeks before that I might have the
-pick of her geese for a Christmas present, and I knew that she
-was always as good as her word. I would take my goose now, and in
-it I would carry my stone to Kilburn. There was a little shed in
-the yard, and behind this I drove one of the birds--a fine big
-one, white, with a barred tail. I caught it, and prying its bill
-open, I thrust the stone down its throat as far as my finger
-could reach. The bird gave a gulp, and I felt the stone pass
-along its gullet and down into its crop. But the creature flapped
-and struggled, and out came my sister to know what was the
-matter. As I turned to speak to her the brute broke loose and
-fluttered off among the others.
-
-"'Whatever were you doing with that bird, Jem?' says she.
-
-"'Well,' said I, 'you said you'd give me one for Christmas, and I
-was feeling which was the fattest.'
-
-"'Oh,' says she, 'we've set yours aside for you--Jem's bird, we
-call it. It's the big white one over yonder. There's twenty-six
-of them, which makes one for you, and one for us, and two dozen
-for the market.'
-
-"'Thank you, Maggie,' says I; 'but if it is all the same to you,
-I'd rather have that one I was handling just now.'
-
-"'The other is a good three pound heavier,' said she, 'and we
-fattened it expressly for you.'
-
-"'Never mind. I'll have the other, and I'll take it now,' said I.
-
-"'Oh, just as you like,' said she, a little huffed. 'Which is it
-you want, then?'
-
-"'That white one with the barred tail, right in the middle of the
-flock.'
-
-"'Oh, very well. Kill it and take it with you.'
-
-"Well, I did what she said, Mr. Holmes, and I carried the bird
-all the way to Kilburn. I told my pal what I had done, for he was
-a man that it was easy to tell a thing like that to. He laughed
-until he choked, and we got a knife and opened the goose. My
-heart turned to water, for there was no sign of the stone, and I
-knew that some terrible mistake had occurred. I left the bird,
-rushed back to my sister's, and hurried into the back yard. There
-was not a bird to be seen there.
-
-"'Where are they all, Maggie?' I cried.
-
-"'Gone to the dealer's, Jem.'
-
-"'Which dealer's?'
-
-"'Breckinridge, of Covent Garden.'
-
-"'But was there another with a barred tail?' I asked, 'the same
-as the one I chose?'
-
-"'Yes, Jem; there were two barred-tailed ones, and I could never
-tell them apart.'
-
-"Well, then, of course I saw it all, and I ran off as hard as my
-feet would carry me to this man Breckinridge; but he had sold the
-lot at once, and not one word would he tell me as to where they
-had gone. You heard him yourselves to-night. Well, he has always
-answered me like that. My sister thinks that I am going mad.
-Sometimes I think that I am myself. And now--and now I am myself
-a branded thief, without ever having touched the wealth for which
-I sold my character. God help me! God help me!" He burst into
-convulsive sobbing, with his face buried in his hands.
-
-There was a long silence, broken only by his heavy breathing and
-by the measured tapping of Sherlock Holmes' finger-tips upon the
-edge of the table. Then my friend rose and threw open the door.
-
-"Get out!" said he.
-
-"What, sir! Oh, Heaven bless you!"
-
-"No more words. Get out!"
-
-And no more words were needed. There was a rush, a clatter upon
-the stairs, the bang of a door, and the crisp rattle of running
-footfalls from the street.
-
-"After all, Watson," said Holmes, reaching up his hand for his
-clay pipe, "I am not retained by the police to supply their
-deficiencies. If Horner were in danger it would be another thing;
-but this fellow will not appear against him, and the case must
-collapse. I suppose that I am commuting a felony, but it is just
-possible that I am saving a soul. This fellow will not go wrong
-again; he is too terribly frightened. Send him to gaol now, and
-you make him a gaol-bird for life. Besides, it is the season of
-forgiveness. Chance has put in our way a most singular and
-whimsical problem, and its solution is its own reward. If you
-will have the goodness to touch the bell, Doctor, we will begin
-another investigation, in which, also a bird will be the chief
-feature."
-
-
-
-VIII. THE ADVENTURE OF THE SPECKLED BAND
-
-On glancing over my notes of the seventy odd cases in which I
-have during the last eight years studied the methods of my friend
-Sherlock Holmes, I find many tragic, some comic, a large number
-merely strange, but none commonplace; for, working as he did
-rather for the love of his art than for the acquirement of
-wealth, he refused to associate himself with any investigation
-which did not tend towards the unusual, and even the fantastic.
-Of all these varied cases, however, I cannot recall any which
-presented more singular features than that which was associated
-with the well-known Surrey family of the Roylotts of Stoke Moran.
-The events in question occurred in the early days of my
-association with Holmes, when we were sharing rooms as bachelors
-in Baker Street. It is possible that I might have placed them
-upon record before, but a promise of secrecy was made at the
-time, from which I have only been freed during the last month by
-the untimely death of the lady to whom the pledge was given. It
-is perhaps as well that the facts should now come to light, for I
-have reasons to know that there are widespread rumours as to the
-death of Dr. Grimesby Roylott which tend to make the matter even
-more terrible than the truth.
-
-It was early in April in the year '83 that I woke one morning to
-find Sherlock Holmes standing, fully dressed, by the side of my
-bed. He was a late riser, as a rule, and as the clock on the
-mantelpiece showed me that it was only a quarter-past seven, I
-blinked up at him in some surprise, and perhaps just a little
-resentment, for I was myself regular in my habits.
-
-"Very sorry to knock you up, Watson," said he, "but it's the
-common lot this morning. Mrs. Hudson has been knocked up, she
-retorted upon me, and I on you."
-
-"What is it, then--a fire?"
-
-"No; a client. It seems that a young lady has arrived in a
-considerable state of excitement, who insists upon seeing me. She
-is waiting now in the sitting-room. Now, when young ladies wander
-about the metropolis at this hour of the morning, and knock
-sleepy people up out of their beds, I presume that it is
-something very pressing which they have to communicate. Should it
-prove to be an interesting case, you would, I am sure, wish to
-follow it from the outset. I thought, at any rate, that I should
-call you and give you the chance."
-
-"My dear fellow, I would not miss it for anything."
-
-I had no keener pleasure than in following Holmes in his
-professional investigations, and in admiring the rapid
-deductions, as swift as intuitions, and yet always founded on a
-logical basis with which he unravelled the problems which were
-submitted to him. I rapidly threw on my clothes and was ready in
-a few minutes to accompany my friend down to the sitting-room. A
-lady dressed in black and heavily veiled, who had been sitting in
-the window, rose as we entered.
-
-"Good-morning, madam," said Holmes cheerily. "My name is Sherlock
-Holmes. This is my intimate friend and associate, Dr. Watson,
-before whom you can speak as freely as before myself. Ha! I am
-glad to see that Mrs. Hudson has had the good sense to light the
-fire. Pray draw up to it, and I shall order you a cup of hot
-coffee, for I observe that you are shivering."
-
-"It is not cold which makes me shiver," said the woman in a low
-voice, changing her seat as requested.
-
-"What, then?"
-
-"It is fear, Mr. Holmes. It is terror." She raised her veil as
-she spoke, and we could see that she was indeed in a pitiable
-state of agitation, her face all drawn and grey, with restless
-frightened eyes, like those of some hunted animal. Her features
-and figure were those of a woman of thirty, but her hair was shot
-with premature grey, and her expression was weary and haggard.
-Sherlock Holmes ran her over with one of his quick,
-all-comprehensive glances.
-
-"You must not fear," said he soothingly, bending forward and
-patting her forearm. "We shall soon set matters right, I have no
-doubt. You have come in by train this morning, I see."
-
-"You know me, then?"
-
-"No, but I observe the second half of a return ticket in the palm
-of your left glove. You must have started early, and yet you had
-a good drive in a dog-cart, along heavy roads, before you reached
-the station."
-
-The lady gave a violent start and stared in bewilderment at my
-companion.
-
-"There is no mystery, my dear madam," said he, smiling. "The left
-arm of your jacket is spattered with mud in no less than seven
-places. The marks are perfectly fresh. There is no vehicle save a
-dog-cart which throws up mud in that way, and then only when you
-sit on the left-hand side of the driver."
-
-"Whatever your reasons may be, you are perfectly correct," said
-she. "I started from home before six, reached Leatherhead at
-twenty past, and came in by the first train to Waterloo. Sir, I
-can stand this strain no longer; I shall go mad if it continues.
-I have no one to turn to--none, save only one, who cares for me,
-and he, poor fellow, can be of little aid. I have heard of you,
-Mr. Holmes; I have heard of you from Mrs. Farintosh, whom you
-helped in the hour of her sore need. It was from her that I had
-your address. Oh, sir, do you not think that you could help me,
-too, and at least throw a little light through the dense darkness
-which surrounds me? At present it is out of my power to reward
-you for your services, but in a month or six weeks I shall be
-married, with the control of my own income, and then at least you
-shall not find me ungrateful."
-
-Holmes turned to his desk and, unlocking it, drew out a small
-case-book, which he consulted.
-
-"Farintosh," said he. "Ah yes, I recall the case; it was
-concerned with an opal tiara. I think it was before your time,
-Watson. I can only say, madam, that I shall be happy to devote
-the same care to your case as I did to that of your friend. As to
-reward, my profession is its own reward; but you are at liberty
-to defray whatever expenses I may be put to, at the time which
-suits you best. And now I beg that you will lay before us
-everything that may help us in forming an opinion upon the
-matter."
-
-"Alas!" replied our visitor, "the very horror of my situation
-lies in the fact that my fears are so vague, and my suspicions
-depend so entirely upon small points, which might seem trivial to
-another, that even he to whom of all others I have a right to
-look for help and advice looks upon all that I tell him about it
-as the fancies of a nervous woman. He does not say so, but I can
-read it from his soothing answers and averted eyes. But I have
-heard, Mr. Holmes, that you can see deeply into the manifold
-wickedness of the human heart. You may advise me how to walk amid
-the dangers which encompass me."
-
-"I am all attention, madam."
-
-"My name is Helen Stoner, and I am living with my stepfather, who
-is the last survivor of one of the oldest Saxon families in
-England, the Roylotts of Stoke Moran, on the western border of
-Surrey."
-
-Holmes nodded his head. "The name is familiar to me," said he.
-
-"The family was at one time among the richest in England, and the
-estates extended over the borders into Berkshire in the north,
-and Hampshire in the west. In the last century, however, four
-successive heirs were of a dissolute and wasteful disposition,
-and the family ruin was eventually completed by a gambler in the
-days of the Regency. Nothing was left save a few acres of ground,
-and the two-hundred-year-old house, which is itself crushed under
-a heavy mortgage. The last squire dragged out his existence
-there, living the horrible life of an aristocratic pauper; but
-his only son, my stepfather, seeing that he must adapt himself to
-the new conditions, obtained an advance from a relative, which
-enabled him to take a medical degree and went out to Calcutta,
-where, by his professional skill and his force of character, he
-established a large practice. In a fit of anger, however, caused
-by some robberies which had been perpetrated in the house, he
-beat his native butler to death and narrowly escaped a capital
-sentence. As it was, he suffered a long term of imprisonment and
-afterwards returned to England a morose and disappointed man.
-
-"When Dr. Roylott was in India he married my mother, Mrs. Stoner,
-the young widow of Major-General Stoner, of the Bengal Artillery.
-My sister Julia and I were twins, and we were only two years old
-at the time of my mother's re-marriage. She had a considerable
-sum of money--not less than 1000 pounds a year--and this she
-bequeathed to Dr. Roylott entirely while we resided with him,
-with a provision that a certain annual sum should be allowed to
-each of us in the event of our marriage. Shortly after our return
-to England my mother died--she was killed eight years ago in a
-railway accident near Crewe. Dr. Roylott then abandoned his
-attempts to establish himself in practice in London and took us
-to live with him in the old ancestral house at Stoke Moran. The
-money which my mother had left was enough for all our wants, and
-there seemed to be no obstacle to our happiness.
-
-"But a terrible change came over our stepfather about this time.
-Instead of making friends and exchanging visits with our
-neighbours, who had at first been overjoyed to see a Roylott of
-Stoke Moran back in the old family seat, he shut himself up in
-his house and seldom came out save to indulge in ferocious
-quarrels with whoever might cross his path. Violence of temper
-approaching to mania has been hereditary in the men of the
-family, and in my stepfather's case it had, I believe, been
-intensified by his long residence in the tropics. A series of
-disgraceful brawls took place, two of which ended in the
-police-court, until at last he became the terror of the village,
-and the folks would fly at his approach, for he is a man of
-immense strength, and absolutely uncontrollable in his anger.
-
-"Last week he hurled the local blacksmith over a parapet into a
-stream, and it was only by paying over all the money which I
-could gather together that I was able to avert another public
-exposure. He had no friends at all save the wandering gipsies,
-and he would give these vagabonds leave to encamp upon the few
-acres of bramble-covered land which represent the family estate,
-and would accept in return the hospitality of their tents,
-wandering away with them sometimes for weeks on end. He has a
-passion also for Indian animals, which are sent over to him by a
-correspondent, and he has at this moment a cheetah and a baboon,
-which wander freely over his grounds and are feared by the
-villagers almost as much as their master.
-
-"You can imagine from what I say that my poor sister Julia and I
-had no great pleasure in our lives. No servant would stay with
-us, and for a long time we did all the work of the house. She was
-but thirty at the time of her death, and yet her hair had already
-begun to whiten, even as mine has."
-
-"Your sister is dead, then?"
-
-"She died just two years ago, and it is of her death that I wish
-to speak to you. You can understand that, living the life which I
-have described, we were little likely to see anyone of our own
-age and position. We had, however, an aunt, my mother's maiden
-sister, Miss Honoria Westphail, who lives near Harrow, and we
-were occasionally allowed to pay short visits at this lady's
-house. Julia went there at Christmas two years ago, and met there
-a half-pay major of marines, to whom she became engaged. My
-stepfather learned of the engagement when my sister returned and
-offered no objection to the marriage; but within a fortnight of
-the day which had been fixed for the wedding, the terrible event
-occurred which has deprived me of my only companion."
-
-Sherlock Holmes had been leaning back in his chair with his eyes
-closed and his head sunk in a cushion, but he half opened his
-lids now and glanced across at his visitor.
-
-"Pray be precise as to details," said he.
-
-"It is easy for me to be so, for every event of that dreadful
-time is seared into my memory. The manor-house is, as I have
-already said, very old, and only one wing is now inhabited. The
-bedrooms in this wing are on the ground floor, the sitting-rooms
-being in the central block of the buildings. Of these bedrooms
-the first is Dr. Roylott's, the second my sister's, and the third
-my own. There is no communication between them, but they all open
-out into the same corridor. Do I make myself plain?"
-
-"Perfectly so."
-
-"The windows of the three rooms open out upon the lawn. That
-fatal night Dr. Roylott had gone to his room early, though we
-knew that he had not retired to rest, for my sister was troubled
-by the smell of the strong Indian cigars which it was his custom
-to smoke. She left her room, therefore, and came into mine, where
-she sat for some time, chatting about her approaching wedding. At
-eleven o'clock she rose to leave me, but she paused at the door
-and looked back.
-
-"'Tell me, Helen,' said she, 'have you ever heard anyone whistle
-in the dead of the night?'
-
-"'Never,' said I.
-
-"'I suppose that you could not possibly whistle, yourself, in
-your sleep?'
-
-"'Certainly not. But why?'
-
-"'Because during the last few nights I have always, about three
-in the morning, heard a low, clear whistle. I am a light sleeper,
-and it has awakened me. I cannot tell where it came from--perhaps
-from the next room, perhaps from the lawn. I thought that I would
-just ask you whether you had heard it.'
-
-"'No, I have not. It must be those wretched gipsies in the
-plantation.'
-
-"'Very likely. And yet if it were on the lawn, I wonder that you
-did not hear it also.'
-
-"'Ah, but I sleep more heavily than you.'
-
-"'Well, it is of no great consequence, at any rate.' She smiled
-back at me, closed my door, and a few moments later I heard her
-key turn in the lock."
-
-"Indeed," said Holmes. "Was it your custom always to lock
-yourselves in at night?"
-
-"Always."
-
-"And why?"
-
-"I think that I mentioned to you that the doctor kept a cheetah
-and a baboon. We had no feeling of security unless our doors were
-locked."
-
-"Quite so. Pray proceed with your statement."
-
-"I could not sleep that night. A vague feeling of impending
-misfortune impressed me. My sister and I, you will recollect,
-were twins, and you know how subtle are the links which bind two
-souls which are so closely allied. It was a wild night. The wind
-was howling outside, and the rain was beating and splashing
-against the windows. Suddenly, amid all the hubbub of the gale,
-there burst forth the wild scream of a terrified woman. I knew
-that it was my sister's voice. I sprang from my bed, wrapped a
-shawl round me, and rushed into the corridor. As I opened my door
-I seemed to hear a low whistle, such as my sister described, and
-a few moments later a clanging sound, as if a mass of metal had
-fallen. As I ran down the passage, my sister's door was unlocked,
-and revolved slowly upon its hinges. I stared at it
-horror-stricken, not knowing what was about to issue from it. By
-the light of the corridor-lamp I saw my sister appear at the
-opening, her face blanched with terror, her hands groping for
-help, her whole figure swaying to and fro like that of a
-drunkard. I ran to her and threw my arms round her, but at that
-moment her knees seemed to give way and she fell to the ground.
-She writhed as one who is in terrible pain, and her limbs were
-dreadfully convulsed. At first I thought that she had not
-recognised me, but as I bent over her she suddenly shrieked out
-in a voice which I shall never forget, 'Oh, my God! Helen! It was
-the band! The speckled band!' There was something else which she
-would fain have said, and she stabbed with her finger into the
-air in the direction of the doctor's room, but a fresh convulsion
-seized her and choked her words. I rushed out, calling loudly for
-my stepfather, and I met him hastening from his room in his
-dressing-gown. When he reached my sister's side she was
-unconscious, and though he poured brandy down her throat and sent
-for medical aid from the village, all efforts were in vain, for
-she slowly sank and died without having recovered her
-consciousness. Such was the dreadful end of my beloved sister."
-
-"One moment," said Holmes, "are you sure about this whistle and
-metallic sound? Could you swear to it?"
-
-"That was what the county coroner asked me at the inquiry. It is
-my strong impression that I heard it, and yet, among the crash of
-the gale and the creaking of an old house, I may possibly have
-been deceived."
-
-"Was your sister dressed?"
-
-"No, she was in her night-dress. In her right hand was found the
-charred stump of a match, and in her left a match-box."
-
-"Showing that she had struck a light and looked about her when
-the alarm took place. That is important. And what conclusions did
-the coroner come to?"
-
-"He investigated the case with great care, for Dr. Roylott's
-conduct had long been notorious in the county, but he was unable
-to find any satisfactory cause of death. My evidence showed that
-the door had been fastened upon the inner side, and the windows
-were blocked by old-fashioned shutters with broad iron bars,
-which were secured every night. The walls were carefully sounded,
-and were shown to be quite solid all round, and the flooring was
-also thoroughly examined, with the same result. The chimney is
-wide, but is barred up by four large staples. It is certain,
-therefore, that my sister was quite alone when she met her end.
-Besides, there were no marks of any violence upon her."
-
-"How about poison?"
-
-"The doctors examined her for it, but without success."
-
-"What do you think that this unfortunate lady died of, then?"
-
-"It is my belief that she died of pure fear and nervous shock,
-though what it was that frightened her I cannot imagine."
-
-"Were there gipsies in the plantation at the time?"
-
-"Yes, there are nearly always some there."
-
-"Ah, and what did you gather from this allusion to a band--a
-speckled band?"
-
-"Sometimes I have thought that it was merely the wild talk of
-delirium, sometimes that it may have referred to some band of
-people, perhaps to these very gipsies in the plantation. I do not
-know whether the spotted handkerchiefs which so many of them wear
-over their heads might have suggested the strange adjective which
-she used."
-
-Holmes shook his head like a man who is far from being satisfied.
-
-"These are very deep waters," said he; "pray go on with your
-narrative."
-
-"Two years have passed since then, and my life has been until
-lately lonelier than ever. A month ago, however, a dear friend,
-whom I have known for many years, has done me the honour to ask
-my hand in marriage. His name is Armitage--Percy Armitage--the
-second son of Mr. Armitage, of Crane Water, near Reading. My
-stepfather has offered no opposition to the match, and we are to
-be married in the course of the spring. Two days ago some repairs
-were started in the west wing of the building, and my bedroom
-wall has been pierced, so that I have had to move into the
-chamber in which my sister died, and to sleep in the very bed in
-which she slept. Imagine, then, my thrill of terror when last
-night, as I lay awake, thinking over her terrible fate, I
-suddenly heard in the silence of the night the low whistle which
-had been the herald of her own death. I sprang up and lit the
-lamp, but nothing was to be seen in the room. I was too shaken to
-go to bed again, however, so I dressed, and as soon as it was
-daylight I slipped down, got a dog-cart at the Crown Inn, which
-is opposite, and drove to Leatherhead, from whence I have come on
-this morning with the one object of seeing you and asking your
-advice."
-
-"You have done wisely," said my friend. "But have you told me
-all?"
-
-"Yes, all."
-
-"Miss Roylott, you have not. You are screening your stepfather."
-
-"Why, what do you mean?"
-
-For answer Holmes pushed back the frill of black lace which
-fringed the hand that lay upon our visitor's knee. Five little
-livid spots, the marks of four fingers and a thumb, were printed
-upon the white wrist.
-
-"You have been cruelly used," said Holmes.
-
-The lady coloured deeply and covered over her injured wrist. "He
-is a hard man," she said, "and perhaps he hardly knows his own
-strength."
-
-There was a long silence, during which Holmes leaned his chin
-upon his hands and stared into the crackling fire.
-
-"This is a very deep business," he said at last. "There are a
-thousand details which I should desire to know before I decide
-upon our course of action. Yet we have not a moment to lose. If
-we were to come to Stoke Moran to-day, would it be possible for
-us to see over these rooms without the knowledge of your
-stepfather?"
-
-"As it happens, he spoke of coming into town to-day upon some
-most important business. It is probable that he will be away all
-day, and that there would be nothing to disturb you. We have a
-housekeeper now, but she is old and foolish, and I could easily
-get her out of the way."
-
-"Excellent. You are not averse to this trip, Watson?"
-
-"By no means."
-
-"Then we shall both come. What are you going to do yourself?"
-
-"I have one or two things which I would wish to do now that I am
-in town. But I shall return by the twelve o'clock train, so as to
-be there in time for your coming."
-
-"And you may expect us early in the afternoon. I have myself some
-small business matters to attend to. Will you not wait and
-breakfast?"
-
-"No, I must go. My heart is lightened already since I have
-confided my trouble to you. I shall look forward to seeing you
-again this afternoon." She dropped her thick black veil over her
-face and glided from the room.
-
-"And what do you think of it all, Watson?" asked Sherlock Holmes,
-leaning back in his chair.
-
-"It seems to me to be a most dark and sinister business."
-
-"Dark enough and sinister enough."
-
-"Yet if the lady is correct in saying that the flooring and walls
-are sound, and that the door, window, and chimney are impassable,
-then her sister must have been undoubtedly alone when she met her
-mysterious end."
-
-"What becomes, then, of these nocturnal whistles, and what of the
-very peculiar words of the dying woman?"
-
-"I cannot think."
-
-"When you combine the ideas of whistles at night, the presence of
-a band of gipsies who are on intimate terms with this old doctor,
-the fact that we have every reason to believe that the doctor has
-an interest in preventing his stepdaughter's marriage, the dying
-allusion to a band, and, finally, the fact that Miss Helen Stoner
-heard a metallic clang, which might have been caused by one of
-those metal bars that secured the shutters falling back into its
-place, I think that there is good ground to think that the
-mystery may be cleared along those lines."
-
-"But what, then, did the gipsies do?"
-
-"I cannot imagine."
-
-"I see many objections to any such theory."
-
-"And so do I. It is precisely for that reason that we are going
-to Stoke Moran this day. I want to see whether the objections are
-fatal, or if they may be explained away. But what in the name of
-the devil!"
-
-The ejaculation had been drawn from my companion by the fact that
-our door had been suddenly dashed open, and that a huge man had
-framed himself in the aperture. His costume was a peculiar
-mixture of the professional and of the agricultural, having a
-black top-hat, a long frock-coat, and a pair of high gaiters,
-with a hunting-crop swinging in his hand. So tall was he that his
-hat actually brushed the cross bar of the doorway, and his
-breadth seemed to span it across from side to side. A large face,
-seared with a thousand wrinkles, burned yellow with the sun, and
-marked with every evil passion, was turned from one to the other
-of us, while his deep-set, bile-shot eyes, and his high, thin,
-fleshless nose, gave him somewhat the resemblance to a fierce old
-bird of prey.
-
-"Which of you is Holmes?" asked this apparition.
-
-"My name, sir; but you have the advantage of me," said my
-companion quietly.
-
-"I am Dr. Grimesby Roylott, of Stoke Moran."
-
-"Indeed, Doctor," said Holmes blandly. "Pray take a seat."
-
-"I will do nothing of the kind. My stepdaughter has been here. I
-have traced her. What has she been saying to you?"
-
-"It is a little cold for the time of the year," said Holmes.
-
-"What has she been saying to you?" screamed the old man
-furiously.
-
-"But I have heard that the crocuses promise well," continued my
-companion imperturbably.
-
-"Ha! You put me off, do you?" said our new visitor, taking a step
-forward and shaking his hunting-crop. "I know you, you scoundrel!
-I have heard of you before. You are Holmes, the meddler."
-
-My friend smiled.
-
-"Holmes, the busybody!"
-
-His smile broadened.
-
-"Holmes, the Scotland Yard Jack-in-office!"
-
-Holmes chuckled heartily. "Your conversation is most
-entertaining," said he. "When you go out close the door, for
-there is a decided draught."
-
-"I will go when I have said my say. Don't you dare to meddle with
-my affairs. I know that Miss Stoner has been here. I traced her!
-I am a dangerous man to fall foul of! See here." He stepped
-swiftly forward, seized the poker, and bent it into a curve with
-his huge brown hands.
-
-"See that you keep yourself out of my grip," he snarled, and
-hurling the twisted poker into the fireplace he strode out of the
-room.
-
-"He seems a very amiable person," said Holmes, laughing. "I am
-not quite so bulky, but if he had remained I might have shown him
-that my grip was not much more feeble than his own." As he spoke
-he picked up the steel poker and, with a sudden effort,
-straightened it out again.
-
-"Fancy his having the insolence to confound me with the official
-detective force! This incident gives zest to our investigation,
-however, and I only trust that our little friend will not suffer
-from her imprudence in allowing this brute to trace her. And now,
-Watson, we shall order breakfast, and afterwards I shall walk
-down to Doctors' Commons, where I hope to get some data which may
-help us in this matter."
-
-
-It was nearly one o'clock when Sherlock Holmes returned from his
-excursion. He held in his hand a sheet of blue paper, scrawled
-over with notes and figures.
-
-"I have seen the will of the deceased wife," said he. "To
-determine its exact meaning I have been obliged to work out the
-present prices of the investments with which it is concerned. The
-total income, which at the time of the wife's death was little
-short of 1100 pounds, is now, through the fall in agricultural
-prices, not more than 750 pounds. Each daughter can claim an
-income of 250 pounds, in case of marriage. It is evident,
-therefore, that if both girls had married, this beauty would have
-had a mere pittance, while even one of them would cripple him to
-a very serious extent. My morning's work has not been wasted,
-since it has proved that he has the very strongest motives for
-standing in the way of anything of the sort. And now, Watson,
-this is too serious for dawdling, especially as the old man is
-aware that we are interesting ourselves in his affairs; so if you
-are ready, we shall call a cab and drive to Waterloo. I should be
-very much obliged if you would slip your revolver into your
-pocket. An Eley's No. 2 is an excellent argument with gentlemen
-who can twist steel pokers into knots. That and a tooth-brush
-are, I think, all that we need."
-
-At Waterloo we were fortunate in catching a train for
-Leatherhead, where we hired a trap at the station inn and drove
-for four or five miles through the lovely Surrey lanes. It was a
-perfect day, with a bright sun and a few fleecy clouds in the
-heavens. The trees and wayside hedges were just throwing out
-their first green shoots, and the air was full of the pleasant
-smell of the moist earth. To me at least there was a strange
-contrast between the sweet promise of the spring and this
-sinister quest upon which we were engaged. My companion sat in
-the front of the trap, his arms folded, his hat pulled down over
-his eyes, and his chin sunk upon his breast, buried in the
-deepest thought. Suddenly, however, he started, tapped me on the
-shoulder, and pointed over the meadows.
-
-"Look there!" said he.
-
-A heavily timbered park stretched up in a gentle slope,
-thickening into a grove at the highest point. From amid the
-branches there jutted out the grey gables and high roof-tree of a
-very old mansion.
-
-"Stoke Moran?" said he.
-
-"Yes, sir, that be the house of Dr. Grimesby Roylott," remarked
-the driver.
-
-"There is some building going on there," said Holmes; "that is
-where we are going."
-
-"There's the village," said the driver, pointing to a cluster of
-roofs some distance to the left; "but if you want to get to the
-house, you'll find it shorter to get over this stile, and so by
-the foot-path over the fields. There it is, where the lady is
-walking."
-
-"And the lady, I fancy, is Miss Stoner," observed Holmes, shading
-his eyes. "Yes, I think we had better do as you suggest."
-
-We got off, paid our fare, and the trap rattled back on its way
-to Leatherhead.
-
-"I thought it as well," said Holmes as we climbed the stile,
-"that this fellow should think we had come here as architects, or
-on some definite business. It may stop his gossip.
-Good-afternoon, Miss Stoner. You see that we have been as good as
-our word."
-
-Our client of the morning had hurried forward to meet us with a
-face which spoke her joy. "I have been waiting so eagerly for
-you," she cried, shaking hands with us warmly. "All has turned
-out splendidly. Dr. Roylott has gone to town, and it is unlikely
-that he will be back before evening."
-
-"We have had the pleasure of making the doctor's acquaintance,"
-said Holmes, and in a few words he sketched out what had
-occurred. Miss Stoner turned white to the lips as she listened.
-
-"Good heavens!" she cried, "he has followed me, then."
-
-"So it appears."
-
-"He is so cunning that I never know when I am safe from him. What
-will he say when he returns?"
-
-"He must guard himself, for he may find that there is someone
-more cunning than himself upon his track. You must lock yourself
-up from him to-night. If he is violent, we shall take you away to
-your aunt's at Harrow. Now, we must make the best use of our
-time, so kindly take us at once to the rooms which we are to
-examine."
-
-The building was of grey, lichen-blotched stone, with a high
-central portion and two curving wings, like the claws of a crab,
-thrown out on each side. In one of these wings the windows were
-broken and blocked with wooden boards, while the roof was partly
-caved in, a picture of ruin. The central portion was in little
-better repair, but the right-hand block was comparatively modern,
-and the blinds in the windows, with the blue smoke curling up
-from the chimneys, showed that this was where the family resided.
-Some scaffolding had been erected against the end wall, and the
-stone-work had been broken into, but there were no signs of any
-workmen at the moment of our visit. Holmes walked slowly up and
-down the ill-trimmed lawn and examined with deep attention the
-outsides of the windows.
-
-"This, I take it, belongs to the room in which you used to sleep,
-the centre one to your sister's, and the one next to the main
-building to Dr. Roylott's chamber?"
-
-"Exactly so. But I am now sleeping in the middle one."
-
-"Pending the alterations, as I understand. By the way, there does
-not seem to be any very pressing need for repairs at that end
-wall."
-
-"There were none. I believe that it was an excuse to move me from
-my room."
-
-"Ah! that is suggestive. Now, on the other side of this narrow
-wing runs the corridor from which these three rooms open. There
-are windows in it, of course?"
-
-"Yes, but very small ones. Too narrow for anyone to pass
-through."
-
-"As you both locked your doors at night, your rooms were
-unapproachable from that side. Now, would you have the kindness
-to go into your room and bar your shutters?"
-
-Miss Stoner did so, and Holmes, after a careful examination
-through the open window, endeavoured in every way to force the
-shutter open, but without success. There was no slit through
-which a knife could be passed to raise the bar. Then with his
-lens he tested the hinges, but they were of solid iron, built
-firmly into the massive masonry. "Hum!" said he, scratching his
-chin in some perplexity, "my theory certainly presents some
-difficulties. No one could pass these shutters if they were
-bolted. Well, we shall see if the inside throws any light upon
-the matter."
-
-A small side door led into the whitewashed corridor from which
-the three bedrooms opened. Holmes refused to examine the third
-chamber, so we passed at once to the second, that in which Miss
-Stoner was now sleeping, and in which her sister had met with her
-fate. It was a homely little room, with a low ceiling and a
-gaping fireplace, after the fashion of old country-houses. A
-brown chest of drawers stood in one corner, a narrow
-white-counterpaned bed in another, and a dressing-table on the
-left-hand side of the window. These articles, with two small
-wicker-work chairs, made up all the furniture in the room save
-for a square of Wilton carpet in the centre. The boards round and
-the panelling of the walls were of brown, worm-eaten oak, so old
-and discoloured that it may have dated from the original building
-of the house. Holmes drew one of the chairs into a corner and sat
-silent, while his eyes travelled round and round and up and down,
-taking in every detail of the apartment.
-
-"Where does that bell communicate with?" he asked at last
-pointing to a thick bell-rope which hung down beside the bed, the
-tassel actually lying upon the pillow.
-
-"It goes to the housekeeper's room."
-
-"It looks newer than the other things?"
-
-"Yes, it was only put there a couple of years ago."
-
-"Your sister asked for it, I suppose?"
-
-"No, I never heard of her using it. We used always to get what we
-wanted for ourselves."
-
-"Indeed, it seemed unnecessary to put so nice a bell-pull there.
-You will excuse me for a few minutes while I satisfy myself as to
-this floor." He threw himself down upon his face with his lens in
-his hand and crawled swiftly backward and forward, examining
-minutely the cracks between the boards. Then he did the same with
-the wood-work with which the chamber was panelled. Finally he
-walked over to the bed and spent some time in staring at it and
-in running his eye up and down the wall. Finally he took the
-bell-rope in his hand and gave it a brisk tug.
-
-"Why, it's a dummy," said he.
-
-"Won't it ring?"
-
-"No, it is not even attached to a wire. This is very interesting.
-You can see now that it is fastened to a hook just above where
-the little opening for the ventilator is."
-
-"How very absurd! I never noticed that before."
-
-"Very strange!" muttered Holmes, pulling at the rope. "There are
-one or two very singular points about this room. For example,
-what a fool a builder must be to open a ventilator into another
-room, when, with the same trouble, he might have communicated
-with the outside air!"
-
-"That is also quite modern," said the lady.
-
-"Done about the same time as the bell-rope?" remarked Holmes.
-
-"Yes, there were several little changes carried out about that
-time."
-
-"They seem to have been of a most interesting character--dummy
-bell-ropes, and ventilators which do not ventilate. With your
-permission, Miss Stoner, we shall now carry our researches into
-the inner apartment."
-
-Dr. Grimesby Roylott's chamber was larger than that of his
-step-daughter, but was as plainly furnished. A camp-bed, a small
-wooden shelf full of books, mostly of a technical character, an
-armchair beside the bed, a plain wooden chair against the wall, a
-round table, and a large iron safe were the principal things
-which met the eye. Holmes walked slowly round and examined each
-and all of them with the keenest interest.
-
-"What's in here?" he asked, tapping the safe.
-
-"My stepfather's business papers."
-
-"Oh! you have seen inside, then?"
-
-"Only once, some years ago. I remember that it was full of
-papers."
-
-"There isn't a cat in it, for example?"
-
-"No. What a strange idea!"
-
-"Well, look at this!" He took up a small saucer of milk which
-stood on the top of it.
-
-"No; we don't keep a cat. But there is a cheetah and a baboon."
-
-"Ah, yes, of course! Well, a cheetah is just a big cat, and yet a
-saucer of milk does not go very far in satisfying its wants, I
-daresay. There is one point which I should wish to determine." He
-squatted down in front of the wooden chair and examined the seat
-of it with the greatest attention.
-
-"Thank you. That is quite settled," said he, rising and putting
-his lens in his pocket. "Hullo! Here is something interesting!"
-
-The object which had caught his eye was a small dog lash hung on
-one corner of the bed. The lash, however, was curled upon itself
-and tied so as to make a loop of whipcord.
-
-"What do you make of that, Watson?"
-
-"It's a common enough lash. But I don't know why it should be
-tied."
-
-"That is not quite so common, is it? Ah, me! it's a wicked world,
-and when a clever man turns his brains to crime it is the worst
-of all. I think that I have seen enough now, Miss Stoner, and
-with your permission we shall walk out upon the lawn."
-
-I had never seen my friend's face so grim or his brow so dark as
-it was when we turned from the scene of this investigation. We
-had walked several times up and down the lawn, neither Miss
-Stoner nor myself liking to break in upon his thoughts before he
-roused himself from his reverie.
-
-"It is very essential, Miss Stoner," said he, "that you should
-absolutely follow my advice in every respect."
-
-"I shall most certainly do so."
-
-"The matter is too serious for any hesitation. Your life may
-depend upon your compliance."
-
-"I assure you that I am in your hands."
-
-"In the first place, both my friend and I must spend the night in
-your room."
-
-Both Miss Stoner and I gazed at him in astonishment.
-
-"Yes, it must be so. Let me explain. I believe that that is the
-village inn over there?"
-
-"Yes, that is the Crown."
-
-"Very good. Your windows would be visible from there?"
-
-"Certainly."
-
-"You must confine yourself to your room, on pretence of a
-headache, when your stepfather comes back. Then when you hear him
-retire for the night, you must open the shutters of your window,
-undo the hasp, put your lamp there as a signal to us, and then
-withdraw quietly with everything which you are likely to want
-into the room which you used to occupy. I have no doubt that, in
-spite of the repairs, you could manage there for one night."
-
-"Oh, yes, easily."
-
-"The rest you will leave in our hands."
-
-"But what will you do?"
-
-"We shall spend the night in your room, and we shall investigate
-the cause of this noise which has disturbed you."
-
-"I believe, Mr. Holmes, that you have already made up your mind,"
-said Miss Stoner, laying her hand upon my companion's sleeve.
-
-"Perhaps I have."
-
-"Then, for pity's sake, tell me what was the cause of my sister's
-death."
-
-"I should prefer to have clearer proofs before I speak."
-
-"You can at least tell me whether my own thought is correct, and
-if she died from some sudden fright."
-
-"No, I do not think so. I think that there was probably some more
-tangible cause. And now, Miss Stoner, we must leave you for if
-Dr. Roylott returned and saw us our journey would be in vain.
-Good-bye, and be brave, for if you will do what I have told you,
-you may rest assured that we shall soon drive away the dangers
-that threaten you."
-
-Sherlock Holmes and I had no difficulty in engaging a bedroom and
-sitting-room at the Crown Inn. They were on the upper floor, and
-from our window we could command a view of the avenue gate, and
-of the inhabited wing of Stoke Moran Manor House. At dusk we saw
-Dr. Grimesby Roylott drive past, his huge form looming up beside
-the little figure of the lad who drove him. The boy had some
-slight difficulty in undoing the heavy iron gates, and we heard
-the hoarse roar of the doctor's voice and saw the fury with which
-he shook his clinched fists at him. The trap drove on, and a few
-minutes later we saw a sudden light spring up among the trees as
-the lamp was lit in one of the sitting-rooms.
-
-"Do you know, Watson," said Holmes as we sat together in the
-gathering darkness, "I have really some scruples as to taking you
-to-night. There is a distinct element of danger."
-
-"Can I be of assistance?"
-
-"Your presence might be invaluable."
-
-"Then I shall certainly come."
-
-"It is very kind of you."
-
-"You speak of danger. You have evidently seen more in these rooms
-than was visible to me."
-
-"No, but I fancy that I may have deduced a little more. I imagine
-that you saw all that I did."
-
-"I saw nothing remarkable save the bell-rope, and what purpose
-that could answer I confess is more than I can imagine."
-
-"You saw the ventilator, too?"
-
-"Yes, but I do not think that it is such a very unusual thing to
-have a small opening between two rooms. It was so small that a
-rat could hardly pass through."
-
-"I knew that we should find a ventilator before ever we came to
-Stoke Moran."
-
-"My dear Holmes!"
-
-"Oh, yes, I did. You remember in her statement she said that her
-sister could smell Dr. Roylott's cigar. Now, of course that
-suggested at once that there must be a communication between the
-two rooms. It could only be a small one, or it would have been
-remarked upon at the coroner's inquiry. I deduced a ventilator."
-
-"But what harm can there be in that?"
-
-"Well, there is at least a curious coincidence of dates. A
-ventilator is made, a cord is hung, and a lady who sleeps in the
-bed dies. Does not that strike you?"
-
-"I cannot as yet see any connection."
-
-"Did you observe anything very peculiar about that bed?"
-
-"No."
-
-"It was clamped to the floor. Did you ever see a bed fastened
-like that before?"
-
-"I cannot say that I have."
-
-"The lady could not move her bed. It must always be in the same
-relative position to the ventilator and to the rope--or so we may
-call it, since it was clearly never meant for a bell-pull."
-
-"Holmes," I cried, "I seem to see dimly what you are hinting at.
-We are only just in time to prevent some subtle and horrible
-crime."
-
-"Subtle enough and horrible enough. When a doctor does go wrong
-he is the first of criminals. He has nerve and he has knowledge.
-Palmer and Pritchard were among the heads of their profession.
-This man strikes even deeper, but I think, Watson, that we shall
-be able to strike deeper still. But we shall have horrors enough
-before the night is over; for goodness' sake let us have a quiet
-pipe and turn our minds for a few hours to something more
-cheerful."
-
-
-About nine o'clock the light among the trees was extinguished,
-and all was dark in the direction of the Manor House. Two hours
-passed slowly away, and then, suddenly, just at the stroke of
-eleven, a single bright light shone out right in front of us.
-
-"That is our signal," said Holmes, springing to his feet; "it
-comes from the middle window."
-
-As we passed out he exchanged a few words with the landlord,
-explaining that we were going on a late visit to an acquaintance,
-and that it was possible that we might spend the night there. A
-moment later we were out on the dark road, a chill wind blowing
-in our faces, and one yellow light twinkling in front of us
-through the gloom to guide us on our sombre errand.
-
-There was little difficulty in entering the grounds, for
-unrepaired breaches gaped in the old park wall. Making our way
-among the trees, we reached the lawn, crossed it, and were about
-to enter through the window when out from a clump of laurel
-bushes there darted what seemed to be a hideous and distorted
-child, who threw itself upon the grass with writhing limbs and
-then ran swiftly across the lawn into the darkness.
-
-"My God!" I whispered; "did you see it?"
-
-Holmes was for the moment as startled as I. His hand closed like
-a vice upon my wrist in his agitation. Then he broke into a low
-laugh and put his lips to my ear.
-
-"It is a nice household," he murmured. "That is the baboon."
-
-I had forgotten the strange pets which the doctor affected. There
-was a cheetah, too; perhaps we might find it upon our shoulders
-at any moment. I confess that I felt easier in my mind when,
-after following Holmes' example and slipping off my shoes, I
-found myself inside the bedroom. My companion noiselessly closed
-the shutters, moved the lamp onto the table, and cast his eyes
-round the room. All was as we had seen it in the daytime. Then
-creeping up to me and making a trumpet of his hand, he whispered
-into my ear again so gently that it was all that I could do to
-distinguish the words:
-
-"The least sound would be fatal to our plans."
-
-I nodded to show that I had heard.
-
-"We must sit without light. He would see it through the
-ventilator."
-
-I nodded again.
-
-"Do not go asleep; your very life may depend upon it. Have your
-pistol ready in case we should need it. I will sit on the side of
-the bed, and you in that chair."
-
-I took out my revolver and laid it on the corner of the table.
-
-Holmes had brought up a long thin cane, and this he placed upon
-the bed beside him. By it he laid the box of matches and the
-stump of a candle. Then he turned down the lamp, and we were left
-in darkness.
-
-How shall I ever forget that dreadful vigil? I could not hear a
-sound, not even the drawing of a breath, and yet I knew that my
-companion sat open-eyed, within a few feet of me, in the same
-state of nervous tension in which I was myself. The shutters cut
-off the least ray of light, and we waited in absolute darkness.
-
-From outside came the occasional cry of a night-bird, and once at
-our very window a long drawn catlike whine, which told us that
-the cheetah was indeed at liberty. Far away we could hear the
-deep tones of the parish clock, which boomed out every quarter of
-an hour. How long they seemed, those quarters! Twelve struck, and
-one and two and three, and still we sat waiting silently for
-whatever might befall.
-
-Suddenly there was the momentary gleam of a light up in the
-direction of the ventilator, which vanished immediately, but was
-succeeded by a strong smell of burning oil and heated metal.
-Someone in the next room had lit a dark-lantern. I heard a gentle
-sound of movement, and then all was silent once more, though the
-smell grew stronger. For half an hour I sat with straining ears.
-Then suddenly another sound became audible--a very gentle,
-soothing sound, like that of a small jet of steam escaping
-continually from a kettle. The instant that we heard it, Holmes
-sprang from the bed, struck a match, and lashed furiously with
-his cane at the bell-pull.
-
-"You see it, Watson?" he yelled. "You see it?"
-
-But I saw nothing. At the moment when Holmes struck the light I
-heard a low, clear whistle, but the sudden glare flashing into my
-weary eyes made it impossible for me to tell what it was at which
-my friend lashed so savagely. I could, however, see that his face
-was deadly pale and filled with horror and loathing. He had
-ceased to strike and was gazing up at the ventilator when
-suddenly there broke from the silence of the night the most
-horrible cry to which I have ever listened. It swelled up louder
-and louder, a hoarse yell of pain and fear and anger all mingled
-in the one dreadful shriek. They say that away down in the
-village, and even in the distant parsonage, that cry raised the
-sleepers from their beds. It struck cold to our hearts, and I
-stood gazing at Holmes, and he at me, until the last echoes of it
-had died away into the silence from which it rose.
-
-"What can it mean?" I gasped.
-
-"It means that it is all over," Holmes answered. "And perhaps,
-after all, it is for the best. Take your pistol, and we will
-enter Dr. Roylott's room."
-
-With a grave face he lit the lamp and led the way down the
-corridor. Twice he struck at the chamber door without any reply
-from within. Then he turned the handle and entered, I at his
-heels, with the cocked pistol in my hand.
-
-It was a singular sight which met our eyes. On the table stood a
-dark-lantern with the shutter half open, throwing a brilliant
-beam of light upon the iron safe, the door of which was ajar.
-Beside this table, on the wooden chair, sat Dr. Grimesby Roylott
-clad in a long grey dressing-gown, his bare ankles protruding
-beneath, and his feet thrust into red heelless Turkish slippers.
-Across his lap lay the short stock with the long lash which we
-had noticed during the day. His chin was cocked upward and his
-eyes were fixed in a dreadful, rigid stare at the corner of the
-ceiling. Round his brow he had a peculiar yellow band, with
-brownish speckles, which seemed to be bound tightly round his
-head. As we entered he made neither sound nor motion.
-
-"The band! the speckled band!" whispered Holmes.
-
-I took a step forward. In an instant his strange headgear began
-to move, and there reared itself from among his hair the squat
-diamond-shaped head and puffed neck of a loathsome serpent.
-
-"It is a swamp adder!" cried Holmes; "the deadliest snake in
-India. He has died within ten seconds of being bitten. Violence
-does, in truth, recoil upon the violent, and the schemer falls
-into the pit which he digs for another. Let us thrust this
-creature back into its den, and we can then remove Miss Stoner to
-some place of shelter and let the county police know what has
-happened."
-
-As he spoke he drew the dog-whip swiftly from the dead man's lap,
-and throwing the noose round the reptile's neck he drew it from
-its horrid perch and, carrying it at arm's length, threw it into
-the iron safe, which he closed upon it.
-
-Such are the true facts of the death of Dr. Grimesby Roylott, of
-Stoke Moran. It is not necessary that I should prolong a
-narrative which has already run to too great a length by telling
-how we broke the sad news to the terrified girl, how we conveyed
-her by the morning train to the care of her good aunt at Harrow,
-of how the slow process of official inquiry came to the
-conclusion that the doctor met his fate while indiscreetly
-playing with a dangerous pet. The little which I had yet to learn
-of the case was told me by Sherlock Holmes as we travelled back
-next day.
-
-"I had," said he, "come to an entirely erroneous conclusion which
-shows, my dear Watson, how dangerous it always is to reason from
-insufficient data. The presence of the gipsies, and the use of
-the word 'band,' which was used by the poor girl, no doubt, to
-explain the appearance which she had caught a hurried glimpse of
-by the light of her match, were sufficient to put me upon an
-entirely wrong scent. I can only claim the merit that I instantly
-reconsidered my position when, however, it became clear to me
-that whatever danger threatened an occupant of the room could not
-come either from the window or the door. My attention was
-speedily drawn, as I have already remarked to you, to this
-ventilator, and to the bell-rope which hung down to the bed. The
-discovery that this was a dummy, and that the bed was clamped to
-the floor, instantly gave rise to the suspicion that the rope was
-there as a bridge for something passing through the hole and
-coming to the bed. The idea of a snake instantly occurred to me,
-and when I coupled it with my knowledge that the doctor was
-furnished with a supply of creatures from India, I felt that I
-was probably on the right track. The idea of using a form of
-poison which could not possibly be discovered by any chemical
-test was just such a one as would occur to a clever and ruthless
-man who had had an Eastern training. The rapidity with which such
-a poison would take effect would also, from his point of view, be
-an advantage. It would be a sharp-eyed coroner, indeed, who could
-distinguish the two little dark punctures which would show where
-the poison fangs had done their work. Then I thought of the
-whistle. Of course he must recall the snake before the morning
-light revealed it to the victim. He had trained it, probably by
-the use of the milk which we saw, to return to him when summoned.
-He would put it through this ventilator at the hour that he
-thought best, with the certainty that it would crawl down the
-rope and land on the bed. It might or might not bite the
-occupant, perhaps she might escape every night for a week, but
-sooner or later she must fall a victim.
-
-"I had come to these conclusions before ever I had entered his
-room. An inspection of his chair showed me that he had been in
-the habit of standing on it, which of course would be necessary
-in order that he should reach the ventilator. The sight of the
-safe, the saucer of milk, and the loop of whipcord were enough to
-finally dispel any doubts which may have remained. The metallic
-clang heard by Miss Stoner was obviously caused by her stepfather
-hastily closing the door of his safe upon its terrible occupant.
-Having once made up my mind, you know the steps which I took in
-order to put the matter to the proof. I heard the creature hiss
-as I have no doubt that you did also, and I instantly lit the
-light and attacked it."
-
-"With the result of driving it through the ventilator."
-
-"And also with the result of causing it to turn upon its master
-at the other side. Some of the blows of my cane came home and
-roused its snakish temper, so that it flew upon the first person
-it saw. In this way I am no doubt indirectly responsible for Dr.
-Grimesby Roylott's death, and I cannot say that it is likely to
-weigh very heavily upon my conscience."
-
-
-
-IX. THE ADVENTURE OF THE ENGINEER'S THUMB
-
-Of all the problems which have been submitted to my friend, Mr.
-Sherlock Holmes, for solution during the years of our intimacy,
-there were only two which I was the means of introducing to his
-notice--that of Mr. Hatherley's thumb, and that of Colonel
-Warburton's madness. Of these the latter may have afforded a
-finer field for an acute and original observer, but the other was
-so strange in its inception and so dramatic in its details that
-it may be the more worthy of being placed upon record, even if it
-gave my friend fewer openings for those deductive methods of
-reasoning by which he achieved such remarkable results. The story
-has, I believe, been told more than once in the newspapers, but,
-like all such narratives, its effect is much less striking when
-set forth en bloc in a single half-column of print than when the
-facts slowly evolve before your own eyes, and the mystery clears
-gradually away as each new discovery furnishes a step which leads
-on to the complete truth. At the time the circumstances made a
-deep impression upon me, and the lapse of two years has hardly
-served to weaken the effect.
-
-It was in the summer of '89, not long after my marriage, that the
-events occurred which I am now about to summarise. I had returned
-to civil practice and had finally abandoned Holmes in his Baker
-Street rooms, although I continually visited him and occasionally
-even persuaded him to forgo his Bohemian habits so far as to come
-and visit us. My practice had steadily increased, and as I
-happened to live at no very great distance from Paddington
-Station, I got a few patients from among the officials. One of
-these, whom I had cured of a painful and lingering disease, was
-never weary of advertising my virtues and of endeavouring to send
-me on every sufferer over whom he might have any influence.
-
-One morning, at a little before seven o'clock, I was awakened by
-the maid tapping at the door to announce that two men had come
-from Paddington and were waiting in the consulting-room. I
-dressed hurriedly, for I knew by experience that railway cases
-were seldom trivial, and hastened downstairs. As I descended, my
-old ally, the guard, came out of the room and closed the door
-tightly behind him.
-
-"I've got him here," he whispered, jerking his thumb over his
-shoulder; "he's all right."
-
-"What is it, then?" I asked, for his manner suggested that it was
-some strange creature which he had caged up in my room.
-
-"It's a new patient," he whispered. "I thought I'd bring him
-round myself; then he couldn't slip away. There he is, all safe
-and sound. I must go now, Doctor; I have my dooties, just the
-same as you." And off he went, this trusty tout, without even
-giving me time to thank him.
-
-I entered my consulting-room and found a gentleman seated by the
-table. He was quietly dressed in a suit of heather tweed with a
-soft cloth cap which he had laid down upon my books. Round one of
-his hands he had a handkerchief wrapped, which was mottled all
-over with bloodstains. He was young, not more than
-five-and-twenty, I should say, with a strong, masculine face; but
-he was exceedingly pale and gave me the impression of a man who
-was suffering from some strong agitation, which it took all his
-strength of mind to control.
-
-"I am sorry to knock you up so early, Doctor," said he, "but I
-have had a very serious accident during the night. I came in by
-train this morning, and on inquiring at Paddington as to where I
-might find a doctor, a worthy fellow very kindly escorted me
-here. I gave the maid a card, but I see that she has left it upon
-the side-table."
-
-I took it up and glanced at it. "Mr. Victor Hatherley, hydraulic
-engineer, 16A, Victoria Street (3rd floor)." That was the name,
-style, and abode of my morning visitor. "I regret that I have
-kept you waiting," said I, sitting down in my library-chair. "You
-are fresh from a night journey, I understand, which is in itself
-a monotonous occupation."
-
-"Oh, my night could not be called monotonous," said he, and
-laughed. He laughed very heartily, with a high, ringing note,
-leaning back in his chair and shaking his sides. All my medical
-instincts rose up against that laugh.
-
-"Stop it!" I cried; "pull yourself together!" and I poured out
-some water from a caraffe.
-
-It was useless, however. He was off in one of those hysterical
-outbursts which come upon a strong nature when some great crisis
-is over and gone. Presently he came to himself once more, very
-weary and pale-looking.
-
-"I have been making a fool of myself," he gasped.
-
-"Not at all. Drink this." I dashed some brandy into the water,
-and the colour began to come back to his bloodless cheeks.
-
-"That's better!" said he. "And now, Doctor, perhaps you would
-kindly attend to my thumb, or rather to the place where my thumb
-used to be."
-
-He unwound the handkerchief and held out his hand. It gave even
-my hardened nerves a shudder to look at it. There were four
-protruding fingers and a horrid red, spongy surface where the
-thumb should have been. It had been hacked or torn right out from
-the roots.
-
-"Good heavens!" I cried, "this is a terrible injury. It must have
-bled considerably."
-
-"Yes, it did. I fainted when it was done, and I think that I must
-have been senseless for a long time. When I came to I found that
-it was still bleeding, so I tied one end of my handkerchief very
-tightly round the wrist and braced it up with a twig."
-
-"Excellent! You should have been a surgeon."
-
-"It is a question of hydraulics, you see, and came within my own
-province."
-
-"This has been done," said I, examining the wound, "by a very
-heavy and sharp instrument."
-
-"A thing like a cleaver," said he.
-
-"An accident, I presume?"
-
-"By no means."
-
-"What! a murderous attack?"
-
-"Very murderous indeed."
-
-"You horrify me."
-
-I sponged the wound, cleaned it, dressed it, and finally covered
-it over with cotton wadding and carbolised bandages. He lay back
-without wincing, though he bit his lip from time to time.
-
-"How is that?" I asked when I had finished.
-
-"Capital! Between your brandy and your bandage, I feel a new man.
-I was very weak, but I have had a good deal to go through."
-
-"Perhaps you had better not speak of the matter. It is evidently
-trying to your nerves."
-
-"Oh, no, not now. I shall have to tell my tale to the police;
-but, between ourselves, if it were not for the convincing
-evidence of this wound of mine, I should be surprised if they
-believed my statement, for it is a very extraordinary one, and I
-have not much in the way of proof with which to back it up; and,
-even if they believe me, the clues which I can give them are so
-vague that it is a question whether justice will be done."
-
-"Ha!" cried I, "if it is anything in the nature of a problem
-which you desire to see solved, I should strongly recommend you
-to come to my friend, Mr. Sherlock Holmes, before you go to the
-official police."
-
-"Oh, I have heard of that fellow," answered my visitor, "and I
-should be very glad if he would take the matter up, though of
-course I must use the official police as well. Would you give me
-an introduction to him?"
-
-"I'll do better. I'll take you round to him myself."
-
-"I should be immensely obliged to you."
-
-"We'll call a cab and go together. We shall just be in time to
-have a little breakfast with him. Do you feel equal to it?"
-
-"Yes; I shall not feel easy until I have told my story."
-
-"Then my servant will call a cab, and I shall be with you in an
-instant." I rushed upstairs, explained the matter shortly to my
-wife, and in five minutes was inside a hansom, driving with my
-new acquaintance to Baker Street.
-
-Sherlock Holmes was, as I expected, lounging about his
-sitting-room in his dressing-gown, reading the agony column of The
-Times and smoking his before-breakfast pipe, which was composed
-of all the plugs and dottles left from his smokes of the day
-before, all carefully dried and collected on the corner of the
-mantelpiece. He received us in his quietly genial fashion,
-ordered fresh rashers and eggs, and joined us in a hearty meal.
-When it was concluded he settled our new acquaintance upon the
-sofa, placed a pillow beneath his head, and laid a glass of
-brandy and water within his reach.
-
-"It is easy to see that your experience has been no common one,
-Mr. Hatherley," said he. "Pray, lie down there and make yourself
-absolutely at home. Tell us what you can, but stop when you are
-tired and keep up your strength with a little stimulant."
-
-"Thank you," said my patient, "but I have felt another man since
-the doctor bandaged me, and I think that your breakfast has
-completed the cure. I shall take up as little of your valuable
-time as possible, so I shall start at once upon my peculiar
-experiences."
-
-Holmes sat in his big armchair with the weary, heavy-lidded
-expression which veiled his keen and eager nature, while I sat
-opposite to him, and we listened in silence to the strange story
-which our visitor detailed to us.
-
-"You must know," said he, "that I am an orphan and a bachelor,
-residing alone in lodgings in London. By profession I am a
-hydraulic engineer, and I have had considerable experience of my
-work during the seven years that I was apprenticed to Venner &
-Matheson, the well-known firm, of Greenwich. Two years ago,
-having served my time, and having also come into a fair sum of
-money through my poor father's death, I determined to start in
-business for myself and took professional chambers in Victoria
-Street.
-
-"I suppose that everyone finds his first independent start in
-business a dreary experience. To me it has been exceptionally so.
-During two years I have had three consultations and one small
-job, and that is absolutely all that my profession has brought
-me. My gross takings amount to 27 pounds 10s. Every day, from
-nine in the morning until four in the afternoon, I waited in my
-little den, until at last my heart began to sink, and I came to
-believe that I should never have any practice at all.
-
-"Yesterday, however, just as I was thinking of leaving the
-office, my clerk entered to say there was a gentleman waiting who
-wished to see me upon business. He brought up a card, too, with
-the name of 'Colonel Lysander Stark' engraved upon it. Close at
-his heels came the colonel himself, a man rather over the middle
-size, but of an exceeding thinness. I do not think that I have
-ever seen so thin a man. His whole face sharpened away into nose
-and chin, and the skin of his cheeks was drawn quite tense over
-his outstanding bones. Yet this emaciation seemed to be his
-natural habit, and due to no disease, for his eye was bright, his
-step brisk, and his bearing assured. He was plainly but neatly
-dressed, and his age, I should judge, would be nearer forty than
-thirty.
-
-"'Mr. Hatherley?' said he, with something of a German accent.
-'You have been recommended to me, Mr. Hatherley, as being a man
-who is not only proficient in his profession but is also discreet
-and capable of preserving a secret.'
-
-"I bowed, feeling as flattered as any young man would at such an
-address. 'May I ask who it was who gave me so good a character?'
-
-"'Well, perhaps it is better that I should not tell you that just
-at this moment. I have it from the same source that you are both
-an orphan and a bachelor and are residing alone in London.'
-
-"'That is quite correct,' I answered; 'but you will excuse me if
-I say that I cannot see how all this bears upon my professional
-qualifications. I understand that it was on a professional matter
-that you wished to speak to me?'
-
-"'Undoubtedly so. But you will find that all I say is really to
-the point. I have a professional commission for you, but absolute
-secrecy is quite essential--absolute secrecy, you understand, and
-of course we may expect that more from a man who is alone than
-from one who lives in the bosom of his family.'
-
-"'If I promise to keep a secret,' said I, 'you may absolutely
-depend upon my doing so.'
-
-"He looked very hard at me as I spoke, and it seemed to me that I
-had never seen so suspicious and questioning an eye.
-
-"'Do you promise, then?' said he at last.
-
-"'Yes, I promise.'
-
-"'Absolute and complete silence before, during, and after? No
-reference to the matter at all, either in word or writing?'
-
-"'I have already given you my word.'
-
-"'Very good.' He suddenly sprang up, and darting like lightning
-across the room he flung open the door. The passage outside was
-empty.
-
-"'That's all right,' said he, coming back. 'I know that clerks are
-sometimes curious as to their master's affairs. Now we can talk
-in safety.' He drew up his chair very close to mine and began to
-stare at me again with the same questioning and thoughtful look.
-
-"A feeling of repulsion, and of something akin to fear had begun
-to rise within me at the strange antics of this fleshless man.
-Even my dread of losing a client could not restrain me from
-showing my impatience.
-
-"'I beg that you will state your business, sir,' said I; 'my time
-is of value.' Heaven forgive me for that last sentence, but the
-words came to my lips.
-
-"'How would fifty guineas for a night's work suit you?' he asked.
-
-"'Most admirably.'
-
-"'I say a night's work, but an hour's would be nearer the mark. I
-simply want your opinion about a hydraulic stamping machine which
-has got out of gear. If you show us what is wrong we shall soon
-set it right ourselves. What do you think of such a commission as
-that?'
-
-"'The work appears to be light and the pay munificent.'
-
-"'Precisely so. We shall want you to come to-night by the last
-train.'
-
-"'Where to?'
-
-"'To Eyford, in Berkshire. It is a little place near the borders
-of Oxfordshire, and within seven miles of Reading. There is a
-train from Paddington which would bring you there at about
-11:15.'
-
-"'Very good.'
-
-"'I shall come down in a carriage to meet you.'
-
-"'There is a drive, then?'
-
-"'Yes, our little place is quite out in the country. It is a good
-seven miles from Eyford Station.'
-
-"'Then we can hardly get there before midnight. I suppose there
-would be no chance of a train back. I should be compelled to stop
-the night.'
-
-"'Yes, we could easily give you a shake-down.'
-
-"'That is very awkward. Could I not come at some more convenient
-hour?'
-
-"'We have judged it best that you should come late. It is to
-recompense you for any inconvenience that we are paying to you, a
-young and unknown man, a fee which would buy an opinion from the
-very heads of your profession. Still, of course, if you would
-like to draw out of the business, there is plenty of time to do
-so.'
-
-"I thought of the fifty guineas, and of how very useful they
-would be to me. 'Not at all,' said I, 'I shall be very happy to
-accommodate myself to your wishes. I should like, however, to
-understand a little more clearly what it is that you wish me to
-do.'
-
-"'Quite so. It is very natural that the pledge of secrecy which
-we have exacted from you should have aroused your curiosity. I
-have no wish to commit you to anything without your having it all
-laid before you. I suppose that we are absolutely safe from
-eavesdroppers?'
-
-"'Entirely.'
-
-"'Then the matter stands thus. You are probably aware that
-fuller's-earth is a valuable product, and that it is only found
-in one or two places in England?'
-
-"'I have heard so.'
-
-"'Some little time ago I bought a small place--a very small
-place--within ten miles of Reading. I was fortunate enough to
-discover that there was a deposit of fuller's-earth in one of my
-fields. On examining it, however, I found that this deposit was a
-comparatively small one, and that it formed a link between two
-very much larger ones upon the right and left--both of them,
-however, in the grounds of my neighbours. These good people were
-absolutely ignorant that their land contained that which was
-quite as valuable as a gold-mine. Naturally, it was to my
-interest to buy their land before they discovered its true value,
-but unfortunately I had no capital by which I could do this. I
-took a few of my friends into the secret, however, and they
-suggested that we should quietly and secretly work our own little
-deposit and that in this way we should earn the money which would
-enable us to buy the neighbouring fields. This we have now been
-doing for some time, and in order to help us in our operations we
-erected a hydraulic press. This press, as I have already
-explained, has got out of order, and we wish your advice upon the
-subject. We guard our secret very jealously, however, and if it
-once became known that we had hydraulic engineers coming to our
-little house, it would soon rouse inquiry, and then, if the facts
-came out, it would be good-bye to any chance of getting these
-fields and carrying out our plans. That is why I have made you
-promise me that you will not tell a human being that you are
-going to Eyford to-night. I hope that I make it all plain?'
-
-"'I quite follow you,' said I. 'The only point which I could not
-quite understand was what use you could make of a hydraulic press
-in excavating fuller's-earth, which, as I understand, is dug out
-like gravel from a pit.'
-
-"'Ah!' said he carelessly, 'we have our own process. We compress
-the earth into bricks, so as to remove them without revealing
-what they are. But that is a mere detail. I have taken you fully
-into my confidence now, Mr. Hatherley, and I have shown you how I
-trust you.' He rose as he spoke. 'I shall expect you, then, at
-Eyford at 11:15.'
-
-"'I shall certainly be there.'
-
-"'And not a word to a soul.' He looked at me with a last long,
-questioning gaze, and then, pressing my hand in a cold, dank
-grasp, he hurried from the room.
-
-"Well, when I came to think it all over in cool blood I was very
-much astonished, as you may both think, at this sudden commission
-which had been intrusted to me. On the one hand, of course, I was
-glad, for the fee was at least tenfold what I should have asked
-had I set a price upon my own services, and it was possible that
-this order might lead to other ones. On the other hand, the face
-and manner of my patron had made an unpleasant impression upon
-me, and I could not think that his explanation of the
-fuller's-earth was sufficient to explain the necessity for my
-coming at midnight, and his extreme anxiety lest I should tell
-anyone of my errand. However, I threw all fears to the winds, ate
-a hearty supper, drove to Paddington, and started off, having
-obeyed to the letter the injunction as to holding my tongue.
-
-"At Reading I had to change not only my carriage but my station.
-However, I was in time for the last train to Eyford, and I
-reached the little dim-lit station after eleven o'clock. I was the
-only passenger who got out there, and there was no one upon the
-platform save a single sleepy porter with a lantern. As I passed
-out through the wicket gate, however, I found my acquaintance of
-the morning waiting in the shadow upon the other side. Without a
-word he grasped my arm and hurried me into a carriage, the door
-of which was standing open. He drew up the windows on either
-side, tapped on the wood-work, and away we went as fast as the
-horse could go."
-
-"One horse?" interjected Holmes.
-
-"Yes, only one."
-
-"Did you observe the colour?"
-
-"Yes, I saw it by the side-lights when I was stepping into the
-carriage. It was a chestnut."
-
-"Tired-looking or fresh?"
-
-"Oh, fresh and glossy."
-
-"Thank you. I am sorry to have interrupted you. Pray continue
-your most interesting statement."
-
-"Away we went then, and we drove for at least an hour. Colonel
-Lysander Stark had said that it was only seven miles, but I
-should think, from the rate that we seemed to go, and from the
-time that we took, that it must have been nearer twelve. He sat
-at my side in silence all the time, and I was aware, more than
-once when I glanced in his direction, that he was looking at me
-with great intensity. The country roads seem to be not very good
-in that part of the world, for we lurched and jolted terribly. I
-tried to look out of the windows to see something of where we
-were, but they were made of frosted glass, and I could make out
-nothing save the occasional bright blur of a passing light. Now
-and then I hazarded some remark to break the monotony of the
-journey, but the colonel answered only in monosyllables, and the
-conversation soon flagged. At last, however, the bumping of the
-road was exchanged for the crisp smoothness of a gravel-drive,
-and the carriage came to a stand. Colonel Lysander Stark sprang
-out, and, as I followed after him, pulled me swiftly into a porch
-which gaped in front of us. We stepped, as it were, right out of
-the carriage and into the hall, so that I failed to catch the
-most fleeting glance of the front of the house. The instant that
-I had crossed the threshold the door slammed heavily behind us,
-and I heard faintly the rattle of the wheels as the carriage
-drove away.
-
-"It was pitch dark inside the house, and the colonel fumbled
-about looking for matches and muttering under his breath.
-Suddenly a door opened at the other end of the passage, and a
-long, golden bar of light shot out in our direction. It grew
-broader, and a woman appeared with a lamp in her hand, which she
-held above her head, pushing her face forward and peering at us.
-I could see that she was pretty, and from the gloss with which
-the light shone upon her dark dress I knew that it was a rich
-material. She spoke a few words in a foreign tongue in a tone as
-though asking a question, and when my companion answered in a
-gruff monosyllable she gave such a start that the lamp nearly
-fell from her hand. Colonel Stark went up to her, whispered
-something in her ear, and then, pushing her back into the room
-from whence she had come, he walked towards me again with the
-lamp in his hand.
-
-"'Perhaps you will have the kindness to wait in this room for a
-few minutes,' said he, throwing open another door. It was a
-quiet, little, plainly furnished room, with a round table in the
-centre, on which several German books were scattered. Colonel
-Stark laid down the lamp on the top of a harmonium beside the
-door. 'I shall not keep you waiting an instant,' said he, and
-vanished into the darkness.
-
-"I glanced at the books upon the table, and in spite of my
-ignorance of German I could see that two of them were treatises
-on science, the others being volumes of poetry. Then I walked
-across to the window, hoping that I might catch some glimpse of
-the country-side, but an oak shutter, heavily barred, was folded
-across it. It was a wonderfully silent house. There was an old
-clock ticking loudly somewhere in the passage, but otherwise
-everything was deadly still. A vague feeling of uneasiness began
-to steal over me. Who were these German people, and what were
-they doing living in this strange, out-of-the-way place? And
-where was the place? I was ten miles or so from Eyford, that was
-all I knew, but whether north, south, east, or west I had no
-idea. For that matter, Reading, and possibly other large towns,
-were within that radius, so the place might not be so secluded,
-after all. Yet it was quite certain, from the absolute stillness,
-that we were in the country. I paced up and down the room,
-humming a tune under my breath to keep up my spirits and feeling
-that I was thoroughly earning my fifty-guinea fee.
-
-"Suddenly, without any preliminary sound in the midst of the
-utter stillness, the door of my room swung slowly open. The woman
-was standing in the aperture, the darkness of the hall behind
-her, the yellow light from my lamp beating upon her eager and
-beautiful face. I could see at a glance that she was sick with
-fear, and the sight sent a chill to my own heart. She held up one
-shaking finger to warn me to be silent, and she shot a few
-whispered words of broken English at me, her eyes glancing back,
-like those of a frightened horse, into the gloom behind her.
-
-"'I would go,' said she, trying hard, as it seemed to me, to
-speak calmly; 'I would go. I should not stay here. There is no
-good for you to do.'
-
-"'But, madam,' said I, 'I have not yet done what I came for. I
-cannot possibly leave until I have seen the machine.'
-
-"'It is not worth your while to wait,' she went on. 'You can pass
-through the door; no one hinders.' And then, seeing that I smiled
-and shook my head, she suddenly threw aside her constraint and
-made a step forward, with her hands wrung together. 'For the love
-of Heaven!' she whispered, 'get away from here before it is too
-late!'
-
-"But I am somewhat headstrong by nature, and the more ready to
-engage in an affair when there is some obstacle in the way. I
-thought of my fifty-guinea fee, of my wearisome journey, and of
-the unpleasant night which seemed to be before me. Was it all to
-go for nothing? Why should I slink away without having carried
-out my commission, and without the payment which was my due? This
-woman might, for all I knew, be a monomaniac. With a stout
-bearing, therefore, though her manner had shaken me more than I
-cared to confess, I still shook my head and declared my intention
-of remaining where I was. She was about to renew her entreaties
-when a door slammed overhead, and the sound of several footsteps
-was heard upon the stairs. She listened for an instant, threw up
-her hands with a despairing gesture, and vanished as suddenly and
-as noiselessly as she had come.
-
-"The newcomers were Colonel Lysander Stark and a short thick man
-with a chinchilla beard growing out of the creases of his double
-chin, who was introduced to me as Mr. Ferguson.
-
-"'This is my secretary and manager,' said the colonel. 'By the
-way, I was under the impression that I left this door shut just
-now. I fear that you have felt the draught.'
-
-"'On the contrary,' said I, 'I opened the door myself because I
-felt the room to be a little close.'
-
-"He shot one of his suspicious looks at me. 'Perhaps we had
-better proceed to business, then,' said he. 'Mr. Ferguson and I
-will take you up to see the machine.'
-
-"'I had better put my hat on, I suppose.'
-
-"'Oh, no, it is in the house.'
-
-"'What, you dig fuller's-earth in the house?'
-
-"'No, no. This is only where we compress it. But never mind that.
-All we wish you to do is to examine the machine and to let us
-know what is wrong with it.'
-
-"We went upstairs together, the colonel first with the lamp, the
-fat manager and I behind him. It was a labyrinth of an old house,
-with corridors, passages, narrow winding staircases, and little
-low doors, the thresholds of which were hollowed out by the
-generations who had crossed them. There were no carpets and no
-signs of any furniture above the ground floor, while the plaster
-was peeling off the walls, and the damp was breaking through in
-green, unhealthy blotches. I tried to put on as unconcerned an
-air as possible, but I had not forgotten the warnings of the
-lady, even though I disregarded them, and I kept a keen eye upon
-my two companions. Ferguson appeared to be a morose and silent
-man, but I could see from the little that he said that he was at
-least a fellow-countryman.
-
-"Colonel Lysander Stark stopped at last before a low door, which
-he unlocked. Within was a small, square room, in which the three
-of us could hardly get at one time. Ferguson remained outside,
-and the colonel ushered me in.
-
-"'We are now,' said he, 'actually within the hydraulic press, and
-it would be a particularly unpleasant thing for us if anyone were
-to turn it on. The ceiling of this small chamber is really the
-end of the descending piston, and it comes down with the force of
-many tons upon this metal floor. There are small lateral columns
-of water outside which receive the force, and which transmit and
-multiply it in the manner which is familiar to you. The machine
-goes readily enough, but there is some stiffness in the working
-of it, and it has lost a little of its force. Perhaps you will
-have the goodness to look it over and to show us how we can set
-it right.'
-
-"I took the lamp from him, and I examined the machine very
-thoroughly. It was indeed a gigantic one, and capable of
-exercising enormous pressure. When I passed outside, however, and
-pressed down the levers which controlled it, I knew at once by
-the whishing sound that there was a slight leakage, which allowed
-a regurgitation of water through one of the side cylinders. An
-examination showed that one of the india-rubber bands which was
-round the head of a driving-rod had shrunk so as not quite to
-fill the socket along which it worked. This was clearly the cause
-of the loss of power, and I pointed it out to my companions, who
-followed my remarks very carefully and asked several practical
-questions as to how they should proceed to set it right. When I
-had made it clear to them, I returned to the main chamber of the
-machine and took a good look at it to satisfy my own curiosity.
-It was obvious at a glance that the story of the fuller's-earth
-was the merest fabrication, for it would be absurd to suppose
-that so powerful an engine could be designed for so inadequate a
-purpose. The walls were of wood, but the floor consisted of a
-large iron trough, and when I came to examine it I could see a
-crust of metallic deposit all over it. I had stooped and was
-scraping at this to see exactly what it was when I heard a
-muttered exclamation in German and saw the cadaverous face of the
-colonel looking down at me.
-
-"'What are you doing there?' he asked.
-
-"I felt angry at having been tricked by so elaborate a story as
-that which he had told me. 'I was admiring your fuller's-earth,'
-said I; 'I think that I should be better able to advise you as to
-your machine if I knew what the exact purpose was for which it
-was used.'
-
-"The instant that I uttered the words I regretted the rashness of
-my speech. His face set hard, and a baleful light sprang up in
-his grey eyes.
-
-"'Very well,' said he, 'you shall know all about the machine.' He
-took a step backward, slammed the little door, and turned the key
-in the lock. I rushed towards it and pulled at the handle, but it
-was quite secure, and did not give in the least to my kicks and
-shoves. 'Hullo!' I yelled. 'Hullo! Colonel! Let me out!'
-
-"And then suddenly in the silence I heard a sound which sent my
-heart into my mouth. It was the clank of the levers and the swish
-of the leaking cylinder. He had set the engine at work. The lamp
-still stood upon the floor where I had placed it when examining
-the trough. By its light I saw that the black ceiling was coming
-down upon me, slowly, jerkily, but, as none knew better than
-myself, with a force which must within a minute grind me to a
-shapeless pulp. I threw myself, screaming, against the door, and
-dragged with my nails at the lock. I implored the colonel to let
-me out, but the remorseless clanking of the levers drowned my
-cries. The ceiling was only a foot or two above my head, and with
-my hand upraised I could feel its hard, rough surface. Then it
-flashed through my mind that the pain of my death would depend
-very much upon the position in which I met it. If I lay on my
-face the weight would come upon my spine, and I shuddered to
-think of that dreadful snap. Easier the other way, perhaps; and
-yet, had I the nerve to lie and look up at that deadly black
-shadow wavering down upon me? Already I was unable to stand
-erect, when my eye caught something which brought a gush of hope
-back to my heart.
-
-"I have said that though the floor and ceiling were of iron, the
-walls were of wood. As I gave a last hurried glance around, I saw
-a thin line of yellow light between two of the boards, which
-broadened and broadened as a small panel was pushed backward. For
-an instant I could hardly believe that here was indeed a door
-which led away from death. The next instant I threw myself
-through, and lay half-fainting upon the other side. The panel had
-closed again behind me, but the crash of the lamp, and a few
-moments afterwards the clang of the two slabs of metal, told me
-how narrow had been my escape.
-
-"I was recalled to myself by a frantic plucking at my wrist, and
-I found myself lying upon the stone floor of a narrow corridor,
-while a woman bent over me and tugged at me with her left hand,
-while she held a candle in her right. It was the same good friend
-whose warning I had so foolishly rejected.
-
-"'Come! come!' she cried breathlessly. 'They will be here in a
-moment. They will see that you are not there. Oh, do not waste
-the so-precious time, but come!'
-
-"This time, at least, I did not scorn her advice. I staggered to
-my feet and ran with her along the corridor and down a winding
-stair. The latter led to another broad passage, and just as we
-reached it we heard the sound of running feet and the shouting of
-two voices, one answering the other from the floor on which  we
-were and from the one beneath. My guide stopped and looked about
-her like one  who is at her wit's end. Then she threw open a door
-which led into a bedroom, through the window of which the moon
-was shining brightly.
-
-"'It is your only chance,' said she. 'It is high, but it may be
-that you can jump it.'
-
-"As she spoke a light sprang into view at the further end of the
-passage, and I saw the lean figure of Colonel Lysander Stark
-rushing forward with a lantern in one hand and a weapon like a
-butcher's cleaver in the other. I rushed across the bedroom,
-flung open the window, and looked out. How quiet and sweet and
-wholesome the garden looked in the moonlight, and it could not be
-more than thirty feet down. I clambered out upon the sill, but I
-hesitated to jump until I should have heard what passed between
-my saviour and the ruffian who pursued me. If she were ill-used,
-then at any risks I was determined to go back to her assistance.
-The thought had hardly flashed through my mind before he was at
-the door, pushing his way past her; but she threw her arms round
-him and tried to hold him back.
-
-"'Fritz! Fritz!' she cried in English, 'remember your promise
-after the last time. You said it should not be again. He will be
-silent! Oh, he will be silent!'
-
-"'You are mad, Elise!' he shouted, struggling to break away from
-her. 'You will be the ruin of us. He has seen too much. Let me
-pass, I say!' He dashed her to one side, and, rushing to the
-window, cut at me with his heavy weapon. I had let myself go, and
-was hanging by the hands to the sill, when his blow fell. I was
-conscious of a dull pain, my grip loosened, and I fell into the
-garden below.
-
-"I was shaken but not hurt by the fall; so I picked myself up and
-rushed off among the bushes as hard as I could run, for I
-understood that I was far from being out of danger yet. Suddenly,
-however, as I ran, a deadly dizziness and sickness came over me.
-I glanced down at my hand, which was throbbing painfully, and
-then, for the first time, saw that my thumb had been cut off and
-that the blood was pouring from my wound. I endeavoured to tie my
-handkerchief round it, but there came a sudden buzzing in my
-ears, and next moment I fell in a dead faint among the
-rose-bushes.
-
-"How long I remained unconscious I cannot tell. It must have been
-a very long time, for the moon had sunk, and a bright morning was
-breaking when I came to myself. My clothes were all sodden with
-dew, and my coat-sleeve was drenched with blood from my wounded
-thumb. The smarting of it recalled in an instant all the
-particulars of my night's adventure, and I sprang to my feet with
-the feeling that I might hardly yet be safe from my pursuers. But
-to my astonishment, when I came to look round me, neither house
-nor garden were to be seen. I had been lying in an angle of the
-hedge close by the highroad, and just a little lower down was a
-long building, which proved, upon my approaching it, to be the
-very station at which I had arrived upon the previous night. Were
-it not for the ugly wound upon my hand, all that had passed
-during those dreadful hours might have been an evil dream.
-
-"Half dazed, I went into the station and asked about the morning
-train. There would be one to Reading in less than an hour. The
-same porter was on duty, I found, as had been there when I
-arrived. I inquired of him whether he had ever heard of Colonel
-Lysander Stark. The name was strange to him. Had he observed a
-carriage the night before waiting for me? No, he had not. Was
-there a police-station anywhere near? There was one about three
-miles off.
-
-"It was too far for me to go, weak and ill as I was. I determined
-to wait until I got back to town before telling my story to the
-police. It was a little past six when I arrived, so I went first
-to have my wound dressed, and then the doctor was kind enough to
-bring me along here. I put the case into your hands and shall do
-exactly what you advise."
-
-We both sat in silence for some little time after listening to
-this extraordinary narrative. Then Sherlock Holmes pulled down
-from the shelf one of the ponderous commonplace books in which he
-placed his cuttings.
-
-"Here is an advertisement which will interest you," said he. "It
-appeared in all the papers about a year ago. Listen to this:
-'Lost, on the 9th inst., Mr. Jeremiah Hayling, aged
-twenty-six, a hydraulic engineer. Left his lodgings at ten
-o'clock at night, and has not been heard of since. Was
-dressed in,' etc., etc. Ha! That represents the last time that
-the colonel needed to have his machine overhauled, I fancy."
-
-"Good heavens!" cried my patient. "Then that explains what the
-girl said."
-
-"Undoubtedly. It is quite clear that the colonel was a cool and
-desperate man, who was absolutely determined that nothing should
-stand in the way of his little game, like those out-and-out
-pirates who will leave no survivor from a captured ship. Well,
-every moment now is precious, so if you feel equal to it we shall
-go down to Scotland Yard at once as a preliminary to starting for
-Eyford."
-
-Some three hours or so afterwards we were all in the train
-together, bound from Reading to the little Berkshire village.
-There were Sherlock Holmes, the hydraulic engineer, Inspector
-Bradstreet, of Scotland Yard, a plain-clothes man, and myself.
-Bradstreet had spread an ordnance map of the county out upon the
-seat and was busy with his compasses drawing a circle with Eyford
-for its centre.
-
-"There you are," said he. "That circle is drawn at a radius of
-ten miles from the village. The place we want must be somewhere
-near that line. You said ten miles, I think, sir."
-
-"It was an hour's good drive."
-
-"And you think that they brought you back all that way when you
-were unconscious?"
-
-"They must have done so. I have a confused memory, too, of having
-been lifted and conveyed somewhere."
-
-"What I cannot understand," said I, "is why they should have
-spared you when they found you lying fainting in the garden.
-Perhaps the villain was softened by the woman's entreaties."
-
-"I hardly think that likely. I never saw a more inexorable face
-in my life."
-
-"Oh, we shall soon clear up all that," said Bradstreet. "Well, I
-have drawn my circle, and I only wish I knew at what point upon
-it the folk that we are in search of are to be found."
-
-"I think I could lay my finger on it," said Holmes quietly.
-
-"Really, now!" cried the inspector, "you have formed your
-opinion! Come, now, we shall see who agrees with you. I say it is
-south, for the country is more deserted there."
-
-"And I say east," said my patient.
-
-"I am for west," remarked the plain-clothes man. "There are
-several quiet little villages up there."
-
-"And I am for north," said I, "because there are no hills there,
-and our friend says that he did not notice the carriage go up
-any."
-
-"Come," cried the inspector, laughing; "it's a very pretty
-diversity of opinion. We have boxed the compass among us. Who do
-you give your casting vote to?"
-
-"You are all wrong."
-
-"But we can't all be."
-
-"Oh, yes, you can. This is my point." He placed his finger in the
-centre of the circle. "This is where we shall find them."
-
-"But the twelve-mile drive?" gasped Hatherley.
-
-"Six out and six back. Nothing simpler. You say yourself that the
-horse was fresh and glossy when you got in. How could it be that
-if it had gone twelve miles over heavy roads?"
-
-"Indeed, it is a likely ruse enough," observed Bradstreet
-thoughtfully. "Of course there can be no doubt as to the nature
-of this gang."
-
-"None at all," said Holmes. "They are coiners on a large scale,
-and have used the machine to form the amalgam which has taken the
-place of silver."
-
-"We have known for some time that a clever gang was at work,"
-said the inspector. "They have been turning out half-crowns by
-the thousand. We even traced them as far as Reading, but could
-get no farther, for they had covered their traces in a way that
-showed that they were very old hands. But now, thanks to this
-lucky chance, I think that we have got them right enough."
-
-But the inspector was mistaken, for those criminals were not
-destined to fall into the hands of justice. As we rolled into
-Eyford Station we saw a gigantic column of smoke which streamed
-up from behind a small clump of trees in the neighbourhood and
-hung like an immense ostrich feather over the landscape.
-
-"A house on fire?" asked Bradstreet as the train steamed off
-again on its way.
-
-"Yes, sir!" said the station-master.
-
-"When did it break out?"
-
-"I hear that it was during the night, sir, but it has got worse,
-and the whole place is in a blaze."
-
-"Whose house is it?"
-
-"Dr. Becher's."
-
-"Tell me," broke in the engineer, "is Dr. Becher a German, very
-thin, with a long, sharp nose?"
-
-The station-master laughed heartily. "No, sir, Dr. Becher is an
-Englishman, and there isn't a man in the parish who has a
-better-lined waistcoat. But he has a gentleman staying with him,
-a patient, as I understand, who is a foreigner, and he looks as
-if a little good Berkshire beef would do him no harm."
-
-The station-master had not finished his speech before we were all
-hastening in the direction of the fire. The road topped a low
-hill, and there was a great widespread whitewashed building in
-front of us, spouting fire at every chink and window, while in
-the garden in front three fire-engines were vainly striving to
-keep the flames under.
-
-"That's it!" cried Hatherley, in intense excitement. "There is
-the gravel-drive, and there are the rose-bushes where I lay. That
-second window is the one that I jumped from."
-
-"Well, at least," said Holmes, "you have had your revenge upon
-them. There can be no question that it was your oil-lamp which,
-when it was crushed in the press, set fire to the wooden walls,
-though no doubt they were too excited in the chase after you to
-observe it at the time. Now keep your eyes open in this crowd for
-your friends of last night, though I very much fear that they are
-a good hundred miles off by now."
-
-And Holmes' fears came to be realised, for from that day to this
-no word has ever been heard either of the beautiful woman, the
-sinister German, or the morose Englishman. Early that morning a
-peasant had met a cart containing several people and some very
-bulky boxes driving rapidly in the direction of Reading, but
-there all traces of the fugitives disappeared, and even Holmes'
-ingenuity failed ever to discover the least clue as to their
-whereabouts.
-
-The firemen had been much perturbed at the strange arrangements
-which they had found within, and still more so by discovering a
-newly severed human thumb upon a window-sill of the second floor.
-About sunset, however, their efforts were at last successful, and
-they subdued the flames, but not before the roof had fallen in,
-and the whole place been reduced to such absolute ruin that, save
-some twisted cylinders and iron piping, not a trace remained of
-the machinery which had cost our unfortunate acquaintance so
-dearly. Large masses of nickel and of tin were discovered stored
-in an out-house, but no coins were to be found, which may have
-explained the presence of those bulky boxes which have been
-already referred to.
-
-How our hydraulic engineer had been conveyed from the garden to
-the spot where he recovered his senses might have remained
-forever a mystery were it not for the soft mould, which told us a
-very plain tale. He had evidently been carried down by two
-persons, one of whom had remarkably small feet and the other
-unusually large ones. On the whole, it was most probable that the
-silent Englishman, being less bold or less murderous than his
-companion, had assisted the woman to bear the unconscious man out
-of the way of danger.
-
-"Well," said our engineer ruefully as we took our seats to return
-once more to London, "it has been a pretty business for me! I
-have lost my thumb and I have lost a fifty-guinea fee, and what
-have I gained?"
-
-"Experience," said Holmes, laughing. "Indirectly it may be of
-value, you know; you have only to put it into words to gain the
-reputation of being excellent company for the remainder of your
-existence."
-
-
-
-X. THE ADVENTURE OF THE NOBLE BACHELOR
-
-The Lord St. Simon marriage, and its curious termination, have
-long ceased to be a subject of interest in those exalted circles
-in which the unfortunate bridegroom moves. Fresh scandals have
-eclipsed it, and their more piquant details have drawn the
-gossips away from this four-year-old drama. As I have reason to
-believe, however, that the full facts have never been revealed to
-the general public, and as my friend Sherlock Holmes had a
-considerable share in clearing the matter up, I feel that no
-memoir of him would be complete without some little sketch of
-this remarkable episode.
-
-It was a few weeks before my own marriage, during the days when I
-was still sharing rooms with Holmes in Baker Street, that he came
-home from an afternoon stroll to find a letter on the table
-waiting for him. I had remained indoors all day, for the weather
-had taken a sudden turn to rain, with high autumnal winds, and
-the Jezail bullet which I had brought back in one of my limbs as
-a relic of my Afghan campaign throbbed with dull persistence.
-With my body in one easy-chair and my legs upon another, I had
-surrounded myself with a cloud of newspapers until at last,
-saturated with the news of the day, I tossed them all aside and
-lay listless, watching the huge crest and monogram upon the
-envelope upon the table and wondering lazily who my friend's
-noble correspondent could be.
-
-"Here is a very fashionable epistle," I remarked as he entered.
-"Your morning letters, if I remember right, were from a
-fish-monger and a tide-waiter."
-
-"Yes, my correspondence has certainly the charm of variety," he
-answered, smiling, "and the humbler are usually the more
-interesting. This looks like one of those unwelcome social
-summonses which call upon a man either to be bored or to lie."
-
-He broke the seal and glanced over the contents.
-
-"Oh, come, it may prove to be something of interest, after all."
-
-"Not social, then?"
-
-"No, distinctly professional."
-
-"And from a noble client?"
-
-"One of the highest in England."
-
-"My dear fellow, I congratulate you."
-
-"I assure you, Watson, without affectation, that the status of my
-client is a matter of less moment to me than the interest of his
-case. It is just possible, however, that that also may not be
-wanting in this new investigation. You have been reading the
-papers diligently of late, have you not?"
-
-"It looks like it," said I ruefully, pointing to a huge bundle in
-the corner. "I have had nothing else to do."
-
-"It is fortunate, for you will perhaps be able to post me up. I
-read nothing except the criminal news and the agony column. The
-latter is always instructive. But if you have followed recent
-events so closely you must have read about Lord St. Simon and his
-wedding?"
-
-"Oh, yes, with the deepest interest."
-
-"That is well. The letter which I hold in my hand is from Lord
-St. Simon. I will read it to you, and in return you must turn
-over these papers and let me have whatever bears upon the matter.
-This is what he says:
-
-"'MY DEAR MR. SHERLOCK HOLMES:--Lord Backwater tells me that I
-may place implicit reliance upon your judgment and discretion. I
-have determined, therefore, to call upon you and to consult you
-in reference to the very painful event which has occurred in
-connection with my wedding. Mr. Lestrade, of Scotland Yard, is
-acting already in the matter, but he assures me that he sees no
-objection to your co-operation, and that he even thinks that
-it might be of some assistance. I will call at four o'clock in
-the afternoon, and, should you have any other engagement at that
-time, I hope that you will postpone it, as this matter is of
-paramount importance. Yours faithfully, ST. SIMON.'
-
-"It is dated from Grosvenor Mansions, written with a quill pen,
-and the noble lord has had the misfortune to get a smear of ink
-upon the outer side of his right little finger," remarked Holmes
-as he folded up the epistle.
-
-"He says four o'clock. It is three now. He will be here in an
-hour."
-
-"Then I have just time, with your assistance, to get clear upon
-the subject. Turn over those papers and arrange the extracts in
-their order of time, while I take a glance as to who our client
-is." He picked a red-covered volume from a line of books of
-reference beside the mantelpiece. "Here he is," said he, sitting
-down and flattening it out upon his knee. "'Lord Robert Walsingham
-de Vere St. Simon, second son of the Duke of Balmoral.' Hum! 'Arms:
-Azure, three caltrops in chief over a fess sable. Born in 1846.'
-He's forty-one years of age, which is mature for marriage. Was
-Under-Secretary for the colonies in a late administration. The
-Duke, his father, was at one time Secretary for Foreign Affairs.
-They inherit Plantagenet blood by direct descent, and Tudor on
-the distaff side. Ha! Well, there is nothing very instructive in
-all this. I think that I must turn to you Watson, for something
-more solid."
-
-"I have very little difficulty in finding what I want," said I,
-"for the facts are quite recent, and the matter struck me as
-remarkable. I feared to refer them to you, however, as I knew
-that you had an inquiry on hand and that you disliked the
-intrusion of other matters."
-
-"Oh, you mean the little problem of the Grosvenor Square
-furniture van. That is quite cleared up now--though, indeed, it
-was obvious from the first. Pray give me the results of your
-newspaper selections."
-
-"Here is the first notice which I can find. It is in the personal
-column of the Morning Post, and dates, as you see, some weeks
-back: 'A marriage has been arranged,' it says, 'and will, if
-rumour is correct, very shortly take place, between Lord Robert
-St. Simon, second son of the Duke of Balmoral, and Miss Hatty
-Doran, the only daughter of Aloysius Doran. Esq., of San
-Francisco, Cal., U.S.A.' That is all."
-
-"Terse and to the point," remarked Holmes, stretching his long,
-thin legs towards the fire.
-
-"There was a paragraph amplifying this in one of the society
-papers of the same week. Ah, here it is: 'There will soon be a
-call for protection in the marriage market, for the present
-free-trade principle appears to tell heavily against our home
-product. One by one the management of the noble houses of Great
-Britain is passing into the hands of our fair cousins from across
-the Atlantic. An important addition has been made during the last
-week to the list of the prizes which have been borne away by
-these charming invaders. Lord St. Simon, who has shown himself
-for over twenty years proof against the little god's arrows, has
-now definitely announced his approaching marriage with Miss Hatty
-Doran, the fascinating daughter of a California millionaire. Miss
-Doran, whose graceful figure and striking face attracted much
-attention at the Westbury House festivities, is an only child,
-and it is currently reported that her dowry will run to
-considerably over the six figures, with expectancies for the
-future. As it is an open secret that the Duke of Balmoral has
-been compelled to sell his pictures within the last few years,
-and as Lord St. Simon has no property of his own save the small
-estate of Birchmoor, it is obvious that the Californian heiress
-is not the only gainer by an alliance which will enable her to
-make the easy and common transition from a Republican lady to a
-British peeress.'"
-
-"Anything else?" asked Holmes, yawning.
-
-"Oh, yes; plenty. Then there is another note in the Morning Post
-to say that the marriage would be an absolutely quiet one, that it
-would be at St. George's, Hanover Square, that only half a dozen
-intimate friends would be invited, and that the party would
-return to the furnished house at Lancaster Gate which has been
-taken by Mr. Aloysius Doran. Two days later--that is, on
-Wednesday last--there is a curt announcement that the wedding had
-taken place, and that the honeymoon would be passed at Lord
-Backwater's place, near Petersfield. Those are all the notices
-which appeared before the disappearance of the bride."
-
-"Before the what?" asked Holmes with a start.
-
-"The vanishing of the lady."
-
-"When did she vanish, then?"
-
-"At the wedding breakfast."
-
-"Indeed. This is more interesting than it promised to be; quite
-dramatic, in fact."
-
-"Yes; it struck me as being a little out of the common."
-
-"They often vanish before the ceremony, and occasionally during
-the honeymoon; but I cannot call to mind anything quite so prompt
-as this. Pray let me have the details."
-
-"I warn you that they are very incomplete."
-
-"Perhaps we may make them less so."
-
-"Such as they are, they are set forth in a single article of a
-morning paper of yesterday, which I will read to you. It is
-headed, 'Singular Occurrence at a Fashionable Wedding':
-
-"'The family of Lord Robert St. Simon has been thrown into the
-greatest consternation by the strange and painful episodes which
-have taken place in connection with his wedding. The ceremony, as
-shortly announced in the papers of yesterday, occurred on the
-previous morning; but it is only now that it has been possible to
-confirm the strange rumours which have been so persistently
-floating about. In spite of the attempts of the friends to hush
-the matter up, so much public attention has now been drawn to it
-that no good purpose can be served by affecting to disregard what
-is a common subject for conversation.
-
-"'The ceremony, which was performed at St. George's, Hanover
-Square, was a very quiet one, no one being present save the
-father of the bride, Mr. Aloysius Doran, the Duchess of Balmoral,
-Lord Backwater, Lord Eustace and Lady Clara St. Simon (the
-younger brother and sister of the bridegroom), and Lady Alicia
-Whittington. The whole party proceeded afterwards to the house of
-Mr. Aloysius Doran, at Lancaster Gate, where breakfast had been
-prepared. It appears that some little trouble was caused by a
-woman, whose name has not been ascertained, who endeavoured to
-force her way into the house after the bridal party, alleging
-that she had some claim upon Lord St. Simon. It was only after a
-painful and prolonged scene that she was ejected by the butler
-and the footman. The bride, who had fortunately entered the house
-before this unpleasant interruption, had sat down to breakfast
-with the rest, when she complained of a sudden indisposition and
-retired to her room. Her prolonged absence having caused some
-comment, her father followed her, but learned from her maid that
-she had only come up to her chamber for an instant, caught up an
-ulster and bonnet, and hurried down to the passage. One of the
-footmen declared that he had seen a lady leave the house thus
-apparelled, but had refused to credit that it was his mistress,
-believing her to be with the company. On ascertaining that his
-daughter had disappeared, Mr. Aloysius Doran, in conjunction with
-the bridegroom, instantly put themselves in communication with
-the police, and very energetic inquiries are being made, which
-will probably result in a speedy clearing up of this very
-singular business. Up to a late hour last night, however, nothing
-had transpired as to the whereabouts of the missing lady. There
-are rumours of foul play in the matter, and it is said that the
-police have caused the arrest of the woman who had caused the
-original disturbance, in the belief that, from jealousy or some
-other motive, she may have been concerned in the strange
-disappearance of the bride.'"
-
-"And is that all?"
-
-"Only one little item in another of the morning papers, but it is
-a suggestive one."
-
-"And it is--"
-
-"That Miss Flora Millar, the lady who had caused the disturbance,
-has actually been arrested. It appears that she was formerly a
-danseuse at the Allegro, and that she has known the bridegroom
-for some years. There are no further particulars, and the whole
-case is in your hands now--so far as it has been set forth in the
-public press."
-
-"And an exceedingly interesting case it appears to be. I would
-not have missed it for worlds. But there is a ring at the bell,
-Watson, and as the clock makes it a few minutes after four, I
-have no doubt that this will prove to be our noble client. Do not
-dream of going, Watson, for I very much prefer having a witness,
-if only as a check to my own memory."
-
-"Lord Robert St. Simon," announced our page-boy, throwing open
-the door. A gentleman entered, with a pleasant, cultured face,
-high-nosed and pale, with something perhaps of petulance about
-the mouth, and with the steady, well-opened eye of a man whose
-pleasant lot it had ever been to command and to be obeyed. His
-manner was brisk, and yet his general appearance gave an undue
-impression of age, for he had a slight forward stoop and a little
-bend of the knees as he walked. His hair, too, as he swept off
-his very curly-brimmed hat, was grizzled round the edges and thin
-upon the top. As to his dress, it was careful to the verge of
-foppishness, with high collar, black frock-coat, white waistcoat,
-yellow gloves, patent-leather shoes, and light-coloured gaiters.
-He advanced slowly into the room, turning his head from left to
-right, and swinging in his right hand the cord which held his
-golden eyeglasses.
-
-"Good-day, Lord St. Simon," said Holmes, rising and bowing. "Pray
-take the basket-chair. This is my friend and colleague, Dr.
-Watson. Draw up a little to the fire, and we will talk this
-matter over."
-
-"A most painful matter to me, as you can most readily imagine,
-Mr. Holmes. I have been cut to the quick. I understand that you
-have already managed several delicate cases of this sort, sir,
-though I presume that they were hardly from the same class of
-society."
-
-"No, I am descending."
-
-"I beg pardon."
-
-"My last client of the sort was a king."
-
-"Oh, really! I had no idea. And which king?"
-
-"The King of Scandinavia."
-
-"What! Had he lost his wife?"
-
-"You can understand," said Holmes suavely, "that I extend to the
-affairs of my other clients the same secrecy which I promise to
-you in yours."
-
-"Of course! Very right! very right! I'm sure I beg pardon. As to
-my own case, I am ready to give you any information which may
-assist you in forming an opinion."
-
-"Thank you. I have already learned all that is in the public
-prints, nothing more. I presume that I may take it as correct--this
-article, for example, as to the disappearance of the bride."
-
-Lord St. Simon glanced over it. "Yes, it is correct, as far as it
-goes."
-
-"But it needs a great deal of supplementing before anyone could
-offer an opinion. I think that I may arrive at my facts most
-directly by questioning you."
-
-"Pray do so."
-
-"When did you first meet Miss Hatty Doran?"
-
-"In San Francisco, a year ago."
-
-"You were travelling in the States?"
-
-"Yes."
-
-"Did you become engaged then?"
-
-"No."
-
-"But you were on a friendly footing?"
-
-"I was amused by her society, and she could see that I was
-amused."
-
-"Her father is very rich?"
-
-"He is said to be the richest man on the Pacific slope."
-
-"And how did he make his money?"
-
-"In mining. He had nothing a few years ago. Then he struck gold,
-invested it, and came up by leaps and bounds."
-
-"Now, what is your own impression as to the young lady's--your
-wife's character?"
-
-The nobleman swung his glasses a little faster and stared down
-into the fire. "You see, Mr. Holmes," said he, "my wife was
-twenty before her father became a rich man. During that time she
-ran free in a mining camp and wandered through woods or
-mountains, so that her education has come from Nature rather than
-from the schoolmaster. She is what we call in England a tomboy,
-with a strong nature, wild and free, unfettered by any sort of
-traditions. She is impetuous--volcanic, I was about to say. She
-is swift in making up her mind and fearless in carrying out her
-resolutions. On the other hand, I would not have given her the
-name which I have the honour to bear"--he gave a little stately
-cough--"had not I thought her to be at bottom a noble woman. I
-believe that she is capable of heroic self-sacrifice and that
-anything dishonourable would be repugnant to her."
-
-"Have you her photograph?"
-
-"I brought this with me." He opened a locket and showed us the
-full face of a very lovely woman. It was not a photograph but an
-ivory miniature, and the artist had brought out the full effect
-of the lustrous black hair, the large dark eyes, and the
-exquisite mouth. Holmes gazed long and earnestly at it. Then he
-closed the locket and handed it back to Lord St. Simon.
-
-"The young lady came to London, then, and you renewed your
-acquaintance?"
-
-"Yes, her father brought her over for this last London season. I
-met her several times, became engaged to her, and have now
-married her."
-
-"She brought, I understand, a considerable dowry?"
-
-"A fair dowry. Not more than is usual in my family."
-
-"And this, of course, remains to you, since the marriage is a
-fait accompli?"
-
-"I really have made no inquiries on the subject."
-
-"Very naturally not. Did you see Miss Doran on the day before the
-wedding?"
-
-"Yes."
-
-"Was she in good spirits?"
-
-"Never better. She kept talking of what we should do in our
-future lives."
-
-"Indeed! That is very interesting. And on the morning of the
-wedding?"
-
-"She was as bright as possible--at least until after the
-ceremony."
-
-"And did you observe any change in her then?"
-
-"Well, to tell the truth, I saw then the first signs that I had
-ever seen that her temper was just a little sharp. The incident
-however, was too trivial to relate and can have no possible
-bearing upon the case."
-
-"Pray let us have it, for all that."
-
-"Oh, it is childish. She dropped her bouquet as we went towards
-the vestry. She was passing the front pew at the time, and it
-fell over into the pew. There was a moment's delay, but the
-gentleman in the pew handed it up to her again, and it did not
-appear to be the worse for the fall. Yet when I spoke to her of
-the matter, she answered me abruptly; and in the carriage, on our
-way home, she seemed absurdly agitated over this trifling cause."
-
-"Indeed! You say that there was a gentleman in the pew. Some of
-the general public were present, then?"
-
-"Oh, yes. It is impossible to exclude them when the church is
-open."
-
-"This gentleman was not one of your wife's friends?"
-
-"No, no; I call him a gentleman by courtesy, but he was quite a
-common-looking person. I hardly noticed his appearance. But
-really I think that we are wandering rather far from the point."
-
-"Lady St. Simon, then, returned from the wedding in a less
-cheerful frame of mind than she had gone to it. What did she do
-on re-entering her father's house?"
-
-"I saw her in conversation with her maid."
-
-"And who is her maid?"
-
-"Alice is her name. She is an American and came from California
-with her."
-
-"A confidential servant?"
-
-"A little too much so. It seemed to me that her mistress allowed
-her to take great liberties. Still, of course, in America they
-look upon these things in a different way."
-
-"How long did she speak to this Alice?"
-
-"Oh, a few minutes. I had something else to think of."
-
-"You did not overhear what they said?"
-
-"Lady St. Simon said something about 'jumping a claim.' She was
-accustomed to use slang of the kind. I have no idea what she
-meant."
-
-"American slang is very expressive sometimes. And what did your
-wife do when she finished speaking to her maid?"
-
-"She walked into the breakfast-room."
-
-"On your arm?"
-
-"No, alone. She was very independent in little matters like that.
-Then, after we had sat down for ten minutes or so, she rose
-hurriedly, muttered some words of apology, and left the room. She
-never came back."
-
-"But this maid, Alice, as I understand, deposes that she went to
-her room, covered her bride's dress with a long ulster, put on a
-bonnet, and went out."
-
-"Quite so. And she was afterwards seen walking into Hyde Park in
-company with Flora Millar, a woman who is now in custody, and who
-had already made a disturbance at Mr. Doran's house that
-morning."
-
-"Ah, yes. I should like a few particulars as to this young lady,
-and your relations to her."
-
-Lord St. Simon shrugged his shoulders and raised his eyebrows.
-"We have been on a friendly footing for some years--I may say on
-a very friendly footing. She used to be at the Allegro. I have
-not treated her ungenerously, and she had no just cause of
-complaint against me, but you know what women are, Mr. Holmes.
-Flora was a dear little thing, but exceedingly hot-headed and
-devotedly attached to me. She wrote me dreadful letters when she
-heard that I was about to be married, and, to tell the truth, the
-reason why I had the marriage celebrated so quietly was that I
-feared lest there might be a scandal in the church. She came to
-Mr. Doran's door just after we returned, and she endeavoured to
-push her way in, uttering very abusive expressions towards my
-wife, and even threatening her, but I had foreseen the
-possibility of something of the sort, and I had two police
-fellows there in private clothes, who soon pushed her out again.
-She was quiet when she saw that there was no good in making a
-row."
-
-"Did your wife hear all this?"
-
-"No, thank goodness, she did not."
-
-"And she was seen walking with this very woman afterwards?"
-
-"Yes. That is what Mr. Lestrade, of Scotland Yard, looks upon as
-so serious. It is thought that Flora decoyed my wife out and laid
-some terrible trap for her."
-
-"Well, it is a possible supposition."
-
-"You think so, too?"
-
-"I did not say a probable one. But you do not yourself look upon
-this as likely?"
-
-"I do not think Flora would hurt a fly."
-
-"Still, jealousy is a strange transformer of characters. Pray
-what is your own theory as to what took place?"
-
-"Well, really, I came to seek a theory, not to propound one. I
-have given you all the facts. Since you ask me, however, I may
-say that it has occurred to me as possible that the excitement of
-this affair, the consciousness that she had made so immense a
-social stride, had the effect of causing some little nervous
-disturbance in my wife."
-
-"In short, that she had become suddenly deranged?"
-
-"Well, really, when I consider that she has turned her back--I
-will not say upon me, but upon so much that many have aspired to
-without success--I can hardly explain it in any other fashion."
-
-"Well, certainly that is also a conceivable hypothesis," said
-Holmes, smiling. "And now, Lord St. Simon, I think that I have
-nearly all my data. May I ask whether you were seated at the
-breakfast-table so that you could see out of the window?"
-
-"We could see the other side of the road and the Park."
-
-"Quite so. Then I do not think that I need to detain you longer.
-I shall communicate with you."
-
-"Should you be fortunate enough to solve this problem," said our
-client, rising.
-
-"I have solved it."
-
-"Eh? What was that?"
-
-"I say that I have solved it."
-
-"Where, then, is my wife?"
-
-"That is a detail which I shall speedily supply."
-
-Lord St. Simon shook his head. "I am afraid that it will take
-wiser heads than yours or mine," he remarked, and bowing in a
-stately, old-fashioned manner he departed.
-
-"It is very good of Lord St. Simon to honour my head by putting
-it on a level with his own," said Sherlock Holmes, laughing. "I
-think that I shall have a whisky and soda and a cigar after all
-this cross-questioning. I had formed my conclusions as to the
-case before our client came into the room."
-
-"My dear Holmes!"
-
-"I have notes of several similar cases, though none, as I
-remarked before, which were quite as prompt. My whole examination
-served to turn my conjecture into a certainty. Circumstantial
-evidence is occasionally very convincing, as when you find a
-trout in the milk, to quote Thoreau's example."
-
-"But I have heard all that you have heard."
-
-"Without, however, the knowledge of pre-existing cases which
-serves me so well. There was a parallel instance in Aberdeen some
-years back, and something on very much the same lines at Munich
-the year after the Franco-Prussian War. It is one of these
-cases--but, hullo, here is Lestrade! Good-afternoon, Lestrade!
-You will find an extra tumbler upon the sideboard, and there are
-cigars in the box."
-
-The official detective was attired in a pea-jacket and cravat,
-which gave him a decidedly nautical appearance, and he carried a
-black canvas bag in his hand. With a short greeting he seated
-himself and lit the cigar which had been offered to him.
-
-"What's up, then?" asked Holmes with a twinkle in his eye. "You
-look dissatisfied."
-
-"And I feel dissatisfied. It is this infernal St. Simon marriage
-case. I can make neither head nor tail of the business."
-
-"Really! You surprise me."
-
-"Who ever heard of such a mixed affair? Every clue seems to slip
-through my fingers. I have been at work upon it all day."
-
-"And very wet it seems to have made you," said Holmes laying his
-hand upon the arm of the pea-jacket.
-
-"Yes, I have been dragging the Serpentine."
-
-"In heaven's name, what for?"
-
-"In search of the body of Lady St. Simon."
-
-Sherlock Holmes leaned back in his chair and laughed heartily.
-
-"Have you dragged the basin of Trafalgar Square fountain?" he
-asked.
-
-"Why? What do you mean?"
-
-"Because you have just as good a chance of finding this lady in
-the one as in the other."
-
-Lestrade shot an angry glance at my companion. "I suppose you
-know all about it," he snarled.
-
-"Well, I have only just heard the facts, but my mind is made up."
-
-"Oh, indeed! Then you think that the Serpentine plays no part in
-the matter?"
-
-"I think it very unlikely."
-
-"Then perhaps you will kindly explain how it is that we found
-this in it?" He opened his bag as he spoke, and tumbled onto the
-floor a wedding-dress of watered silk, a pair of white satin
-shoes and a bride's wreath and veil, all discoloured and soaked
-in water. "There," said he, putting a new wedding-ring upon the
-top of the pile. "There is a little nut for you to crack, Master
-Holmes."
-
-"Oh, indeed!" said my friend, blowing blue rings into the air.
-"You dragged them from the Serpentine?"
-
-"No. They were found floating near the margin by a park-keeper.
-They have been identified as her clothes, and it seemed to me
-that if the clothes were there the body would not be far off."
-
-"By the same brilliant reasoning, every man's body is to be found
-in the neighbourhood of his wardrobe. And pray what did you hope
-to arrive at through this?"
-
-"At some evidence implicating Flora Millar in the disappearance."
-
-"I am afraid that you will find it difficult."
-
-"Are you, indeed, now?" cried Lestrade with some bitterness. "I
-am afraid, Holmes, that you are not very practical with your
-deductions and your inferences. You have made two blunders in as
-many minutes. This dress does implicate Miss Flora Millar."
-
-"And how?"
-
-"In the dress is a pocket. In the pocket is a card-case. In the
-card-case is a note. And here is the very note." He slapped it
-down upon the table in front of him. "Listen to this: 'You will
-see me when all is ready. Come at once. F.H.M.' Now my theory all
-along has been that Lady St. Simon was decoyed away by Flora
-Millar, and that she, with confederates, no doubt, was
-responsible for her disappearance. Here, signed with her
-initials, is the very note which was no doubt quietly slipped
-into her hand at the door and which lured her within their
-reach."
-
-"Very good, Lestrade," said Holmes, laughing. "You really are
-very fine indeed. Let me see it." He took up the paper in a
-listless way, but his attention instantly became riveted, and he
-gave a little cry of satisfaction. "This is indeed important,"
-said he.
-
-"Ha! you find it so?"
-
-"Extremely so. I congratulate you warmly."
-
-Lestrade rose in his triumph and bent his head to look. "Why," he
-shrieked, "you're looking at the wrong side!"
-
-"On the contrary, this is the right side."
-
-"The right side? You're mad! Here is the note written in pencil
-over here."
-
-"And over here is what appears to be the fragment of a hotel
-bill, which interests me deeply."
-
-"There's nothing in it. I looked at it before," said Lestrade.
-"'Oct. 4th, rooms 8s., breakfast 2s. 6d., cocktail 1s., lunch 2s.
-6d., glass sherry, 8d.' I see nothing in that."
-
-"Very likely not. It is most important, all the same. As to the
-note, it is important also, or at least the initials are, so I
-congratulate you again."
-
-"I've wasted time enough," said Lestrade, rising. "I believe in
-hard work and not in sitting by the fire spinning fine theories.
-Good-day, Mr. Holmes, and we shall see which gets to the bottom
-of the matter first." He gathered up the garments, thrust them
-into the bag, and made for the door.
-
-"Just one hint to you, Lestrade," drawled Holmes before his rival
-vanished; "I will tell you the true solution of the matter. Lady
-St. Simon is a myth. There is not, and there never has been, any
-such person."
-
-Lestrade looked sadly at my companion. Then he turned to me,
-tapped his forehead three times, shook his head solemnly, and
-hurried away.
-
-He had hardly shut the door behind him when Holmes rose to put on
-his overcoat. "There is something in what the fellow says about
-outdoor work," he remarked, "so I think, Watson, that I must
-leave you to your papers for a little."
-
-It was after five o'clock when Sherlock Holmes left me, but I had
-no time to be lonely, for within an hour there arrived a
-confectioner's man with a very large flat box. This he unpacked
-with the help of a youth whom he had brought with him, and
-presently, to my very great astonishment, a quite epicurean
-little cold supper began to be laid out upon our humble
-lodging-house mahogany. There were a couple of brace of cold
-woodcock, a pheasant, a pâté de foie gras pie with a group of
-ancient and cobwebby bottles. Having laid out all these luxuries,
-my two visitors vanished away, like the genii of the Arabian
-Nights, with no explanation save that the things had been paid
-for and were ordered to this address.
-
-Just before nine o'clock Sherlock Holmes stepped briskly into the
-room. His features were gravely set, but there was a light in his
-eye which made me think that he had not been disappointed in his
-conclusions.
-
-"They have laid the supper, then," he said, rubbing his hands.
-
-"You seem to expect company. They have laid for five."
-
-"Yes, I fancy we may have some company dropping in," said he. "I
-am surprised that Lord St. Simon has not already arrived. Ha! I
-fancy that I hear his step now upon the stairs."
-
-It was indeed our visitor of the afternoon who came bustling in,
-dangling his glasses more vigorously than ever, and with a very
-perturbed expression upon his aristocratic features.
-
-"My messenger reached you, then?" asked Holmes.
-
-"Yes, and I confess that the contents startled me beyond measure.
-Have you good authority for what you say?"
-
-"The best possible."
-
-Lord St. Simon sank into a chair and passed his hand over his
-forehead.
-
-"What will the Duke say," he murmured, "when he hears that one of
-the family has been subjected to such humiliation?"
-
-"It is the purest accident. I cannot allow that there is any
-humiliation."
-
-"Ah, you look on these things from another standpoint."
-
-"I fail to see that anyone is to blame. I can hardly see how the
-lady could have acted otherwise, though her abrupt method of
-doing it was undoubtedly to be regretted. Having no mother, she
-had no one to advise her at such a crisis."
-
-"It was a slight, sir, a public slight," said Lord St. Simon,
-tapping his fingers upon the table.
-
-"You must make allowance for this poor girl, placed in so
-unprecedented a position."
-
-"I will make no allowance. I am very angry indeed, and I have
-been shamefully used."
-
-"I think that I heard a ring," said Holmes. "Yes, there are steps
-on the landing. If I cannot persuade you to take a lenient view
-of the matter, Lord St. Simon, I have brought an advocate here
-who may be more successful." He opened the door and ushered in a
-lady and gentleman. "Lord St. Simon," said he "allow me to
-introduce you to Mr. and Mrs. Francis Hay Moulton. The lady, I
-think, you have already met."
-
-At the sight of these newcomers our client had sprung from his
-seat and stood very erect, with his eyes cast down and his hand
-thrust into the breast of his frock-coat, a picture of offended
-dignity. The lady had taken a quick step forward and had held out
-her hand to him, but he still refused to raise his eyes. It was
-as well for his resolution, perhaps, for her pleading face was
-one which it was hard to resist.
-
-"You're angry, Robert," said she. "Well, I guess you have every
-cause to be."
-
-"Pray make no apology to me," said Lord St. Simon bitterly.
-
-"Oh, yes, I know that I have treated you real bad and that I
-should have spoken to you before I went; but I was kind of
-rattled, and from the time when I saw Frank here again I just
-didn't know what I was doing or saying. I only wonder I didn't
-fall down and do a faint right there before the altar."
-
-"Perhaps, Mrs. Moulton, you would like my friend and me to leave
-the room while you explain this matter?"
-
-"If I may give an opinion," remarked the strange gentleman,
-"we've had just a little too much secrecy over this business
-already. For my part, I should like all Europe and America to
-hear the rights of it." He was a small, wiry, sunburnt man,
-clean-shaven, with a sharp face and alert manner.
-
-"Then I'll tell our story right away," said the lady. "Frank here
-and I met in '84, in McQuire's camp, near the Rockies, where pa
-was working a claim. We were engaged to each other, Frank and I;
-but then one day father struck a rich pocket and made a pile,
-while poor Frank here had a claim that petered out and came to
-nothing. The richer pa grew the poorer was Frank; so at last pa
-wouldn't hear of our engagement lasting any longer, and he took
-me away to 'Frisco. Frank wouldn't throw up his hand, though; so
-he followed me there, and he saw me without pa knowing anything
-about it. It would only have made him mad to know, so we just
-fixed it all up for ourselves. Frank said that he would go and
-make his pile, too, and never come back to claim me until he had
-as much as pa. So then I promised to wait for him to the end of
-time and pledged myself not to marry anyone else while he lived.
-'Why shouldn't we be married right away, then,' said he, 'and
-then I will feel sure of you; and I won't claim to be your
-husband until I come back?' Well, we talked it over, and he had
-fixed it all up so nicely, with a clergyman all ready in waiting,
-that we just did it right there; and then Frank went off to seek
-his fortune, and I went back to pa.
-
-"The next I heard of Frank was that he was in Montana, and then
-he went prospecting in Arizona, and then I heard of him from New
-Mexico. After that came a long newspaper story about how a
-miners' camp had been attacked by Apache Indians, and there was
-my Frank's name among the killed. I fainted dead away, and I was
-very sick for months after. Pa thought I had a decline and took
-me to half the doctors in 'Frisco. Not a word of news came for a
-year and more, so that I never doubted that Frank was really
-dead. Then Lord St. Simon came to 'Frisco, and we came to London,
-and a marriage was arranged, and pa was very pleased, but I felt
-all the time that no man on this earth would ever take the place
-in my heart that had been given to my poor Frank.
-
-"Still, if I had married Lord St. Simon, of course I'd have done
-my duty by him. We can't command our love, but we can our
-actions. I went to the altar with him with the intention to make
-him just as good a wife as it was in me to be. But you may
-imagine what I felt when, just as I came to the altar rails, I
-glanced back and saw Frank standing and looking at me out of the
-first pew. I thought it was his ghost at first; but when I looked
-again there he was still, with a kind of question in his eyes, as
-if to ask me whether I were glad or sorry to see him. I wonder I
-didn't drop. I know that everything was turning round, and the
-words of the clergyman were just like the buzz of a bee in my
-ear. I didn't know what to do. Should I stop the service and make
-a scene in the church? I glanced at him again, and he seemed to
-know what I was thinking, for he raised his finger to his lips to
-tell me to be still. Then I saw him scribble on a piece of paper,
-and I knew that he was writing me a note. As I passed his pew on
-the way out I dropped my bouquet over to him, and he slipped the
-note into my hand when he returned me the flowers. It was only a
-line asking me to join him when he made the sign to me to do so.
-Of course I never doubted for a moment that my first duty was now
-to him, and I determined to do just whatever he might direct.
-
-"When I got back I told my maid, who had known him in California,
-and had always been his friend. I ordered her to say nothing, but
-to get a few things packed and my ulster ready. I know I ought to
-have spoken to Lord St. Simon, but it was dreadful hard before
-his mother and all those great people. I just made up my mind to
-run away and explain afterwards. I hadn't been at the table ten
-minutes before I saw Frank out of the window at the other side of
-the road. He beckoned to me and then began walking into the Park.
-I slipped out, put on my things, and followed him. Some woman
-came talking something or other about Lord St. Simon to
-me--seemed to me from the little I heard as if he had a little
-secret of his own before marriage also--but I managed to get away
-from her and soon overtook Frank. We got into a cab together, and
-away we drove to some lodgings he had taken in Gordon Square, and
-that was my true wedding after all those years of waiting. Frank
-had been a prisoner among the Apaches, had escaped, came on to
-'Frisco, found that I had given him up for dead and had gone to
-England, followed me there, and had come upon me at last on the
-very morning of my second wedding."
-
-"I saw it in a paper," explained the American. "It gave the name
-and the church but not where the lady lived."
-
-"Then we had a talk as to what we should do, and Frank was all
-for openness, but I was so ashamed of it all that I felt as if I
-should like to vanish away and never see any of them again--just
-sending a line to pa, perhaps, to show him that I was alive. It
-was awful to me to think of all those lords and ladies sitting
-round that breakfast-table and waiting for me to come back. So
-Frank took my wedding-clothes and things and made a bundle of
-them, so that I should not be traced, and dropped them away
-somewhere where no one could find them. It is likely that we
-should have gone on to Paris to-morrow, only that this good
-gentleman, Mr. Holmes, came round to us this evening, though how
-he found us is more than I can think, and he showed us very
-clearly and kindly that I was wrong and that Frank was right, and
-that we should be putting ourselves in the wrong if we were so
-secret. Then he offered to give us a chance of talking to Lord
-St. Simon alone, and so we came right away round to his rooms at
-once. Now, Robert, you have heard it all, and I am very sorry if
-I have given you pain, and I hope that you do not think very
-meanly of me."
-
-Lord St. Simon had by no means relaxed his rigid attitude, but
-had listened with a frowning brow and a compressed lip to this
-long narrative.
-
-"Excuse me," he said, "but it is not my custom to discuss my most
-intimate personal affairs in this public manner."
-
-"Then you won't forgive me? You won't shake hands before I go?"
-
-"Oh, certainly, if it would give you any pleasure." He put out
-his hand and coldly grasped that which she extended to him.
-
-"I had hoped," suggested Holmes, "that you would have joined us
-in a friendly supper."
-
-"I think that there you ask a little too much," responded his
-Lordship. "I may be forced to acquiesce in these recent
-developments, but I can hardly be expected to make merry over
-them. I think that with your permission I will now wish you all a
-very good-night." He included us all in a sweeping bow and
-stalked out of the room.
-
-"Then I trust that you at least will honour me with your
-company," said Sherlock Holmes. "It is always a joy to meet an
-American, Mr. Moulton, for I am one of those who believe that the
-folly of a monarch and the blundering of a minister in far-gone
-years will not prevent our children from being some day citizens
-of the same world-wide country under a flag which shall be a
-quartering of the Union Jack with the Stars and Stripes."
-
-"The case has been an interesting one," remarked Holmes when our
-visitors had left us, "because it serves to show very clearly how
-simple the explanation may be of an affair which at first sight
-seems to be almost inexplicable. Nothing could be more natural
-than the sequence of events as narrated by this lady, and nothing
-stranger than the result when viewed, for instance, by Mr.
-Lestrade of Scotland Yard."
-
-"You were not yourself at fault at all, then?"
-
-"From the first, two facts were very obvious to me, the one that
-the lady had been quite willing to undergo the wedding ceremony,
-the other that she had repented of it within a few minutes of
-returning home. Obviously something had occurred during the
-morning, then, to cause her to change her mind. What could that
-something be? She could not have spoken to anyone when she was
-out, for she had been in the company of the bridegroom. Had she
-seen someone, then? If she had, it must be someone from America
-because she had spent so short a time in this country that she
-could hardly have allowed anyone to acquire so deep an influence
-over her that the mere sight of him would induce her to change
-her plans so completely. You see we have already arrived, by a
-process of exclusion, at the idea that she might have seen an
-American. Then who could this American be, and why should he
-possess so much influence over her? It might be a lover; it might
-be a husband. Her young womanhood had, I knew, been spent in
-rough scenes and under strange conditions. So far I had got
-before I ever heard Lord St. Simon's narrative. When he told us
-of a man in a pew, of the change in the bride's manner, of so
-transparent a device for obtaining a note as the dropping of a
-bouquet, of her resort to her confidential maid, and of her very
-significant allusion to claim-jumping--which in miners' parlance
-means taking possession of that which another person has a prior
-claim to--the whole situation became absolutely clear. She had
-gone off with a man, and the man was either a lover or was a
-previous husband--the chances being in favour of the latter."
-
-"And how in the world did you find them?"
-
-"It might have been difficult, but friend Lestrade held
-information in his hands the value of which he did not himself
-know. The initials were, of course, of the highest importance,
-but more valuable still was it to know that within a week he had
-settled his bill at one of the most select London hotels."
-
-"How did you deduce the select?"
-
-"By the select prices. Eight shillings for a bed and eightpence
-for a glass of sherry pointed to one of the most expensive
-hotels. There are not many in London which charge at that rate.
-In the second one which I visited in Northumberland Avenue, I
-learned by an inspection of the book that Francis H. Moulton, an
-American gentleman, had left only the day before, and on looking
-over the entries against him, I came upon the very items which I
-had seen in the duplicate bill. His letters were to be forwarded
-to 226 Gordon Square; so thither I travelled, and being fortunate
-enough to find the loving couple at home, I ventured to give them
-some paternal advice and to point out to them that it would be
-better in every way that they should make their position a little
-clearer both to the general public and to Lord St. Simon in
-particular. I invited them to meet him here, and, as you see, I
-made him keep the appointment."
-
-"But with no very good result," I remarked. "His conduct was
-certainly not very gracious."
-
-"Ah, Watson," said Holmes, smiling, "perhaps you would not be
-very gracious either, if, after all the trouble of wooing and
-wedding, you found yourself deprived in an instant of wife and of
-fortune. I think that we may judge Lord St. Simon very mercifully
-and thank our stars that we are never likely to find ourselves in
-the same position. Draw your chair up and hand me my violin, for
-the only problem we have still to solve is how to while away
-these bleak autumnal evenings."
-
-
-
-XI. THE ADVENTURE OF THE BERYL CORONET
-
-"Holmes," said I as I stood one morning in our bow-window looking
-down the street, "here is a madman coming along. It seems rather
-sad that his relatives should allow him to come out alone."
-
-My friend rose lazily from his armchair and stood with his hands
-in the pockets of his dressing-gown, looking over my shoulder. It
-was a bright, crisp February morning, and the snow of the day
-before still lay deep upon the ground, shimmering brightly in the
-wintry sun. Down the centre of Baker Street it had been ploughed
-into a brown crumbly band by the traffic, but at either side and
-on the heaped-up edges of the foot-paths it still lay as white as
-when it fell. The grey pavement had been cleaned and scraped, but
-was still dangerously slippery, so that there were fewer
-passengers than usual. Indeed, from the direction of the
-Metropolitan Station no one was coming save the single gentleman
-whose eccentric conduct had drawn my attention.
-
-He was a man of about fifty, tall, portly, and imposing, with a
-massive, strongly marked face and a commanding figure. He was
-dressed in a sombre yet rich style, in black frock-coat, shining
-hat, neat brown gaiters, and well-cut pearl-grey trousers. Yet
-his actions were in absurd contrast to the dignity of his dress
-and features, for he was running hard, with occasional little
-springs, such as a weary man gives who is little accustomed to
-set any tax upon his legs. As he ran he jerked his hands up and
-down, waggled his head, and writhed his face into the most
-extraordinary contortions.
-
-"What on earth can be the matter with him?" I asked. "He is
-looking up at the numbers of the houses."
-
-"I believe that he is coming here," said Holmes, rubbing his
-hands.
-
-"Here?"
-
-"Yes; I rather think he is coming to consult me professionally. I
-think that I recognise the symptoms. Ha! did I not tell you?" As
-he spoke, the man, puffing and blowing, rushed at our door and
-pulled at our bell until the whole house resounded with the
-clanging.
-
-A few moments later he was in our room, still puffing, still
-gesticulating, but with so fixed a look of grief and despair in
-his eyes that our smiles were turned in an instant to horror and
-pity. For a while he could not get his words out, but swayed his
-body and plucked at his hair like one who has been driven to the
-extreme limits of his reason. Then, suddenly springing to his
-feet, he beat his head against the wall with such force that we
-both rushed upon him and tore him away to the centre of the room.
-Sherlock Holmes pushed him down into the easy-chair and, sitting
-beside him, patted his hand and chatted with him in the easy,
-soothing tones which he knew so well how to employ.
-
-"You have come to me to tell your story, have you not?" said he.
-"You are fatigued with your haste. Pray wait until you have
-recovered yourself, and then I shall be most happy to look into
-any little problem which you may submit to me."
-
-The man sat for a minute or more with a heaving chest, fighting
-against his emotion. Then he passed his handkerchief over his
-brow, set his lips tight, and turned his face towards us.
-
-"No doubt you think me mad?" said he.
-
-"I see that you have had some great trouble," responded Holmes.
-
-"God knows I have!--a trouble which is enough to unseat my
-reason, so sudden and so terrible is it. Public disgrace I might
-have faced, although I am a man whose character has never yet
-borne a stain. Private affliction also is the lot of every man;
-but the two coming together, and in so frightful a form, have
-been enough to shake my very soul. Besides, it is not I alone.
-The very noblest in the land may suffer unless some way be found
-out of this horrible affair."
-
-"Pray compose yourself, sir," said Holmes, "and let me have a
-clear account of who you are and what it is that has befallen
-you."
-
-"My name," answered our visitor, "is probably familiar to your
-ears. I am Alexander Holder, of the banking firm of Holder &
-Stevenson, of Threadneedle Street."
-
-The name was indeed well known to us as belonging to the senior
-partner in the second largest private banking concern in the City
-of London. What could have happened, then, to bring one of the
-foremost citizens of London to this most pitiable pass? We
-waited, all curiosity, until with another effort he braced
-himself to tell his story.
-
-"I feel that time is of value," said he; "that is why I hastened
-here when the police inspector suggested that I should secure
-your co-operation. I came to Baker Street by the Underground and
-hurried from there on foot, for the cabs go slowly through this
-snow. That is why I was so out of breath, for I am a man who
-takes very little exercise. I feel better now, and I will put the
-facts before you as shortly and yet as clearly as I can.
-
-"It is, of course, well known to you that in a successful banking
-business as much depends upon our being able to find remunerative
-investments for our funds as upon our increasing our connection
-and the number of our depositors. One of our most lucrative means
-of laying out money is in the shape of loans, where the security
-is unimpeachable. We have done a good deal in this direction
-during the last few years, and there are many noble families to
-whom we have advanced large sums upon the security of their
-pictures, libraries, or plate.
-
-"Yesterday morning I was seated in my office at the bank when a
-card was brought in to me by one of the clerks. I started when I
-saw the name, for it was that of none other than--well, perhaps
-even to you I had better say no more than that it was a name
-which is a household word all over the earth--one of the highest,
-noblest, most exalted names in England. I was overwhelmed by the
-honour and attempted, when he entered, to say so, but he plunged
-at once into business with the air of a man who wishes to hurry
-quickly through a disagreeable task.
-
-"'Mr. Holder,' said he, 'I have been informed that you are in the
-habit of advancing money.'
-
-"'The firm does so when the security is good.' I answered.
-
-"'It is absolutely essential to me,' said he, 'that I should have
-50,000 pounds at once. I could, of course, borrow so trifling a
-sum ten times over from my friends, but I much prefer to make it
-a matter of business and to carry out that business myself. In my
-position you can readily understand that it is unwise to place
-one's self under obligations.'
-
-"'For how long, may I ask, do you want this sum?' I asked.
-
-"'Next Monday I have a large sum due to me, and I shall then most
-certainly repay what you advance, with whatever interest you
-think it right to charge. But it is very essential to me that the
-money should be paid at once.'
-
-"'I should be happy to advance it without further parley from my
-own private purse,' said I, 'were it not that the strain would be
-rather more than it could bear. If, on the other hand, I am to do
-it in the name of the firm, then in justice to my partner I must
-insist that, even in your case, every businesslike precaution
-should be taken.'
-
-"'I should much prefer to have it so,' said he, raising up a
-square, black morocco case which he had laid beside his chair.
-'You have doubtless heard of the Beryl Coronet?'
-
-"'One of the most precious public possessions of the empire,'
-said I.
-
-"'Precisely.' He opened the case, and there, imbedded in soft,
-flesh-coloured velvet, lay the magnificent piece of jewellery
-which he had named. 'There are thirty-nine enormous beryls,' said
-he, 'and the price of the gold chasing is incalculable. The
-lowest estimate would put the worth of the coronet at double the
-sum which I have asked. I am prepared to leave it with you as my
-security.'
-
-"I took the precious case into my hands and looked in some
-perplexity from it to my illustrious client.
-
-"'You doubt its value?' he asked.
-
-"'Not at all. I only doubt--'
-
-"'The propriety of my leaving it. You may set your mind at rest
-about that. I should not dream of doing so were it not absolutely
-certain that I should be able in four days to reclaim it. It is a
-pure matter of form. Is the security sufficient?'
-
-"'Ample.'
-
-"'You understand, Mr. Holder, that I am giving you a strong proof
-of the confidence which I have in you, founded upon all that I
-have heard of you. I rely upon you not only to be discreet and to
-refrain from all gossip upon the matter but, above all, to
-preserve this coronet with every possible precaution because I
-need not say that a great public scandal would be caused if any
-harm were to befall it. Any injury to it would be almost as
-serious as its complete loss, for there are no beryls in the
-world to match these, and it would be impossible to replace them.
-I leave it with you, however, with every confidence, and I shall
-call for it in person on Monday morning.'
-
-"Seeing that my client was anxious to leave, I said no more but,
-calling for my cashier, I ordered him to pay over fifty 1000
-pound notes. When I was alone once more, however, with the
-precious case lying upon the table in front of me, I could not
-but think with some misgivings of the immense responsibility
-which it entailed upon me. There could be no doubt that, as it
-was a national possession, a horrible scandal would ensue if any
-misfortune should occur to it. I already regretted having ever
-consented to take charge of it. However, it was too late to alter
-the matter now, so I locked it up in my private safe and turned
-once more to my work.
-
-"When evening came I felt that it would be an imprudence to leave
-so precious a thing in the office behind me. Bankers' safes had
-been forced before now, and why should not mine be? If so, how
-terrible would be the position in which I should find myself! I
-determined, therefore, that for the next few days I would always
-carry the case backward and forward with me, so that it might
-never be really out of my reach. With this intention, I called a
-cab and drove out to my house at Streatham, carrying the jewel
-with me. I did not breathe freely until I had taken it upstairs
-and locked it in the bureau of my dressing-room.
-
-"And now a word as to my household, Mr. Holmes, for I wish you to
-thoroughly understand the situation. My groom and my page sleep
-out of the house, and may be set aside altogether. I have three
-maid-servants who have been with me a number of years and whose
-absolute reliability is quite above suspicion. Another, Lucy
-Parr, the second waiting-maid, has only been in my service a few
-months. She came with an excellent character, however, and has
-always given me satisfaction. She is a very pretty girl and has
-attracted admirers who have occasionally hung about the place.
-That is the only drawback which we have found to her, but we
-believe her to be a thoroughly good girl in every way.
-
-"So much for the servants. My family itself is so small that it
-will not take me long to describe it. I am a widower and have an
-only son, Arthur. He has been a disappointment to me, Mr.
-Holmes--a grievous disappointment. I have no doubt that I am
-myself to blame. People tell me that I have spoiled him. Very
-likely I have. When my dear wife died I felt that he was all I
-had to love. I could not bear to see the smile fade even for a
-moment from his face. I have never denied him a wish. Perhaps it
-would have been better for both of us had I been sterner, but I
-meant it for the best.
-
-"It was naturally my intention that he should succeed me in my
-business, but he was not of a business turn. He was wild,
-wayward, and, to speak the truth, I could not trust him in the
-handling of large sums of money. When he was young he became a
-member of an aristocratic club, and there, having charming
-manners, he was soon the intimate of a number of men with long
-purses and expensive habits. He learned to play heavily at cards
-and to squander money on the turf, until he had again and again
-to come to me and implore me to give him an advance upon his
-allowance, that he might settle his debts of honour. He tried
-more than once to break away from the dangerous company which he
-was keeping, but each time the influence of his friend, Sir
-George Burnwell, was enough to draw him back again.
-
-"And, indeed, I could not wonder that such a man as Sir George
-Burnwell should gain an influence over him, for he has frequently
-brought him to my house, and I have found myself that I could
-hardly resist the fascination of his manner. He is older than
-Arthur, a man of the world to his finger-tips, one who had been
-everywhere, seen everything, a brilliant talker, and a man of
-great personal beauty. Yet when I think of him in cold blood, far
-away from the glamour of his presence, I am convinced from his
-cynical speech and the look which I have caught in his eyes that
-he is one who should be deeply distrusted. So I think, and so,
-too, thinks my little Mary, who has a woman's quick insight into
-character.
-
-"And now there is only she to be described. She is my niece; but
-when my brother died five years ago and left her alone in the
-world I adopted her, and have looked upon her ever since as my
-daughter. She is a sunbeam in my house--sweet, loving, beautiful,
-a wonderful manager and housekeeper, yet as tender and quiet and
-gentle as a woman could be. She is my right hand. I do not know
-what I could do without her. In only one matter has she ever gone
-against my wishes. Twice my boy has asked her to marry him, for
-he loves her devotedly, but each time she has refused him. I
-think that if anyone could have drawn him into the right path it
-would have been she, and that his marriage might have changed his
-whole life; but now, alas! it is too late--forever too late!
-
-"Now, Mr. Holmes, you know the people who live under my roof, and
-I shall continue with my miserable story.
-
-"When we were taking coffee in the drawing-room that night after
-dinner, I told Arthur and Mary my experience, and of the precious
-treasure which we had under our roof, suppressing only the name
-of my client. Lucy Parr, who had brought in the coffee, had, I am
-sure, left the room; but I cannot swear that the door was closed.
-Mary and Arthur were much interested and wished to see the famous
-coronet, but I thought it better not to disturb it.
-
-"'Where have you put it?' asked Arthur.
-
-"'In my own bureau.'
-
-"'Well, I hope to goodness the house won't be burgled during the
-night.' said he.
-
-"'It is locked up,' I answered.
-
-"'Oh, any old key will fit that bureau. When I was a youngster I
-have opened it myself with the key of the box-room cupboard.'
-
-"He often had a wild way of talking, so that I thought little of
-what he said. He followed me to my room, however, that night with
-a very grave face.
-
-"'Look here, dad,' said he with his eyes cast down, 'can you let
-me have 200 pounds?'
-
-"'No, I cannot!' I answered sharply. 'I have been far too
-generous with you in money matters.'
-
-"'You have been very kind,' said he, 'but I must have this money,
-or else I can never show my face inside the club again.'
-
-"'And a very good thing, too!' I cried.
-
-"'Yes, but you would not have me leave it a dishonoured man,'
-said he. 'I could not bear the disgrace. I must raise the money
-in some way, and if you will not let me have it, then I must try
-other means.'
-
-"I was very angry, for this was the third demand during the
-month. 'You shall not have a farthing from me,' I cried, on which
-he bowed and left the room without another word.
-
-"When he was gone I unlocked my bureau, made sure that my
-treasure was safe, and locked it again. Then I started to go
-round the house to see that all was secure--a duty which I
-usually leave to Mary but which I thought it well to perform
-myself that night. As I came down the stairs I saw Mary herself
-at the side window of the hall, which she closed and fastened as
-I approached.
-
-"'Tell me, dad,' said she, looking, I thought, a little
-disturbed, 'did you give Lucy, the maid, leave to go out
-to-night?'
-
-"'Certainly not.'
-
-"'She came in just now by the back door. I have no doubt that she
-has only been to the side gate to see someone, but I think that
-it is hardly safe and should be stopped.'
-
-"'You must speak to her in the morning, or I will if you prefer
-it. Are you sure that everything is fastened?'
-
-"'Quite sure, dad.'
-
-"'Then, good-night.' I kissed her and went up to my bedroom
-again, where I was soon asleep.
-
-"I am endeavouring to tell you everything, Mr. Holmes, which may
-have any bearing upon the case, but I beg that you will question
-me upon any point which I do not make clear."
-
-"On the contrary, your statement is singularly lucid."
-
-"I come to a part of my story now in which I should wish to be
-particularly so. I am not a very heavy sleeper, and the anxiety
-in my mind tended, no doubt, to make me even less so than usual.
-About two in the morning, then, I was awakened by some sound in
-the house. It had ceased ere I was wide awake, but it had left an
-impression behind it as though a window had gently closed
-somewhere. I lay listening with all my ears. Suddenly, to my
-horror, there was a distinct sound of footsteps moving softly in
-the next room. I slipped out of bed, all palpitating with fear,
-and peeped round the corner of my dressing-room door.
-
-"'Arthur!' I screamed, 'you villain! you thief! How dare you
-touch that coronet?'
-
-"The gas was half up, as I had left it, and my unhappy boy,
-dressed only in his shirt and trousers, was standing beside the
-light, holding the coronet in his hands. He appeared to be
-wrenching at it, or bending it with all his strength. At my cry
-he dropped it from his grasp and turned as pale as death. I
-snatched it up and examined it. One of the gold corners, with
-three of the beryls in it, was missing.
-
-"'You blackguard!' I shouted, beside myself with rage. 'You have
-destroyed it! You have dishonoured me forever! Where are the
-jewels which you have stolen?'
-
-"'Stolen!' he cried.
-
-"'Yes, thief!' I roared, shaking him by the shoulder.
-
-"'There are none missing. There cannot be any missing,' said he.
-
-"'There are three missing. And you know where they are. Must I
-call you a liar as well as a thief? Did I not see you trying to
-tear off another piece?'
-
-"'You have called me names enough,' said he, 'I will not stand it
-any longer. I shall not say another word about this business,
-since you have chosen to insult me. I will leave your house in
-the morning and make my own way in the world.'
-
-"'You shall leave it in the hands of the police!' I cried
-half-mad with grief and rage. 'I shall have this matter probed to
-the bottom.'
-
-"'You shall learn nothing from me,' said he with a passion such
-as I should not have thought was in his nature. 'If you choose to
-call the police, let the police find what they can.'
-
-"By this time the whole house was astir, for I had raised my
-voice in my anger. Mary was the first to rush into my room, and,
-at the sight of the coronet and of Arthur's face, she read the
-whole story and, with a scream, fell down senseless on the
-ground. I sent the house-maid for the police and put the
-investigation into their hands at once. When the inspector and a
-constable entered the house, Arthur, who had stood sullenly with
-his arms folded, asked me whether it was my intention to charge
-him with theft. I answered that it had ceased to be a private
-matter, but had become a public one, since the ruined coronet was
-national property. I was determined that the law should have its
-way in everything.
-
-"'At least,' said he, 'you will not have me arrested at once. It
-would be to your advantage as well as mine if I might leave the
-house for five minutes.'
-
-"'That you may get away, or perhaps that you may conceal what you
-have stolen,' said I. And then, realising the dreadful position
-in which I was placed, I implored him to remember that not only
-my honour but that of one who was far greater than I was at
-stake; and that he threatened to raise a scandal which would
-convulse the nation. He might avert it all if he would but tell
-me what he had done with the three missing stones.
-
-"'You may as well face the matter,' said I; 'you have been caught
-in the act, and no confession could make your guilt more heinous.
-If you but make such reparation as is in your power, by telling
-us where the beryls are, all shall be forgiven and forgotten.'
-
-"'Keep your forgiveness for those who ask for it,' he answered,
-turning away from me with a sneer. I saw that he was too hardened
-for any words of mine to influence him. There was but one way for
-it. I called in the inspector and gave him into custody. A search
-was made at once not only of his person but of his room and of
-every portion of the house where he could possibly have concealed
-the gems; but no trace of them could be found, nor would the
-wretched boy open his mouth for all our persuasions and our
-threats. This morning he was removed to a cell, and I, after
-going through all the police formalities, have hurried round to
-you to implore you to use your skill in unravelling the matter.
-The police have openly confessed that they can at present make
-nothing of it. You may go to any expense which you think
-necessary. I have already offered a reward of 1000 pounds. My
-God, what shall I do! I have lost my honour, my gems, and my son
-in one night. Oh, what shall I do!"
-
-He put a hand on either side of his head and rocked himself to
-and fro, droning to himself like a child whose grief has got
-beyond words.
-
-Sherlock Holmes sat silent for some few minutes, with his brows
-knitted and his eyes fixed upon the fire.
-
-"Do you receive much company?" he asked.
-
-"None save my partner with his family and an occasional friend of
-Arthur's. Sir George Burnwell has been several times lately. No
-one else, I think."
-
-"Do you go out much in society?"
-
-"Arthur does. Mary and I stay at home. We neither of us care for
-it."
-
-"That is unusual in a young girl."
-
-"She is of a quiet nature. Besides, she is not so very young. She
-is four-and-twenty."
-
-"This matter, from what you say, seems to have been a shock to
-her also."
-
-"Terrible! She is even more affected than I."
-
-"You have neither of you any doubt as to your son's guilt?"
-
-"How can we have when I saw him with my own eyes with the coronet
-in his hands."
-
-"I hardly consider that a conclusive proof. Was the remainder of
-the coronet at all injured?"
-
-"Yes, it was twisted."
-
-"Do you not think, then, that he might have been trying to
-straighten it?"
-
-"God bless you! You are doing what you can for him and for me.
-But it is too heavy a task. What was he doing there at all? If
-his purpose were innocent, why did he not say so?"
-
-"Precisely. And if it were guilty, why did he not invent a lie?
-His silence appears to me to cut both ways. There are several
-singular points about the case. What did the police think of the
-noise which awoke you from your sleep?"
-
-"They considered that it might be caused by Arthur's closing his
-bedroom door."
-
-"A likely story! As if a man bent on felony would slam his door
-so as to wake a household. What did they say, then, of the
-disappearance of these gems?"
-
-"They are still sounding the planking and probing the furniture
-in the hope of finding them."
-
-"Have they thought of looking outside the house?"
-
-"Yes, they have shown extraordinary energy. The whole garden has
-already been minutely examined."
-
-"Now, my dear sir," said Holmes, "is it not obvious to you now
-that this matter really strikes very much deeper than either you
-or the police were at first inclined to think? It appeared to you
-to be a simple case; to me it seems exceedingly complex. Consider
-what is involved by your theory. You suppose that your son came
-down from his bed, went, at great risk, to your dressing-room,
-opened your bureau, took out your coronet, broke off by main
-force a small portion of it, went off to some other place,
-concealed three gems out of the thirty-nine, with such skill that
-nobody can find them, and then returned with the other thirty-six
-into the room in which he exposed himself to the greatest danger
-of being discovered. I ask you now, is such a theory tenable?"
-
-"But what other is there?" cried the banker with a gesture of
-despair. "If his motives were innocent, why does he not explain
-them?"
-
-"It is our task to find that out," replied Holmes; "so now, if
-you please, Mr. Holder, we will set off for Streatham together,
-and devote an hour to glancing a little more closely into
-details."
-
-My friend insisted upon my accompanying them in their expedition,
-which I was eager enough to do, for my curiosity and sympathy
-were deeply stirred by the story to which we had listened. I
-confess that the guilt of the banker's son appeared to me to be
-as obvious as it did to his unhappy father, but still I had such
-faith in Holmes' judgment that I felt that there must be some
-grounds for hope as long as he was dissatisfied with the accepted
-explanation. He hardly spoke a word the whole way out to the
-southern suburb, but sat with his chin upon his breast and his
-hat drawn over his eyes, sunk in the deepest thought. Our client
-appeared to have taken fresh heart at the little glimpse of hope
-which had been presented to him, and he even broke into a
-desultory chat with me over his business affairs. A short railway
-journey and a shorter walk brought us to Fairbank, the modest
-residence of the great financier.
-
-Fairbank was a good-sized square house of white stone, standing
-back a little from the road. A double carriage-sweep, with a
-snow-clad lawn, stretched down in front to two large iron gates
-which closed the entrance. On the right side was a small wooden
-thicket, which led into a narrow path between two neat hedges
-stretching from the road to the kitchen door, and forming the
-tradesmen's entrance. On the left ran a lane which led to the
-stables, and was not itself within the grounds at all, being a
-public, though little used, thoroughfare. Holmes left us standing
-at the door and walked slowly all round the house, across the
-front, down the tradesmen's path, and so round by the garden
-behind into the stable lane. So long was he that Mr. Holder and I
-went into the dining-room and waited by the fire until he should
-return. We were sitting there in silence when the door opened and
-a young lady came in. She was rather above the middle height,
-slim, with dark hair and eyes, which seemed the darker against
-the absolute pallor of her skin. I do not think that I have ever
-seen such deadly paleness in a woman's face. Her lips, too, were
-bloodless, but her eyes were flushed with crying. As she swept
-silently into the room she impressed me with a greater sense of
-grief than the banker had done in the morning, and it was the
-more striking in her as she was evidently a woman of strong
-character, with immense capacity for self-restraint. Disregarding
-my presence, she went straight to her uncle and passed her hand
-over his head with a sweet womanly caress.
-
-"You have given orders that Arthur should be liberated, have you
-not, dad?" she asked.
-
-"No, no, my girl, the matter must be probed to the bottom."
-
-"But I am so sure that he is innocent. You know what woman's
-instincts are. I know that he has done no harm and that you will
-be sorry for having acted so harshly."
-
-"Why is he silent, then, if he is innocent?"
-
-"Who knows? Perhaps because he was so angry that you should
-suspect him."
-
-"How could I help suspecting him, when I actually saw him with
-the coronet in his hand?"
-
-"Oh, but he had only picked it up to look at it. Oh, do, do take
-my word for it that he is innocent. Let the matter drop and say
-no more. It is so dreadful to think of our dear Arthur in
-prison!"
-
-"I shall never let it drop until the gems are found--never, Mary!
-Your affection for Arthur blinds you as to the awful consequences
-to me. Far from hushing the thing up, I have brought a gentleman
-down from London to inquire more deeply into it."
-
-"This gentleman?" she asked, facing round to me.
-
-"No, his friend. He wished us to leave him alone. He is round in
-the stable lane now."
-
-"The stable lane?" She raised her dark eyebrows. "What can he
-hope to find there? Ah! this, I suppose, is he. I trust, sir,
-that you will succeed in proving, what I feel sure is the truth,
-that my cousin Arthur is innocent of this crime."
-
-"I fully share your opinion, and I trust, with you, that we may
-prove it," returned Holmes, going back to the mat to knock the
-snow from his shoes. "I believe I have the honour of addressing
-Miss Mary Holder. Might I ask you a question or two?"
-
-"Pray do, sir, if it may help to clear this horrible affair up."
-
-"You heard nothing yourself last night?"
-
-"Nothing, until my uncle here began to speak loudly. I heard
-that, and I came down."
-
-"You shut up the windows and doors the night before. Did you
-fasten all the windows?"
-
-"Yes."
-
-"Were they all fastened this morning?"
-
-"Yes."
-
-"You have a maid who has a sweetheart? I think that you remarked
-to your uncle last night that she had been out to see him?"
-
-"Yes, and she was the girl who waited in the drawing-room, and
-who may have heard uncle's remarks about the coronet."
-
-"I see. You infer that she may have gone out to tell her
-sweetheart, and that the two may have planned the robbery."
-
-"But what is the good of all these vague theories," cried the
-banker impatiently, "when I have told you that I saw Arthur with
-the coronet in his hands?"
-
-"Wait a little, Mr. Holder. We must come back to that. About this
-girl, Miss Holder. You saw her return by the kitchen door, I
-presume?"
-
-"Yes; when I went to see if the door was fastened for the night I
-met her slipping in. I saw the man, too, in the gloom."
-
-"Do you know him?"
-
-"Oh, yes! he is the green-grocer who brings our vegetables round.
-His name is Francis Prosper."
-
-"He stood," said Holmes, "to the left of the door--that is to
-say, farther up the path than is necessary to reach the door?"
-
-"Yes, he did."
-
-"And he is a man with a wooden leg?"
-
-Something like fear sprang up in the young lady's expressive
-black eyes. "Why, you are like a magician," said she. "How do you
-know that?" She smiled, but there was no answering smile in
-Holmes' thin, eager face.
-
-"I should be very glad now to go upstairs," said he. "I shall
-probably wish to go over the outside of the house again. Perhaps
-I had better take a look at the lower windows before I go up."
-
-He walked swiftly round from one to the other, pausing only at
-the large one which looked from the hall onto the stable lane.
-This he opened and made a very careful examination of the sill
-with his powerful magnifying lens. "Now we shall go upstairs,"
-said he at last.
-
-The banker's dressing-room was a plainly furnished little
-chamber, with a grey carpet, a large bureau, and a long mirror.
-Holmes went to the bureau first and looked hard at the lock.
-
-"Which key was used to open it?" he asked.
-
-"That which my son himself indicated--that of the cupboard of the
-lumber-room."
-
-"Have you it here?"
-
-"That is it on the dressing-table."
-
-Sherlock Holmes took it up and opened the bureau.
-
-"It is a noiseless lock," said he. "It is no wonder that it did
-not wake you. This case, I presume, contains the coronet. We must
-have a look at it." He opened the case, and taking out the diadem
-he laid it upon the table. It was a magnificent specimen of the
-jeweller's art, and the thirty-six stones were the finest that I
-have ever seen. At one side of the coronet was a cracked edge,
-where a corner holding three gems had been torn away.
-
-"Now, Mr. Holder," said Holmes, "here is the corner which
-corresponds to that which has been so unfortunately lost. Might I
-beg that you will break it off."
-
-The banker recoiled in horror. "I should not dream of trying,"
-said he.
-
-"Then I will." Holmes suddenly bent his strength upon it, but
-without result. "I feel it give a little," said he; "but, though
-I am exceptionally strong in the fingers, it would take me all my
-time to break it. An ordinary man could not do it. Now, what do
-you think would happen if I did break it, Mr. Holder? There would
-be a noise like a pistol shot. Do you tell me that all this
-happened within a few yards of your bed and that you heard
-nothing of it?"
-
-"I do not know what to think. It is all dark to me."
-
-"But perhaps it may grow lighter as we go. What do you think,
-Miss Holder?"
-
-"I confess that I still share my uncle's perplexity."
-
-"Your son had no shoes or slippers on when you saw him?"
-
-"He had nothing on save only his trousers and shirt."
-
-"Thank you. We have certainly been favoured with extraordinary
-luck during this inquiry, and it will be entirely our own fault
-if we do not succeed in clearing the matter up. With your
-permission, Mr. Holder, I shall now continue my investigations
-outside."
-
-He went alone, at his own request, for he explained that any
-unnecessary footmarks might make his task more difficult. For an
-hour or more he was at work, returning at last with his feet
-heavy with snow and his features as inscrutable as ever.
-
-"I think that I have seen now all that there is to see, Mr.
-Holder," said he; "I can serve you best by returning to my
-rooms."
-
-"But the gems, Mr. Holmes. Where are they?"
-
-"I cannot tell."
-
-The banker wrung his hands. "I shall never see them again!" he
-cried. "And my son? You give me hopes?"
-
-"My opinion is in no way altered."
-
-"Then, for God's sake, what was this dark business which was
-acted in my house last night?"
-
-"If you can call upon me at my Baker Street rooms to-morrow
-morning between nine and ten I shall be happy to do what I can to
-make it clearer. I understand that you give me carte blanche to
-act for you, provided only that I get back the gems, and that you
-place no limit on the sum I may draw."
-
-"I would give my fortune to have them back."
-
-"Very good. I shall look into the matter between this and then.
-Good-bye; it is just possible that I may have to come over here
-again before evening."
-
-It was obvious to me that my companion's mind was now made up
-about the case, although what his conclusions were was more than
-I could even dimly imagine. Several times during our homeward
-journey I endeavoured to sound him upon the point, but he always
-glided away to some other topic, until at last I gave it over in
-despair. It was not yet three when we found ourselves in our
-rooms once more. He hurried to his chamber and was down again in
-a few minutes dressed as a common loafer. With his collar turned
-up, his shiny, seedy coat, his red cravat, and his worn boots, he
-was a perfect sample of the class.
-
-"I think that this should do," said he, glancing into the glass
-above the fireplace. "I only wish that you could come with me,
-Watson, but I fear that it won't do. I may be on the trail in
-this matter, or I may be following a will-o'-the-wisp, but I
-shall soon know which it is. I hope that I may be back in a few
-hours." He cut a slice of beef from the joint upon the sideboard,
-sandwiched it between two rounds of bread, and thrusting this
-rude meal into his pocket he started off upon his expedition.
-
-I had just finished my tea when he returned, evidently in
-excellent spirits, swinging an old elastic-sided boot in his
-hand. He chucked it down into a corner and helped himself to a
-cup of tea.
-
-"I only looked in as I passed," said he. "I am going right on."
-
-"Where to?"
-
-"Oh, to the other side of the West End. It may be some time
-before I get back. Don't wait up for me in case I should be
-late."
-
-"How are you getting on?"
-
-"Oh, so so. Nothing to complain of. I have been out to Streatham
-since I saw you last, but I did not call at the house. It is a
-very sweet little problem, and I would not have missed it for a
-good deal. However, I must not sit gossiping here, but must get
-these disreputable clothes off and return to my highly
-respectable self."
-
-I could see by his manner that he had stronger reasons for
-satisfaction than his words alone would imply. His eyes twinkled,
-and there was even a touch of colour upon his sallow cheeks. He
-hastened upstairs, and a few minutes later I heard the slam of
-the hall door, which told me that he was off once more upon his
-congenial hunt.
-
-I waited until midnight, but there was no sign of his return, so
-I retired to my room. It was no uncommon thing for him to be away
-for days and nights on end when he was hot upon a scent, so that
-his lateness caused me no surprise. I do not know at what hour he
-came in, but when I came down to breakfast in the morning there
-he was with a cup of coffee in one hand and the paper in the
-other, as fresh and trim as possible.
-
-"You will excuse my beginning without you, Watson," said he, "but
-you remember that our client has rather an early appointment this
-morning."
-
-"Why, it is after nine now," I answered. "I should not be
-surprised if that were he. I thought I heard a ring."
-
-It was, indeed, our friend the financier. I was shocked by the
-change which had come over him, for his face which was naturally
-of a broad and massive mould, was now pinched and fallen in,
-while his hair seemed to me at least a shade whiter. He entered
-with a weariness and lethargy which was even more painful than
-his violence of the morning before, and he dropped heavily into
-the armchair which I pushed forward for him.
-
-"I do not know what I have done to be so severely tried," said
-he. "Only two days ago I was a happy and prosperous man, without
-a care in the world. Now I am left to a lonely and dishonoured
-age. One sorrow comes close upon the heels of another. My niece,
-Mary, has deserted me."
-
-"Deserted you?"
-
-"Yes. Her bed this morning had not been slept in, her room was
-empty, and a note for me lay upon the hall table. I had said to
-her last night, in sorrow and not in anger, that if she had
-married my boy all might have been well with him. Perhaps it was
-thoughtless of me to say so. It is to that remark that she refers
-in this note:
-
-"'MY DEAREST UNCLE:--I feel that I have brought trouble upon you,
-and that if I had acted differently this terrible misfortune
-might never have occurred. I cannot, with this thought in my
-mind, ever again be happy under your roof, and I feel that I must
-leave you forever. Do not worry about my future, for that is
-provided for; and, above all, do not search for me, for it will
-be fruitless labour and an ill-service to me. In life or in
-death, I am ever your loving,--MARY.'
-
-"What could she mean by that note, Mr. Holmes? Do you think it
-points to suicide?"
-
-"No, no, nothing of the kind. It is perhaps the best possible
-solution. I trust, Mr. Holder, that you are nearing the end of
-your troubles."
-
-"Ha! You say so! You have heard something, Mr. Holmes; you have
-learned something! Where are the gems?"
-
-"You would not think 1000 pounds apiece an excessive sum for
-them?"
-
-"I would pay ten."
-
-"That would be unnecessary. Three thousand will cover the matter.
-And there is a little reward, I fancy. Have you your check-book?
-Here is a pen. Better make it out for 4000 pounds."
-
-With a dazed face the banker made out the required check. Holmes
-walked over to his desk, took out a little triangular piece of
-gold with three gems in it, and threw it down upon the table.
-
-With a shriek of joy our client clutched it up.
-
-"You have it!" he gasped. "I am saved! I am saved!"
-
-The reaction of joy was as passionate as his grief had been, and
-he hugged his recovered gems to his bosom.
-
-"There is one other thing you owe, Mr. Holder," said Sherlock
-Holmes rather sternly.
-
-"Owe!" He caught up a pen. "Name the sum, and I will pay it."
-
-"No, the debt is not to me. You owe a very humble apology to that
-noble lad, your son, who has carried himself in this matter as I
-should be proud to see my own son do, should I ever chance to
-have one."
-
-"Then it was not Arthur who took them?"
-
-"I told you yesterday, and I repeat to-day, that it was not."
-
-"You are sure of it! Then let us hurry to him at once to let him
-know that the truth is known."
-
-"He knows it already. When I had cleared it all up I had an
-interview with him, and finding that he would not tell me the
-story, I told it to him, on which he had to confess that I was
-right and to add the very few details which were not yet quite
-clear to me. Your news of this morning, however, may open his
-lips."
-
-"For heaven's sake, tell me, then, what is this extraordinary
-mystery!"
-
-"I will do so, and I will show you the steps by which I reached
-it. And let me say to you, first, that which it is hardest for me
-to say and for you to hear: there has been an understanding
-between Sir George Burnwell and your niece Mary. They have now
-fled together."
-
-"My Mary? Impossible!"
-
-"It is unfortunately more than possible; it is certain. Neither
-you nor your son knew the true character of this man when you
-admitted him into your family circle. He is one of the most
-dangerous men in England--a ruined gambler, an absolutely
-desperate villain, a man without heart or conscience. Your niece
-knew nothing of such men. When he breathed his vows to her, as he
-had done to a hundred before her, she flattered herself that she
-alone had touched his heart. The devil knows best what he said,
-but at least she became his tool and was in the habit of seeing
-him nearly every evening."
-
-"I cannot, and I will not, believe it!" cried the banker with an
-ashen face.
-
-"I will tell you, then, what occurred in your house last night.
-Your niece, when you had, as she thought, gone to your room,
-slipped down and talked to her lover through the window which
-leads into the stable lane. His footmarks had pressed right
-through the snow, so long had he stood there. She told him of the
-coronet. His wicked lust for gold kindled at the news, and he
-bent her to his will. I have no doubt that she loved you, but
-there are women in whom the love of a lover extinguishes all
-other loves, and I think that she must have been one. She had
-hardly listened to his instructions when she saw you coming
-downstairs, on which she closed the window rapidly and told you
-about one of the servants' escapade with her wooden-legged lover,
-which was all perfectly true.
-
-"Your boy, Arthur, went to bed after his interview with you but
-he slept badly on account of his uneasiness about his club debts.
-In the middle of the night he heard a soft tread pass his door,
-so he rose and, looking out, was surprised to see his cousin
-walking very stealthily along the passage until she disappeared
-into your dressing-room. Petrified with astonishment, the lad
-slipped on some clothes and waited there in the dark to see what
-would come of this strange affair. Presently she emerged from the
-room again, and in the light of the passage-lamp your son saw
-that she carried the precious coronet in her hands. She passed
-down the stairs, and he, thrilling with horror, ran along and
-slipped behind the curtain near your door, whence he could see
-what passed in the hall beneath. He saw her stealthily open the
-window, hand out the coronet to someone in the gloom, and then
-closing it once more hurry back to her room, passing quite close
-to where he stood hid behind the curtain.
-
-"As long as she was on the scene he could not take any action
-without a horrible exposure of the woman whom he loved. But the
-instant that she was gone he realised how crushing a misfortune
-this would be for you, and how all-important it was to set it
-right. He rushed down, just as he was, in his bare feet, opened
-the window, sprang out into the snow, and ran down the lane,
-where he could see a dark figure in the moonlight. Sir George
-Burnwell tried to get away, but Arthur caught him, and there was
-a struggle between them, your lad tugging at one side of the
-coronet, and his opponent at the other. In the scuffle, your son
-struck Sir George and cut him over the eye. Then something
-suddenly snapped, and your son, finding that he had the coronet
-in his hands, rushed back, closed the window, ascended to your
-room, and had just observed that the coronet had been twisted in
-the struggle and was endeavouring to straighten it when you
-appeared upon the scene."
-
-"Is it possible?" gasped the banker.
-
-"You then roused his anger by calling him names at a moment when
-he felt that he had deserved your warmest thanks. He could not
-explain the true state of affairs without betraying one who
-certainly deserved little enough consideration at his hands. He
-took the more chivalrous view, however, and preserved her
-secret."
-
-"And that was why she shrieked and fainted when she saw the
-coronet," cried Mr. Holder. "Oh, my God! what a blind fool I have
-been! And his asking to be allowed to go out for five minutes!
-The dear fellow wanted to see if the missing piece were at the
-scene of the struggle. How cruelly I have misjudged him!"
-
-"When I arrived at the house," continued Holmes, "I at once went
-very carefully round it to observe if there were any traces in
-the snow which might help me. I knew that none had fallen since
-the evening before, and also that there had been a strong frost
-to preserve impressions. I passed along the tradesmen's path, but
-found it all trampled down and indistinguishable. Just beyond it,
-however, at the far side of the kitchen door, a woman had stood
-and talked with a man, whose round impressions on one side showed
-that he had a wooden leg. I could even tell that they had been
-disturbed, for the woman had run back swiftly to the door, as was
-shown by the deep toe and light heel marks, while Wooden-leg had
-waited a little, and then had gone away. I thought at the time
-that this might be the maid and her sweetheart, of whom you had
-already spoken to me, and inquiry showed it was so. I passed
-round the garden without seeing anything more than random tracks,
-which I took to be the police; but when I got into the stable
-lane a very long and complex story was written in the snow in
-front of me.
-
-"There was a double line of tracks of a booted man, and a second
-double line which I saw with delight belonged to a man with naked
-feet. I was at once convinced from what you had told me that the
-latter was your son. The first had walked both ways, but the
-other had run swiftly, and as his tread was marked in places over
-the depression of the boot, it was obvious that he had passed
-after the other. I followed them up and found they led to the
-hall window, where Boots had worn all the snow away while
-waiting. Then I walked to the other end, which was a hundred
-yards or more down the lane. I saw where Boots had faced round,
-where the snow was cut up as though there had been a struggle,
-and, finally, where a few drops of blood had fallen, to show me
-that I was not mistaken. Boots had then run down the lane, and
-another little smudge of blood showed that it was he who had been
-hurt. When he came to the highroad at the other end, I found that
-the pavement had been cleared, so there was an end to that clue.
-
-"On entering the house, however, I examined, as you remember, the
-sill and framework of the hall window with my lens, and I could
-at once see that someone had passed out. I could distinguish the
-outline of an instep where the wet foot had been placed in coming
-in. I was then beginning to be able to form an opinion as to what
-had occurred. A man had waited outside the window; someone had
-brought the gems; the deed had been overseen by your son; he had
-pursued the thief; had struggled with him; they had each tugged
-at the coronet, their united strength causing injuries which
-neither alone could have effected. He had returned with the
-prize, but had left a fragment in the grasp of his opponent. So
-far I was clear. The question now was, who was the man and who
-was it brought him the coronet?
-
-"It is an old maxim of mine that when you have excluded the
-impossible, whatever remains, however improbable, must be the
-truth. Now, I knew that it was not you who had brought it down,
-so there only remained your niece and the maids. But if it were
-the maids, why should your son allow himself to be accused in
-their place? There could be no possible reason. As he loved his
-cousin, however, there was an excellent explanation why he should
-retain her secret--the more so as the secret was a disgraceful
-one. When I remembered that you had seen her at that window, and
-how she had fainted on seeing the coronet again, my conjecture
-became a certainty.
-
-"And who could it be who was her confederate? A lover evidently,
-for who else could outweigh the love and gratitude which she must
-feel to you? I knew that you went out little, and that your
-circle of friends was a very limited one. But among them was Sir
-George Burnwell. I had heard of him before as being a man of evil
-reputation among women. It must have been he who wore those boots
-and retained the missing gems. Even though he knew that Arthur
-had discovered him, he might still flatter himself that he was
-safe, for the lad could not say a word without compromising his
-own family.
-
-"Well, your own good sense will suggest what measures I took
-next. I went in the shape of a loafer to Sir George's house,
-managed to pick up an acquaintance with his valet, learned that
-his master had cut his head the night before, and, finally, at
-the expense of six shillings, made all sure by buying a pair of
-his cast-off shoes. With these I journeyed down to Streatham and
-saw that they exactly fitted the tracks."
-
-"I saw an ill-dressed vagabond in the lane yesterday evening,"
-said Mr. Holder.
-
-"Precisely. It was I. I found that I had my man, so I came home
-and changed my clothes. It was a delicate part which I had to
-play then, for I saw that a prosecution must be avoided to avert
-scandal, and I knew that so astute a villain would see that our
-hands were tied in the matter. I went and saw him. At first, of
-course, he denied everything. But when I gave him every
-particular that had occurred, he tried to bluster and took down a
-life-preserver from the wall. I knew my man, however, and I
-clapped a pistol to his head before he could strike. Then he
-became a little more reasonable. I told him that we would give
-him a price for the stones he held--1000 pounds apiece. That
-brought out the first signs of grief that he had shown. 'Why,
-dash it all!' said he, 'I've let them go at six hundred for the
-three!' I soon managed to get the address of the receiver who had
-them, on promising him that there would be no prosecution. Off I
-set to him, and after much chaffering I got our stones at 1000
-pounds apiece. Then I looked in upon your son, told him that all
-was right, and eventually got to my bed about two o'clock, after
-what I may call a really hard day's work."
-
-"A day which has saved England from a great public scandal," said
-the banker, rising. "Sir, I cannot find words to thank you, but
-you shall not find me ungrateful for what you have done. Your
-skill has indeed exceeded all that I have heard of it. And now I
-must fly to my dear boy to apologise to him for the wrong which I
-have done him. As to what you tell me of poor Mary, it goes to my
-very heart. Not even your skill can inform me where she is now."
-
-"I think that we may safely say," returned Holmes, "that she is
-wherever Sir George Burnwell is. It is equally certain, too, that
-whatever her sins are, they will soon receive a more than
-sufficient punishment."
-
-
-
-XII. THE ADVENTURE OF THE COPPER BEECHES
-
-"To the man who loves art for its own sake," remarked Sherlock
-Holmes, tossing aside the advertisement sheet of the Daily
-Telegraph, "it is frequently in its least important and lowliest
-manifestations that the keenest pleasure is to be derived. It is
-pleasant to me to observe, Watson, that you have so far grasped
-this truth that in these little records of our cases which you
-have been good enough to draw up, and, I am bound to say,
-occasionally to embellish, you have given prominence not so much
-to the many causes célèbres and sensational trials in which I
-have figured but rather to those incidents which may have been
-trivial in themselves, but which have given room for those
-faculties of deduction and of logical synthesis which I have made
-my special province."
-
-"And yet," said I, smiling, "I cannot quite hold myself absolved
-from the charge of sensationalism which has been urged against my
-records."
-
-"You have erred, perhaps," he observed, taking up a glowing
-cinder with the tongs and lighting with it the long cherry-wood
-pipe which was wont to replace his clay when he was in a
-disputatious rather than a meditative mood--"you have erred
-perhaps in attempting to put colour and life into each of your
-statements instead of confining yourself to the task of placing
-upon record that severe reasoning from cause to effect which is
-really the only notable feature about the thing."
-
-"It seems to me that I have done you full justice in the matter,"
-I remarked with some coldness, for I was repelled by the egotism
-which I had more than once observed to be a strong factor in my
-friend's singular character.
-
-"No, it is not selfishness or conceit," said he, answering, as
-was his wont, my thoughts rather than my words. "If I claim full
-justice for my art, it is because it is an impersonal thing--a
-thing beyond myself. Crime is common. Logic is rare. Therefore it
-is upon the logic rather than upon the crime that you should
-dwell. You have degraded what should have been a course of
-lectures into a series of tales."
-
-It was a cold morning of the early spring, and we sat after
-breakfast on either side of a cheery fire in the old room at
-Baker Street. A thick fog rolled down between the lines of
-dun-coloured houses, and the opposing windows loomed like dark,
-shapeless blurs through the heavy yellow wreaths. Our gas was lit
-and shone on the white cloth and glimmer of china and metal, for
-the table had not been cleared yet. Sherlock Holmes had been
-silent all the morning, dipping continuously into the
-advertisement columns of a succession of papers until at last,
-having apparently given up his search, he had emerged in no very
-sweet temper to lecture me upon my literary shortcomings.
-
-"At the same time," he remarked after a pause, during which he
-had sat puffing at his long pipe and gazing down into the fire,
-"you can hardly be open to a charge of sensationalism, for out of
-these cases which you have been so kind as to interest yourself
-in, a fair proportion do not treat of crime, in its legal sense,
-at all. The small matter in which I endeavoured to help the King
-of Bohemia, the singular experience of Miss Mary Sutherland, the
-problem connected with the man with the twisted lip, and the
-incident of the noble bachelor, were all matters which are
-outside the pale of the law. But in avoiding the sensational, I
-fear that you may have bordered on the trivial."
-
-"The end may have been so," I answered, "but the methods I hold
-to have been novel and of interest."
-
-"Pshaw, my dear fellow, what do the public, the great unobservant
-public, who could hardly tell a weaver by his tooth or a
-compositor by his left thumb, care about the finer shades of
-analysis and deduction! But, indeed, if you are trivial, I cannot
-blame you, for the days of the great cases are past. Man, or at
-least criminal man, has lost all enterprise and originality. As
-to my own little practice, it seems to be degenerating into an
-agency for recovering lost lead pencils and giving advice to
-young ladies from boarding-schools. I think that I have touched
-bottom at last, however. This note I had this morning marks my
-zero-point, I fancy. Read it!" He tossed a crumpled letter across
-to me.
-
-It was dated from Montague Place upon the preceding evening, and
-ran thus:
-
-"DEAR MR. HOLMES:--I am very anxious to consult you as to whether
-I should or should not accept a situation which has been offered
-to me as governess. I shall call at half-past ten to-morrow if I
-do not inconvenience you. Yours faithfully,
-                                               "VIOLET HUNTER."
-
-"Do you know the young lady?" I asked.
-
-"Not I."
-
-"It is half-past ten now."
-
-"Yes, and I have no doubt that is her ring."
-
-"It may turn out to be of more interest than you think. You
-remember that the affair of the blue carbuncle, which appeared to
-be a mere whim at first, developed into a serious investigation.
-It may be so in this case, also."
-
-"Well, let us hope so. But our doubts will very soon be solved,
-for here, unless I am much mistaken, is the person in question."
-
-As he spoke the door opened and a young lady entered the room.
-She was plainly but neatly dressed, with a bright, quick face,
-freckled like a plover's egg, and with the brisk manner of a
-woman who has had her own way to make in the world.
-
-"You will excuse my troubling you, I am sure," said she, as my
-companion rose to greet her, "but I have had a very strange
-experience, and as I have no parents or relations of any sort
-from whom I could ask advice, I thought that perhaps you would be
-kind enough to tell me what I should do."
-
-"Pray take a seat, Miss Hunter. I shall be happy to do anything
-that I can to serve you."
-
-I could see that Holmes was favourably impressed by the manner
-and speech of his new client. He looked her over in his searching
-fashion, and then composed himself, with his lids drooping and
-his finger-tips together, to listen to her story.
-
-"I have been a governess for five years," said she, "in the
-family of Colonel Spence Munro, but two months ago the colonel
-received an appointment at Halifax, in Nova Scotia, and took his
-children over to America with him, so that I found myself without
-a situation. I advertised, and I answered advertisements, but
-without success. At last the little money which I had saved began
-to run short, and I was at my wit's end as to what I should do.
-
-"There is a well-known agency for governesses in the West End
-called Westaway's, and there I used to call about once a week in
-order to see whether anything had turned up which might suit me.
-Westaway was the name of the founder of the business, but it is
-really managed by Miss Stoper. She sits in her own little office,
-and the ladies who are seeking employment wait in an anteroom,
-and are then shown in one by one, when she consults her ledgers
-and sees whether she has anything which would suit them.
-
-"Well, when I called last week I was shown into the little office
-as usual, but I found that Miss Stoper was not alone. A
-prodigiously stout man with a very smiling face and a great heavy
-chin which rolled down in fold upon fold over his throat sat at
-her elbow with a pair of glasses on his nose, looking very
-earnestly at the ladies who entered. As I came in he gave quite a
-jump in his chair and turned quickly to Miss Stoper.
-
-"'That will do,' said he; 'I could not ask for anything better.
-Capital! capital!' He seemed quite enthusiastic and rubbed his
-hands together in the most genial fashion. He was such a
-comfortable-looking man that it was quite a pleasure to look at
-him.
-
-"'You are looking for a situation, miss?' he asked.
-
-"'Yes, sir.'
-
-"'As governess?'
-
-"'Yes, sir.'
-
-"'And what salary do you ask?'
-
-"'I had 4 pounds a month in my last place with Colonel Spence
-Munro.'
-
-"'Oh, tut, tut! sweating--rank sweating!' he cried, throwing his
-fat hands out into the air like a man who is in a boiling
-passion. 'How could anyone offer so pitiful a sum to a lady with
-such attractions and accomplishments?'
-
-"'My accomplishments, sir, may be less than you imagine,' said I.
-'A little French, a little German, music, and drawing--'
-
-"'Tut, tut!' he cried. 'This is all quite beside the question.
-The point is, have you or have you not the bearing and deportment
-of a lady? There it is in a nutshell. If you have not, you are
-not fitted for the rearing of a child who may some day play a
-considerable part in the history of the country. But if you have
-why, then, how could any gentleman ask you to condescend to
-accept anything under the three figures? Your salary with me,
-madam, would commence at 100 pounds a year.'
-
-"You may imagine, Mr. Holmes, that to me, destitute as I was,
-such an offer seemed almost too good to be true. The gentleman,
-however, seeing perhaps the look of incredulity upon my face,
-opened a pocket-book and took out a note.
-
-"'It is also my custom,' said he, smiling in the most pleasant
-fashion until his eyes were just two little shining slits amid
-the white creases of his face, 'to advance to my young ladies
-half their salary beforehand, so that they may meet any little
-expenses of their journey and their wardrobe.'
-
-"It seemed to me that I had never met so fascinating and so
-thoughtful a man. As I was already in debt to my tradesmen, the
-advance was a great convenience, and yet there was something
-unnatural about the whole transaction which made me wish to know
-a little more before I quite committed myself.
-
-"'May I ask where you live, sir?' said I.
-
-"'Hampshire. Charming rural place. The Copper Beeches, five miles
-on the far side of Winchester. It is the most lovely country, my
-dear young lady, and the dearest old country-house.'
-
-"'And my duties, sir? I should be glad to know what they would
-be.'
-
-"'One child--one dear little romper just six years old. Oh, if
-you could see him killing cockroaches with a slipper! Smack!
-smack! smack! Three gone before you could wink!' He leaned back
-in his chair and laughed his eyes into his head again.
-
-"I was a little startled at the nature of the child's amusement,
-but the father's laughter made me think that perhaps he was
-joking.
-
-"'My sole duties, then,' I asked, 'are to take charge of a single
-child?'
-
-"'No, no, not the sole, not the sole, my dear young lady,' he
-cried. 'Your duty would be, as I am sure your good sense would
-suggest, to obey any little commands my wife might give, provided
-always that they were such commands as a lady might with
-propriety obey. You see no difficulty, heh?'
-
-"'I should be happy to make myself useful.'
-
-"'Quite so. In dress now, for example. We are faddy people, you
-know--faddy but kind-hearted. If you were asked to wear any dress
-which we might give you, you would not object to our little whim.
-Heh?'
-
-"'No,' said I, considerably astonished at his words.
-
-"'Or to sit here, or sit there, that would not be offensive to
-you?'
-
-"'Oh, no.'
-
-"'Or to cut your hair quite short before you come to us?'
-
-"I could hardly believe my ears. As you may observe, Mr. Holmes,
-my hair is somewhat luxuriant, and of a rather peculiar tint of
-chestnut. It has been considered artistic. I could not dream of
-sacrificing it in this offhand fashion.
-
-"'I am afraid that that is quite impossible,' said I. He had been
-watching me eagerly out of his small eyes, and I could see a
-shadow pass over his face as I spoke.
-
-"'I am afraid that it is quite essential,' said he. 'It is a
-little fancy of my wife's, and ladies' fancies, you know, madam,
-ladies' fancies must be consulted. And so you won't cut your
-hair?'
-
-"'No, sir, I really could not,' I answered firmly.
-
-"'Ah, very well; then that quite settles the matter. It is a
-pity, because in other respects you would really have done very
-nicely. In that case, Miss Stoper, I had best inspect a few more
-of your young ladies.'
-
-"The manageress had sat all this while busy with her papers
-without a word to either of us, but she glanced at me now with so
-much annoyance upon her face that I could not help suspecting
-that she had lost a handsome commission through my refusal.
-
-"'Do you desire your name to be kept upon the books?' she asked.
-
-"'If you please, Miss Stoper.'
-
-"'Well, really, it seems rather useless, since you refuse the
-most excellent offers in this fashion,' said she sharply. 'You
-can hardly expect us to exert ourselves to find another such
-opening for you. Good-day to you, Miss Hunter.' She struck a gong
-upon the table, and I was shown out by the page.
-
-"Well, Mr. Holmes, when I got back to my lodgings and found
-little enough in the cupboard, and two or three bills upon the
-table, I began to ask myself whether I had not done a very
-foolish thing. After all, if these people had strange fads and
-expected obedience on the most extraordinary matters, they were
-at least ready to pay for their eccentricity. Very few
-governesses in England are getting 100 pounds a year. Besides,
-what use was my hair to me? Many people are improved by wearing
-it short and perhaps I should be among the number. Next day I was
-inclined to think that I had made a mistake, and by the day after
-I was sure of it. I had almost overcome my pride so far as to go
-back to the agency and inquire whether the place was still open
-when I received this letter from the gentleman himself. I have it
-here and I will read it to you:
-
-                       "'The Copper Beeches, near Winchester.
-"'DEAR MISS HUNTER:--Miss Stoper has very kindly given me your
-address, and I write from here to ask you whether you have
-reconsidered your decision. My wife is very anxious that you
-should come, for she has been much attracted by my description of
-you. We are willing to give 30 pounds a quarter, or 120 pounds a
-year, so as to recompense you for any little inconvenience which
-our fads may cause you. They are not very exacting, after all. My
-wife is fond of a particular shade of electric blue and would
-like you to wear such a dress indoors in the morning. You need
-not, however, go to the expense of purchasing one, as we have one
-belonging to my dear daughter Alice (now in Philadelphia), which
-would, I should think, fit you very well. Then, as to sitting
-here or there, or amusing yourself in any manner indicated, that
-need cause you no inconvenience. As regards your hair, it is no
-doubt a pity, especially as I could not help remarking its beauty
-during our short interview, but I am afraid that I must remain
-firm upon this point, and I only hope that the increased salary
-may recompense you for the loss. Your duties, as far as the child
-is concerned, are very light. Now do try to come, and I shall
-meet you with the dog-cart at Winchester. Let me know your train.
-Yours faithfully, JEPHRO RUCASTLE.'
-
-"That is the letter which I have just received, Mr. Holmes, and
-my mind is made up that I will accept it. I thought, however,
-that before taking the final step I should like to submit the
-whole matter to your consideration."
-
-"Well, Miss Hunter, if your mind is made up, that settles the
-question," said Holmes, smiling.
-
-"But you would not advise me to refuse?"
-
-"I confess that it is not the situation which I should like to
-see a sister of mine apply for."
-
-"What is the meaning of it all, Mr. Holmes?"
-
-"Ah, I have no data. I cannot tell. Perhaps you have yourself
-formed some opinion?"
-
-"Well, there seems to me to be only one possible solution. Mr.
-Rucastle seemed to be a very kind, good-natured man. Is it not
-possible that his wife is a lunatic, that he desires to keep the
-matter quiet for fear she should be taken to an asylum, and that
-he humours her fancies in every way in order to prevent an
-outbreak?"
-
-"That is a possible solution--in fact, as matters stand, it is
-the most probable one. But in any case it does not seem to be a
-nice household for a young lady."
-
-"But the money, Mr. Holmes, the money!"
-
-"Well, yes, of course the pay is good--too good. That is what
-makes me uneasy. Why should they give you 120 pounds a year, when
-they could have their pick for 40 pounds? There must be some
-strong reason behind."
-
-"I thought that if I told you the circumstances you would
-understand afterwards if I wanted your help. I should feel so
-much stronger if I felt that you were at the back of me."
-
-"Oh, you may carry that feeling away with you. I assure you that
-your little problem promises to be the most interesting which has
-come my way for some months. There is something distinctly novel
-about some of the features. If you should find yourself in doubt
-or in danger--"
-
-"Danger! What danger do you foresee?"
-
-Holmes shook his head gravely. "It would cease to be a danger if
-we could define it," said he. "But at any time, day or night, a
-telegram would bring me down to your help."
-
-"That is enough." She rose briskly from her chair with the
-anxiety all swept from her face. "I shall go down to Hampshire
-quite easy in my mind now. I shall write to Mr. Rucastle at once,
-sacrifice my poor hair to-night, and start for Winchester
-to-morrow." With a few grateful words to Holmes she bade us both
-good-night and bustled off upon her way.
-
-"At least," said I as we heard her quick, firm steps descending
-the stairs, "she seems to be a young lady who is very well able
-to take care of herself."
-
-"And she would need to be," said Holmes gravely. "I am much
-mistaken if we do not hear from her before many days are past."
-
-It was not very long before my friend's prediction was fulfilled.
-A fortnight went by, during which I frequently found my thoughts
-turning in her direction and wondering what strange side-alley of
-human experience this lonely woman had strayed into. The unusual
-salary, the curious conditions, the light duties, all pointed to
-something abnormal, though whether a fad or a plot, or whether
-the man were a philanthropist or a villain, it was quite beyond
-my powers to determine. As to Holmes, I observed that he sat
-frequently for half an hour on end, with knitted brows and an
-abstracted air, but he swept the matter away with a wave of his
-hand when I mentioned it. "Data! data! data!" he cried
-impatiently. "I can't make bricks without clay." And yet he would
-always wind up by muttering that no sister of his should ever
-have accepted such a situation.
-
-The telegram which we eventually received came late one night
-just as I was thinking of turning in and Holmes was settling down
-to one of those all-night chemical researches which he frequently
-indulged in, when I would leave him stooping over a retort and a
-test-tube at night and find him in the same position when I came
-down to breakfast in the morning. He opened the yellow envelope,
-and then, glancing at the message, threw it across to me.
-
-"Just look up the trains in Bradshaw," said he, and turned back
-to his chemical studies.
-
-The summons was a brief and urgent one.
-
-"Please be at the Black Swan Hotel at Winchester at midday
-to-morrow," it said. "Do come! I am at my wit's end.  HUNTER."
-
-"Will you come with me?" asked Holmes, glancing up.
-
-"I should wish to."
-
-"Just look it up, then."
-
-"There is a train at half-past nine," said I, glancing over my
-Bradshaw. "It is due at Winchester at 11:30."
-
-"That will do very nicely. Then perhaps I had better postpone my
-analysis of the acetones, as we may need to be at our best in the
-morning."
-
-By eleven o'clock the next day we were well upon our way to the
-old English capital. Holmes had been buried in the morning papers
-all the way down, but after we had passed the Hampshire border he
-threw them down and began to admire the scenery. It was an ideal
-spring day, a light blue sky, flecked with little fleecy white
-clouds drifting across from west to east. The sun was shining
-very brightly, and yet there was an exhilarating nip in the air,
-which set an edge to a man's energy. All over the countryside,
-away to the rolling hills around Aldershot, the little red and
-grey roofs of the farm-steadings peeped out from amid the light
-green of the new foliage.
-
-"Are they not fresh and beautiful?" I cried with all the
-enthusiasm of a man fresh from the fogs of Baker Street.
-
-But Holmes shook his head gravely.
-
-"Do you know, Watson," said he, "that it is one of the curses of
-a mind with a turn like mine that I must look at everything with
-reference to my own special subject. You look at these scattered
-houses, and you are impressed by their beauty. I look at them,
-and the only thought which comes to me is a feeling of their
-isolation and of the impunity with which crime may be committed
-there."
-
-"Good heavens!" I cried. "Who would associate crime with these
-dear old homesteads?"
-
-"They always fill me with a certain horror. It is my belief,
-Watson, founded upon my experience, that the lowest and vilest
-alleys in London do not present a more dreadful record of sin
-than does the smiling and beautiful countryside."
-
-"You horrify me!"
-
-"But the reason is very obvious. The pressure of public opinion
-can do in the town what the law cannot accomplish. There is no
-lane so vile that the scream of a tortured child, or the thud of
-a drunkard's blow, does not beget sympathy and indignation among
-the neighbours, and then the whole machinery of justice is ever
-so close that a word of complaint can set it going, and there is
-but a step between the crime and the dock. But look at these
-lonely houses, each in its own fields, filled for the most part
-with poor ignorant folk who know little of the law. Think of the
-deeds of hellish cruelty, the hidden wickedness which may go on,
-year in, year out, in such places, and none the wiser. Had this
-lady who appeals to us for help gone to live in Winchester, I
-should never have had a fear for her. It is the five miles of
-country which makes the danger. Still, it is clear that she is
-not personally threatened."
-
-"No. If she can come to Winchester to meet us she can get away."
-
-"Quite so. She has her freedom."
-
-"What CAN be the matter, then? Can you suggest no explanation?"
-
-"I have devised seven separate explanations, each of which would
-cover the facts as far as we know them. But which of these is
-correct can only be determined by the fresh information which we
-shall no doubt find waiting for us. Well, there is the tower of
-the cathedral, and we shall soon learn all that Miss Hunter has
-to tell."
-
-The Black Swan is an inn of repute in the High Street, at no
-distance from the station, and there we found the young lady
-waiting for us. She had engaged a sitting-room, and our lunch
-awaited us upon the table.
-
-"I am so delighted that you have come," she said earnestly. "It
-is so very kind of you both; but indeed I do not know what I
-should do. Your advice will be altogether invaluable to me."
-
-"Pray tell us what has happened to you."
-
-"I will do so, and I must be quick, for I have promised Mr.
-Rucastle to be back before three. I got his leave to come into
-town this morning, though he little knew for what purpose."
-
-"Let us have everything in its due order." Holmes thrust his long
-thin legs out towards the fire and composed himself to listen.
-
-"In the first place, I may say that I have met, on the whole,
-with no actual ill-treatment from Mr. and Mrs. Rucastle. It is
-only fair to them to say that. But I cannot understand them, and
-I am not easy in my mind about them."
-
-"What can you not understand?"
-
-"Their reasons for their conduct. But you shall have it all just
-as it occurred. When I came down, Mr. Rucastle met me here and
-drove me in his dog-cart to the Copper Beeches. It is, as he
-said, beautifully situated, but it is not beautiful in itself,
-for it is a large square block of a house, whitewashed, but all
-stained and streaked with damp and bad weather. There are grounds
-round it, woods on three sides, and on the fourth a field which
-slopes down to the Southampton highroad, which curves past about
-a hundred yards from the front door. This ground in front belongs
-to the house, but the woods all round are part of Lord
-Southerton's preserves. A clump of copper beeches immediately in
-front of the hall door has given its name to the place.
-
-"I was driven over by my employer, who was as amiable as ever,
-and was introduced by him that evening to his wife and the child.
-There was no truth, Mr. Holmes, in the conjecture which seemed to
-us to be probable in your rooms at Baker Street. Mrs. Rucastle is
-not mad. I found her to be a silent, pale-faced woman, much
-younger than her husband, not more than thirty, I should think,
-while he can hardly be less than forty-five. From their
-conversation I have gathered that they have been married about
-seven years, that he was a widower, and that his only child by
-the first wife was the daughter who has gone to Philadelphia. Mr.
-Rucastle told me in private that the reason why she had left them
-was that she had an unreasoning aversion to her stepmother. As
-the daughter could not have been less than twenty, I can quite
-imagine that her position must have been uncomfortable with her
-father's young wife.
-
-"Mrs. Rucastle seemed to me to be colourless in mind as well as
-in feature. She impressed me neither favourably nor the reverse.
-She was a nonentity. It was easy to see that she was passionately
-devoted both to her husband and to her little son. Her light grey
-eyes wandered continually from one to the other, noting every
-little want and forestalling it if possible. He was kind to her
-also in his bluff, boisterous fashion, and on the whole they
-seemed to be a happy couple. And yet she had some secret sorrow,
-this woman. She would often be lost in deep thought, with the
-saddest look upon her face. More than once I have surprised her
-in tears. I have thought sometimes that it was the disposition of
-her child which weighed upon her mind, for I have never met so
-utterly spoiled and so ill-natured a little creature. He is small
-for his age, with a head which is quite disproportionately large.
-His whole life appears to be spent in an alternation between
-savage fits of passion and gloomy intervals of sulking. Giving
-pain to any creature weaker than himself seems to be his one idea
-of amusement, and he shows quite remarkable talent in planning
-the capture of mice, little birds, and insects. But I would
-rather not talk about the creature, Mr. Holmes, and, indeed, he
-has little to do with my story."
-
-"I am glad of all details," remarked my friend, "whether they
-seem to you to be relevant or not."
-
-"I shall try not to miss anything of importance. The one
-unpleasant thing about the house, which struck me at once, was
-the appearance and conduct of the servants. There are only two, a
-man and his wife. Toller, for that is his name, is a rough,
-uncouth man, with grizzled hair and whiskers, and a perpetual
-smell of drink. Twice since I have been with them he has been
-quite drunk, and yet Mr. Rucastle seemed to take no notice of it.
-His wife is a very tall and strong woman with a sour face, as
-silent as Mrs. Rucastle and much less amiable. They are a most
-unpleasant couple, but fortunately I spend most of my time in the
-nursery and my own room, which are next to each other in one
-corner of the building.
-
-"For two days after my arrival at the Copper Beeches my life was
-very quiet; on the third, Mrs. Rucastle came down just after
-breakfast and whispered something to her husband.
-
-"'Oh, yes,' said he, turning to me, 'we are very much obliged to
-you, Miss Hunter, for falling in with our whims so far as to cut
-your hair. I assure you that it has not detracted in the tiniest
-iota from your appearance. We shall now see how the electric-blue
-dress will become you. You will find it laid out upon the bed in
-your room, and if you would be so good as to put it on we should
-both be extremely obliged.'
-
-"The dress which I found waiting for me was of a peculiar shade
-of blue. It was of excellent material, a sort of beige, but it
-bore unmistakable signs of having been worn before. It could not
-have been a better fit if I had been measured for it. Both Mr.
-and Mrs. Rucastle expressed a delight at the look of it, which
-seemed quite exaggerated in its vehemence. They were waiting for
-me in the drawing-room, which is a very large room, stretching
-along the entire front of the house, with three long windows
-reaching down to the floor. A chair had been placed close to the
-central window, with its back turned towards it. In this I was
-asked to sit, and then Mr. Rucastle, walking up and down on the
-other side of the room, began to tell me a series of the funniest
-stories that I have ever listened to. You cannot imagine how
-comical he was, and I laughed until I was quite weary. Mrs.
-Rucastle, however, who has evidently no sense of humour, never so
-much as smiled, but sat with her hands in her lap, and a sad,
-anxious look upon her face. After an hour or so, Mr. Rucastle
-suddenly remarked that it was time to commence the duties of the
-day, and that I might change my dress and go to little Edward in
-the nursery.
-
-"Two days later this same performance was gone through under
-exactly similar circumstances. Again I changed my dress, again I
-sat in the window, and again I laughed very heartily at the funny
-stories of which my employer had an immense répertoire, and which
-he told inimitably. Then he handed me a yellow-backed novel, and
-moving my chair a little sideways, that my own shadow might not
-fall upon the page, he begged me to read aloud to him. I read for
-about ten minutes, beginning in the heart of a chapter, and then
-suddenly, in the middle of a sentence, he ordered me to cease and
-to change my dress.
-
-"You can easily imagine, Mr. Holmes, how curious I became as to
-what the meaning of this extraordinary performance could possibly
-be. They were always very careful, I observed, to turn my face
-away from the window, so that I became consumed with the desire
-to see what was going on behind my back. At first it seemed to be
-impossible, but I soon devised a means. My hand-mirror had been
-broken, so a happy thought seized me, and I concealed a piece of
-the glass in my handkerchief. On the next occasion, in the midst
-of my laughter, I put my handkerchief up to my eyes, and was able
-with a little management to see all that there was behind me. I
-confess that I was disappointed. There was nothing. At least that
-was my first impression. At the second glance, however, I
-perceived that there was a man standing in the Southampton Road,
-a small bearded man in a grey suit, who seemed to be looking in
-my direction. The road is an important highway, and there are
-usually people there. This man, however, was leaning against the
-railings which bordered our field and was looking earnestly up. I
-lowered my handkerchief and glanced at Mrs. Rucastle to find her
-eyes fixed upon me with a most searching gaze. She said nothing,
-but I am convinced that she had divined that I had a mirror in my
-hand and had seen what was behind me. She rose at once.
-
-"'Jephro,' said she, 'there is an impertinent fellow upon the
-road there who stares up at Miss Hunter.'
-
-"'No friend of yours, Miss Hunter?' he asked.
-
-"'No, I know no one in these parts.'
-
-"'Dear me! How very impertinent! Kindly turn round and motion to
-him to go away.'
-
-"'Surely it would be better to take no notice.'
-
-"'No, no, we should have him loitering here always. Kindly turn
-round and wave him away like that.'
-
-"I did as I was told, and at the same instant Mrs. Rucastle drew
-down the blind. That was a week ago, and from that time I have
-not sat again in the window, nor have I worn the blue dress, nor
-seen the man in the road."
-
-"Pray continue," said Holmes. "Your narrative promises to be a
-most interesting one."
-
-"You will find it rather disconnected, I fear, and there may
-prove to be little relation between the different incidents of
-which I speak. On the very first day that I was at the Copper
-Beeches, Mr. Rucastle took me to a small outhouse which stands
-near the kitchen door. As we approached it I heard the sharp
-rattling of a chain, and the sound as of a large animal moving
-about.
-
-"'Look in here!' said Mr. Rucastle, showing me a slit between two
-planks. 'Is he not a beauty?'
-
-"I looked through and was conscious of two glowing eyes, and of a
-vague figure huddled up in the darkness.
-
-"'Don't be frightened,' said my employer, laughing at the start
-which I had given. 'It's only Carlo, my mastiff. I call him mine,
-but really old Toller, my groom, is the only man who can do
-anything with him. We feed him once a day, and not too much then,
-so that he is always as keen as mustard. Toller lets him loose
-every night, and God help the trespasser whom he lays his fangs
-upon. For goodness' sake don't you ever on any pretext set your
-foot over the threshold at night, for it's as much as your life
-is worth.'
-
-"The warning was no idle one, for two nights later I happened to
-look out of my bedroom window about two o'clock in the morning.
-It was a beautiful moonlight night, and the lawn in front of the
-house was silvered over and almost as bright as day. I was
-standing, rapt in the peaceful beauty of the scene, when I was
-aware that something was moving under the shadow of the copper
-beeches. As it emerged into the moonshine I saw what it was. It
-was a giant dog, as large as a calf, tawny tinted, with hanging
-jowl, black muzzle, and huge projecting bones. It walked slowly
-across the lawn and vanished into the shadow upon the other side.
-That dreadful sentinel sent a chill to my heart which I do not
-think that any burglar could have done.
-
-"And now I have a very strange experience to tell you. I had, as
-you know, cut off my hair in London, and I had placed it in a
-great coil at the bottom of my trunk. One evening, after the
-child was in bed, I began to amuse myself by examining the
-furniture of my room and by rearranging my own little things.
-There was an old chest of drawers in the room, the two upper ones
-empty and open, the lower one locked. I had filled the first two
-with my linen, and as I had still much to pack away I was
-naturally annoyed at not having the use of the third drawer. It
-struck me that it might have been fastened by a mere oversight,
-so I took out my bunch of keys and tried to open it. The very
-first key fitted to perfection, and I drew the drawer open. There
-was only one thing in it, but I am sure that you would never
-guess what it was. It was my coil of hair.
-
-"I took it up and examined it. It was of the same peculiar tint,
-and the same thickness. But then the impossibility of the thing
-obtruded itself upon me. How could my hair have been locked in
-the drawer? With trembling hands I undid my trunk, turned out the
-contents, and drew from the bottom my own hair. I laid the two
-tresses together, and I assure you that they were identical. Was
-it not extraordinary? Puzzle as I would, I could make nothing at
-all of what it meant. I returned the strange hair to the drawer,
-and I said nothing of the matter to the Rucastles as I felt that
-I had put myself in the wrong by opening a drawer which they had
-locked.
-
-"I am naturally observant, as you may have remarked, Mr. Holmes,
-and I soon had a pretty good plan of the whole house in my head.
-There was one wing, however, which appeared not to be inhabited
-at all. A door which faced that which led into the quarters of
-the Tollers opened into this suite, but it was invariably locked.
-One day, however, as I ascended the stair, I met Mr. Rucastle
-coming out through this door, his keys in his hand, and a look on
-his face which made him a very different person to the round,
-jovial man to whom I was accustomed. His cheeks were red, his
-brow was all crinkled with anger, and the veins stood out at his
-temples with passion. He locked the door and hurried past me
-without a word or a look.
-
-"This aroused my curiosity, so when I went out for a walk in the
-grounds with my charge, I strolled round to the side from which I
-could see the windows of this part of the house. There were four
-of them in a row, three of which were simply dirty, while the
-fourth was shuttered up. They were evidently all deserted. As I
-strolled up and down, glancing at them occasionally, Mr. Rucastle
-came out to me, looking as merry and jovial as ever.
-
-"'Ah!' said he, 'you must not think me rude if I passed you
-without a word, my dear young lady. I was preoccupied with
-business matters.'
-
-"I assured him that I was not offended. 'By the way,' said I,
-'you seem to have quite a suite of spare rooms up there, and one
-of them has the shutters up.'
-
-"He looked surprised and, as it seemed to me, a little startled
-at my remark.
-
-"'Photography is one of my hobbies,' said he. 'I have made my
-dark room up there. But, dear me! what an observant young lady we
-have come upon. Who would have believed it? Who would have ever
-believed it?' He spoke in a jesting tone, but there was no jest
-in his eyes as he looked at me. I read suspicion there and
-annoyance, but no jest.
-
-"Well, Mr. Holmes, from the moment that I understood that there
-was something about that suite of rooms which I was not to know,
-I was all on fire to go over them. It was not mere curiosity,
-though I have my share of that. It was more a feeling of duty--a
-feeling that some good might come from my penetrating to this
-place. They talk of woman's instinct; perhaps it was woman's
-instinct which gave me that feeling. At any rate, it was there,
-and I was keenly on the lookout for any chance to pass the
-forbidden door.
-
-"It was only yesterday that the chance came. I may tell you that,
-besides Mr. Rucastle, both Toller and his wife find something to
-do in these deserted rooms, and I once saw him carrying a large
-black linen bag with him through the door. Recently he has been
-drinking hard, and yesterday evening he was very drunk; and when
-I came upstairs there was the key in the door. I have no doubt at
-all that he had left it there. Mr. and Mrs. Rucastle were both
-downstairs, and the child was with them, so that I had an
-admirable opportunity. I turned the key gently in the lock,
-opened the door, and slipped through.
-
-"There was a little passage in front of me, unpapered and
-uncarpeted, which turned at a right angle at the farther end.
-Round this corner were three doors in a line, the first and third
-of which were open. They each led into an empty room, dusty and
-cheerless, with two windows in the one and one in the other, so
-thick with dirt that the evening light glimmered dimly through
-them. The centre door was closed, and across the outside of it
-had been fastened one of the broad bars of an iron bed, padlocked
-at one end to a ring in the wall, and fastened at the other with
-stout cord. The door itself was locked as well, and the key was
-not there. This barricaded door corresponded clearly with the
-shuttered window outside, and yet I could see by the glimmer from
-beneath it that the room was not in darkness. Evidently there was
-a skylight which let in light from above. As I stood in the
-passage gazing at the sinister door and wondering what secret it
-might veil, I suddenly heard the sound of steps within the room
-and saw a shadow pass backward and forward against the little
-slit of dim light which shone out from under the door. A mad,
-unreasoning terror rose up in me at the sight, Mr. Holmes. My
-overstrung nerves failed me suddenly, and I turned and ran--ran
-as though some dreadful hand were behind me clutching at the
-skirt of my dress. I rushed down the passage, through the door,
-and straight into the arms of Mr. Rucastle, who was waiting
-outside.
-
-"'So,' said he, smiling, 'it was you, then. I thought that it
-must be when I saw the door open.'
-
-"'Oh, I am so frightened!' I panted.
-
-"'My dear young lady! my dear young lady!'--you cannot think how
-caressing and soothing his manner was--'and what has frightened
-you, my dear young lady?'
-
-"But his voice was just a little too coaxing. He overdid it. I
-was keenly on my guard against him.
-
-"'I was foolish enough to go into the empty wing,' I answered.
-'But it is so lonely and eerie in this dim light that I was
-frightened and ran out again. Oh, it is so dreadfully still in
-there!'
-
-"'Only that?' said he, looking at me keenly.
-
-"'Why, what did you think?' I asked.
-
-"'Why do you think that I lock this door?'
-
-"'I am sure that I do not know.'
-
-"'It is to keep people out who have no business there. Do you
-see?' He was still smiling in the most amiable manner.
-
-"'I am sure if I had known--'
-
-"'Well, then, you know now. And if you ever put your foot over
-that threshold again'--here in an instant the smile hardened into
-a grin of rage, and he glared down at me with the face of a
-demon--'I'll throw you to the mastiff.'
-
-"I was so terrified that I do not know what I did. I suppose that
-I must have rushed past him into my room. I remember nothing
-until I found myself lying on my bed trembling all over. Then I
-thought of you, Mr. Holmes. I could not live there longer without
-some advice. I was frightened of the house, of the man, of the
-woman, of the servants, even of the child. They were all horrible
-to me. If I could only bring you down all would be well. Of
-course I might have fled from the house, but my curiosity was
-almost as strong as my fears. My mind was soon made up. I would
-send you a wire. I put on my hat and cloak, went down to the
-office, which is about half a mile from the house, and then
-returned, feeling very much easier. A horrible doubt came into my
-mind as I approached the door lest the dog might be loose, but I
-remembered that Toller had drunk himself into a state of
-insensibility that evening, and I knew that he was the only one
-in the household who had any influence with the savage creature,
-or who would venture to set him free. I slipped in in safety and
-lay awake half the night in my joy at the thought of seeing you.
-I had no difficulty in getting leave to come into Winchester this
-morning, but I must be back before three o'clock, for Mr. and
-Mrs. Rucastle are going on a visit, and will be away all the
-evening, so that I must look after the child. Now I have told you
-all my adventures, Mr. Holmes, and I should be very glad if you
-could tell me what it all means, and, above all, what I should
-do."
-
-Holmes and I had listened spellbound to this extraordinary story.
-My friend rose now and paced up and down the room, his hands in
-his pockets, and an expression of the most profound gravity upon
-his face.
-
-"Is Toller still drunk?" he asked.
-
-"Yes. I heard his wife tell Mrs. Rucastle that she could do
-nothing with him."
-
-"That is well. And the Rucastles go out to-night?"
-
-"Yes."
-
-"Is there a cellar with a good strong lock?"
-
-"Yes, the wine-cellar."
-
-"You seem to me to have acted all through this matter like a very
-brave and sensible girl, Miss Hunter. Do you think that you could
-perform one more feat? I should not ask it of you if I did not
-think you a quite exceptional woman."
-
-"I will try. What is it?"
-
-"We shall be at the Copper Beeches by seven o'clock, my friend
-and I. The Rucastles will be gone by that time, and Toller will,
-we hope, be incapable. There only remains Mrs. Toller, who might
-give the alarm. If you could send her into the cellar on some
-errand, and then turn the key upon her, you would facilitate
-matters immensely."
-
-"I will do it."
-
-"Excellent! We shall then look thoroughly into the affair. Of
-course there is only one feasible explanation. You have been
-brought there to personate someone, and the real person is
-imprisoned in this chamber. That is obvious. As to who this
-prisoner is, I have no doubt that it is the daughter, Miss Alice
-Rucastle, if I remember right, who was said to have gone to
-America. You were chosen, doubtless, as resembling her in height,
-figure, and the colour of your hair. Hers had been cut off, very
-possibly in some illness through which she has passed, and so, of
-course, yours had to be sacrificed also. By a curious chance you
-came upon her tresses. The man in the road was undoubtedly some
-friend of hers--possibly her fiancé--and no doubt, as you wore
-the girl's dress and were so like her, he was convinced from your
-laughter, whenever he saw you, and afterwards from your gesture,
-that Miss Rucastle was perfectly happy, and that she no longer
-desired his attentions. The dog is let loose at night to prevent
-him from endeavouring to communicate with her. So much is fairly
-clear. The most serious point in the case is the disposition of
-the child."
-
-"What on earth has that to do with it?" I ejaculated.
-
-"My dear Watson, you as a medical man are continually gaining
-light as to the tendencies of a child by the study of the
-parents. Don't you see that the converse is equally valid. I have
-frequently gained my first real insight into the character of
-parents by studying their children. This child's disposition is
-abnormally cruel, merely for cruelty's sake, and whether he
-derives this from his smiling father, as I should suspect, or
-from his mother, it bodes evil for the poor girl who is in their
-power."
-
-"I am sure that you are right, Mr. Holmes," cried our client. "A
-thousand things come back to me which make me certain that you
-have hit it. Oh, let us lose not an instant in bringing help to
-this poor creature."
-
-"We must be circumspect, for we are dealing with a very cunning
-man. We can do nothing until seven o'clock. At that hour we shall
-be with you, and it will not be long before we solve the
-mystery."
-
-We were as good as our word, for it was just seven when we
-reached the Copper Beeches, having put up our trap at a wayside
-public-house. The group of trees, with their dark leaves shining
-like burnished metal in the light of the setting sun, were
-sufficient to mark the house even had Miss Hunter not been
-standing smiling on the door-step.
-
-"Have you managed it?" asked Holmes.
-
-A loud thudding noise came from somewhere downstairs. "That is
-Mrs. Toller in the cellar," said she. "Her husband lies snoring
-on the kitchen rug. Here are his keys, which are the duplicates
-of Mr. Rucastle's."
-
-"You have done well indeed!" cried Holmes with enthusiasm. "Now
-lead the way, and we shall soon see the end of this black
-business."
-
-We passed up the stair, unlocked the door, followed on down a
-passage, and found ourselves in front of the barricade which Miss
-Hunter had described. Holmes cut the cord and removed the
-transverse bar. Then he tried the various keys in the lock, but
-without success. No sound came from within, and at the silence
-Holmes' face clouded over.
-
-"I trust that we are not too late," said he. "I think, Miss
-Hunter, that we had better go in without you. Now, Watson, put
-your shoulder to it, and we shall see whether we cannot make our
-way in."
-
-It was an old rickety door and gave at once before our united
-strength. Together we rushed into the room. It was empty. There
-was no furniture save a little pallet bed, a small table, and a
-basketful of linen. The skylight above was open, and the prisoner
-gone.
-
-"There has been some villainy here," said Holmes; "this beauty
-has guessed Miss Hunter's intentions and has carried his victim
-off."
-
-"But how?"
-
-"Through the skylight. We shall soon see how he managed it." He
-swung himself up onto the roof. "Ah, yes," he cried, "here's the
-end of a long light ladder against the eaves. That is how he did
-it."
-
-"But it is impossible," said Miss Hunter; "the ladder was not
-there when the Rucastles went away."
-
-"He has come back and done it. I tell you that he is a clever and
-dangerous man. I should not be very much surprised if this were
-he whose step I hear now upon the stair. I think, Watson, that it
-would be as well for you to have your pistol ready."
-
-The words were hardly out of his mouth before a man appeared at
-the door of the room, a very fat and burly man, with a heavy
-stick in his hand. Miss Hunter screamed and shrunk against the
-wall at the sight of him, but Sherlock Holmes sprang forward and
-confronted him.
-
-"You villain!" said he, "where's your daughter?"
-
-The fat man cast his eyes round, and then up at the open
-skylight.
-
-"It is for me to ask you that," he shrieked, "you thieves! Spies
-and thieves! I have caught you, have I? You are in my power. I'll
-serve you!" He turned and clattered down the stairs as hard as he
-could go.
-
-"He's gone for the dog!" cried Miss Hunter.
-
-"I have my revolver," said I.
-
-"Better close the front door," cried Holmes, and we all rushed
-down the stairs together. We had hardly reached the hall when we
-heard the baying of a hound, and then a scream of agony, with a
-horrible worrying sound which it was dreadful to listen to. An
-elderly man with a red face and shaking limbs came staggering out
-at a side door.
-
-"My God!" he cried. "Someone has loosed the dog. It's not been
-fed for two days. Quick, quick, or it'll be too late!"
-
-Holmes and I rushed out and round the angle of the house, with
-Toller hurrying behind us. There was the huge famished brute, its
-black muzzle buried in Rucastle's throat, while he writhed and
-screamed upon the ground. Running up, I blew its brains out, and
-it fell over with its keen white teeth still meeting in the great
-creases of his neck. With much labour we separated them and
-carried him, living but horribly mangled, into the house. We laid
-him upon the drawing-room sofa, and having dispatched the sobered
-Toller to bear the news to his wife, I did what I could to
-relieve his pain. We were all assembled round him when the door
-opened, and a tall, gaunt woman entered the room.
-
-"Mrs. Toller!" cried Miss Hunter.
-
-"Yes, miss. Mr. Rucastle let me out when he came back before he
-went up to you. Ah, miss, it is a pity you didn't let me know
-what you were planning, for I would have told you that your pains
-were wasted."
-
-"Ha!" said Holmes, looking keenly at her. "It is clear that Mrs.
-Toller knows more about this matter than anyone else."
-
-"Yes, sir, I do, and I am ready enough to tell what I know."
-
-"Then, pray, sit down, and let us hear it for there are several
-points on which I must confess that I am still in the dark."
-
-"I will soon make it clear to you," said she; "and I'd have done
-so before now if I could ha' got out from the cellar. If there's
-police-court business over this, you'll remember that I was the
-one that stood your friend, and that I was Miss Alice's friend
-too.
-
-"She was never happy at home, Miss Alice wasn't, from the time
-that her father married again. She was slighted like and had no
-say in anything, but it never really became bad for her until
-after she met Mr. Fowler at a friend's house. As well as I could
-learn, Miss Alice had rights of her own by will, but she was so
-quiet and patient, she was, that she never said a word about them
-but just left everything in Mr. Rucastle's hands. He knew he was
-safe with her; but when there was a chance of a husband coming
-forward, who would ask for all that the law would give him, then
-her father thought it time to put a stop on it. He wanted her to
-sign a paper, so that whether she married or not, he could use
-her money. When she wouldn't do it, he kept on worrying her until
-she got brain-fever, and for six weeks was at death's door. Then
-she got better at last, all worn to a shadow, and with her
-beautiful hair cut off; but that didn't make no change in her
-young man, and he stuck to her as true as man could be."
-
-"Ah," said Holmes, "I think that what you have been good enough
-to tell us makes the matter fairly clear, and that I can deduce
-all that remains. Mr. Rucastle then, I presume, took to this
-system of imprisonment?"
-
-"Yes, sir."
-
-"And brought Miss Hunter down from London in order to get rid of
-the disagreeable persistence of Mr. Fowler."
-
-"That was it, sir."
-
-"But Mr. Fowler being a persevering man, as a good seaman should
-be, blockaded the house, and having met you succeeded by certain
-arguments, metallic or otherwise, in convincing you that your
-interests were the same as his."
-
-"Mr. Fowler was a very kind-spoken, free-handed gentleman," said
-Mrs. Toller serenely.
-
-"And in this way he managed that your good man should have no
-want of drink, and that a ladder should be ready at the moment
-when your master had gone out."
-
-"You have it, sir, just as it happened."
-
-"I am sure we owe you an apology, Mrs. Toller," said Holmes, "for
-you have certainly cleared up everything which puzzled us. And
-here comes the country surgeon and Mrs. Rucastle, so I think,
-Watson, that we had best escort Miss Hunter back to Winchester,
-as it seems to me that our locus standi now is rather a
-questionable one."
-
-And thus was solved the mystery of the sinister house with the
-copper beeches in front of the door. Mr. Rucastle survived, but
-was always a broken man, kept alive solely through the care of
-his devoted wife. They still live with their old servants, who
-probably know so much of Rucastle's past life that he finds it
-difficult to part from them. Mr. Fowler and Miss Rucastle were
-married, by special license, in Southampton the day after their
-flight, and he is now the holder of a government appointment in
-the island of Mauritius. As to Miss Violet Hunter, my friend
-Holmes, rather to my disappointment, manifested no further
-interest in her when once she had ceased to be the centre of one
-of his problems, and she is now the head of a private school at
-Walsall, where I believe that she has met with considerable success.
-
-
-
-
-
-
-
-
-
-End of the Project Gutenberg EBook of The Adventures of Sherlock Holmes, by 
-Arthur Conan Doyle
-
-*** END OF THIS PROJECT GUTENBERG EBOOK THE ADVENTURES OF SHERLOCK HOLMES ***
-
-***** This file should be named 1661-8.txt or 1661-8.zip *****
-This and all associated files of various formats will be found in:
-        http://www.gutenberg.org/1/6/6/1661/
-
-Produced by an anonymous Project Gutenberg volunteer and Jose Menendez
-
-Updated editions will replace the previous one--the old editions
-will be renamed.
-
-Creating the works from public domain print editions means that no
-one owns a United States copyright in these works, so the Foundation
-(and you!) can copy and distribute it in the United States without
-permission and without paying copyright royalties.  Special rules,
-set forth in the General Terms of Use part of this license, apply to
-copying and distributing Project Gutenberg-tm electronic works to
-protect the PROJECT GUTENBERG-tm concept and trademark.  Project
-Gutenberg is a registered trademark, and may not be used if you
-charge for the eBooks, unless you receive specific permission.  If you
-do not charge anything for copies of this eBook, complying with the
-rules is very easy.  You may use this eBook for nearly any purpose
-such as creation of derivative works, reports, performances and
-research.  They may be modified and printed and given away--you may do
-practically ANYTHING with public domain eBooks.  Redistribution is
-subject to the trademark license, especially commercial
-redistribution.
-
-
-
-*** START: FULL LICENSE ***
-
-THE FULL PROJECT GUTENBERG LICENSE
-PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK
-
-To protect the Project Gutenberg-tm mission of promoting the free
-distribution of electronic works, by using or distributing this work
-(or any other work associated in any way with the phrase "Project
-Gutenberg"), you agree to comply with all the terms of the Full Project
-Gutenberg-tm License (available with this file or online at
-http://gutenberg.net/license).
-
-
-Section 1.  General Terms of Use and Redistributing Project Gutenberg-tm
-electronic works
-
-1.A.  By reading or using any part of this Project Gutenberg-tm
-electronic work, you indicate that you have read, understand, agree to
-and accept all the terms of this license and intellectual property
-(trademark/copyright) agreement.  If you do not agree to abide by all
-the terms of this agreement, you must cease using and return or destroy
-all copies of Project Gutenberg-tm electronic works in your possession.
-If you paid a fee for obtaining a copy of or access to a Project
-Gutenberg-tm electronic work and you do not agree to be bound by the
-terms of this agreement, you may obtain a refund from the person or
-entity to whom you paid the fee as set forth in paragraph 1.E.8.
-
-1.B.  "Project Gutenberg" is a registered trademark.  It may only be
-used on or associated in any way with an electronic work by people who
-agree to be bound by the terms of this agreement.  There are a few
-things that you can do with most Project Gutenberg-tm electronic works
-even without complying with the full terms of this agreement.  See
-paragraph 1.C below.  There are a lot of things you can do with Project
-Gutenberg-tm electronic works if you follow the terms of this agreement
-and help preserve free future access to Project Gutenberg-tm electronic
-works.  See paragraph 1.E below.
-
-1.C.  The Project Gutenberg Literary Archive Foundation ("the Foundation"
-or PGLAF), owns a compilation copyright in the collection of Project
-Gutenberg-tm electronic works.  Nearly all the individual works in the
-collection are in the public domain in the United States.  If an
-individual work is in the public domain in the United States and you are
-located in the United States, we do not claim a right to prevent you from
-copying, distributing, performing, displaying or creating derivative
-works based on the work as long as all references to Project Gutenberg
-are removed.  Of course, we hope that you will support the Project
-Gutenberg-tm mission of promoting free access to electronic works by
-freely sharing Project Gutenberg-tm works in compliance with the terms of
-this agreement for keeping the Project Gutenberg-tm name associated with
-the work.  You can easily comply with the terms of this agreement by
-keeping this work in the same format with its attached full Project
-Gutenberg-tm License when you share it without charge with others.
-
-1.D.  The copyright laws of the place where you are located also govern
-what you can do with this work.  Copyright laws in most countries are in
-a constant state of change.  If you are outside the United States, check
-the laws of your country in addition to the terms of this agreement
-before downloading, copying, displaying, performing, distributing or
-creating derivative works based on this work or any other Project
-Gutenberg-tm work.  The Foundation makes no representations concerning
-the copyright status of any work in any country outside the United
-States.
-
-1.E.  Unless you have removed all references to Project Gutenberg:
-
-1.E.1.  The following sentence, with active links to, or other immediate
-access to, the full Project Gutenberg-tm License must appear prominently
-whenever any copy of a Project Gutenberg-tm work (any work on which the
-phrase "Project Gutenberg" appears, or with which the phrase "Project
-Gutenberg" is associated) is accessed, displayed, performed, viewed,
-copied or distributed:
-
-This eBook is for the use of anyone anywhere at no cost and with
-almost no restrictions whatsoever.  You may copy it, give it away or
-re-use it under the terms of the Project Gutenberg License included
-with this eBook or online at www.gutenberg.net
-
-1.E.2.  If an individual Project Gutenberg-tm electronic work is derived
-from the public domain (does not contain a notice indicating that it is
-posted with permission of the copyright holder), the work can be copied
-and distributed to anyone in the United States without paying any fees
-or charges.  If you are redistributing or providing access to a work
-with the phrase "Project Gutenberg" associated with or appearing on the
-work, you must comply either with the requirements of paragraphs 1.E.1
-through 1.E.7 or obtain permission for the use of the work and the
-Project Gutenberg-tm trademark as set forth in paragraphs 1.E.8 or
-1.E.9.
-
-1.E.3.  If an individual Project Gutenberg-tm electronic work is posted
-with the permission of the copyright holder, your use and distribution
-must comply with both paragraphs 1.E.1 through 1.E.7 and any additional
-terms imposed by the copyright holder.  Additional terms will be linked
-to the Project Gutenberg-tm License for all works posted with the
-permission of the copyright holder found at the beginning of this work.
-
-1.E.4.  Do not unlink or detach or remove the full Project Gutenberg-tm
-License terms from this work, or any files containing a part of this
-work or any other work associated with Project Gutenberg-tm.
-
-1.E.5.  Do not copy, display, perform, distribute or redistribute this
-electronic work, or any part of this electronic work, without
-prominently displaying the sentence set forth in paragraph 1.E.1 with
-active links or immediate access to the full terms of the Project
-Gutenberg-tm License.
-
-1.E.6.  You may convert to and distribute this work in any binary,
-compressed, marked up, nonproprietary or proprietary form, including any
-word processing or hypertext form.  However, if you provide access to or
-distribute copies of a Project Gutenberg-tm work in a format other than
-"Plain Vanilla ASCII" or other format used in the official version
-posted on the official Project Gutenberg-tm web site (www.gutenberg.net),
-you must, at no additional cost, fee or expense to the user, provide a
-copy, a means of exporting a copy, or a means of obtaining a copy upon
-request, of the work in its original "Plain Vanilla ASCII" or other
-form.  Any alternate format must include the full Project Gutenberg-tm
-License as specified in paragraph 1.E.1.
-
-1.E.7.  Do not charge a fee for access to, viewing, displaying,
-performing, copying or distributing any Project Gutenberg-tm works
-unless you comply with paragraph 1.E.8 or 1.E.9.
-
-1.E.8.  You may charge a reasonable fee for copies of or providing
-access to or distributing Project Gutenberg-tm electronic works provided
-that
-
-- You pay a royalty fee of 20% of the gross profits you derive from
-     the use of Project Gutenberg-tm works calculated using the method
-     you already use to calculate your applicable taxes.  The fee is
-     owed to the owner of the Project Gutenberg-tm trademark, but he
-     has agreed to donate royalties under this paragraph to the
-     Project Gutenberg Literary Archive Foundation.  Royalty payments
-     must be paid within 60 days following each date on which you
-     prepare (or are legally required to prepare) your periodic tax
-     returns.  Royalty payments should be clearly marked as such and
-     sent to the Project Gutenberg Literary Archive Foundation at the
-     address specified in Section 4, "Information about donations to
-     the Project Gutenberg Literary Archive Foundation."
-
-- You provide a full refund of any money paid by a user who notifies
-     you in writing (or by e-mail) within 30 days of receipt that s/he
-     does not agree to the terms of the full Project Gutenberg-tm
-     License.  You must require such a user to return or
-     destroy all copies of the works possessed in a physical medium
-     and discontinue all use of and all access to other copies of
-     Project Gutenberg-tm works.
-
-- You provide, in accordance with paragraph 1.F.3, a full refund of any
-     money paid for a work or a replacement copy, if a defect in the
-     electronic work is discovered and reported to you within 90 days
-     of receipt of the work.
-
-- You comply with all other terms of this agreement for free
-     distribution of Project Gutenberg-tm works.
-
-1.E.9.  If you wish to charge a fee or distribute a Project Gutenberg-tm
-electronic work or group of works on different terms than are set
-forth in this agreement, you must obtain permission in writing from
-both the Project Gutenberg Literary Archive Foundation and Michael
-Hart, the owner of the Project Gutenberg-tm trademark.  Contact the
-Foundation as set forth in Section 3 below.
-
-1.F.
-
-1.F.1.  Project Gutenberg volunteers and employees expend considerable
-effort to identify, do copyright research on, transcribe and proofread
-public domain works in creating the Project Gutenberg-tm
-collection.  Despite these efforts, Project Gutenberg-tm electronic
-works, and the medium on which they may be stored, may contain
-"Defects," such as, but not limited to, incomplete, inaccurate or
-corrupt data, transcription errors, a copyright or other intellectual
-property infringement, a defective or damaged disk or other medium, a
-computer virus, or computer codes that damage or cannot be read by
-your equipment.
-
-1.F.2.  LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right
-of Replacement or Refund" described in paragraph 1.F.3, the Project
-Gutenberg Literary Archive Foundation, the owner of the Project
-Gutenberg-tm trademark, and any other party distributing a Project
-Gutenberg-tm electronic work under this agreement, disclaim all
-liability to you for damages, costs and expenses, including legal
-fees.  YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT
-LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE
-PROVIDED IN PARAGRAPH 1.F.3.  YOU AGREE THAT THE FOUNDATION, THE
-TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE
-LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR
-INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH
-DAMAGE.
-
-1.F.3.  LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a
-defect in this electronic work within 90 days of receiving it, you can
-receive a refund of the money (if any) you paid for it by sending a
-written explanation to the person you received the work from.  If you
-received the work on a physical medium, you must return the medium with
-your written explanation.  The person or entity that provided you with
-the defective work may elect to provide a replacement copy in lieu of a
-refund.  If you received the work electronically, the person or entity
-providing it to you may choose to give you a second opportunity to
-receive the work electronically in lieu of a refund.  If the second copy
-is also defective, you may demand a refund in writing without further
-opportunities to fix the problem.
-
-1.F.4.  Except for the limited right of replacement or refund set forth
-in paragraph 1.F.3, this work is provided to you 'AS-IS' WITH NO OTHER
-WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
-WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR ANY PURPOSE.
-
-1.F.5.  Some states do not allow disclaimers of certain implied
-warranties or the exclusion or limitation of certain types of damages.
-If any disclaimer or limitation set forth in this agreement violates the
-law of the state applicable to this agreement, the agreement shall be
-interpreted to make the maximum disclaimer or limitation permitted by
-the applicable state law.  The invalidity or unenforceability of any
-provision of this agreement shall not void the remaining provisions.
-
-1.F.6.  INDEMNITY - You agree to indemnify and hold the Foundation, the
-trademark owner, any agent or employee of the Foundation, anyone
-providing copies of Project Gutenberg-tm electronic works in accordance
-with this agreement, and any volunteers associated with the production,
-promotion and distribution of Project Gutenberg-tm electronic works,
-harmless from all liability, costs and expenses, including legal fees,
-that arise directly or indirectly from any of the following which you do
-or cause to occur: (a) distribution of this or any Project Gutenberg-tm
-work, (b) alteration, modification, or additions or deletions to any
-Project Gutenberg-tm work, and (c) any Defect you cause.
-
-
-Section  2.  Information about the Mission of Project Gutenberg-tm
-
-Project Gutenberg-tm is synonymous with the free distribution of
-electronic works in formats readable by the widest variety of computers
-including obsolete, old, middle-aged and new computers.  It exists
-because of the efforts of hundreds of volunteers and donations from
-people in all walks of life.
-
-Volunteers and financial support to provide volunteers with the
-assistance they need are critical to reaching Project Gutenberg-tm's
-goals and ensuring that the Project Gutenberg-tm collection will
-remain freely available for generations to come.  In 2001, the Project
-Gutenberg Literary Archive Foundation was created to provide a secure
-and permanent future for Project Gutenberg-tm and future generations.
-To learn more about the Project Gutenberg Literary Archive Foundation
-and how your efforts and donations can help, see Sections 3 and 4
-and the Foundation web page at http://www.pglaf.org.
-
-
-Section 3.  Information about the Project Gutenberg Literary Archive
-Foundation
-
-The Project Gutenberg Literary Archive Foundation is a non profit
-501(c)(3) educational corporation organized under the laws of the
-state of Mississippi and granted tax exempt status by the Internal
-Revenue Service.  The Foundation's EIN or federal tax identification
-number is 64-6221541.  Its 501(c)(3) letter is posted at
-http://pglaf.org/fundraising.  Contributions to the Project Gutenberg
-Literary Archive Foundation are tax deductible to the full extent
-permitted by U.S. federal laws and your state's laws.
-
-The Foundation's principal office is located at 4557 Melan Dr. S.
-Fairbanks, AK, 99712., but its volunteers and employees are scattered
-throughout numerous locations.  Its business office is located at
-809 North 1500 West, Salt Lake City, UT 84116, (801) 596-1887, email
-business@pglaf.org.  Email contact links and up to date contact
-information can be found at the Foundation's web site and official
-page at http://pglaf.org
-
-For additional contact information:
-     Dr. Gregory B. Newby
-     Chief Executive and Director
-     gbnewby@pglaf.org
-
-
-Section 4.  Information about Donations to the Project Gutenberg
-Literary Archive Foundation
-
-Project Gutenberg-tm depends upon and cannot survive without wide
-spread public support and donations to carry out its mission of
-increasing the number of public domain and licensed works that can be
-freely distributed in machine readable form accessible by the widest
-array of equipment including outdated equipment.  Many small donations
-($1 to $5,000) are particularly important to maintaining tax exempt
-status with the IRS.
-
-The Foundation is committed to complying with the laws regulating
-charities and charitable donations in all 50 states of the United
-States.  Compliance requirements are not uniform and it takes a
-considerable effort, much paperwork and many fees to meet and keep up
-with these requirements.  We do not solicit donations in locations
-where we have not received written confirmation of compliance.  To
-SEND DONATIONS or determine the status of compliance for any
-particular state visit http://pglaf.org
-
-While we cannot and do not solicit contributions from states where we
-have not met the solicitation requirements, we know of no prohibition
-against accepting unsolicited donations from donors in such states who
-approach us with offers to donate.
-
-International donations are gratefully accepted, but we cannot make
-any statements concerning tax treatment of donations received from
-outside the United States.  U.S. laws alone swamp our small staff.
-
-Please check the Project Gutenberg Web pages for current donation
-methods and addresses.  Donations are accepted in a number of other
-ways including including checks, online payments and credit card
-donations.  To donate, please visit: http://pglaf.org/donate
-
-
-Section 5.  General Information About Project Gutenberg-tm electronic
-works.
-
-Professor Michael S. Hart is the originator of the Project Gutenberg-tm
-concept of a library of electronic works that could be freely shared
-with anyone.  For thirty years, he produced and distributed Project
-Gutenberg-tm eBooks with only a loose network of volunteer support.
-
-
-Project Gutenberg-tm eBooks are often created from several printed
-editions, all of which are confirmed as Public Domain in the U.S.
-unless a copyright notice is included.  Thus, we do not necessarily
-keep eBooks in compliance with any particular paper edition.
-
-
-Most people start at our Web site which has the main PG search facility:
-
-     http://www.gutenberg.net
-
-This Web site includes information about Project Gutenberg-tm,
-including how to make donations to the Project Gutenberg Literary
-Archive Foundation, how to help produce our new eBooks, and how to
-subscribe to our email newsletter to hear about new eBooks.
diff --git a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/data/file2.txt b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/data/file2.txt
deleted file mode 100644
index a25d303..0000000
--- a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/data/file2.txt
+++ /dev/null
@@ -1,10216 +0,0 @@
-Project Gutenberg's Memoirs of Sherlock Holmes, by Sir Arthur Conan Doyle
-
-This eBook is for the use of anyone anywhere at no cost and with
-almost no restrictions whatsoever.  You may copy it, give it away or
-re-use it under the terms of the Project Gutenberg License included
-with this eBook or online at www.gutenberg.org
-
-
-Title: Memoirs of Sherlock Holmes
-
-Author: Sir Arthur Conan Doyle
-
-Posting Date: July 31, 2008 [EBook #834]
-Release Date: March, 1997
-[This file last updated on August 16, 2010]
-
-Language: English
-
-
-*** START OF THIS PROJECT GUTENBERG EBOOK MEMOIRS OF SHERLOCK HOLMES ***
-
-
-
-
-Produced by Angela M. Cable
-
-
-
-
-
-MEMOIRS OF SHERLOCK HOLMES
-
-by Sir Arthur Conan Doyle
-
-
-
-
-Adventure I. Silver Blaze
-
-
-"I am afraid, Watson, that I shall have to go," said Holmes, as we sat
-down together to our breakfast one morning.
-
-"Go! Where to?"
-
-"To Dartmoor; to King's Pyland."
-
-I was not surprised. Indeed, my only wonder was that he had not already
-been mixed up in this extraordinary case, which was the one topic of
-conversation through the length and breadth of England. For a whole day
-my companion had rambled about the room with his chin upon his chest and
-his brows knitted, charging and recharging his pipe with the strongest
-black tobacco, and absolutely deaf to any of my questions or remarks.
-Fresh editions of every paper had been sent up by our news agent, only
-to be glanced over and tossed down into a corner. Yet, silent as he was,
-I knew perfectly well what it was over which he was brooding. There was
-but one problem before the public which could challenge his powers of
-analysis, and that was the singular disappearance of the favorite for
-the Wessex Cup, and the tragic murder of its trainer. When, therefore,
-he suddenly announced his intention of setting out for the scene of the
-drama it was only what I had both expected and hoped for.
-
-"I should be most happy to go down with you if I should not be in the
-way," said I.
-
-"My dear Watson, you would confer a great favor upon me by coming. And
-I think that your time will not be misspent, for there are points about
-the case which promise to make it an absolutely unique one. We have, I
-think, just time to catch our train at Paddington, and I will go further
-into the matter upon our journey. You would oblige me by bringing with
-you your very excellent field-glass."
-
-And so it happened that an hour or so later I found myself in the
-corner of a first-class carriage flying along en route for Exeter, while
-Sherlock Holmes, with his sharp, eager face framed in his ear-flapped
-travelling-cap, dipped rapidly into the bundle of fresh papers which he
-had procured at Paddington. We had left Reading far behind us before
-he thrust the last one of them under the seat, and offered me his
-cigar-case.
-
-"We are going well," said he, looking out the window and glancing at his
-watch. "Our rate at present is fifty-three and a half miles an hour."
-
-"I have not observed the quarter-mile posts," said I.
-
-"Nor have I. But the telegraph posts upon this line are sixty yards
-apart, and the calculation is a simple one. I presume that you
-have looked into this matter of the murder of John Straker and the
-disappearance of Silver Blaze?"
-
-"I have seen what the Telegraph and the Chronicle have to say."
-
-"It is one of those cases where the art of the reasoner should be
-used rather for the sifting of details than for the acquiring of fresh
-evidence. The tragedy has been so uncommon, so complete and of such
-personal importance to so many people, that we are suffering from a
-plethora of surmise, conjecture, and hypothesis. The difficulty is to
-detach the framework of fact--of absolute undeniable fact--from the
-embellishments of theorists and reporters. Then, having established
-ourselves upon this sound basis, it is our duty to see what inferences
-may be drawn and what are the special points upon which the whole
-mystery turns. On Tuesday evening I received telegrams from both Colonel
-Ross, the owner of the horse, and from Inspector Gregory, who is looking
-after the case, inviting my cooperation."
-
-"Tuesday evening!" I exclaimed. "And this is Thursday morning. Why
-didn't you go down yesterday?"
-
-"Because I made a blunder, my dear Watson--which is, I am afraid, a more
-common occurrence than any one would think who only knew me through your
-memoirs. The fact is that I could not believe it possible that the most
-remarkable horse in England could long remain concealed, especially in
-so sparsely inhabited a place as the north of Dartmoor. From hour to
-hour yesterday I expected to hear that he had been found, and that
-his abductor was the murderer of John Straker. When, however, another
-morning had come, and I found that beyond the arrest of young Fitzroy
-Simpson nothing had been done, I felt that it was time for me to take
-action. Yet in some ways I feel that yesterday has not been wasted."
-
-"You have formed a theory, then?"
-
-"At least I have got a grip of the essential facts of the case. I shall
-enumerate them to you, for nothing clears up a case so much as stating
-it to another person, and I can hardly expect your co-operation if I do
-not show you the position from which we start."
-
-I lay back against the cushions, puffing at my cigar, while Holmes,
-leaning forward, with his long, thin forefinger checking off the points
-upon the palm of his left hand, gave me a sketch of the events which had
-led to our journey.
-
-"Silver Blaze," said he, "is from the Somomy stock, and holds as
-brilliant a record as his famous ancestor. He is now in his fifth year,
-and has brought in turn each of the prizes of the turf to Colonel Ross,
-his fortunate owner. Up to the time of the catastrophe he was the first
-favorite for the Wessex Cup, the betting being three to one on him. He
-has always, however, been a prime favorite with the racing public, and
-has never yet disappointed them, so that even at those odds enormous
-sums of money have been laid upon him. It is obvious, therefore, that
-there were many people who had the strongest interest in preventing
-Silver Blaze from being there at the fall of the flag next Tuesday.
-
-"The fact was, of course, appreciated at King's Pyland, where the
-Colonel's training-stable is situated. Every precaution was taken to
-guard the favorite. The trainer, John Straker, is a retired jockey
-who rode in Colonel Ross's colors before he became too heavy for the
-weighing-chair. He has served the Colonel for five years as jockey and
-for seven as trainer, and has always shown himself to be a zealous and
-honest servant. Under him were three lads; for the establishment was a
-small one, containing only four horses in all. One of these lads sat up
-each night in the stable, while the others slept in the loft. All three
-bore excellent characters. John Straker, who is a married man, lived
-in a small villa about two hundred yards from the stables. He has no
-children, keeps one maid-servant, and is comfortably off. The country
-round is very lonely, but about half a mile to the north there is a
-small cluster of villas which have been built by a Tavistock contractor
-for the use of invalids and others who may wish to enjoy the pure
-Dartmoor air. Tavistock itself lies two miles to the west, while
-across the moor, also about two miles distant, is the larger training
-establishment of Mapleton, which belongs to Lord Backwater, and is
-managed by Silas Brown. In every other direction the moor is a complete
-wilderness, inhabited only by a few roaming gypsies. Such was the
-general situation last Monday night when the catastrophe occurred.
-
-"On that evening the horses had been exercised and watered as usual, and
-the stables were locked up at nine o'clock. Two of the lads walked up
-to the trainer's house, where they had supper in the kitchen, while the
-third, Ned Hunter, remained on guard. At a few minutes after nine
-the maid, Edith Baxter, carried down to the stables his supper, which
-consisted of a dish of curried mutton. She took no liquid, as there was
-a water-tap in the stables, and it was the rule that the lad on duty
-should drink nothing else. The maid carried a lantern with her, as it
-was very dark and the path ran across the open moor.
-
-"Edith Baxter was within thirty yards of the stables, when a man
-appeared out of the darkness and called to her to stop. As he stepped
-into the circle of yellow light thrown by the lantern she saw that he
-was a person of gentlemanly bearing, dressed in a gray suit of tweeds,
-with a cloth cap. He wore gaiters, and carried a heavy stick with a knob
-to it. She was most impressed, however, by the extreme pallor of his
-face and by the nervousness of his manner. His age, she thought, would
-be rather over thirty than under it.
-
-"'Can you tell me where I am?' he asked. 'I had almost made up my mind
-to sleep on the moor, when I saw the light of your lantern.'
-
-"'You are close to the King's Pyland training-stables,' said she.
-
-"'Oh, indeed! What a stroke of luck!' he cried. 'I understand that a
-stable-boy sleeps there alone every night. Perhaps that is his supper
-which you are carrying to him. Now I am sure that you would not be too
-proud to earn the price of a new dress, would you?' He took a piece of
-white paper folded up out of his waistcoat pocket. 'See that the boy
-has this to-night, and you shall have the prettiest frock that money can
-buy.'
-
-"She was frightened by the earnestness of his manner, and ran past him
-to the window through which she was accustomed to hand the meals. It was
-already opened, and Hunter was seated at the small table inside. She had
-begun to tell him of what had happened, when the stranger came up again.
-
-"'Good-evening,' said he, looking through the window. 'I wanted to have
-a word with you.' The girl has sworn that as he spoke she noticed the
-corner of the little paper packet protruding from his closed hand.
-
-"'What business have you here?' asked the lad.
-
-"'It's business that may put something into your pocket,' said the
-other. 'You've two horses in for the Wessex Cup--Silver Blaze and
-Bayard. Let me have the straight tip and you won't be a loser. Is it a
-fact that at the weights Bayard could give the other a hundred yards in
-five furlongs, and that the stable have put their money on him?'
-
-"'So, you're one of those damned touts!' cried the lad. 'I'll show you
-how we serve them in King's Pyland.' He sprang up and rushed across the
-stable to unloose the dog. The girl fled away to the house, but as she
-ran she looked back and saw that the stranger was leaning through the
-window. A minute later, however, when Hunter rushed out with the hound
-he was gone, and though he ran all round the buildings he failed to find
-any trace of him."
-
-"One moment," I asked. "Did the stable-boy, when he ran out with the
-dog, leave the door unlocked behind him?"
-
-"Excellent, Watson, excellent!" murmured my companion. "The importance
-of the point struck me so forcibly that I sent a special wire to
-Dartmoor yesterday to clear the matter up. The boy locked the door
-before he left it. The window, I may add, was not large enough for a man
-to get through.
-
-"Hunter waited until his fellow-grooms had returned, when he sent a
-message to the trainer and told him what had occurred. Straker was
-excited at hearing the account, although he does not seem to have quite
-realized its true significance. It left him, however, vaguely uneasy,
-and Mrs. Straker, waking at one in the morning, found that he was
-dressing. In reply to her inquiries, he said that he could not sleep on
-account of his anxiety about the horses, and that he intended to walk
-down to the stables to see that all was well. She begged him to remain
-at home, as she could hear the rain pattering against the window, but in
-spite of her entreaties he pulled on his large mackintosh and left the
-house.
-
-"Mrs. Straker awoke at seven in the morning, to find that her husband
-had not yet returned. She dressed herself hastily, called the maid, and
-set off for the stables. The door was open; inside, huddled together
-upon a chair, Hunter was sunk in a state of absolute stupor, the
-favorite's stall was empty, and there were no signs of his trainer.
-
-"The two lads who slept in the chaff-cutting loft above the harness-room
-were quickly aroused. They had heard nothing during the night, for they
-are both sound sleepers. Hunter was obviously under the influence of
-some powerful drug, and as no sense could be got out of him, he was left
-to sleep it off while the two lads and the two women ran out in search
-of the absentees. They still had hopes that the trainer had for some
-reason taken out the horse for early exercise, but on ascending the
-knoll near the house, from which all the neighboring moors were visible,
-they not only could see no signs of the missing favorite, but they
-perceived something which warned them that they were in the presence of
-a tragedy.
-
-"About a quarter of a mile from the stables John Straker's overcoat was
-flapping from a furze-bush. Immediately beyond there was a bowl-shaped
-depression in the moor, and at the bottom of this was found the dead
-body of the unfortunate trainer. His head had been shattered by a savage
-blow from some heavy weapon, and he was wounded on the thigh, where
-there was a long, clean cut, inflicted evidently by some very sharp
-instrument. It was clear, however, that Straker had defended himself
-vigorously against his assailants, for in his right hand he held a small
-knife, which was clotted with blood up to the handle, while in his left
-he clasped a red and black silk cravat, which was recognized by the maid
-as having been worn on the preceding evening by the stranger who had
-visited the stables. Hunter, on recovering from his stupor, was also
-quite positive as to the ownership of the cravat. He was equally certain
-that the same stranger had, while standing at the window, drugged his
-curried mutton, and so deprived the stables of their watchman. As to the
-missing horse, there were abundant proofs in the mud which lay at the
-bottom of the fatal hollow that he had been there at the time of the
-struggle. But from that morning he has disappeared, and although a large
-reward has been offered, and all the gypsies of Dartmoor are on the
-alert, no news has come of him. Finally, an analysis has shown that
-the remains of his supper left by the stable-lad contain an appreciable
-quantity of powdered opium, while the people at the house partook of the
-same dish on the same night without any ill effect.
-
-"Those are the main facts of the case, stripped of all surmise, and
-stated as baldly as possible. I shall now recapitulate what the police
-have done in the matter.
-
-"Inspector Gregory, to whom the case has been committed, is an extremely
-competent officer. Were he but gifted with imagination he might rise to
-great heights in his profession. On his arrival he promptly found and
-arrested the man upon whom suspicion naturally rested. There was little
-difficulty in finding him, for he inhabited one of those villas which I
-have mentioned. His name, it appears, was Fitzroy Simpson. He was a man
-of excellent birth and education, who had squandered a fortune upon the
-turf, and who lived now by doing a little quiet and genteel book-making
-in the sporting clubs of London. An examination of his betting-book
-shows that bets to the amount of five thousand pounds had been
-registered by him against the favorite. On being arrested he volunteered
-that statement that he had come down to Dartmoor in the hope of
-getting some information about the King's Pyland horses, and also about
-Desborough, the second favorite, which was in charge of Silas Brown at
-the Mapleton stables. He did not attempt to deny that he had acted as
-described upon the evening before, but declared that he had no sinister
-designs, and had simply wished to obtain first-hand information. When
-confronted with his cravat, he turned very pale, and was utterly unable
-to account for its presence in the hand of the murdered man. His wet
-clothing showed that he had been out in the storm of the night before,
-and his stick, which was a Penang-lawyer weighted with lead, was just
-such a weapon as might, by repeated blows, have inflicted the terrible
-injuries to which the trainer had succumbed. On the other hand, there
-was no wound upon his person, while the state of Straker's knife would
-show that one at least of his assailants must bear his mark upon him.
-There you have it all in a nutshell, Watson, and if you can give me any
-light I shall be infinitely obliged to you."
-
-I had listened with the greatest interest to the statement which Holmes,
-with characteristic clearness, had laid before me. Though most of the
-facts were familiar to me, I had not sufficiently appreciated their
-relative importance, nor their connection to each other.
-
-"Is it not possible," I suggested, "that the incised wound upon Straker
-may have been caused by his own knife in the convulsive struggles which
-follow any brain injury?"
-
-"It is more than possible; it is probable," said Holmes. "In that case
-one of the main points in favor of the accused disappears."
-
-"And yet," said I, "even now I fail to understand what the theory of the
-police can be."
-
-"I am afraid that whatever theory we state has very grave objections to
-it," returned my companion. "The police imagine, I take it, that this
-Fitzroy Simpson, having drugged the lad, and having in some way obtained
-a duplicate key, opened the stable door and took out the horse, with
-the intention, apparently, of kidnapping him altogether. His bridle is
-missing, so that Simpson must have put this on. Then, having left the
-door open behind him, he was leading the horse away over the moor, when
-he was either met or overtaken by the trainer. A row naturally ensued.
-Simpson beat out the trainer's brains with his heavy stick without
-receiving any injury from the small knife which Straker used in
-self-defence, and then the thief either led the horse on to some secret
-hiding-place, or else it may have bolted during the struggle, and be
-now wandering out on the moors. That is the case as it appears to
-the police, and improbable as it is, all other explanations are more
-improbable still. However, I shall very quickly test the matter when I
-am once upon the spot, and until then I cannot really see how we can get
-much further than our present position."
-
-It was evening before we reached the little town of Tavistock, which
-lies, like the boss of a shield, in the middle of the huge circle of
-Dartmoor. Two gentlemen were awaiting us in the station--the one a tall,
-fair man with lion-like hair and beard and curiously penetrating light
-blue eyes; the other a small, alert person, very neat and dapper, in a
-frock-coat and gaiters, with trim little side-whiskers and an eye-glass.
-The latter was Colonel Ross, the well-known sportsman; the other,
-Inspector Gregory, a man who was rapidly making his name in the English
-detective service.
-
-"I am delighted that you have come down, Mr. Holmes," said the Colonel.
-"The Inspector here has done all that could possibly be suggested, but I
-wish to leave no stone unturned in trying to avenge poor Straker and in
-recovering my horse."
-
-"Have there been any fresh developments?" asked Holmes.
-
-"I am sorry to say that we have made very little progress," said the
-Inspector. "We have an open carriage outside, and as you would no doubt
-like to see the place before the light fails, we might talk it over as
-we drive."
-
-A minute later we were all seated in a comfortable landau, and were
-rattling through the quaint old Devonshire city. Inspector Gregory was
-full of his case, and poured out a stream of remarks, while Holmes threw
-in an occasional question or interjection. Colonel Ross leaned back with
-his arms folded and his hat tilted over his eyes, while I listened with
-interest to the dialogue of the two detectives. Gregory was formulating
-his theory, which was almost exactly what Holmes had foretold in the
-train.
-
-"The net is drawn pretty close round Fitzroy Simpson," he remarked, "and
-I believe myself that he is our man. At the same time I recognize that
-the evidence is purely circumstantial, and that some new development may
-upset it."
-
-"How about Straker's knife?"
-
-"We have quite come to the conclusion that he wounded himself in his
-fall."
-
-"My friend Dr. Watson made that suggestion to me as we came down. If so,
-it would tell against this man Simpson."
-
-"Undoubtedly. He has neither a knife nor any sign of a wound. The
-evidence against him is certainly very strong. He had a great interest
-in the disappearance of the favorite. He lies under suspicion of having
-poisoned the stable-boy, he was undoubtedly out in the storm, he was
-armed with a heavy stick, and his cravat was found in the dead man's
-hand. I really think we have enough to go before a jury."
-
-Holmes shook his head. "A clever counsel would tear it all to rags,"
-said he. "Why should he take the horse out of the stable? If he wished
-to injure it why could he not do it there? Has a duplicate key been
-found in his possession? What chemist sold him the powdered opium? Above
-all, where could he, a stranger to the district, hide a horse, and such
-a horse as this? What is his own explanation as to the paper which he
-wished the maid to give to the stable-boy?"
-
-"He says that it was a ten-pound note. One was found in his purse. But
-your other difficulties are not so formidable as they seem. He is not
-a stranger to the district. He has twice lodged at Tavistock in the
-summer. The opium was probably brought from London. The key, having
-served its purpose, would be hurled away. The horse may be at the bottom
-of one of the pits or old mines upon the moor."
-
-"What does he say about the cravat?"
-
-"He acknowledges that it is his, and declares that he had lost it. But a
-new element has been introduced into the case which may account for his
-leading the horse from the stable."
-
-Holmes pricked up his ears.
-
-"We have found traces which show that a party of gypsies encamped on
-Monday night within a mile of the spot where the murder took place. On
-Tuesday they were gone. Now, presuming that there was some understanding
-between Simpson and these gypsies, might he not have been leading the
-horse to them when he was overtaken, and may they not have him now?"
-
-"It is certainly possible."
-
-"The moor is being scoured for these gypsies. I have also examined every
-stable and out-house in Tavistock, and for a radius of ten miles."
-
-"There is another training-stable quite close, I understand?"
-
-"Yes, and that is a factor which we must certainly not neglect. As
-Desborough, their horse, was second in the betting, they had an interest
-in the disappearance of the favorite. Silas Brown, the trainer, is known
-to have had large bets upon the event, and he was no friend to poor
-Straker. We have, however, examined the stables, and there is nothing to
-connect him with the affair."
-
-"And nothing to connect this man Simpson with the interests of the
-Mapleton stables?"
-
-"Nothing at all."
-
-Holmes leaned back in the carriage, and the conversation ceased. A few
-minutes later our driver pulled up at a neat little red-brick villa with
-overhanging eaves which stood by the road. Some distance off, across a
-paddock, lay a long gray-tiled out-building. In every other direction
-the low curves of the moor, bronze-colored from the fading ferns,
-stretched away to the sky-line, broken only by the steeples of
-Tavistock, and by a cluster of houses away to the westward which marked
-the Mapleton stables. We all sprang out with the exception of Holmes,
-who continued to lean back with his eyes fixed upon the sky in front of
-him, entirely absorbed in his own thoughts. It was only when I touched
-his arm that he roused himself with a violent start and stepped out of
-the carriage.
-
-"Excuse me," said he, turning to Colonel Ross, who had looked at him in
-some surprise. "I was day-dreaming." There was a gleam in his eyes and a
-suppressed excitement in his manner which convinced me, used as I was
-to his ways, that his hand was upon a clue, though I could not imagine
-where he had found it.
-
-"Perhaps you would prefer at once to go on to the scene of the crime,
-Mr. Holmes?" said Gregory.
-
-"I think that I should prefer to stay here a little and go into one or
-two questions of detail. Straker was brought back here, I presume?"
-
-"Yes; he lies upstairs. The inquest is to-morrow."
-
-"He has been in your service some years, Colonel Ross?"
-
-"I have always found him an excellent servant."
-
-"I presume that you made an inventory of what he had in his pockets at
-the time of his death, Inspector?"
-
-"I have the things themselves in the sitting-room, if you would care to
-see them."
-
-"I should be very glad." We all filed into the front room and sat round
-the central table while the Inspector unlocked a square tin box and laid
-a small heap of things before us. There was a box of vestas, two inches
-of tallow candle, an A D P brier-root pipe, a pouch of seal-skin with
-half an ounce of long-cut Cavendish, a silver watch with a gold chain,
-five sovereigns in gold, an aluminum pencil-case, a few papers, and an
-ivory-handled knife with a very delicate, inflexible blade marked Weiss
-& Co., London.
-
-"This is a very singular knife," said Holmes, lifting it up and
-examining it minutely. "I presume, as I see blood-stains upon it, that
-it is the one which was found in the dead man's grasp. Watson, this
-knife is surely in your line?"
-
-"It is what we call a cataract knife," said I.
-
-"I thought so. A very delicate blade devised for very delicate work.
-A strange thing for a man to carry with him upon a rough expedition,
-especially as it would not shut in his pocket."
-
-"The tip was guarded by a disk of cork which we found beside his body,"
-said the Inspector. "His wife tells us that the knife had lain upon the
-dressing-table, and that he had picked it up as he left the room. It was
-a poor weapon, but perhaps the best that he could lay his hands on at
-the moment."
-
-"Very possible. How about these papers?"
-
-"Three of them are receipted hay-dealers' accounts. One of them is a
-letter of instructions from Colonel Ross. This other is a milliner's
-account for thirty-seven pounds fifteen made out by Madame Lesurier,
-of Bond Street, to William Derbyshire. Mrs. Straker tells us that
-Derbyshire was a friend of her husband's and that occasionally his
-letters were addressed here."
-
-"Madam Derbyshire had somewhat expensive tastes," remarked Holmes,
-glancing down the account. "Twenty-two guineas is rather heavy for a
-single costume. However there appears to be nothing more to learn, and
-we may now go down to the scene of the crime."
-
-As we emerged from the sitting-room a woman, who had been waiting in
-the passage, took a step forward and laid her hand upon the Inspector's
-sleeve. Her face was haggard and thin and eager, stamped with the print
-of a recent horror.
-
-"Have you got them? Have you found them?" she panted.
-
-"No, Mrs. Straker. But Mr. Holmes here has come from London to help us,
-and we shall do all that is possible."
-
-"Surely I met you in Plymouth at a garden-party some little time ago,
-Mrs. Straker?" said Holmes.
-
-"No, sir; you are mistaken."
-
-"Dear me! Why, I could have sworn to it. You wore a costume of
-dove-colored silk with ostrich-feather trimming."
-
-"I never had such a dress, sir," answered the lady.
-
-"Ah, that quite settles it," said Holmes. And with an apology he
-followed the Inspector outside. A short walk across the moor took us to
-the hollow in which the body had been found. At the brink of it was the
-furze-bush upon which the coat had been hung.
-
-"There was no wind that night, I understand," said Holmes.
-
-"None; but very heavy rain."
-
-"In that case the overcoat was not blown against the furze-bush, but
-placed there."
-
-"Yes, it was laid across the bush."
-
-"You fill me with interest, I perceive that the ground has been trampled
-up a good deal. No doubt many feet have been here since Monday night."
-
-"A piece of matting has been laid here at the side, and we have all
-stood upon that."
-
-"Excellent."
-
-"In this bag I have one of the boots which Straker wore, one of Fitzroy
-Simpson's shoes, and a cast horseshoe of Silver Blaze."
-
-"My dear Inspector, you surpass yourself!" Holmes took the bag, and,
-descending into the hollow, he pushed the matting into a more central
-position. Then stretching himself upon his face and leaning his chin
-upon his hands, he made a careful study of the trampled mud in front of
-him. "Hullo!" said he, suddenly. "What's this?" It was a wax vesta half
-burned, which was so coated with mud that it looked at first like a
-little chip of wood.
-
-"I cannot think how I came to overlook it," said the Inspector, with an
-expression of annoyance.
-
-"It was invisible, buried in the mud. I only saw it because I was
-looking for it."
-
-"What! You expected to find it?"
-
-"I thought it not unlikely."
-
-He took the boots from the bag, and compared the impressions of each of
-them with marks upon the ground. Then he clambered up to the rim of the
-hollow, and crawled about among the ferns and bushes.
-
-"I am afraid that there are no more tracks," said the Inspector. "I
-have examined the ground very carefully for a hundred yards in each
-direction."
-
-"Indeed!" said Holmes, rising. "I should not have the impertinence to
-do it again after what you say. But I should like to take a little walk
-over the moor before it grows dark, that I may know my ground to-morrow,
-and I think that I shall put this horseshoe into my pocket for luck."
-
-Colonel Ross, who had shown some signs of impatience at my companion's
-quiet and systematic method of work, glanced at his watch. "I wish you
-would come back with me, Inspector," said he. "There are several points
-on which I should like your advice, and especially as to whether we do
-not owe it to the public to remove our horse's name from the entries for
-the Cup."
-
-"Certainly not," cried Holmes, with decision. "I should let the name
-stand."
-
-The Colonel bowed. "I am very glad to have had your opinion, sir," said
-he. "You will find us at poor Straker's house when you have finished
-your walk, and we can drive together into Tavistock."
-
-He turned back with the Inspector, while Holmes and I walked slowly
-across the moor. The sun was beginning to sink behind the stables of
-Mapleton, and the long, sloping plain in front of us was tinged with
-gold, deepening into rich, ruddy browns where the faded ferns and
-brambles caught the evening light. But the glories of the landscape were
-all wasted upon my companion, who was sunk in the deepest thought.
-
-"It's this way, Watson," said he at last. "We may leave the question
-of who killed John Straker for the instant, and confine ourselves to
-finding out what has become of the horse. Now, supposing that he broke
-away during or after the tragedy, where could he have gone to? The horse
-is a very gregarious creature. If left to himself his instincts would
-have been either to return to King's Pyland or go over to Mapleton. Why
-should he run wild upon the moor? He would surely have been seen by now.
-And why should gypsies kidnap him? These people always clear out when
-they hear of trouble, for they do not wish to be pestered by the police.
-They could not hope to sell such a horse. They would run a great risk
-and gain nothing by taking him. Surely that is clear."
-
-"Where is he, then?"
-
-"I have already said that he must have gone to King's Pyland or to
-Mapleton. He is not at King's Pyland. Therefore he is at Mapleton. Let
-us take that as a working hypothesis and see what it leads us to. This
-part of the moor, as the Inspector remarked, is very hard and dry. But
-it falls away towards Mapleton, and you can see from here that there
-is a long hollow over yonder, which must have been very wet on Monday
-night. If our supposition is correct, then the horse must have crossed
-that, and there is the point where we should look for his tracks."
-
-We had been walking briskly during this conversation, and a few more
-minutes brought us to the hollow in question. At Holmes' request I
-walked down the bank to the right, and he to the left, but I had not
-taken fifty paces before I heard him give a shout, and saw him waving
-his hand to me. The track of a horse was plainly outlined in the soft
-earth in front of him, and the shoe which he took from his pocket
-exactly fitted the impression.
-
-"See the value of imagination," said Holmes. "It is the one quality
-which Gregory lacks. We imagined what might have happened, acted upon
-the supposition, and find ourselves justified. Let us proceed."
-
-We crossed the marshy bottom and passed over a quarter of a mile of dry,
-hard turf. Again the ground sloped, and again we came on the tracks.
-Then we lost them for half a mile, but only to pick them up once more
-quite close to Mapleton. It was Holmes who saw them first, and he stood
-pointing with a look of triumph upon his face. A man's track was visible
-beside the horse's.
-
-"The horse was alone before," I cried.
-
-"Quite so. It was alone before. Hullo, what is this?"
-
-The double track turned sharp off and took the direction of King's
-Pyland. Holmes whistled, and we both followed along after it. His eyes
-were on the trail, but I happened to look a little to one side, and
-saw to my surprise the same tracks coming back again in the opposite
-direction.
-
-"One for you, Watson," said Holmes, when I pointed it out. "You have
-saved us a long walk, which would have brought us back on our own
-traces. Let us follow the return track."
-
-We had not to go far. It ended at the paving of asphalt which led up
-to the gates of the Mapleton stables. As we approached, a groom ran out
-from them.
-
-"We don't want any loiterers about here," said he.
-
-"I only wished to ask a question," said Holmes, with his finger and
-thumb in his waistcoat pocket. "Should I be too early to see your
-master, Mr. Silas Brown, if I were to call at five o'clock to-morrow
-morning?"
-
-"Bless you, sir, if any one is about he will be, for he is always
-the first stirring. But here he is, sir, to answer your questions for
-himself. No, sir, no; it is as much as my place is worth to let him see
-me touch your money. Afterwards, if you like."
-
-As Sherlock Holmes replaced the half-crown which he had drawn from his
-pocket, a fierce-looking elderly man strode out from the gate with a
-hunting-crop swinging in his hand.
-
-"What's this, Dawson!" he cried. "No gossiping! Go about your business!
-And you, what the devil do you want here?"
-
-"Ten minutes' talk with you, my good sir," said Holmes in the sweetest
-of voices.
-
-"I've no time to talk to every gadabout. We want no stranger here. Be
-off, or you may find a dog at your heels."
-
-Holmes leaned forward and whispered something in the trainer's ear. He
-started violently and flushed to the temples.
-
-"It's a lie!" he shouted, "an infernal lie!"
-
-"Very good. Shall we argue about it here in public or talk it over in
-your parlor?"
-
-"Oh, come in if you wish to."
-
-Holmes smiled. "I shall not keep you more than a few minutes, Watson,"
-said he. "Now, Mr. Brown, I am quite at your disposal."
-
-It was twenty minutes, and the reds had all faded into grays before
-Holmes and the trainer reappeared. Never have I seen such a change as
-had been brought about in Silas Brown in that short time. His face was
-ashy pale, beads of perspiration shone upon his brow, and his hands
-shook until the hunting-crop wagged like a branch in the wind. His
-bullying, overbearing manner was all gone too, and he cringed along at
-my companion's side like a dog with its master.
-
-"Your instructions will be done. It shall all be done," said he.
-
-"There must be no mistake," said Holmes, looking round at him. The other
-winced as he read the menace in his eyes.
-
-"Oh no, there shall be no mistake. It shall be there. Should I change it
-first or not?"
-
-Holmes thought a little and then burst out laughing. "No, don't," said
-he; "I shall write to you about it. No tricks, now, or--"
-
-"Oh, you can trust me, you can trust me!"
-
-"Yes, I think I can. Well, you shall hear from me to-morrow." He turned
-upon his heel, disregarding the trembling hand which the other held out
-to him, and we set off for King's Pyland.
-
-"A more perfect compound of the bully, coward, and sneak than Master
-Silas Brown I have seldom met with," remarked Holmes as we trudged along
-together.
-
-"He has the horse, then?"
-
-"He tried to bluster out of it, but I described to him so exactly what
-his actions had been upon that morning that he is convinced that I was
-watching him. Of course you observed the peculiarly square toes in the
-impressions, and that his own boots exactly corresponded to them.
-Again, of course no subordinate would have dared to do such a thing.
-I described to him how, when according to his custom he was the first
-down, he perceived a strange horse wandering over the moor. How he went
-out to it, and his astonishment at recognizing, from the white forehead
-which has given the favorite its name, that chance had put in his power
-the only horse which could beat the one upon which he had put his money.
-Then I described how his first impulse had been to lead him back to
-King's Pyland, and how the devil had shown him how he could hide the
-horse until the race was over, and how he had led it back and concealed
-it at Mapleton. When I told him every detail he gave it up and thought
-only of saving his own skin."
-
-"But his stables had been searched?"
-
-"Oh, an old horse-faker like him has many a dodge."
-
-"But are you not afraid to leave the horse in his power now, since he
-has every interest in injuring it?"
-
-"My dear fellow, he will guard it as the apple of his eye. He knows that
-his only hope of mercy is to produce it safe."
-
-"Colonel Ross did not impress me as a man who would be likely to show
-much mercy in any case."
-
-"The matter does not rest with Colonel Ross. I follow my own methods,
-and tell as much or as little as I choose. That is the advantage of
-being unofficial. I don't know whether you observed it, Watson, but the
-Colonel's manner has been just a trifle cavalier to me. I am inclined
-now to have a little amusement at his expense. Say nothing to him about
-the horse."
-
-"Certainly not without your permission."
-
-"And of course this is all quite a minor point compared to the question
-of who killed John Straker."
-
-"And you will devote yourself to that?"
-
-"On the contrary, we both go back to London by the night train."
-
-I was thunderstruck by my friend's words. We had only been a few hours
-in Devonshire, and that he should give up an investigation which he had
-begun so brilliantly was quite incomprehensible to me. Not a word more
-could I draw from him until we were back at the trainer's house. The
-Colonel and the Inspector were awaiting us in the parlor.
-
-"My friend and I return to town by the night-express," said Holmes. "We
-have had a charming little breath of your beautiful Dartmoor air."
-
-The Inspector opened his eyes, and the Colonel's lip curled in a sneer.
-
-"So you despair of arresting the murderer of poor Straker," said he.
-
-Holmes shrugged his shoulders. "There are certainly grave difficulties
-in the way," said he. "I have every hope, however, that your horse
-will start upon Tuesday, and I beg that you will have your jockey in
-readiness. Might I ask for a photograph of Mr. John Straker?"
-
-The Inspector took one from an envelope and handed it to him.
-
-"My dear Gregory, you anticipate all my wants. If I might ask you to
-wait here for an instant, I have a question which I should like to put
-to the maid."
-
-"I must say that I am rather disappointed in our London consultant,"
-said Colonel Ross, bluntly, as my friend left the room. "I do not see
-that we are any further than when he came."
-
-"At least you have his assurance that your horse will run," said I.
-
-"Yes, I have his assurance," said the Colonel, with a shrug of his
-shoulders. "I should prefer to have the horse."
-
-I was about to make some reply in defence of my friend when he entered
-the room again.
-
-"Now, gentlemen," said he, "I am quite ready for Tavistock."
-
-As we stepped into the carriage one of the stable-lads held the door
-open for us. A sudden idea seemed to occur to Holmes, for he leaned
-forward and touched the lad upon the sleeve.
-
-"You have a few sheep in the paddock," he said. "Who attends to them?"
-
-"I do, sir."
-
-"Have you noticed anything amiss with them of late?"
-
-"Well, sir, not of much account; but three of them have gone lame, sir."
-
-I could see that Holmes was extremely pleased, for he chuckled and
-rubbed his hands together.
-
-"A long shot, Watson; a very long shot," said he, pinching my arm.
-"Gregory, let me recommend to your attention this singular epidemic
-among the sheep. Drive on, coachman!"
-
-Colonel Ross still wore an expression which showed the poor opinion
-which he had formed of my companion's ability, but I saw by the
-Inspector's face that his attention had been keenly aroused.
-
-"You consider that to be important?" he asked.
-
-"Exceedingly so."
-
-"Is there any point to which you would wish to draw my attention?"
-
-"To the curious incident of the dog in the night-time."
-
-"The dog did nothing in the night-time."
-
-"That was the curious incident," remarked Sherlock Holmes.
-
-
-Four days later Holmes and I were again in the train, bound for
-Winchester to see the race for the Wessex Cup. Colonel Ross met us by
-appointment outside the station, and we drove in his drag to the course
-beyond the town. His face was grave, and his manner was cold in the
-extreme.
-
-"I have seen nothing of my horse," said he.
-
-"I suppose that you would know him when you saw him?" asked Holmes.
-
-The Colonel was very angry. "I have been on the turf for twenty years,
-and never was asked such a question as that before," said he. "A
-child would know Silver Blaze, with his white forehead and his mottled
-off-foreleg."
-
-"How is the betting?"
-
-"Well, that is the curious part of it. You could have got fifteen to one
-yesterday, but the price has become shorter and shorter, until you can
-hardly get three to one now."
-
-"Hum!" said Holmes. "Somebody knows something, that is clear."
-
-As the drag drew up in the enclosure near the grand stand I glanced at
-the card to see the entries.
-
-Wessex Plate [it ran] 50 sovs each h ft with 1000 sovs added for four
-and five year olds. Second, L300. Third, L200. New course (one mile and
-five furlongs). Mr. Heath Newton's The Negro. Red cap. Cinnamon jacket.
-Colonel Wardlaw's Pugilist. Pink cap. Blue and black jacket. Lord
-Backwater's Desborough. Yellow cap and sleeves. Colonel Ross's Silver
-Blaze. Black cap. Red jacket. Duke of Balmoral's Iris. Yellow and black
-stripes. Lord Singleford's Rasper. Purple cap. Black sleeves.
-
-"We scratched our other one, and put all hopes on your word," said the
-Colonel. "Why, what is that? Silver Blaze favorite?"
-
-"Five to four against Silver Blaze!" roared the ring. "Five to four
-against Silver Blaze! Five to fifteen against Desborough! Five to four
-on the field!"
-
-"There are the numbers up," I cried. "They are all six there."
-
-"All six there? Then my horse is running," cried the Colonel in great
-agitation. "But I don't see him. My colors have not passed."
-
-"Only five have passed. This must be he."
-
-As I spoke a powerful bay horse swept out from the weighing enclosure
-and cantered past us, bearing on its back the well-known black and red
-of the Colonel.
-
-"That's not my horse," cried the owner. "That beast has not a white hair
-upon its body. What is this that you have done, Mr. Holmes?"
-
-"Well, well, let us see how he gets on," said my friend, imperturbably.
-For a few minutes he gazed through my field-glass. "Capital! An
-excellent start!" he cried suddenly. "There they are, coming round the
-curve!"
-
-From our drag we had a superb view as they came up the straight. The six
-horses were so close together that a carpet could have covered them,
-but half way up the yellow of the Mapleton stable showed to the front.
-Before they reached us, however, Desborough's bolt was shot, and the
-Colonel's horse, coming away with a rush, passed the post a good six
-lengths before its rival, the Duke of Balmoral's Iris making a bad
-third.
-
-"It's my race, anyhow," gasped the Colonel, passing his hand over his
-eyes. "I confess that I can make neither head nor tail of it. Don't you
-think that you have kept up your mystery long enough, Mr. Holmes?"
-
-"Certainly, Colonel, you shall know everything. Let us all go round and
-have a look at the horse together. Here he is," he continued, as we made
-our way into the weighing enclosure, where only owners and their friends
-find admittance. "You have only to wash his face and his leg in spirits
-of wine, and you will find that he is the same old Silver Blaze as
-ever."
-
-"You take my breath away!"
-
-"I found him in the hands of a faker, and took the liberty of running
-him just as he was sent over."
-
-"My dear sir, you have done wonders. The horse looks very fit and well.
-It never went better in its life. I owe you a thousand apologies
-for having doubted your ability. You have done me a great service by
-recovering my horse. You would do me a greater still if you could lay
-your hands on the murderer of John Straker."
-
-"I have done so," said Holmes quietly.
-
-The Colonel and I stared at him in amazement. "You have got him! Where
-is he, then?"
-
-"He is here."
-
-"Here! Where?"
-
-"In my company at the present moment."
-
-The Colonel flushed angrily. "I quite recognize that I am under
-obligations to you, Mr. Holmes," said he, "but I must regard what you
-have just said as either a very bad joke or an insult."
-
-Sherlock Holmes laughed. "I assure you that I have not associated
-you with the crime, Colonel," said he. "The real murderer is standing
-immediately behind you." He stepped past and laid his hand upon the
-glossy neck of the thoroughbred.
-
-"The horse!" cried both the Colonel and myself.
-
-"Yes, the horse. And it may lessen his guilt if I say that it was
-done in self-defence, and that John Straker was a man who was entirely
-unworthy of your confidence. But there goes the bell, and as I stand
-to win a little on this next race, I shall defer a lengthy explanation
-until a more fitting time."
-
-
-
-We had the corner of a Pullman car to ourselves that evening as we
-whirled back to London, and I fancy that the journey was a short one
-to Colonel Ross as well as to myself, as we listened to our
-companion's narrative of the events which had occurred at the Dartmoor
-training-stables upon the Monday night, and the means by which he had
-unravelled them.
-
-"I confess," said he, "that any theories which I had formed from
-the newspaper reports were entirely erroneous. And yet there were
-indications there, had they not been overlaid by other details which
-concealed their true import. I went to Devonshire with the conviction
-that Fitzroy Simpson was the true culprit, although, of course, I saw
-that the evidence against him was by no means complete. It was while I
-was in the carriage, just as we reached the trainer's house, that the
-immense significance of the curried mutton occurred to me. You may
-remember that I was distrait, and remained sitting after you had all
-alighted. I was marvelling in my own mind how I could possibly have
-overlooked so obvious a clue."
-
-"I confess," said the Colonel, "that even now I cannot see how it helps
-us."
-
-"It was the first link in my chain of reasoning. Powdered opium is by no
-means tasteless. The flavor is not disagreeable, but it is perceptible.
-Were it mixed with any ordinary dish the eater would undoubtedly detect
-it, and would probably eat no more. A curry was exactly the medium
-which would disguise this taste. By no possible supposition could
-this stranger, Fitzroy Simpson, have caused curry to be served in
-the trainer's family that night, and it is surely too monstrous a
-coincidence to suppose that he happened to come along with powdered
-opium upon the very night when a dish happened to be served which would
-disguise the flavor. That is unthinkable. Therefore Simpson becomes
-eliminated from the case, and our attention centers upon Straker and
-his wife, the only two people who could have chosen curried mutton for
-supper that night. The opium was added after the dish was set aside
-for the stable-boy, for the others had the same for supper with no ill
-effects. Which of them, then, had access to that dish without the maid
-seeing them?
-
-"Before deciding that question I had grasped the significance of the
-silence of the dog, for one true inference invariably suggests others.
-The Simpson incident had shown me that a dog was kept in the stables,
-and yet, though some one had been in and had fetched out a horse, he
-had not barked enough to arouse the two lads in the loft. Obviously the
-midnight visitor was some one whom the dog knew well.
-
-"I was already convinced, or almost convinced, that John Straker went
-down to the stables in the dead of the night and took out Silver Blaze.
-For what purpose? For a dishonest one, obviously, or why should he drug
-his own stable-boy? And yet I was at a loss to know why. There have been
-cases before now where trainers have made sure of great sums of money
-by laying against their own horses, through agents, and then preventing
-them from winning by fraud. Sometimes it is a pulling jockey. Sometimes
-it is some surer and subtler means. What was it here? I hoped that the
-contents of his pockets might help me to form a conclusion.
-
-"And they did so. You cannot have forgotten the singular knife which was
-found in the dead man's hand, a knife which certainly no sane man would
-choose for a weapon. It was, as Dr. Watson told us, a form of knife
-which is used for the most delicate operations known in surgery. And it
-was to be used for a delicate operation that night. You must know, with
-your wide experience of turf matters, Colonel Ross, that it is possible
-to make a slight nick upon the tendons of a horse's ham, and to do it
-subcutaneously, so as to leave absolutely no trace. A horse so treated
-would develop a slight lameness, which would be put down to a strain in
-exercise or a touch of rheumatism, but never to foul play."
-
-"Villain! Scoundrel!" cried the Colonel.
-
-"We have here the explanation of why John Straker wished to take the
-horse out on to the moor. So spirited a creature would have certainly
-roused the soundest of sleepers when it felt the prick of the knife. It
-was absolutely necessary to do it in the open air."
-
-"I have been blind!" cried the Colonel. "Of course that was why he
-needed the candle, and struck the match."
-
-"Undoubtedly. But in examining his belongings I was fortunate enough to
-discover not only the method of the crime, but even its motives. As a
-man of the world, Colonel, you know that men do not carry other people's
-bills about in their pockets. We have most of us quite enough to do to
-settle our own. I at once concluded that Straker was leading a double
-life, and keeping a second establishment. The nature of the bill showed
-that there was a lady in the case, and one who had expensive tastes.
-Liberal as you are with your servants, one can hardly expect that they
-can buy twenty-guinea walking dresses for their ladies. I questioned
-Mrs. Straker as to the dress without her knowing it, and having
-satisfied myself that it had never reached her, I made a note of the
-milliner's address, and felt that by calling there with Straker's
-photograph I could easily dispose of the mythical Derbyshire.
-
-"From that time on all was plain. Straker had led out the horse to a
-hollow where his light would be invisible. Simpson in his flight had
-dropped his cravat, and Straker had picked it up--with some idea,
-perhaps, that he might use it in securing the horse's leg. Once in the
-hollow, he had got behind the horse and had struck a light; but the
-creature frightened at the sudden glare, and with the strange instinct
-of animals feeling that some mischief was intended, had lashed out, and
-the steel shoe had struck Straker full on the forehead. He had already,
-in spite of the rain, taken off his overcoat in order to do his delicate
-task, and so, as he fell, his knife gashed his thigh. Do I make it
-clear?"
-
-"Wonderful!" cried the Colonel. "Wonderful! You might have been there!"
-
-"My final shot was, I confess a very long one. It struck me that so
-astute a man as Straker would not undertake this delicate tendon-nicking
-without a little practice. What could he practice on? My eyes fell upon
-the sheep, and I asked a question which, rather to my surprise, showed
-that my surmise was correct.
-
-"When I returned to London I called upon the milliner, who had
-recognized Straker as an excellent customer of the name of Derbyshire,
-who had a very dashing wife, with a strong partiality for expensive
-dresses. I have no doubt that this woman had plunged him over head and
-ears in debt, and so led him into this miserable plot."
-
-"You have explained all but one thing," cried the Colonel. "Where was
-the horse?"
-
-"Ah, it bolted, and was cared for by one of your neighbors. We must have
-an amnesty in that direction, I think. This is Clapham Junction, if I am
-not mistaken, and we shall be in Victoria in less than ten minutes. If
-you care to smoke a cigar in our rooms, Colonel, I shall be happy to
-give you any other details which might interest you."
-
-
-
-
-Adventure II. The Yellow Face
-
-
-[In publishing these short sketches based upon the numerous cases in
-which my companion's singular gifts have made us the listeners to, and
-eventually the actors in, some strange drama, it is only natural that I
-should dwell rather upon his successes than upon his failures. And this
-not so much for the sake of his reputation--for, indeed, it was when
-he was at his wits' end that his energy and his versatility were most
-admirable--but because where he failed it happened too often that no one
-else succeeded, and that the tale was left forever without a conclusion.
-Now and again, however, it chanced that even when he erred, the truth
-was still discovered. I have noted of some half-dozen cases of the
-kind; the Adventure of the Musgrave Ritual and that which I am about to
-recount are the two which present the strongest features of interest.]
-
-Sherlock Holmes was a man who seldom took exercise for exercise's sake.
-Few men were capable of greater muscular effort, and he was undoubtedly
-one of the finest boxers of his weight that I have ever seen; but he
-looked upon aimless bodily exertion as a waste of energy, and he seldom
-bestirred himself save when there was some professional object to be
-served. Then he was absolutely untiring and indefatigable. That he
-should have kept himself in training under such circumstances is
-remarkable, but his diet was usually of the sparest, and his habits
-were simple to the verge of austerity. Save for the occasional use of
-cocaine, he had no vices, and he only turned to the drug as a protest
-against the monotony of existence when cases were scanty and the papers
-uninteresting.
-
-One day in early spring he had so far relaxed as to go for a walk with
-me in the Park, where the first faint shoots of green were breaking out
-upon the elms, and the sticky spear-heads of the chestnuts were just
-beginning to burst into their five-fold leaves. For two hours we rambled
-about together, in silence for the most part, as befits two men who know
-each other intimately. It was nearly five before we were back in Baker
-Street once more.
-
-"Beg pardon, sir," said our page-boy, as he opened the door. "There's
-been a gentleman here asking for you, sir."
-
-Holmes glanced reproachfully at me. "So much for afternoon walks!" said
-he. "Has this gentleman gone, then?"
-
-"Yes, sir."
-
-"Didn't you ask him in?"
-
-"Yes, sir; he came in."
-
-"How long did he wait?"
-
-"Half an hour, sir. He was a very restless gentleman, sir, a-walkin'
-and a-stampin' all the time he was here. I was waitin' outside the door,
-sir, and I could hear him. At last he outs into the passage, and he
-cries, 'Is that man never goin' to come?' Those were his very words,
-sir. 'You'll only need to wait a little longer,' says I. 'Then I'll wait
-in the open air, for I feel half choked,' says he. 'I'll be back before
-long.' And with that he ups and he outs, and all I could say wouldn't
-hold him back."
-
-"Well, well, you did your best," said Holmes, as we walked into our
-room. "It's very annoying, though, Watson. I was badly in need of
-a case, and this looks, from the man's impatience, as if it were of
-importance. Hullo! That's not your pipe on the table. He must have
-left his behind him. A nice old brier with a good long stem of what the
-tobacconists call amber. I wonder how many real amber mouthpieces there
-are in London? Some people think that a fly in it is a sign. Well, he
-must have been disturbed in his mind to leave a pipe behind him which he
-evidently values highly."
-
-"How do you know that he values it highly?" I asked.
-
-"Well, I should put the original cost of the pipe at seven and sixpence.
-Now it has, you see, been twice mended, once in the wooden stem and once
-in the amber. Each of these mends, done, as you observe, with silver
-bands, must have cost more than the pipe did originally. The man must
-value the pipe highly when he prefers to patch it up rather than buy a
-new one with the same money."
-
-"Anything else?" I asked, for Holmes was turning the pipe about in his
-hand, and staring at it in his peculiar pensive way.
-
-He held it up and tapped on it with his long, thin fore-finger, as a
-professor might who was lecturing on a bone.
-
-"Pipes are occasionally of extraordinary interest," said he. "Nothing
-has more individuality, save perhaps watches and bootlaces. The
-indications here, however, are neither very marked nor very important.
-The owner is obviously a muscular man, left-handed, with an excellent
-set of teeth, careless in his habits, and with no need to practise
-economy."
-
-My friend threw out the information in a very offhand way, but I saw
-that he cocked his eye at me to see if I had followed his reasoning.
-
-"You think a man must be well-to-do if he smokes a seven-shilling pipe,"
-said I.
-
-"This is Grosvenor mixture at eightpence an ounce," Holmes answered,
-knocking a little out on his palm. "As he might get an excellent smoke
-for half the price, he has no need to practise economy."
-
-"And the other points?"
-
-"He has been in the habit of lighting his pipe at lamps and gas-jets.
-You can see that it is quite charred all down one side. Of course a
-match could not have done that. Why should a man hold a match to the
-side of his pipe? But you cannot light it at a lamp without getting the
-bowl charred. And it is all on the right side of the pipe. From that I
-gather that he is a left-handed man. You hold your own pipe to the lamp,
-and see how naturally you, being right-handed, hold the left side to the
-flame. You might do it once the other way, but not as a constancy. This
-has always been held so. Then he has bitten through his amber. It takes
-a muscular, energetic fellow, and one with a good set of teeth, to do
-that. But if I am not mistaken I hear him upon the stair, so we shall
-have something more interesting than his pipe to study."
-
-An instant later our door opened, and a tall young man entered the room.
-He was well but quietly dressed in a dark-gray suit, and carried a brown
-wide-awake in his hand. I should have put him at about thirty, though he
-was really some years older.
-
-"I beg your pardon," said he, with some embarrassment; "I suppose I
-should have knocked. Yes, of course I should have knocked. The fact
-is that I am a little upset, and you must put it all down to that." He
-passed his hand over his forehead like a man who is half dazed, and then
-fell rather than sat down upon a chair.
-
-"I can see that you have not slept for a night or two," said Holmes,
-in his easy, genial way. "That tries a man's nerves more than work, and
-more even than pleasure. May I ask how I can help you?"
-
-"I wanted your advice, sir. I don't know what to do and my whole life
-seems to have gone to pieces."
-
-"You wish to employ me as a consulting detective?"
-
-"Not that only. I want your opinion as a judicious man--as a man of the
-world. I want to know what I ought to do next. I hope to God you'll be
-able to tell me."
-
-He spoke in little, sharp, jerky outbursts, and it seemed to me that to
-speak at all was very painful to him, and that his will all through was
-overriding his inclinations.
-
-"It's a very delicate thing," said he. "One does not like to speak of
-one's domestic affairs to strangers. It seems dreadful to discuss the
-conduct of one's wife with two men whom I have never seen before. It's
-horrible to have to do it. But I've got to the end of my tether, and I
-must have advice."
-
-"My dear Mr. Grant Munro--" began Holmes.
-
-Our visitor sprang from his chair. "What!" he cried, "you know my name?"
-
-"If you wish to preserve your incognito," said Holmes, smiling, "I would
-suggest that you cease to write your name upon the lining of your
-hat, or else that you turn the crown towards the person whom you are
-addressing. I was about to say that my friend and I have listened to a
-good many strange secrets in this room, and that we have had the good
-fortune to bring peace to many troubled souls. I trust that we may do as
-much for you. Might I beg you, as time may prove to be of importance, to
-furnish me with the facts of your case without further delay?"
-
-Our visitor again passed his hand over his forehead, as if he found it
-bitterly hard. From every gesture and expression I could see that he was
-a reserved, self-contained man, with a dash of pride in his nature, more
-likely to hide his wounds than to expose them. Then suddenly, with a
-fierce gesture of his closed hand, like one who throws reserve to the
-winds, he began.
-
-"The facts are these, Mr. Holmes," said he. "I am a married man, and
-have been so for three years. During that time my wife and I have loved
-each other as fondly and lived as happily as any two that ever were
-joined. We have not had a difference, not one, in thought or word or
-deed. And now, since last Monday, there has suddenly sprung up a barrier
-between us, and I find that there is something in her life and in her
-thought of which I know as little as if she were the woman who brushes
-by me in the street. We are estranged, and I want to know why.
-
-"Now there is one thing that I want to impress upon you before I go
-any further, Mr. Holmes. Effie loves me. Don't let there be any mistake
-about that. She loves me with her whole heart and soul, and never more
-than now. I know it. I feel it. I don't want to argue about that. A man
-can tell easily enough when a woman loves him. But there's this secret
-between us, and we can never be the same until it is cleared."
-
-"Kindly let me have the facts, Mr. Munro," said Holmes, with some
-impatience.
-
-"I'll tell you what I know about Effie's history. She was a widow when
-I met her first, though quite young--only twenty-five. Her name then was
-Mrs. Hebron. She went out to America when she was young, and lived in
-the town of Atlanta, where she married this Hebron, who was a lawyer
-with a good practice. They had one child, but the yellow fever broke out
-badly in the place, and both husband and child died of it. I have seen
-his death certificate. This sickened her of America, and she came back
-to live with a maiden aunt at Pinner, in Middlesex. I may mention that
-her husband had left her comfortably off, and that she had a capital of
-about four thousand five hundred pounds, which had been so well invested
-by him that it returned an average of seven per cent. She had only been
-six months at Pinner when I met her; we fell in love with each other,
-and we married a few weeks afterwards.
-
-"I am a hop merchant myself, and as I have an income of seven or
-eight hundred, we found ourselves comfortably off, and took a nice
-eighty-pound-a-year villa at Norbury. Our little place was very
-countrified, considering that it is so close to town. We had an inn and
-two houses a little above us, and a single cottage at the other side of
-the field which faces us, and except those there were no houses until
-you got half way to the station. My business took me into town at
-certain seasons, but in summer I had less to do, and then in our country
-home my wife and I were just as happy as could be wished. I tell you
-that there never was a shadow between us until this accursed affair
-began.
-
-"There's one thing I ought to tell you before I go further. When we
-married, my wife made over all her property to me--rather against my
-will, for I saw how awkward it would be if my business affairs went
-wrong. However, she would have it so, and it was done. Well, about six
-weeks ago she came to me.
-
-"'Jack,' said she, 'when you took my money you said that if ever I
-wanted any I was to ask you for it.'
-
-"'Certainly,' said I. 'It's all your own.'
-
-"'Well,' said she, 'I want a hundred pounds.'
-
-"I was a bit staggered at this, for I had imagined it was simply a new
-dress or something of the kind that she was after.
-
-"'What on earth for?' I asked.
-
-"'Oh,' said she, in her playful way, 'you said that you were only my
-banker, and bankers never ask questions, you know.'
-
-"'If you really mean it, of course you shall have the money,' said I.
-
-"'Oh, yes, I really mean it.'
-
-"'And you won't tell me what you want it for?'
-
-"'Some day, perhaps, but not just at present, Jack.'
-
-"So I had to be content with that, though it was the first time that
-there had ever been any secret between us. I gave her a check, and I
-never thought any more of the matter. It may have nothing to do with
-what came afterwards, but I thought it only right to mention it.
-
-"Well, I told you just now that there is a cottage not far from our
-house. There is just a field between us, but to reach it you have to
-go along the road and then turn down a lane. Just beyond it is a nice
-little grove of Scotch firs, and I used to be very fond of strolling
-down there, for trees are always a neighborly kind of things. The
-cottage had been standing empty this eight months, and it was a pity,
-for it was a pretty two-storied place, with an old-fashioned porch and
-honeysuckle about it. I have stood many a time and thought what a neat
-little homestead it would make.
-
-"Well, last Monday evening I was taking a stroll down that way, when
-I met an empty van coming up the lane, and saw a pile of carpets and
-things lying about on the grass-plot beside the porch. It was clear that
-the cottage had at last been let. I walked past it, and wondered what
-sort of folk they were who had come to live so near us. And as I looked
-I suddenly became aware that a face was watching me out of one of the
-upper windows.
-
-"I don't know what there was about that face, Mr. Holmes, but it seemed
-to send a chill right down my back. I was some little way off, so that
-I could not make out the features, but there was something unnatural and
-inhuman about the face. That was the impression that I had, and I moved
-quickly forwards to get a nearer view of the person who was watching
-me. But as I did so the face suddenly disappeared, so suddenly that it
-seemed to have been plucked away into the darkness of the room. I stood
-for five minutes thinking the business over, and trying to analyze my
-impressions. I could not tell if the face were that of a man or a
-woman. It had been too far from me for that. But its color was what had
-impressed me most. It was of a livid chalky white, and with something
-set and rigid about it which was shockingly unnatural. So disturbed
-was I that I determined to see a little more of the new inmates of
-the cottage. I approached and knocked at the door, which was instantly
-opened by a tall, gaunt woman with a harsh, forbidding face.
-
-"'What may you be wantin'?' she asked, in a Northern accent.
-
-"'I am your neighbor over yonder,' said I, nodding towards my house. 'I
-see that you have only just moved in, so I thought that if I could be of
-any help to you in any--'
-
-"'Ay, we'll just ask ye when we want ye,' said she, and shut the door
-in my face. Annoyed at the churlish rebuff, I turned my back and walked
-home. All evening, though I tried to think of other things, my mind
-would still turn to the apparition at the window and the rudeness of the
-woman. I determined to say nothing about the former to my wife, for
-she is a nervous, highly strung woman, and I had no wish that she would
-share the unpleasant impression which had been produced upon myself. I
-remarked to her, however, before I fell asleep, that the cottage was now
-occupied, to which she returned no reply.
-
-"I am usually an extremely sound sleeper. It has been a standing jest
-in the family that nothing could ever wake me during the night. And yet
-somehow on that particular night, whether it may have been the slight
-excitement produced by my little adventure or not I know not, but
-I slept much more lightly than usual. Half in my dreams I was dimly
-conscious that something was going on in the room, and gradually became
-aware that my wife had dressed herself and was slipping on her mantle
-and her bonnet. My lips were parted to murmur out some sleepy words of
-surprise or remonstrance at this untimely preparation, when suddenly my
-half-opened eyes fell upon her face, illuminated by the candle-light,
-and astonishment held me dumb. She wore an expression such as I had
-never seen before--such as I should have thought her incapable of
-assuming. She was deadly pale and breathing fast, glancing furtively
-towards the bed as she fastened her mantle, to see if she had disturbed
-me. Then, thinking that I was still asleep, she slipped noiselessly from
-the room, and an instant later I heard a sharp creaking which could only
-come from the hinges of the front door. I sat up in bed and rapped my
-knuckles against the rail to make certain that I was truly awake. Then
-I took my watch from under the pillow. It was three in the morning. What
-on this earth could my wife be doing out on the country road at three in
-the morning?
-
-"I had sat for about twenty minutes turning the thing over in my mind
-and trying to find some possible explanation. The more I thought, the
-more extraordinary and inexplicable did it appear. I was still puzzling
-over it when I heard the door gently close again, and her footsteps
-coming up the stairs.
-
-"'Where in the world have you been, Effie?' I asked as she entered.
-
-"She gave a violent start and a kind of gasping cry when I spoke, and
-that cry and start troubled me more than all the rest, for there was
-something indescribably guilty about them. My wife had always been
-a woman of a frank, open nature, and it gave me a chill to see her
-slinking into her own room, and crying out and wincing when her own
-husband spoke to her.
-
-"'You awake, Jack!' she cried, with a nervous laugh. 'Why, I thought
-that nothing could awake you.'
-
-"'Where have you been?' I asked, more sternly.
-
-"'I don't wonder that you are surprised,' said she, and I could see that
-her fingers were trembling as she undid the fastenings of her mantle.
-'Why, I never remember having done such a thing in my life before. The
-fact is that I felt as though I were choking, and had a perfect longing
-for a breath of fresh air. I really think that I should have fainted if
-I had not gone out. I stood at the door for a few minutes, and now I am
-quite myself again.'
-
-"All the time that she was telling me this story she never once looked
-in my direction, and her voice was quite unlike her usual tones. It
-was evident to me that she was saying what was false. I said nothing
-in reply, but turned my face to the wall, sick at heart, with my mind
-filled with a thousand venomous doubts and suspicions. What was it that
-my wife was concealing from me? Where had she been during that strange
-expedition? I felt that I should have no peace until I knew, and yet I
-shrank from asking her again after once she had told me what was false.
-All the rest of the night I tossed and tumbled, framing theory after
-theory, each more unlikely than the last.
-
-"I should have gone to the City that day, but I was too disturbed in my
-mind to be able to pay attention to business matters. My wife seemed
-to be as upset as myself, and I could see from the little questioning
-glances which she kept shooting at me that she understood that I
-disbelieved her statement, and that she was at her wits' end what to do.
-We hardly exchanged a word during breakfast, and immediately afterwards
-I went out for a walk, that I might think the matter out in the fresh
-morning air.
-
-"I went as far as the Crystal Palace, spent an hour in the grounds, and
-was back in Norbury by one o'clock. It happened that my way took me past
-the cottage, and I stopped for an instant to look at the windows, and to
-see if I could catch a glimpse of the strange face which had looked
-out at me on the day before. As I stood there, imagine my surprise, Mr.
-Holmes, when the door suddenly opened and my wife walked out.
-
-"I was struck dumb with astonishment at the sight of her; but my
-emotions were nothing to those which showed themselves upon her face
-when our eyes met. She seemed for an instant to wish to shrink back
-inside the house again; and then, seeing how useless all concealment
-must be, she came forward, with a very white face and frightened eyes
-which belied the smile upon her lips.
-
-"'Ah, Jack,' she said, 'I have just been in to see if I can be of any
-assistance to our new neighbors. Why do you look at me like that, Jack?
-You are not angry with me?'
-
-"'So,' said I, 'this is where you went during the night.'
-
-"'What do you mean?' she cried.
-
-"'You came here. I am sure of it. Who are these people, that you should
-visit them at such an hour?'
-
-"'I have not been here before.'
-
-"'How can you tell me what you know is false?' I cried. 'Your very voice
-changes as you speak. When have I ever had a secret from you? I shall
-enter that cottage, and I shall probe the matter to the bottom.'
-
-"'No, no, Jack, for God's sake!' she gasped, in uncontrollable emotion.
-Then, as I approached the door, she seized my sleeve and pulled me back
-with convulsive strength.
-
-"'I implore you not to do this, Jack,' she cried. 'I swear that I will
-tell you everything some day, but nothing but misery can come of it if
-you enter that cottage.' Then, as I tried to shake her off, she clung to
-me in a frenzy of entreaty.
-
-"'Trust me, Jack!' she cried. 'Trust me only this once. You will never
-have cause to regret it. You know that I would not have a secret from
-you if it were not for your own sake. Our whole lives are at stake in
-this. If you come home with me, all will be well. If you force your way
-into that cottage, all is over between us.'
-
-"There was such earnestness, such despair, in her manner that her words
-arrested me, and I stood irresolute before the door.
-
-"'I will trust you on one condition, and on one condition only,' said I
-at last. 'It is that this mystery comes to an end from now. You are
-at liberty to preserve your secret, but you must promise me that there
-shall be no more nightly visits, no more doings which are kept from my
-knowledge. I am willing to forget those which are passed if you will
-promise that there shall be no more in the future.'
-
-"'I was sure that you would trust me,' she cried, with a great sigh of
-relief. 'It shall be just as you wish. Come away--oh, come away up to
-the house.'
-
-"Still pulling at my sleeve, she led me away from the cottage. As we
-went I glanced back, and there was that yellow livid face watching us
-out of the upper window. What link could there be between that creature
-and my wife? Or how could the coarse, rough woman whom I had seen the
-day before be connected with her? It was a strange puzzle, and yet I
-knew that my mind could never know ease again until I had solved it.
-
-"For two days after this I stayed at home, and my wife appeared to abide
-loyally by our engagement, for, as far as I know, she never stirred out
-of the house. On the third day, however, I had ample evidence that
-her solemn promise was not enough to hold her back from this secret
-influence which drew her away from her husband and her duty.
-
-"I had gone into town on that day, but I returned by the 2.40 instead of
-the 3.36, which is my usual train. As I entered the house the maid ran
-into the hall with a startled face.
-
-"'Where is your mistress?' I asked.
-
-"'I think that she has gone out for a walk,' she answered.
-
-"My mind was instantly filled with suspicion. I rushed upstairs to make
-sure that she was not in the house. As I did so I happened to glance out
-of one of the upper windows, and saw the maid with whom I had just been
-speaking running across the field in the direction of the cottage. Then
-of course I saw exactly what it all meant. My wife had gone over there,
-and had asked the servant to call her if I should return. Tingling with
-anger, I rushed down and hurried across, determined to end the matter
-once and forever. I saw my wife and the maid hurrying back along the
-lane, but I did not stop to speak with them. In the cottage lay the
-secret which was casting a shadow over my life. I vowed that, come what
-might, it should be a secret no longer. I did not even knock when I
-reached it, but turned the handle and rushed into the passage.
-
-"It was all still and quiet upon the ground floor. In the kitchen a
-kettle was singing on the fire, and a large black cat lay coiled up in
-the basket; but there was no sign of the woman whom I had seen before.
-I ran into the other room, but it was equally deserted. Then I rushed up
-the stairs, only to find two other rooms empty and deserted at the top.
-There was no one at all in the whole house. The furniture and pictures
-were of the most common and vulgar description, save in the one chamber
-at the window of which I had seen the strange face. That was comfortable
-and elegant, and all my suspicions rose into a fierce bitter flame when
-I saw that on the mantelpiece stood a copy of a full-length photograph
-of my wife, which had been taken at my request only three months ago.
-
-"I stayed long enough to make certain that the house was absolutely
-empty. Then I left it, feeling a weight at my heart such as I had never
-had before. My wife came out into the hall as I entered my house; but I
-was too hurt and angry to speak with her, and pushing past her, I made
-my way into my study. She followed me, however, before I could close the
-door.
-
-"'I am sorry that I broke my promise, Jack,' said she; 'but if you knew
-all the circumstances I am sure that you would forgive me.'
-
-"'Tell me everything, then,' said I.
-
-"'I cannot, Jack, I cannot,' she cried.
-
-"'Until you tell me who it is that has been living in that cottage, and
-who it is to whom you have given that photograph, there can never be any
-confidence between us,' said I, and breaking away from her, I left the
-house. That was yesterday, Mr. Holmes, and I have not seen her since,
-nor do I know anything more about this strange business. It is the first
-shadow that has come between us, and it has so shaken me that I do not
-know what I should do for the best. Suddenly this morning it occurred to
-me that you were the man to advise me, so I have hurried to you now, and
-I place myself unreservedly in your hands. If there is any point which I
-have not made clear, pray question me about it. But, above all, tell me
-quickly what I am to do, for this misery is more than I can bear."
-
-Holmes and I had listened with the utmost interest to this extraordinary
-statement, which had been delivered in the jerky, broken fashion of a
-man who is under the influence of extreme emotions. My companion sat
-silent for some time, with his chin upon his hand, lost in thought.
-
-"Tell me," said he at last, "could you swear that this was a man's face
-which you saw at the window?"
-
-"Each time that I saw it I was some distance away from it, so that it is
-impossible for me to say."
-
-"You appear, however, to have been disagreeably impressed by it."
-
-"It seemed to be of an unnatural color, and to have a strange rigidity
-about the features. When I approached, it vanished with a jerk."
-
-"How long is it since your wife asked you for a hundred pounds?"
-
-"Nearly two months."
-
-"Have you ever seen a photograph of her first husband?"
-
-"No; there was a great fire at Atlanta very shortly after his death, and
-all her papers were destroyed."
-
-"And yet she had a certificate of death. You say that you saw it."
-
-"Yes; she got a duplicate after the fire."
-
-"Did you ever meet any one who knew her in America?"
-
-"No."
-
-"Did she ever talk of revisiting the place?"
-
-"No."
-
-"Or get letters from it?"
-
-"No."
-
-"Thank you. I should like to think over the matter a little now. If the
-cottage is now permanently deserted we may have some difficulty. If, on
-the other hand, as I fancy is more likely, the inmates were warned of
-your coming, and left before you entered yesterday, then they may be
-back now, and we should clear it all up easily. Let me advise you, then,
-to return to Norbury, and to examine the windows of the cottage again.
-If you have reason to believe that it is inhabited, do not force your
-way in, but send a wire to my friend and me. We shall be with you within
-an hour of receiving it, and we shall then very soon get to the bottom
-of the business."
-
-"And if it is still empty?"
-
-"In that case I shall come out to-morrow and talk it over with you.
-Good-by; and, above all, do not fret until you know that you really have
-a cause for it."
-
-"I am afraid that this is a bad business, Watson," said my companion, as
-he returned after accompanying Mr. Grant Munro to the door. "What do you
-make of it?"
-
-"It had an ugly sound," I answered.
-
-"Yes. There's blackmail in it, or I am much mistaken."
-
-"And who is the blackmailer?"
-
-"Well, it must be the creature who lives in the only comfortable room
-in the place, and has her photograph above his fireplace. Upon my word,
-Watson, there is something very attractive about that livid face at the
-window, and I would not have missed the case for worlds."
-
-"You have a theory?"
-
-"Yes, a provisional one. But I shall be surprised if it does not turn
-out to be correct. This woman's first husband is in that cottage."
-
-"Why do you think so?"
-
-"How else can we explain her frenzied anxiety that her second one should
-not enter it? The facts, as I read them, are something like this:
-This woman was married in America. Her husband developed some hateful
-qualities; or shall we say that he contracted some loathsome disease,
-and became a leper or an imbecile? She flies from him at last, returns
-to England, changes her name, and starts her life, as she thinks,
-afresh. She has been married three years, and believes that her position
-is quite secure, having shown her husband the death certificate of
-some man whose name she has assumed, when suddenly her whereabouts
-is discovered by her first husband; or, we may suppose, by some
-unscrupulous woman who has attached herself to the invalid. They write
-to the wife, and threaten to come and expose her. She asks for a hundred
-pounds, and endeavors to buy them off. They come in spite of it, and
-when the husband mentions casually to the wife that there are new-comers
-in the cottage, she knows in some way that they are her pursuers. She
-waits until her husband is asleep, and then she rushes down to endeavor
-to persuade them to leave her in peace. Having no success, she goes
-again next morning, and her husband meets her, as he has told us, as
-she comes out. She promises him then not to go there again, but two days
-afterwards the hope of getting rid of those dreadful neighbors was too
-strong for her, and she made another attempt, taking down with her the
-photograph which had probably been demanded from her. In the midst of
-this interview the maid rushed in to say that the master had come home,
-on which the wife, knowing that he would come straight down to the
-cottage, hurried the inmates out at the back door, into the grove of
-fir-trees, probably, which was mentioned as standing near. In this way
-he found the place deserted. I shall be very much surprised, however, if
-it is still so when he reconnoitres it this evening. What do you think
-of my theory?"
-
-"It is all surmise."
-
-"But at least it covers all the facts. When new facts come to our
-knowledge which cannot be covered by it, it will be time enough to
-reconsider it. We can do nothing more until we have a message from our
-friend at Norbury."
-
-But we had not a very long time to wait for that. It came just as we had
-finished our tea. "The cottage is still tenanted," it said. "Have seen
-the face again at the window. Will meet the seven o'clock train, and
-will take no steps until you arrive."
-
-
-He was waiting on the platform when we stepped out, and we could see in
-the light of the station lamps that he was very pale, and quivering with
-agitation.
-
-"They are still there, Mr. Holmes," said he, laying his hand hard upon
-my friend's sleeve. "I saw lights in the cottage as I came down. We
-shall settle it now once and for all."
-
-"What is your plan, then?" asked Holmes, as he walked down the dark
-tree-lined road.
-
-"I am going to force my way in and see for myself who is in the house. I
-wish you both to be there as witnesses."
-
-"You are quite determined to do this, in spite of your wife's warning
-that it is better that you should not solve the mystery?"
-
-"Yes, I am determined."
-
-"Well, I think that you are in the right. Any truth is better than
-indefinite doubt. We had better go up at once. Of course, legally, we
-are putting ourselves hopelessly in the wrong; but I think that it is
-worth it."
-
-It was a very dark night, and a thin rain began to fall as we turned
-from the high road into a narrow lane, deeply rutted, with hedges on
-either side. Mr. Grant Munro pushed impatiently forward, however, and we
-stumbled after him as best we could.
-
-"There are the lights of my house," he murmured, pointing to a glimmer
-among the trees. "And here is the cottage which I am going to enter."
-
-We turned a corner in the lane as he spoke, and there was the building
-close beside us. A yellow bar falling across the black foreground showed
-that the door was not quite closed, and one window in the upper story
-was brightly illuminated. As we looked, we saw a dark blur moving across
-the blind.
-
-"There is that creature!" cried Grant Munro. "You can see for yourselves
-that some one is there. Now follow me, and we shall soon know all."
-
-We approached the door; but suddenly a woman appeared out of the shadow
-and stood in the golden track of the lamp-light. I could not see her
-face in the darkness, but her arms were thrown out in an attitude of
-entreaty.
-
-"For God's sake, don't Jack!" she cried. "I had a presentiment that you
-would come this evening. Think better of it, dear! Trust me again, and
-you will never have cause to regret it."
-
-"I have trusted you too long, Effie," he cried, sternly. "Leave go of
-me! I must pass you. My friends and I are going to settle this matter
-once and forever!" He pushed her to one side, and we followed closely
-after him. As he threw the door open an old woman ran out in front of
-him and tried to bar his passage, but he thrust her back, and an instant
-afterwards we were all upon the stairs. Grant Munro rushed into the
-lighted room at the top, and we entered at his heels.
-
-It was a cosey, well-furnished apartment, with two candles burning upon
-the table and two upon the mantelpiece. In the corner, stooping over a
-desk, there sat what appeared to be a little girl. Her face was turned
-away as we entered, but we could see that she was dressed in a red
-frock, and that she had long white gloves on. As she whisked round
-to us, I gave a cry of surprise and horror. The face which she turned
-towards us was of the strangest livid tint, and the features were
-absolutely devoid of any expression. An instant later the mystery was
-explained. Holmes, with a laugh, passed his hand behind the child's
-ear, a mask peeled off from her countenance, and there was a little coal
-black negress, with all her white teeth flashing in amusement at our
-amazed faces. I burst out laughing, out of sympathy with her merriment;
-but Grant Munro stood staring, with his hand clutching his throat.
-
-"My God!" he cried. "What can be the meaning of this?"
-
-"I will tell you the meaning of it," cried the lady, sweeping into
-the room with a proud, set face. "You have forced me, against my own
-judgment, to tell you, and now we must both make the best of it. My
-husband died at Atlanta. My child survived."
-
-"Your child?"
-
-She drew a large silver locket from her bosom. "You have never seen this
-open."
-
-"I understood that it did not open."
-
-She touched a spring, and the front hinged back. There was a portrait
-within of a man strikingly handsome and intelligent-looking, but bearing
-unmistakable signs upon his features of his African descent.
-
-"That is John Hebron, of Atlanta," said the lady, "and a nobler man
-never walked the earth. I cut myself off from my race in order to wed
-him, but never once while he lived did I for an instant regret it. It
-was our misfortune that our only child took after his people rather than
-mine. It is often so in such matches, and little Lucy is darker far than
-ever her father was. But dark or fair, she is my own dear little girlie,
-and her mother's pet." The little creature ran across at the words and
-nestled up against the lady's dress. "When I left her in America," she
-continued, "it was only because her health was weak, and the change
-might have done her harm. She was given to the care of a faithful Scotch
-woman who had once been our servant. Never for an instant did I dream
-of disowning her as my child. But when chance threw you in my way, Jack,
-and I learned to love you, I feared to tell you about my child. God
-forgive me, I feared that I should lose you, and I had not the courage
-to tell you. I had to choose between you, and in my weakness I turned
-away from my own little girl. For three years I have kept her existence
-a secret from you, but I heard from the nurse, and I knew that all was
-well with her. At last, however, there came an overwhelming desire to
-see the child once more. I struggled against it, but in vain. Though I
-knew the danger, I determined to have the child over, if it were but
-for a few weeks. I sent a hundred pounds to the nurse, and I gave her
-instructions about this cottage, so that she might come as a neighbor,
-without my appearing to be in any way connected with her. I pushed my
-precautions so far as to order her to keep the child in the house during
-the daytime, and to cover up her little face and hands so that even
-those who might see her at the window should not gossip about there
-being a black child in the neighborhood. If I had been less cautious
-I might have been more wise, but I was half crazy with fear that you
-should learn the truth.
-
-"It was you who told me first that the cottage was occupied. I should
-have waited for the morning, but I could not sleep for excitement, and
-so at last I slipped out, knowing how difficult it is to awake you. But
-you saw me go, and that was the beginning of my troubles. Next day you
-had my secret at your mercy, but you nobly refrained from pursuing your
-advantage. Three days later, however, the nurse and child only just
-escaped from the back door as you rushed in at the front one. And now
-to-night you at last know all, and I ask you what is to become of us, my
-child and me?" She clasped her hands and waited for an answer.
-
-It was a long ten minutes before Grant Munro broke the silence, and
-when his answer came it was one of which I love to think. He lifted
-the little child, kissed her, and then, still carrying her, he held his
-other hand out to his wife and turned towards the door.
-
-"We can talk it over more comfortably at home," said he. "I am not a
-very good man, Effie, but I think that I am a better one than you have
-given me credit for being."
-
-Holmes and I followed them down the lane, and my friend plucked at my
-sleeve as we came out.
-
-"I think," said he, "that we shall be of more use in London than in
-Norbury."
-
-Not another word did he say of the case until late that night, when he
-was turning away, with his lighted candle, for his bedroom.
-
-"Watson," said he, "if it should ever strike you that I am getting a
-little over-confident in my powers, or giving less pains to a case
-than it deserves, kindly whisper 'Norbury' in my ear, and I shall be
-infinitely obliged to you."
-
-
-
-
-Adventure III. The Stock-Broker's Clerk
-
-
-Shortly after my marriage I had bought a connection in the Paddington
-district. Old Mr. Farquhar, from whom I purchased it, had at one time an
-excellent general practice; but his age, and an affliction of the nature
-of St. Vitus's dance from which he suffered, had very much thinned it.
-The public not unnaturally goes on the principle that he who would heal
-others must himself be whole, and looks askance at the curative powers
-of the man whose own case is beyond the reach of his drugs. Thus as my
-predecessor weakened his practice declined, until when I purchased
-it from him it had sunk from twelve hundred to little more than three
-hundred a year. I had confidence, however, in my own youth and energy,
-and was convinced that in a very few years the concern would be as
-flourishing as ever.
-
-For three months after taking over the practice I was kept very closely
-at work, and saw little of my friend Sherlock Holmes, for I was too busy
-to visit Baker Street, and he seldom went anywhere himself save upon
-professional business. I was surprised, therefore, when, one morning in
-June, as I sat reading the British Medical Journal after breakfast, I
-heard a ring at the bell, followed by the high, somewhat strident tones
-of my old companion's voice.
-
-"Ah, my dear Watson," said he, striding into the room, "I am very
-delighted to see you! I trust that Mrs. Watson has entirely recovered
-from all the little excitements connected with our adventure of the Sign
-of Four."
-
-"Thank you, we are both very well," said I, shaking him warmly by the
-hand.
-
-"And I hope, also," he continued, sitting down in the rocking-chair,
-"that the cares of medical practice have not entirely obliterated the
-interest which you used to take in our little deductive problems."
-
-"On the contrary," I answered, "it was only last night that I was
-looking over my old notes, and classifying some of our past results."
-
-"I trust that you don't consider your collection closed."
-
-"Not at all. I should wish nothing better than to have some more of such
-experiences."
-
-"To-day, for example?"
-
-"Yes, to-day, if you like."
-
-"And as far off as Birmingham?"
-
-"Certainly, if you wish it."
-
-"And the practice?"
-
-"I do my neighbor's when he goes. He is always ready to work off the
-debt."
-
-"Ha! Nothing could be better," said Holmes, leaning back in his chair
-and looking keenly at me from under his half closed lids. "I perceive
-that you have been unwell lately. Summer colds are always a little
-trying."
-
-"I was confined to the house by a severe chill for three days last week.
-I thought, however, that I had cast off every trace of it."
-
-"So you have. You look remarkably robust."
-
-"How, then, did you know of it?"
-
-"My dear fellow, you know my methods."
-
-"You deduced it, then?"
-
-"Certainly."
-
-"And from what?"
-
-"From your slippers."
-
-I glanced down at the new patent leathers which I was wearing. "How on
-earth--" I began, but Holmes answered my question before it was asked.
-
-"Your slippers are new," he said. "You could not have had them more than
-a few weeks. The soles which you are at this moment presenting to me are
-slightly scorched. For a moment I thought they might have got wet and
-been burned in the drying. But near the instep there is a small circular
-wafer of paper with the shopman's hieroglyphics upon it. Damp would of
-course have removed this. You had, then, been sitting with your feet
-outstretched to the fire, which a man would hardly do even in so wet a
-June as this if he were in his full health."
-
-Like all Holmes's reasoning the thing seemed simplicity itself when it
-was once explained. He read the thought upon my features, and his smile
-had a tinge of bitterness.
-
-"I am afraid that I rather give myself away when I explain," said he.
-"Results without causes are much more impressive. You are ready to come
-to Birmingham, then?"
-
-"Certainly. What is the case?"
-
-"You shall hear it all in the train. My client is outside in a
-four-wheeler. Can you come at once?"
-
-"In an instant." I scribbled a note to my neighbor, rushed upstairs to
-explain the matter to my wife, and joined Holmes upon the door-step.
-
-"Your neighbor is a doctor," said he, nodding at the brass plate.
-
-"Yes; he bought a practice as I did."
-
-"An old-established one?"
-
-"Just the same as mine. Both have been ever since the houses were
-built."
-
-"Ah! Then you got hold of the best of the two."
-
-"I think I did. But how do you know?"
-
-"By the steps, my boy. Yours are worn three inches deeper than his. But
-this gentleman in the cab is my client, Mr. Hall Pycroft. Allow me to
-introduce you to him. Whip your horse up, cabby, for we have only just
-time to catch our train."
-
-The man whom I found myself facing was a well built, fresh-complexioned
-young fellow, with a frank, honest face and a slight, crisp, yellow
-mustache. He wore a very shiny top hat and a neat suit of sober black,
-which made him look what he was--a smart young City man, of the class
-who have been labeled cockneys, but who give us our crack volunteer
-regiments, and who turn out more fine athletes and sportsmen than any
-body of men in these islands. His round, ruddy face was naturally full
-of cheeriness, but the corners of his mouth seemed to me to be pulled
-down in a half-comical distress. It was not, however, until we were
-all in a first-class carriage and well started upon our journey to
-Birmingham that I was able to learn what the trouble was which had
-driven him to Sherlock Holmes.
-
-"We have a clear run here of seventy minutes," Holmes remarked. "I
-want you, Mr. Hall Pycroft, to tell my friend your very interesting
-experience exactly as you have told it to me, or with more detail if
-possible. It will be of use to me to hear the succession of events
-again. It is a case, Watson, which may prove to have something in it, or
-may prove to have nothing, but which, at least, presents those unusual
-and outré features which are as dear to you as they are to me. Now, Mr.
-Pycroft, I shall not interrupt you again."
-
-Our young companion looked at me with a twinkle in his eye.
-
-"The worst of the story is," said he, "that I show myself up as such a
-confounded fool. Of course it may work out all right, and I don't see
-that I could have done otherwise; but if I have lost my crib and get
-nothing in exchange I shall feel what a soft Johnnie I have been. I'm
-not very good at telling a story, Dr. Watson, but it is like this with
-me:
-
-"I used to have a billet at Coxon & Woodhouse's, of Draper's Gardens,
-but they were let in early in the spring through the Venezuelan loan,
-as no doubt you remember, and came a nasty cropper. I had been with them
-five years, and old Coxon gave me a ripping good testimonial when
-the smash came, but of course we clerks were all turned adrift, the
-twenty-seven of us. I tried here and tried there, but there were lots of
-other chaps on the same lay as myself, and it was a perfect frost for a
-long time. I had been taking three pounds a week at Coxon's, and I had
-saved about seventy of them, but I soon worked my way through that and
-out at the other end. I was fairly at the end of my tether at last,
-and could hardly find the stamps to answer the advertisements or the
-envelopes to stick them to. I had worn out my boots paddling up office
-stairs, and I seemed just as far from getting a billet as ever.
-
-"At last I saw a vacancy at Mawson & Williams's, the great stock-broking
-firm in Lombard Street. I dare say E. C. Is not much in your line, but
-I can tell you that this is about the richest house in London.
-The advertisement was to be answered by letter only. I sent in my
-testimonial and application, but without the least hope of getting it.
-Back came an answer by return, saying that if I would appear next Monday
-I might take over my new duties at once, provided that my appearance was
-satisfactory. No one knows how these things are worked. Some people say
-that the manager just plunges his hand into the heap and takes the first
-that comes. Anyhow it was my innings that time, and I don't ever wish to
-feel better pleased. The screw was a pound a week rise, and the duties
-just about the same as at Coxon's.
-
-"And now I come to the queer part of the business. I was in diggings out
-Hampstead way, 17 Potter's Terrace. Well, I was sitting doing a smoke
-that very evening after I had been promised the appointment, when up
-came my landlady with a card which had 'Arthur Pinner, Financial Agent,'
-printed upon it. I had never heard the name before and could not imagine
-what he wanted with me; but, of course, I asked her to show him up. In
-he walked, a middle-sized, dark-haired, dark-eyed, black-bearded man,
-with a touch of the Sheeny about his nose. He had a brisk kind of way
-with him and spoke sharply, like a man who knew the value of time."
-
-"'Mr. Hall Pycroft, I believe?'" said he.
-
-"'Yes, sir,' I answered, pushing a chair towards him.
-
-"'Lately engaged at Coxon & Woodhouse's?'
-
-"'Yes, sir.'
-
-"'And now on the staff of Mawson's.'
-
-"'Quite so.'
-
-"'Well,' said he, 'the fact is that I have heard some really
-extraordinary stories about your financial ability. You remember Parker,
-who used to be Coxon's manager? He can never say enough about it.'
-
-"Of course I was pleased to hear this. I had always been pretty sharp in
-the office, but I had never dreamed that I was talked about in the City
-in this fashion.
-
-"'You have a good memory?' said he.
-
-"'Pretty fair,' I answered, modestly.
-
-"'Have you kept in touch with the market while you have been out of
-work?' he asked.
-
-"'Yes. I read the stock exchange list every morning.'
-
-"'Now that shows real application!' he cried. 'That is the way to
-prosper! You won't mind my testing you, will you? Let me see. How are
-Ayrshires?'
-
-"'A hundred and six and a quarter to a hundred and five and
-seven-eighths.'
-
-"'And New Zealand consolidated?'
-
-"'A hundred and four.
-
-"'And British Broken Hills?'
-
-"'Seven to seven-and-six.'
-
-"'Wonderful!' he cried, with his hands up. 'This quite fits in with all
-that I had heard. My boy, my boy, you are very much too good to be a
-clerk at Mawson's!'
-
-"This outburst rather astonished me, as you can think. 'Well,' said I,
-'other people don't think quite so much of me as you seem to do, Mr.
-Pinner. I had a hard enough fight to get this berth, and I am very glad
-to have it.'
-
-"'Pooh, man; you should soar above it. You are not in your true sphere.
-Now, I'll tell you how it stands with me. What I have to offer is little
-enough when measured by your ability, but when compared with Mawson's,
-it's light to dark. Let me see. When do you go to Mawson's?'
-
-"'On Monday.'
-
-"'Ha, ha! I think I would risk a little sporting flutter that you don't
-go there at all.'
-
-"'Not go to Mawson's?'
-
-"'No, sir. By that day you will be the business manager of the
-Franco-Midland Hardware Company, Limited, with a hundred and thirty-four
-branches in the towns and villages of France, not counting one in
-Brussels and one in San Remo.'
-
-"This took my breath away. 'I never heard of it,' said I.
-
-"'Very likely not. It has been kept very quiet, for the capital was all
-privately subscribed, and it's too good a thing to let the public
-into. My brother, Harry Pinner, is promoter, and joins the board after
-allotment as managing director. He knew I was in the swim down here, and
-asked me to pick up a good man cheap. A young, pushing man with plenty
-of snap about him. Parker spoke of you, and that brought me here
-to-night. We can only offer you a beggarly five hundred to start with.'
-
-"'Five hundred a year!' I shouted.
-
-"'Only that at the beginning; but you are to have an overriding
-commission of one per cent on all business done by your agents, and you
-may take my word for it that this will come to more than your salary.'
-
-"'But I know nothing about hardware.'
-
-"'Tut, my boy; you know about figures.'
-
-"My head buzzed, and I could hardly sit still in my chair. But suddenly
-a little chill of doubt came upon me.
-
-"'I must be frank with you,' said I. 'Mawson only gives me two hundred,
-but Mawson is safe. Now, really, I know so little about your company
-that--'
-
-"'Ah, smart, smart!' he cried, in a kind of ecstasy of delight. 'You
-are the very man for us. You are not to be talked over, and quite right,
-too. Now, here's a note for a hundred pounds, and if you think that we
-can do business you may just slip it into your pocket as an advance upon
-your salary.'
-
-"'That is very handsome,' said I. 'When should I take over my new
-duties?'
-
-"'Be in Birmingham to-morrow at one,' said he. 'I have a note in my
-pocket here which you will take to my brother. You will find him at
-126b Corporation Street, where the temporary offices of the company
-are situated. Of course he must confirm your engagement, but between
-ourselves it will be all right.'
-
-"'Really, I hardly know how to express my gratitude, Mr. Pinner,' said
-I.
-
-"'Not at all, my boy. You have only got your deserts. There are one or
-two small things--mere formalities--which I must arrange with you.
-You have a bit of paper beside you there. Kindly write upon it "I am
-perfectly willing to act as business manager to the Franco-Midland
-Hardware Company, Limited, at a minimum salary of L500."'
-
-"I did as he asked, and he put the paper in his pocket.
-
-"'There is one other detail,' said he. 'What do you intend to do about
-Mawson's?'
-
-"I had forgotten all about Mawson's in my joy. 'I'll write and resign,'
-said I.
-
-"'Precisely what I don't want you to do. I had a row over you with
-Mawson's manager. I had gone up to ask him about you, and he was very
-offensive; accused me of coaxing you away from the service of the firm,
-and that sort of thing. At last I fairly lost my temper. "If you want
-good men you should pay them a good price," said I.'
-
-"'He would rather have our small price than your big one,' said he.
-
-"'I'll lay you a fiver,' said I, 'that when he has my offer you'll never
-so much as hear from him again.'
-
-"'Done!' said he. 'We picked him out of the gutter, and he won't leave
-us so easily.' Those were his very words."
-
-"'The impudent scoundrel!' I cried. 'I've never so much as seen him in
-my life. Why should I consider him in any way? I shall certainly not
-write if you would rather I didn't.'
-
-"'Good! That's a promise,' said he, rising from his chair. 'Well, I'm
-delighted to have got so good a man for my brother. Here's your advance
-of a hundred pounds, and here is the letter. Make a note of the address,
-126b Corporation Street, and remember that one o'clock to-morrow is
-your appointment. Good-night; and may you have all the fortune that you
-deserve!'
-
-"That's just about all that passed between us, as near as I can
-remember. You can imagine, Dr. Watson, how pleased I was at such an
-extraordinary bit of good fortune. I sat up half the night hugging
-myself over it, and next day I was off to Birmingham in a train that
-would take me in plenty time for my appointment. I took my things to
-a hotel in New Street, and then I made my way to the address which had
-been given me.
-
-"It was a quarter of an hour before my time, but I thought that would
-make no difference. 126b was a passage between two large shops, which
-led to a winding stone stair, from which there were many flats, let as
-offices to companies or professional men. The names of the occupants
-were painted at the bottom on the wall, but there was no such name as
-the Franco-Midland Hardware Company, Limited. I stood for a few minutes
-with my heart in my boots, wondering whether the whole thing was an
-elaborate hoax or not, when up came a man and addressed me. He was very
-like the chap I had seen the night before, the same figure and voice,
-but he was clean shaven and his hair was lighter.
-
-"'Are you Mr. Hall Pycroft?' he asked.
-
-"'Yes,' said I.
-
-"'Oh! I was expecting you, but you are a trifle before your time. I had
-a note from my brother this morning in which he sang your praises very
-loudly.'
-
-"'I was just looking for the offices when you came.
-
-"'We have not got our name up yet, for we only secured these temporary
-premises last week. Come up with me, and we will talk the matter over.'
-
-"I followed him to the top of a very lofty stair, and there, right under
-the slates, were a couple of empty, dusty little rooms, uncarpeted and
-uncurtained, into which he led me. I had thought of a great office with
-shining tables and rows of clerks, such as I was used to, and I dare say
-I stared rather straight at the two deal chairs and one little table,
-which, with a ledger and a waste paper basket, made up the whole
-furniture.
-
-"'Don't be disheartened, Mr. Pycroft,' said my new acquaintance, seeing
-the length of my face. 'Rome was not built in a day, and we have lots of
-money at our backs, though we don't cut much dash yet in offices. Pray
-sit down, and let me have your letter.'
-
-"I gave it to him, and he read it over very carefully.
-
-"'You seem to have made a vast impression upon my brother Arthur,' said
-he; 'and I know that he is a pretty shrewd judge. He swears by London,
-you know; and I by Birmingham; but this time I shall follow his advice.
-Pray consider yourself definitely engaged."
-
-"'What are my duties?' I asked.
-
-"'You will eventually manage the great depot in Paris, which will pour
-a flood of English crockery into the shops of a hundred and thirty-four
-agents in France. The purchase will be completed in a week, and
-meanwhile you will remain in Birmingham and make yourself useful.'
-
-"'How?'
-
-"For answer, he took a big red book out of a drawer.
-
-"'This is a directory of Paris,' said he, 'with the trades after the
-names of the people. I want you to take it home with you, and to mark
-off all the hardware sellers, with their addresses. It would be of the
-greatest use to me to have them.'
-
-"'Surely there are classified lists?' I suggested.
-
-"'Not reliable ones. Their system is different from ours. Stick at it,
-and let me have the lists by Monday, at twelve. Good-day, Mr. Pycroft.
-If you continue to show zeal and intelligence you will find the company
-a good master.'
-
-"I went back to the hotel with the big book under my arm, and with very
-conflicting feelings in my breast. On the one hand, I was definitely
-engaged and had a hundred pounds in my pocket; on the other, the look
-of the offices, the absence of name on the wall, and other of the points
-which would strike a business man had left a bad impression as to the
-position of my employers. However, come what might, I had my money, so I
-settled down to my task. All Sunday I was kept hard at work, and yet by
-Monday I had only got as far as H. I went round to my employer, found
-him in the same dismantled kind of room, and was told to keep at
-it until Wednesday, and then come again. On Wednesday it was still
-unfinished, so I hammered away until Friday--that is, yesterday. Then I
-brought it round to Mr. Harry Pinner.
-
-"'Thank you very much,' said he; 'I fear that I underrated the
-difficulty of the task. This list will be of very material assistance to
-me.'
-
-"'It took some time,' said I.
-
-"'And now,' said he, 'I want you to make a list of the furniture shops,
-for they all sell crockery.'
-
-"'Very good.'
-
-"'And you can come up to-morrow evening, at seven, and let me know how
-you are getting on. Don't overwork yourself. A couple of hours at Day's
-Music Hall in the evening would do you no harm after your labors.' He
-laughed as he spoke, and I saw with a thrill that his second tooth upon
-the left-hand side had been very badly stuffed with gold."
-
-
-Sherlock Holmes rubbed his hands with delight, and I stared with
-astonishment at our client.
-
-"You may well look surprised, Dr. Watson; but it is this way," said he:
-"When I was speaking to the other chap in London, at the time that he
-laughed at my not going to Mawson's, I happened to notice that his tooth
-was stuffed in this very identical fashion. The glint of the gold in
-each case caught my eye, you see. When I put that with the voice and
-figure being the same, and only those things altered which might be
-changed by a razor or a wig, I could not doubt that it was the same man.
-Of course you expect two brothers to be alike, but not that they should
-have the same tooth stuffed in the same way. He bowed me out, and I
-found myself in the street, hardly knowing whether I was on my head or
-my heels. Back I went to my hotel, put my head in a basin of cold water,
-and tried to think it out. Why had he sent me from London to Birmingham?
-Why had he got there before me? And why had he written a letter from
-himself to himself? It was altogether too much for me, and I could make
-no sense of it. And then suddenly it struck me that what was dark to me
-might be very light to Mr. Sherlock Holmes. I had just time to get up to
-town by the night train to see him this morning, and to bring you both
-back with me to Birmingham."
-
-There was a pause after the stock-broker's clerk had concluded his
-surprising experience. Then Sherlock Holmes cocked his eye at me,
-leaning back on the cushions with a pleased and yet critical face, like
-a connoisseur who has just taken his first sip of a comet vintage.
-
-"Rather fine, Watson, is it not?" said he. "There are points in it which
-please me. I think that you will agree with me that an interview with
-Mr. Arthur Harry Pinner in the temporary offices of the Franco-Midland
-Hardware Company, Limited, would be a rather interesting experience for
-both of us."
-
-"But how can we do it?" I asked.
-
-"Oh, easily enough," said Hall Pycroft, cheerily. "You are two friends
-of mine who are in want of a billet, and what could be more natural than
-that I should bring you both round to the managing director?"
-
-"Quite so, of course," said Holmes. "I should like to have a look at
-the gentleman, and see if I can make anything of his little game.
-What qualities have you, my friend, which would make your services
-so valuable? or is it possible that--" He began biting his nails and
-staring blankly out of the window, and we hardly drew another word from
-him until we were in New Street.
-
-At seven o'clock that evening we were walking, the three of us, down
-Corporation Street to the company's offices.
-
-"It is no use our being at all before our time," said our client. "He
-only comes there to see me, apparently, for the place is deserted up to
-the very hour he names."
-
-"That is suggestive," remarked Holmes.
-
-"By Jove, I told you so!" cried the clerk. "That's he walking ahead of
-us there."
-
-He pointed to a smallish, dark, well-dressed man who was bustling along
-the other side of the road. As we watched him he looked across at a boy
-who was bawling out the latest edition of the evening paper, and running
-over among the cabs and busses, he bought one from him. Then, clutching
-it in his hand, he vanished through a door-way.
-
-"There he goes!" cried Hall Pycroft. "These are the company's offices
-into which he has gone. Come with me, and I'll fix it up as easily as
-possible."
-
-Following his lead, we ascended five stories, until we found ourselves
-outside a half-opened door, at which our client tapped. A voice within
-bade us enter, and we entered a bare, unfurnished room such as Hall
-Pycroft had described. At the single table sat the man whom we had seen
-in the street, with his evening paper spread out in front of him, and as
-he looked up at us it seemed to me that I had never looked upon a face
-which bore such marks of grief, and of something beyond grief--of a
-horror such as comes to few men in a lifetime. His brow glistened with
-perspiration, his cheeks were of the dull, dead white of a fish's belly,
-and his eyes were wild and staring. He looked at his clerk as though he
-failed to recognize him, and I could see by the astonishment depicted
-upon our conductor's face that this was by no means the usual appearance
-of his employer.
-
-"You look ill, Mr. Pinner!" he exclaimed.
-
-"Yes, I am not very well," answered the other, making obvious efforts
-to pull himself together, and licking his dry lips before he spoke. "Who
-are these gentlemen whom you have brought with you?"
-
-"One is Mr. Harris, of Bermondsey, and the other is Mr. Price, of this
-town," said our clerk, glibly. "They are friends of mine and gentlemen
-of experience, but they have been out of a place for some little time,
-and they hoped that perhaps you might find an opening for them in the
-company's employment."
-
-"Very possibly! Very possibly!" cried Mr. Pinner with a ghastly smile.
-"Yes, I have no doubt that we shall be able to do something for you.
-What is your particular line, Mr. Harris?"
-
-"I am an accountant," said Holmes.
-
-"Ah yes, we shall want something of the sort. And you, Mr. Price?"
-
-"A clerk," said I.
-
-"I have every hope that the company may accommodate you. I will let you
-know about it as soon as we come to any conclusion. And now I beg that
-you will go. For God's sake leave me to myself!"
-
-These last words were shot out of him, as though the constraint which
-he was evidently setting upon himself had suddenly and utterly burst
-asunder. Holmes and I glanced at each other, and Hall Pycroft took a
-step towards the table.
-
-"You forget, Mr. Pinner, that I am here by appointment to receive some
-directions from you," said he.
-
-"Certainly, Mr. Pycroft, certainly," the other resumed in a calmer tone.
-"You may wait here a moment; and there is no reason why your friends
-should not wait with you. I will be entirely at your service in three
-minutes, if I might trespass upon your patience so far." He rose with a
-very courteous air, and, bowing to us, he passed out through a door at
-the farther end of the room, which he closed behind him.
-
-"What now?" whispered Holmes. "Is he giving us the slip?"
-
-"Impossible," answered Pycroft.
-
-"Why so?"
-
-"That door leads into an inner room."
-
-"There is no exit?"
-
-"None."
-
-"Is it furnished?"
-
-"It was empty yesterday."
-
-"Then what on earth can he be doing? There is something which I don't
-understand in this manner. If ever a man was three parts mad with
-terror, that man's name is Pinner. What can have put the shivers on
-him?"
-
-"He suspects that we are detectives," I suggested.
-
-"That's it," cried Pycroft.
-
-Holmes shook his head. "He did not turn pale. He was pale when we
-entered the room," said he. "It is just possible that--"
-
-His words were interrupted by a sharp rat-tat from the direction of the
-inner door.
-
-"What the deuce is he knocking at his own door for?" cried the clerk.
-
-Again and much louder came the rat-tat-tat. We all gazed expectantly at
-the closed door. Glancing at Holmes, I saw his face turn rigid, and he
-leaned forward in intense excitement. Then suddenly came a low guggling,
-gargling sound, and a brisk drumming upon woodwork. Holmes sprang
-frantically across the room and pushed at the door. It was fastened on
-the inner side. Following his example, we threw ourselves upon it with
-all our weight. One hinge snapped, then the other, and down came the
-door with a crash. Rushing over it, we found ourselves in the inner
-room. It was empty.
-
-But it was only for a moment that we were at fault. At one corner, the
-corner nearest the room which we had left, there was a second door.
-Holmes sprang to it and pulled it open. A coat and waistcoat were lying
-on the floor, and from a hook behind the door, with his own braces
-round his neck, was hanging the managing director of the Franco-Midland
-Hardware Company. His knees were drawn up, his head hung at a dreadful
-angle to his body, and the clatter of his heels against the door made
-the noise which had broken in upon our conversation. In an instant I
-had caught him round the waist, and held him up while Holmes and Pycroft
-untied the elastic bands which had disappeared between the livid creases
-of skin. Then we carried him into the other room, where he lay with
-a clay-colored face, puffing his purple lips in and out with every
-breath--a dreadful wreck of all that he had been but five minutes
-before.
-
-"What do you think of him, Watson?" asked Holmes.
-
-I stooped over him and examined him. His pulse was feeble and
-intermittent, but his breathing grew longer, and there was a little
-shivering of his eyelids, which showed a thin white slit of ball
-beneath.
-
-"It has been touch and go with him," said I, "but he'll live now. Just
-open that window, and hand me the water carafe." I undid his collar,
-poured the cold water over his face, and raised and sank his arms until
-he drew a long, natural breath. "It's only a question of time now," said
-I, as I turned away from him.
-
-Holmes stood by the table, with his hands deep in his trouser's pockets
-and his chin upon his breast.
-
-"I suppose we ought to call the police in now," said he. "And yet I
-confess that I'd like to give them a complete case when they come."
-
-"It's a blessed mystery to me," cried Pycroft, scratching his head.
-"Whatever they wanted to bring me all the way up here for, and then--"
-
-"Pooh! All that is clear enough," said Holmes impatiently. "It is this
-last sudden move."
-
-"You understand the rest, then?"
-
-"I think that it is fairly obvious. What do you say, Watson?"
-
-I shrugged my shoulders. "I must confess that I am out of my depths,"
-said I.
-
-"Oh surely if you consider the events at first they can only point to
-one conclusion."
-
-"What do you make of them?"
-
-"Well, the whole thing hinges upon two points. The first is the making
-of Pycroft write a declaration by which he entered the service of this
-preposterous company. Do you not see how very suggestive that is?"
-
-"I am afraid I miss the point."
-
-"Well, why did they want him to do it? Not as a business matter, for
-these arrangements are usually verbal, and there was no earthly business
-reason why this should be an exception. Don't you see, my young friend,
-that they were very anxious to obtain a specimen of your handwriting,
-and had no other way of doing it?"
-
-"And why?"
-
-"Quite so. Why? When we answer that we have made some progress with our
-little problem. Why? There can be only one adequate reason. Some one
-wanted to learn to imitate your writing, and had to procure a specimen
-of it first. And now if we pass on to the second point we find that each
-throws light upon the other. That point is the request made by Pinner
-that you should not resign your place, but should leave the manager of
-this important business in the full expectation that a Mr. Hall Pycroft,
-whom he had never seen, was about to enter the office upon the Monday
-morning."
-
-"My God!" cried our client, "what a blind beetle I have been!"
-
-"Now you see the point about the handwriting. Suppose that some one
-turned up in your place who wrote a completely different hand from that
-in which you had applied for the vacancy, of course the game would have
-been up. But in the interval the rogue had learned to imitate you,
-and his position was therefore secure, as I presume that nobody in the
-office had ever set eyes upon you."
-
-"Not a soul," groaned Hall Pycroft.
-
-"Very good. Of course it was of the utmost importance to prevent you
-from thinking better of it, and also to keep you from coming into
-contact with any one who might tell you that your double was at work
-in Mawson's office. Therefore they gave you a handsome advance on your
-salary, and ran you off to the Midlands, where they gave you enough work
-to do to prevent your going to London, where you might have burst their
-little game up. That is all plain enough."
-
-"But why should this man pretend to be his own brother?"
-
-"Well, that is pretty clear also. There are evidently only two of them
-in it. The other is impersonating you at the office. This one acted
-as your engager, and then found that he could not find you an employer
-without admitting a third person into his plot. That he was most
-unwilling to do. He changed his appearance as far as he could, and
-trusted that the likeness, which you could not fail to observe, would be
-put down to a family resemblance. But for the happy chance of the gold
-stuffing, your suspicions would probably never have been aroused."
-
-Hall Pycroft shook his clinched hands in the air. "Good Lord!" he cried,
-"while I have been fooled in this way, what has this other Hall Pycroft
-been doing at Mawson's? What should we do, Mr. Holmes? Tell me what to
-do."
-
-"We must wire to Mawson's."
-
-"They shut at twelve on Saturdays."
-
-"Never mind. There may be some door-keeper or attendant--"
-
-"Ah yes, they keep a permanent guard there on account of the value of
-the securities that they hold. I remember hearing it talked of in the
-City."
-
-"Very good; we shall wire to him, and see if all is well, and if a clerk
-of your name is working there. That is clear enough; but what is not so
-clear is why at sight of us one of the rogues should instantly walk out
-of the room and hang himself."
-
-"The paper!" croaked a voice behind us. The man was sitting up, blanched
-and ghastly, with returning reason in his eyes, and hands which rubbed
-nervously at the broad red band which still encircled his throat.
-
-"The paper! Of course!" yelled Holmes, in a paroxysm of excitement.
-"Idiot that I was! I thought so much of our visit that the paper never
-entered my head for an instant. To be sure, the secret must be there."
-He flattened it out upon the table, and a cry of triumph burst from his
-lips. "Look at this, Watson," he cried. "It is a London paper, an early
-edition of the Evening Standard. Here is what we want. Look at the
-headlines: 'Crime in the City. Murder at Mawson & Williams's. Gigantic
-attempted Robbery. Capture of the Criminal.' Here, Watson, we are all
-equally anxious to hear it, so kindly read it aloud to us."
-
-It appeared from its position in the paper to have been the one event of
-importance in town, and the account of it ran in this way:
-
-"A desperate attempt at robbery, culminating in the death of one man and
-the capture of the criminal, occurred this afternoon in the City. For
-some time back Mawson & Williams, the famous financial house, have been
-the guardians of securities which amount in the aggregate to a sum of
-considerably over a million sterling. So conscious was the manager of
-the responsibility which devolved upon him in consequence of the great
-interests at stake that safes of the very latest construction have
-been employed, and an armed watchman has been left day and night in the
-building. It appears that last week a new clerk named Hall Pycroft was
-engaged by the firm. This person appears to have been none other that
-Beddington, the famous forger and cracksman, who, with his brother, had
-only recently emerged from a five years' spell of penal servitude. By
-some means, which are not yet clear, he succeeded in winning, under a
-false name, this official position in the office, which he utilized in
-order to obtain moulding of various locks, and a thorough knowledge of
-the position of the strong room and the safes.
-
-"It is customary at Mawson's for the clerks to leave at midday on
-Saturday. Sergeant Tuson, of the City Police, was somewhat surprised,
-therefore to see a gentleman with a carpet bag come down the steps at
-twenty minutes past one. His suspicions being aroused, the sergeant
-followed the man, and with the aid of Constable Pollock succeeded, after
-a most desperate resistance, in arresting him. It was at once clear
-that a daring and gigantic robbery had been committed. Nearly a hundred
-thousand pounds' worth of American railway bonds, with a large amount
-of scrip in mines and other companies, was discovered in the bag. On
-examining the premises the body of the unfortunate watchman was found
-doubled up and thrust into the largest of the safes, where it would not
-have been discovered until Monday morning had it not been for the prompt
-action of Sergeant Tuson. The man's skull had been shattered by a
-blow from a poker delivered from behind. There could be no doubt
-that Beddington had obtained entrance by pretending that he had left
-something behind him, and having murdered the watchman, rapidly rifled
-the large safe, and then made off with his booty. His brother, who
-usually works with him, has not appeared in this job as far as can
-at present be ascertained, although the police are making energetic
-inquiries as to his whereabouts."
-
-"Well, we may save the police some little trouble in that direction,"
-said Holmes, glancing at the haggard figure huddled up by the window.
-"Human nature is a strange mixture, Watson. You see that even a villain
-and murderer can inspire such affection that his brother turns to
-suicide when he learns that his neck is forfeited. However, we have
-no choice as to our action. The doctor and I will remain on guard, Mr.
-Pycroft, if you will have the kindness to step out for the police."
-
-
-
-
-Adventure IV. The "_Gloria Scott_"
-
-
-"I have some papers here," said my friend Sherlock Holmes, as we sat
-one winter's night on either side of the fire, "which I really think,
-Watson, that it would be worth your while to glance over. These are the
-documents in the extraordinary case of the Gloria Scott, and this is the
-message which struck Justice of the Peace Trevor dead with horror when
-he read it."
-
-He had picked from a drawer a little tarnished cylinder, and, undoing
-the tape, he handed me a short note scrawled upon a half-sheet of
-slate-gray paper.
-
-"The supply of game for London is going steadily up," it ran.
-"Head-keeper Hudson, we believe, has been now told to receive all orders
-for fly-paper and for preservation of your hen-pheasant's life."
-
-As I glanced up from reading this enigmatical message, I saw Holmes
-chuckling at the expression upon my face.
-
-"You look a little bewildered," said he.
-
-"I cannot see how such a message as this could inspire horror. It seems
-to me to be rather grotesque than otherwise."
-
-"Very likely. Yet the fact remains that the reader, who was a fine,
-robust old man, was knocked clean down by it as if it had been the butt
-end of a pistol."
-
-"You arouse my curiosity," said I. "But why did you say just now that
-there were very particular reasons why I should study this case?"
-
-"Because it was the first in which I was ever engaged."
-
-I had often endeavored to elicit from my companion what had first turned
-his mind in the direction of criminal research, but had never caught him
-before in a communicative humor. Now he sat forward in this arm-chair
-and spread out the documents upon his knees. Then he lit his pipe and
-sat for some time smoking and turning them over.
-
-"You never heard me talk of Victor Trevor?" he asked. "He was the only
-friend I made during the two years I was at college. I was never a very
-sociable fellow, Watson, always rather fond of moping in my rooms and
-working out my own little methods of thought, so that I never mixed
-much with the men of my year. Bar fencing and boxing I had few athletic
-tastes, and then my line of study was quite distinct from that of the
-other fellows, so that we had no points of contact at all. Trevor was
-the only man I knew, and that only through the accident of his bull
-terrier freezing on to my ankle one morning as I went down to chapel.
-
-"It was a prosaic way of forming a friendship, but it was effective.
-I was laid by the heels for ten days, but Trevor used to come in to
-inquire after me. At first it was only a minute's chat, but soon his
-visits lengthened, and before the end of the term we were close friends.
-He was a hearty, full-blooded fellow, full of spirits and energy,
-the very opposite to me in most respects, but we had some subjects
-in common, and it was a bond of union when I found that he was as
-friendless as I. Finally, he invited me down to his father's place at
-Donnithorpe, in Norfolk, and I accepted his hospitality for a month of
-the long vacation.
-
-"Old Trevor was evidently a man of some wealth and consideration, a
-J.P., and a landed proprietor. Donnithorpe is a little hamlet just to
-the north of Langmere, in the country of the Broads. The house was
-an old-fashioned, wide-spread, oak-beamed brick building, with a fine
-lime-lined avenue leading up to it. There was excellent wild-duck
-shooting in the fens, remarkably good fishing, a small but select
-library, taken over, as I understood, from a former occupant, and a
-tolerable cook, so that he would be a fastidious man who could not put
-in a pleasant month there.
-
-"Trevor senior was a widower, and my friend his only son.
-
-"There had been a daughter, I heard, but she had died of diphtheria
-while on a visit to Birmingham. The father interested me extremely.
-He was a man of little culture, but with a considerable amount of rude
-strength, both physically and mentally. He knew hardly any books, but
-he had traveled far, had seen much of the world. And had remembered
-all that he had learned. In person he was a thick-set, burly man with
-a shock of grizzled hair, a brown, weather-beaten face, and blue eyes
-which were keen to the verge of fierceness. Yet he had a reputation for
-kindness and charity on the country-side, and was noted for the leniency
-of his sentences from the bench.
-
-"One evening, shortly after my arrival, we were sitting over a glass of
-port after dinner, when young Trevor began to talk about those habits
-of observation and inference which I had already formed into a system,
-although I had not yet appreciated the part which they were to play in
-my life. The old man evidently thought that his son was exaggerating in
-his description of one or two trivial feats which I had performed.
-
-"'Come, now, Mr. Holmes,' said he, laughing good-humoredly. 'I'm an
-excellent subject, if you can deduce anything from me.'
-
-"'I fear there is not very much,' I answered; 'I might suggest that
-you have gone about in fear of some personal attack within the last
-twelvemonth.'
-
-"The laugh faded from his lips, and he stared at me in great surprise.
-
-"'Well, that's true enough,' said he. 'You know, Victor,' turning to his
-son, 'when we broke up that poaching gang they swore to knife us, and
-Sir Edward Holly has actually been attacked. I've always been on my
-guard since then, though I have no idea how you know it.'
-
-"'You have a very handsome stick,' I answered. 'By the inscription I
-observed that you had not had it more than a year. But you have taken
-some pains to bore the head of it and pour melted lead into the hole so
-as to make it a formidable weapon. I argued that you would not take such
-precautions unless you had some danger to fear.'
-
-"'Anything else?' he asked, smiling.
-
-"'You have boxed a good deal in your youth.'
-
-"'Right again. How did you know it? Is my nose knocked a little out of
-the straight?'
-
-"'No,' said I. 'It is your ears. They have the peculiar flattening and
-thickening which marks the boxing man.'
-
-"'Anything else?'
-
-"'You have done a good deal of digging by your callosities.'
-
-"'Made all my money at the gold fields.'
-
-"'You have been in New Zealand.'
-
-"'Right again.'
-
-"'You have visited Japan.'
-
-"'Quite true.'
-
-"'And you have been most intimately associated with some one whose
-initials were J. A., and whom you afterwards were eager to entirely
-forget.'
-
-"Mr. Trevor stood slowly up, fixed his large blue eyes upon me with a
-strange wild stare, and then pitched forward, with his face among the
-nutshells which strewed the cloth, in a dead faint.
-
-"You can imagine, Watson, how shocked both his son and I were. His
-attack did not last long, however, for when we undid his collar, and
-sprinkled the water from one of the finger-glasses over his face, he
-gave a gasp or two and sat up.
-
-"'Ah, boys,' said he, forcing a smile, 'I hope I haven't frightened you.
-Strong as I look, there is a weak place in my heart, and it does not
-take much to knock me over. I don't know how you manage this, Mr.
-Holmes, but it seems to me that all the detectives of fact and of fancy
-would be children in your hands. That's your line of life, sir, and you
-may take the word of a man who has seen something of the world.'
-
-"And that recommendation, with the exaggerated estimate of my ability
-with which he prefaced it, was, if you will believe me, Watson, the very
-first thing which ever made me feel that a profession might be made
-out of what had up to that time been the merest hobby. At the moment,
-however, I was too much concerned at the sudden illness of my host to
-think of anything else.
-
-"'I hope that I have said nothing to pain you?' said I.
-
-"'Well, you certainly touched upon rather a tender point. Might I ask
-how you know, and how much you know?' He spoke now in a half-jesting
-fashion, but a look of terror still lurked at the back of his eyes.
-
-"'It is simplicity itself,' said I. 'When you bared your arm to draw
-that fish into the boat I saw that J. A. Had been tattooed in the bend
-of the elbow. The letters were still legible, but it was perfectly clear
-from their blurred appearance, and from the staining of the skin round
-them, that efforts had been made to obliterate them. It was obvious,
-then, that those initials had once been very familiar to you, and that
-you had afterwards wished to forget them.'
-
-"What an eye you have!" he cried, with a sigh of relief. 'It is just as
-you say. But we won't talk of it. Of all ghosts the ghosts of our old
-lovers are the worst. Come into the billiard-room and have a quiet
-cigar.'
-
-
-"From that day, amid all his cordiality, there was always a touch of
-suspicion in Mr. Trevor's manner towards me. Even his son remarked it.
-'You've given the governor such a turn,' said he, 'that he'll never be
-sure again of what you know and what you don't know.' He did not mean
-to show it, I am sure, but it was so strongly in his mind that it peeped
-out at every action. At last I became so convinced that I was causing
-him uneasiness that I drew my visit to a close. On the very day,
-however, before I left, and incident occurred which proved in the sequel
-to be of importance.
-
-"We were sitting out upon the lawn on garden chairs, the three of us,
-basking in the sun and admiring the view across the Broads, when a maid
-came out to say that there was a man at the door who wanted to see Mr.
-Trevor.
-
-"'What is his name?' asked my host.
-
-"'He would not give any.'
-
-"'What does he want, then?'
-
-"'He says that you know him, and that he only wants a moment's
-conversation.'
-
-"'Show him round here.' An instant afterwards there appeared a little
-wizened fellow with a cringing manner and a shambling style of
-walking. He wore an open jacket, with a splotch of tar on the sleeve,
-a red-and-black check shirt, dungaree trousers, and heavy boots badly
-worn. His face was thin and brown and crafty, with a perpetual smile
-upon it, which showed an irregular line of yellow teeth, and his
-crinkled hands were half closed in a way that is distinctive of sailors.
-As he came slouching across the lawn I heard Mr. Trevor make a sort of
-hiccoughing noise in his throat, and jumping out of his chair, he ran
-into the house. He was back in a moment, and I smelt a strong reek of
-brandy as he passed me.
-
-"'Well, my man,' said he. 'What can I do for you?'
-
-"The sailor stood looking at him with puckered eyes, and with the same
-loose-lipped smile upon his face.
-
-"'You don't know me?' he asked.
-
-"'Why, dear me, it is surely Hudson,' said Mr. Trevor in a tone of
-surprise.
-
-"'Hudson it is, sir,' said the seaman. 'Why, it's thirty year and more
-since I saw you last. Here you are in your house, and me still picking
-my salt meat out of the harness cask.'
-
-"'Tut, you will find that I have not forgotten old times,' cried Mr.
-Trevor, and, walking towards the sailor, he said something in a low
-voice. 'Go into the kitchen,' he continued out loud, 'and you will get
-food and drink. I have no doubt that I shall find you a situation.'
-
-"'Thank you, sir,' said the seaman, touching his fore-lock. 'I'm just
-off a two-yearer in an eight-knot tramp, short-handed at that, and I
-wants a rest. I thought I'd get it either with Mr. Beddoes or with you.'
-
-"'Ah!' cried Trevor. 'You know where Mr. Beddoes is?'
-
-"'Bless you, sir, I know where all my old friends are,' said the
-fellow with a sinister smile, and he slouched off after the maid to the
-kitchen. Mr. Trevor mumbled something to us about having been shipmate
-with the man when he was going back to the diggings, and then, leaving
-us on the lawn, he went indoors. An hour later, when we entered the
-house, we found him stretched dead drunk upon the dining-room sofa. The
-whole incident left a most ugly impression upon my mind, and I was
-not sorry next day to leave Donnithorpe behind me, for I felt that my
-presence must be a source of embarrassment to my friend.
-
-"All this occurred during the first month of the long vacation. I went
-up to my London rooms, where I spent seven weeks working out a few
-experiments in organic chemistry. One day, however, when the autumn was
-far advanced and the vacation drawing to a close, I received a telegram
-from my friend imploring me to return to Donnithorpe, and saying that
-he was in great need of my advice and assistance. Of course I dropped
-everything and set out for the North once more.
-
-"He met me with the dog-cart at the station, and I saw at a glance that
-the last two months had been very trying ones for him. He had grown thin
-and careworn, and had lost the loud, cheery manner for which he had been
-remarkable.
-
-"'The governor is dying,' were the first words he said.
-
-"'Impossible!' I cried. 'What is the matter?'
-
-"'Apoplexy. Nervous shock, He's been on the verge all day. I doubt if we
-shall find him alive.'
-
-"I was, as you may think, Watson, horrified at this unexpected news.
-
-"'What has caused it?' I asked.
-
-"'Ah, that is the point. Jump in and we can talk it over while we drive.
-You remember that fellow who came upon the evening before you left us?'
-
-"'Perfectly.'
-
-"'Do you know who it was that we let into the house that day?'
-
-"'I have no idea.'
-
-"'It was the devil, Holmes,' he cried.
-
-"I stared at him in astonishment.
-
-"'Yes, it was the devil himself. We have not had a peaceful hour
-since--not one. The governor has never held up his head from that
-evening, and now the life has been crushed out of him and his heart
-broken, all through this accursed Hudson.'
-
-"'What power had he, then?'
-
-"'Ah, that is what I would give so much to know. The kindly, charitable,
-good old governor--how could he have fallen into the clutches of such a
-ruffian! But I am so glad that you have come, Holmes. I trust very much
-to your judgment and discretion, and I know that you will advise me for
-the best.'
-
-"We were dashing along the smooth white country road, with the long
-stretch of the Broads in front of us glimmering in the red light of the
-setting sun. From a grove upon our left I could already see the high
-chimneys and the flag-staff which marked the squire's dwelling.
-
-"'My father made the fellow gardener,' said my companion, 'and then, as
-that did not satisfy him, he was promoted to be butler. The house seemed
-to be at his mercy, and he wandered about and did what he chose in it.
-The maids complained of his drunken habits and his vile language. The
-dad raised their wages all round to recompense them for the annoyance.
-The fellow would take the boat and my father's best gun and treat
-himself to little shooting trips. And all this with such a sneering,
-leering, insolent face that I would have knocked him down twenty times
-over if he had been a man of my own age. I tell you, Holmes, I have
-had to keep a tight hold upon myself all this time; and now I am asking
-myself whether, if I had let myself go a little more, I might not have
-been a wiser man.
-
-"'Well, matters went from bad to worse with us, and this animal Hudson
-became more and more intrusive, until at last, on making some insolent
-reply to my father in my presence one day, I took him by the shoulders
-and turned him out of the room. He slunk away with a livid face and two
-venomous eyes which uttered more threats than his tongue could do. I
-don't know what passed between the poor dad and him after that, but the
-dad came to me next day and asked me whether I would mind apologizing to
-Hudson. I refused, as you can imagine, and asked my father how he
-could allow such a wretch to take such liberties with himself and his
-household.
-
-"'"Ah, my boy," said he, "it is all very well to talk, but you don't
-know how I am placed. But you shall know, Victor. I'll see that you
-shall know, come what may. You wouldn't believe harm of your poor old
-father, would you, lad?" He was very much moved, and shut himself up
-in the study all day, where I could see through the window that he was
-writing busily.
-
-"'That evening there came what seemed to me to be a grand release,
-for Hudson told us that he was going to leave us. He walked into the
-dining-room as we sat after dinner, and announced his intention in the
-thick voice of a half-drunken man.
-
-"'"I've had enough of Norfolk," said he. "I'll run down to Mr. Beddoes
-in Hampshire. He'll be as glad to see me as you were, I dare say."
-
-"'"You're not going away in an unkind spirit, Hudson, I hope," said my
-father, with a tameness which made my blood boil.
-
-"'"I've not had my 'pology," said he sulkily, glancing in my direction.
-
-"'"Victor, you will acknowledge that you have used this worthy fellow
-rather roughly," said the dad, turning to me.
-
-"'"On the contrary, I think that we have both shown extraordinary
-patience towards him," I answered.
-
-"'"Oh, you do, do you?" he snarls. "Very good, mate. We'll see about
-that!"
-
-"'He slouched out of the room, and half an hour afterwards left the
-house, leaving my father in a state of pitiable nervousness. Night after
-night I heard him pacing his room, and it was just as he was recovering
-his confidence that the blow did at last fall.'
-
-"'And how?' I asked eagerly.
-
-"'In a most extraordinary fashion. A letter arrived for my father
-yesterday evening, bearing the Fordingbridge post-mark. My father read
-it, clapped both his hands to his head, and began running round the room
-in little circles like a man who has been driven out of his senses. When
-I at last drew him down on to the sofa, his mouth and eyelids were all
-puckered on one side, and I saw that he had a stroke. Dr. Fordham came
-over at once. We put him to bed; but the paralysis has spread, he has
-shown no sign of returning consciousness, and I think that we shall
-hardly find him alive.'
-
-"'You horrify me, Trevor!' I cried. 'What then could have been in this
-letter to cause so dreadful a result?'
-
-"'Nothing. There lies the inexplicable part of it. The message was
-absurd and trivial. Ah, my God, it is as I feared!'
-
-"As he spoke we came round the curve of the avenue, and saw in the
-fading light that every blind in the house had been drawn down. As
-we dashed up to the door, my friend's face convulsed with grief, a
-gentleman in black emerged from it.
-
-"'When did it happen, doctor?' asked Trevor.
-
-"'Almost immediately after you left.'
-
-"'Did he recover consciousness?'
-
-"'For an instant before the end.'
-
-"'Any message for me.'
-
-"'Only that the papers were in the back drawer of the Japanese cabinet.'
-
-"My friend ascended with the doctor to the chamber of death, while I
-remained in the study, turning the whole matter over and over in my
-head, and feeling as sombre as ever I had done in my life. What was the
-past of this Trevor, pugilist, traveler, and gold-digger, and how had he
-placed himself in the power of this acid-faced seaman? Why, too, should
-he faint at an allusion to the half-effaced initials upon his arm, and
-die of fright when he had a letter from Fordingham? Then I remembered
-that Fordingham was in Hampshire, and that this Mr. Beddoes, whom the
-seaman had gone to visit and presumably to blackmail, had also been
-mentioned as living in Hampshire. The letter, then, might either come
-from Hudson, the seaman, saying that he had betrayed the guilty secret
-which appeared to exist, or it might come from Beddoes, warning an old
-confederate that such a betrayal was imminent. So far it seemed clear
-enough. But then how could this letter be trivial and grotesque, as
-describe by the son? He must have misread it. If so, it must have been
-one of those ingenious secret codes which mean one thing while they seem
-to mean another. I must see this letter. If there were a hidden meaning
-in it, I was confident that I could pluck it forth. For an hour I sat
-pondering over it in the gloom, until at last a weeping maid brought in
-a lamp, and close at her heels came my friend Trevor, pale but composed,
-with these very papers which lie upon my knee held in his grasp. He sat
-down opposite to me, drew the lamp to the edge of the table, and handed
-me a short note scribbled, as you see, upon a single sheet of gray
-paper. 'The supply of game for London is going steadily up,' it ran.
-'Head-keeper Hudson, we believe, has been now told to receive all orders
-for fly-paper and for preservation of your hen-pheasant's life.'
-
-"I dare say my face looked as bewildered as yours did just now when
-first I read this message. Then I reread it very carefully. It was
-evidently as I had thought, and some secret meaning must lie buried
-in this strange combination of words. Or could it be that there was
-a prearranged significance to such phrases as 'fly-paper' and
-'hen-pheasant'? Such a meaning would be arbitrary and could not be
-deduced in any way. And yet I was loath to believe that this was the
-case, and the presence of the word Hudson seemed to show that the
-subject of the message was as I had guessed, and that it was from
-Beddoes rather than the sailor. I tried it backwards, but the
-combination 'life pheasant's hen' was not encouraging. Then I tried
-alternate words, but neither 'the of for' nor 'supply game London'
-promised to throw any light upon it.
-
-"And then in an instant the key of the riddle was in my hands, and I saw
-that every third word, beginning with the first, would give a message
-which might well drive old Trevor to despair.
-
-"It was short and terse, the warning, as I now read it to my companion:
-
-"'The game is up. Hudson has told all. Fly for your life.'
-
-"Victor Trevor sank his face into his shaking hands. 'It must be that,
-I suppose,' said he. "This is worse than death, for it means disgrace
-as well. But what is the meaning of these "head-keepers" and
-"hen-pheasants"?'
-
-"'It means nothing to the message, but it might mean a good deal to us
-if we had no other means of discovering the sender. You see that he has
-begun by writing "The...game...is," and so on. Afterwards he had, to
-fulfill the prearranged cipher, to fill in any two words in each space.
-He would naturally use the first words which came to his mind, and
-if there were so many which referred to sport among them, you may
-be tolerably sure that he is either an ardent shot or interested in
-breeding. Do you know anything of this Beddoes?'
-
-"'Why, now that you mention it,' said he, 'I remember that my poor
-father used to have an invitation from him to shoot over his preserves
-every autumn.'
-
-"'Then it is undoubtedly from him that the note comes,' said I. 'It only
-remains for us to find out what this secret was which the sailor Hudson
-seems to have held over the heads of these two wealthy and respected
-men.'
-
-"'Alas, Holmes, I fear that it is one of sin and shame!' cried my
-friend. 'But from you I shall have no secrets. Here is the statement
-which was drawn up by my father when he knew that the danger from Hudson
-had become imminent. I found it in the Japanese cabinet, as he told the
-doctor. Take it and read it to me, for I have neither the strength nor
-the courage to do it myself.'
-
-"These are the very papers, Watson, which he handed to me, and I will
-read them to you, as I read them in the old study that night to him.
-They are endorsed outside, as you see, 'Some particulars of the voyage
-of the bark _Gloria Scott_, from her leaving Falmouth on the 8th
-October, 1855, to her destruction in N. Lat. 15 degrees 20', W. Long.
-25 degrees 14' on Nov. 6th.' It is in the form of a letter, and runs in
-this way:
-
-"'My dear, dear son, now that approaching disgrace begins to darken the
-closing years of my life, I can write with all truth and honesty that it
-is not the terror of the law, it is not the loss of my position in the
-county, nor is it my fall in the eyes of all who have known me, which
-cuts me to the heart; but it is the thought that you should come to
-blush for me--you who love me and who have seldom, I hope, had reason to
-do other than respect me. But if the blow falls which is forever hanging
-over me, then I should wish you to read this, that you may know straight
-from me how far I have been to blame. On the other hand, if all should
-go well (which may kind God Almighty grant!), then if by any chance this
-paper should be still undestroyed and should fall into your hands, I
-conjure you, by all you hold sacred, by the memory of your dear mother,
-and by the love which had been between us, to hurl it into the fire and
-to never give one thought to it again.
-
-"'If then your eye goes on to read this line, I know that I shall
-already have been exposed and dragged from my home, or as is more
-likely, for you know that my heart is weak, by lying with my tongue
-sealed forever in death. In either case the time for suppression is
-past, and every word which I tell you is the naked truth, and this I
-swear as I hope for mercy.
-
-"'My name, dear lad, is not Trevor. I was James Armitage in my younger
-days, and you can understand now the shock that it was to me a few weeks
-ago when your college friend addressed me in words which seemed to imply
-that he had surprised my secret. As Armitage it was that I entered a
-London banking-house, and as Armitage I was convicted of breaking my
-country's laws, and was sentenced to transportation. Do not think very
-harshly of me, laddie. It was a debt of honor, so called, which I had
-to pay, and I used money which was not my own to do it, in the certainty
-that I could replace it before there could be any possibility of its
-being missed. But the most dreadful ill-luck pursued me. The money which
-I had reckoned upon never came to hand, and a premature examination of
-accounts exposed my deficit. The case might have been dealt leniently
-with, but the laws were more harshly administered thirty years ago than
-now, and on my twenty-third birthday I found myself chained as a felon
-with thirty-seven other convicts in 'tween-decks of the bark _Gloria
-Scott_, bound for Australia.
-
-"'It was the year '55 when the Crimean war was at its height, and the
-old convict ships had been largely used as transports in the Black
-Sea. The government was compelled, therefore, to use smaller and less
-suitable vessels for sending out their prisoners. The Gloria Scott
-had been in the Chinese tea-trade, but she was an old-fashioned,
-heavy-bowed, broad-beamed craft, and the new clippers had cut her
-out. She was a five-hundred-ton boat; and besides her thirty-eight
-jail-birds, she carried twenty-six of a crew, eighteen soldiers, a
-captain, three mates, a doctor, a chaplain, and four warders. Nearly a
-hundred souls were in her, all told, when we set sail from Falmouth.
-
-"'The partitions between the cells of the convicts, instead of being of
-thick oak, as is usual in convict-ships, were quite thin and frail.
-The man next to me, upon the aft side, was one whom I had particularly
-noticed when we were led down the quay. He was a young man with a
-clear, hairless face, a long, thin nose, and rather nut-cracker jaws.
-He carried his head very jauntily in the air, had a swaggering style
-of walking, and was, above all else, remarkable for his extraordinary
-height. I don't think any of our heads would have come up to his
-shoulder, and I am sure that he could not have measured less than six
-and a half feet. It was strange among so many sad and weary faces to see
-one which was full of energy and resolution. The sight of it was to me
-like a fire in a snow-storm. I was glad, then, to find that he was my
-neighbor, and gladder still when, in the dead of the night, I heard a
-whisper close to my ear, and found that he had managed to cut an opening
-in the board which separated us.
-
-"'"Hullo, chummy!" said he, "what's your name, and what are you here
-for?"
-
-"'I answered him, and asked in turn who I was talking with.
-
-"'"I'm Jack Prendergast," said he, "and by God! You'll learn to bless my
-name before you've done with me."
-
-"'I remembered hearing of his case, for it was one which had made an
-immense sensation throughout the country some time before my own arrest.
-He was a man of good family and of great ability, but of incurably
-vicious habits, who had by an ingenious system of fraud obtained huge
-sums of money from the leading London merchants.
-
-"'"Ha, ha! You remember my case!" said he proudly.
-
-"'"Very well, indeed."
-
-"'"Then maybe you remember something queer about it?"
-
-"'"What was that, then?"
-
-"'"I'd had nearly a quarter of a million, hadn't I?"
-
-"'"So it was said."
-
-"'"But none was recovered, eh?"
-
-"'"No."
-
-"'"Well, where d'ye suppose the balance is?" he asked.
-
-"'"I have no idea," said I.
-
-"'"Right between my finger and thumb," he cried. "By God! I've got more
-pounds to my name than you've hairs on your head. And if you've money,
-my son, and know how to handle it and spread it, you can do anything.
-Now, you don't think it likely that a man who could do anything is going
-to wear his breeches out sitting in the stinking hold of a rat-gutted,
-beetle-ridden, mouldy old coffin of a Chin China coaster. No, sir, such
-a man will look after himself and will look after his chums. You may lay
-to that! You hold on to him, and you may kiss the book that he'll haul
-you through."
-
-"'That was his style of talk, and at first I thought it meant nothing;
-but after a while, when he had tested me and sworn me in with all
-possible solemnity, he let me understand that there really was a plot
-to gain command of the vessel. A dozen of the prisoners had hatched it
-before they came aboard, Prendergast was the leader, and his money was
-the motive power.
-
-"'"I'd a partner," said he, "a rare good man, as true as a stock to a
-barrel. He's got the dibbs, he has, and where do you think he is at this
-moment? Why, he's the chaplain of this ship--the chaplain, no less! He
-came aboard with a black coat, and his papers right, and money enough in
-his box to buy the thing right up from keel to main-truck. The crew
-are his, body and soul. He could buy 'em at so much a gross with a cash
-discount, and he did it before ever they signed on. He's got two of the
-warders and Mereer, the second mate, and he'd get the captain himself,
-if he thought him worth it."
-
-"'"What are we to do, then?" I asked.
-
-"'"What do you think?" said he. "We'll make the coats of some of these
-soldiers redder than ever the tailor did."
-
-"'"But they are armed," said I.
-
-"'"And so shall we be, my boy. There's a brace of pistols for every
-mother's son of us, and if we can't carry this ship, with the crew at
-our back, it's time we were all sent to a young misses' boarding-school.
-You speak to your mate upon the left to-night, and see if he is to be
-trusted."
-
-"'I did so, and found my other neighbor to be a young fellow in much
-the same position as myself, whose crime had been forgery. His name was
-Evans, but he afterwards changed it, like myself, and he is now a rich
-and prosperous man in the south of England. He was ready enough to join
-the conspiracy, as the only means of saving ourselves, and before we had
-crossed the Bay there were only two of the prisoners who were not in the
-secret. One of these was of weak mind, and we did not dare to trust him,
-and the other was suffering from jaundice, and could not be of any use
-to us.
-
-"'From the beginning there was really nothing to prevent us from taking
-possession of the ship. The crew were a set of ruffians, specially
-picked for the job. The sham chaplain came into our cells to exhort us,
-carrying a black bag, supposed to be full of tracts, and so often did
-he come that by the third day we had each stowed away at the foot of our
-beds a file, a brace of pistols, a pound of powder, and twenty slugs.
-Two of the warders were agents of Prendergast, and the second mate was
-his right-hand man. The captain, the two mates, two warders Lieutenant
-Martin, his eighteen soldiers, and the doctor were all that we had
-against us. Yet, safe as it was, we determined to neglect no precaution,
-and to make our attack suddenly by night. It came, however, more quickly
-than we expected, and in this way.
-
-"'One evening, about the third week after our start, the doctor had come
-down to see one of the prisoners who was ill, and putting his hand down
-on the bottom of his bunk he felt the outline of the pistols. If he had
-been silent he might have blown the whole thing, but he was a nervous
-little chap, so he gave a cry of surprise and turned so pale that the
-man knew what was up in an instant and seized him. He was gagged before
-he could give the alarm, and tied down upon the bed. He had unlocked
-the door that led to the deck, and we were through it in a rush. The two
-sentries were shot down, and so was a corporal who came running to see
-what was the matter. There were two more soldiers at the door of the
-state-room, and their muskets seemed not to be loaded, for they never
-fired upon us, and they were shot while trying to fix their bayonets.
-Then we rushed on into the captain's cabin, but as we pushed open the
-door there was an explosion from within, and there he lay with his
-brains smeared over the chart of the Atlantic which was pinned upon the
-table, while the chaplain stood with a smoking pistol in his hand at
-his elbow. The two mates had both been seized by the crew, and the whole
-business seemed to be settled.
-
-"'The state-room was next the cabin, and we flocked in there and flopped
-down on the settees, all speaking together, for we were just mad with
-the feeling that we were free once more. There were lockers all round,
-and Wilson, the sham chaplain, knocked one of them in, and pulled out a
-dozen of brown sherry. We cracked off the necks of the bottles, poured
-the stuff out into tumblers, and were just tossing them off, when in an
-instant without warning there came the roar of muskets in our ears, and
-the saloon was so full of smoke that we could not see across the table.
-When it cleared again the place was a shambles. Wilson and eight others
-were wriggling on the top of each other on the floor, and the blood and
-the brown sherry on that table turn me sick now when I think of it. We
-were so cowed by the sight that I think we should have given the job up
-if it had not been for Prendergast. He bellowed like a bull and rushed
-for the door with all that were left alive at his heels. Out we ran,
-and there on the poop were the lieutenant and ten of his men. The swing
-skylights above the saloon table had been a bit open, and they had fired
-on us through the slit. We got on them before they could load, and they
-stood to it like men; but we had the upper hand of them, and in five
-minutes it was all over. My God! Was there ever a slaughter-house
-like that ship! Prendergast was like a raging devil, and he picked the
-soldiers up as if they had been children and threw them overboard alive
-or dead. There was one sergeant that was horribly wounded and yet kept
-on swimming for a surprising time, until some one in mercy blew out his
-brains. When the fighting was over there was no one left of our enemies
-except just the warders the mates, and the doctor.
-
-"'It was over them that the great quarrel arose. There were many of us
-who were glad enough to win back our freedom, and yet who had no wish
-to have murder on our souls. It was one thing to knock the soldiers over
-with their muskets in their hands, and it was another to stand by while
-men were being killed in cold blood. Eight of us, five convicts and
-three sailors, said that we would not see it done. But there was no
-moving Prendergast and those who were with him. Our only chance of
-safety lay in making a clean job of it, said he, and he would not leave
-a tongue with power to wag in a witness-box. It nearly came to our
-sharing the fate of the prisoners, but at last he said that if we wished
-we might take a boat and go. We jumped at the offer, for we were already
-sick of these bloodthirsty doings, and we saw that there would be worse
-before it was done. We were given a suit of sailor togs each, a barrel
-of water, two casks, one of junk and one of biscuits, and a compass.
-Prendergast threw us over a chart, told us that we were shipwrecked
-mariners whose ship had foundered in Lat. 15 degrees and Long 25 degrees
-west, and then cut the painter and let us go.
-
-"'And now I come to the most surprising part of my story, my dear son.
-The seamen had hauled the fore-yard aback during the rising, but now as
-we left them they brought it square again, and as there was a light wind
-from the north and east the bark began to draw slowly away from us. Our
-boat lay, rising and falling, upon the long, smooth rollers, and Evans
-and I, who were the most educated of the party, were sitting in the
-sheets working out our position and planning what coast we should make
-for. It was a nice question, for the Cape de Verdes were about five
-hundred miles to the north of us, and the African coast about seven
-hundred to the east. On the whole, as the wind was coming round to the
-north, we thought that Sierra Leone might be best, and turned our head
-in that direction, the bark being at that time nearly hull down on our
-starboard quarter. Suddenly as we looked at her we saw a dense black
-cloud of smoke shoot up from her, which hung like a monstrous tree upon
-the sky line. A few seconds later a roar like thunder burst upon our
-ears, and as the smoke thinned away there was no sign left of the
-_Gloria Scott_. In an instant we swept the boat's head round again and
-pulled with all our strength for the place where the haze still trailing
-over the water marked the scene of this catastrophe.
-
-"'It was a long hour before we reached it, and at first we feared that
-we had come too late to save any one. A splintered boat and a number of
-crates and fragments of spars rising and falling on the waves showed us
-where the vessel had foundered; but there was no sign of life, and we
-had turned away in despair when we heard a cry for help, and saw at some
-distance a piece of wreckage with a man lying stretched across it. When
-we pulled him aboard the boat he proved to be a young seaman of the
-name of Hudson, who was so burned and exhausted that he could give us no
-account of what had happened until the following morning.
-
-"'It seemed that after we had left, Prendergast and his gang had
-proceeded to put to death the five remaining prisoners. The two warders
-had been shot and thrown overboard, and so also had the third mate.
-Prendergast then descended into the 'tween-decks and with his own hands
-cut the throat of the unfortunate surgeon. There only remained the first
-mate, who was a bold and active man. When he saw the convict approaching
-him with the bloody knife in his hand he kicked off his bonds, which he
-had somehow contrived to loosen, and rushing down the deck he plunged
-into the after-hold. A dozen convicts, who descended with their pistols
-in search of him, found him with a match-box in his hand seated beside
-an open powder-barrel, which was one of a hundred carried on board, and
-swearing that he would blow all hands up if he were in any way molested.
-An instant later the explosion occurred, though Hudson thought it was
-caused by the misdirected bullet of one of the convicts rather than the
-mate's match. Be the cause what it may, it was the end of the _Gloria
-Scott_ and of the rabble who held command of her.
-
-"'Such, in a few words, my dear boy, is the history of this terrible
-business in which I was involved. Next day we were picked up by the brig
-_Hotspur_, bound for Australia, whose captain found no difficulty in
-believing that we were the survivors of a passenger ship which had
-foundered. The transport ship Gloria Scott was set down by the Admiralty
-as being lost at sea, and no word has ever leaked out as to her true
-fate. After an excellent voyage the _Hotspur_ landed us at Sydney, where
-Evans and I changed our names and made our way to the diggings,
-where, among the crowds who were gathered from all nations, we had no
-difficulty in losing our former identities. The rest I need not relate.
-We prospered, we traveled, we came back as rich colonials to England,
-and we bought country estates. For more than twenty years we have
-led peaceful and useful lives, and we hoped that our past was forever
-buried. Imagine, then, my feelings when in the seaman who came to us I
-recognized instantly the man who had been picked off the wreck. He had
-tracked us down somehow, and had set himself to live upon our fears. You
-will understand now how it was that I strove to keep the peace with him,
-and you will in some measure sympathize with me in the fears which fill
-me, now that he has gone from me to his other victim with threats upon
-his tongue.'
-
-"Underneath is written in a hand so shaky as to be hardly legible,
-'Beddoes writes in cipher to say H. Has told all. Sweet Lord, have mercy
-on our souls!'
-
-"That was the narrative which I read that night to young Trevor, and I
-think, Watson, that under the circumstances it was a dramatic one.
-The good fellow was heart-broken at it, and went out to the Terai tea
-planting, where I hear that he is doing well. As to the sailor and
-Beddoes, neither of them was ever heard of again after that day on which
-the letter of warning was written. They both disappeared utterly and
-completely. No complaint had been lodged with the police, so that
-Beddoes had mistaken a threat for a deed. Hudson had been seen lurking
-about, and it was believed by the police that he had done away with
-Beddoes and had fled. For myself I believe that the truth was exactly
-the opposite. I think that it is most probable that Beddoes, pushed to
-desperation and believing himself to have been already betrayed, had
-revenged himself upon Hudson, and had fled from the country with as much
-money as he could lay his hands on. Those are the facts of the case,
-Doctor, and if they are of any use to your collection, I am sure that
-they are very heartily at your service."
-
-
-
-
-Adventure V. The Musgrave Ritual
-
-
-An anomaly which often struck me in the character of my friend Sherlock
-Holmes was that, although in his methods of thought he was the neatest
-and most methodical of mankind, and although also he affected a certain
-quiet primness of dress, he was none the less in his personal habits one
-of the most untidy men that ever drove a fellow-lodger to distraction.
-Not that I am in the least conventional in that respect myself. The
-rough-and-tumble work in Afghanistan, coming on the top of a natural
-Bohemianism of disposition, has made me rather more lax than befits a
-medical man. But with me there is a limit, and when I find a man who
-keeps his cigars in the coal-scuttle, his tobacco in the toe end of
-a Persian slipper, and his unanswered correspondence transfixed by a
-jack-knife into the very centre of his wooden mantelpiece, then I begin
-to give myself virtuous airs. I have always held, too, that pistol
-practice should be distinctly an open-air pastime; and when Holmes, in
-one of his queer humors, would sit in an arm-chair with his hair-trigger
-and a hundred Boxer cartridges, and proceed to adorn the opposite
-wall with a patriotic V. R. done in bullet-pocks, I felt strongly that
-neither the atmosphere nor the appearance of our room was improved by
-it.
-
-Our chambers were always full of chemicals and of criminal relics which
-had a way of wandering into unlikely positions, and of turning up in
-the butter-dish or in even less desirable places. But his papers were
-my great crux. He had a horror of destroying documents, especially those
-which were connected with his past cases, and yet it was only once in
-every year or two that he would muster energy to docket and arrange
-them; for, as I have mentioned somewhere in these incoherent memoirs,
-the outbursts of passionate energy when he performed the remarkable
-feats with which his name is associated were followed by reactions of
-lethargy during which he would lie about with his violin and his books,
-hardly moving save from the sofa to the table. Thus month after month
-his papers accumulated, until every corner of the room was stacked with
-bundles of manuscript which were on no account to be burned, and which
-could not be put away save by their owner. One winter's night, as we
-sat together by the fire, I ventured to suggest to him that, as he had
-finished pasting extracts into his common-place book, he might employ
-the next two hours in making our room a little more habitable. He could
-not deny the justice of my request, so with a rather rueful face he went
-off to his bedroom, from which he returned presently pulling a large tin
-box behind him. This he placed in the middle of the floor and, squatting
-down upon a stool in front of it, he threw back the lid. I could see
-that it was already a third full of bundles of paper tied up with red
-tape into separate packages.
-
-"There are cases enough here, Watson," said he, looking at me with
-mischievous eyes. "I think that if you knew all that I had in this box
-you would ask me to pull some out instead of putting others in."
-
-"These are the records of your early work, then?" I asked. "I have often
-wished that I had notes of those cases."
-
-"Yes, my boy, these were all done prematurely before my biographer
-had come to glorify me." He lifted bundle after bundle in a tender,
-caressing sort of way. "They are not all successes, Watson," said he.
-"But there are some pretty little problems among them. Here's the record
-of the Tarleton murders, and the case of Vamberry, the wine merchant,
-and the adventure of the old Russian woman, and the singular affair
-of the aluminium crutch, as well as a full account of Ricoletti of the
-club-foot, and his abominable wife. And here--ah, now, this really is
-something a little recherché."
-
-He dived his arm down to the bottom of the chest, and brought up a small
-wooden box with a sliding lid, such as children's toys are kept in. From
-within he produced a crumpled piece of paper, and old-fashioned brass
-key, a peg of wood with a ball of string attached to it, and three rusty
-old disks of metal.
-
-"Well, my boy, what do you make of this lot?" he asked, smiling at my
-expression.
-
-"It is a curious collection."
-
-"Very curious, and the story that hangs round it will strike you as
-being more curious still."
-
-"These relics have a history then?"
-
-"So much so that they are history."
-
-"What do you mean by that?"
-
-Sherlock Holmes picked them up one by one, and laid them along the edge
-of the table. Then he reseated himself in his chair and looked them over
-with a gleam of satisfaction in his eyes.
-
-"These," said he, "are all that I have left to remind me of the
-adventure of the Musgrave Ritual."
-
-I had heard him mention the case more than once, though I had never been
-able to gather the details. "I should be so glad," said I, "if you would
-give me an account of it."
-
-"And leave the litter as it is?" he cried, mischievously. "Your tidiness
-won't bear much strain after all, Watson. But I should be glad that you
-should add this case to your annals, for there are points in it which
-make it quite unique in the criminal records of this or, I believe,
-of any other country. A collection of my trifling achievements would
-certainly be incomplete which contained no account of this very singular
-business.
-
-"You may remember how the affair of the _Gloria Scott_, and my
-conversation with the unhappy man whose fate I told you of, first turned
-my attention in the direction of the profession which has become my
-life's work. You see me now when my name has become known far and
-wide, and when I am generally recognized both by the public and by the
-official force as being a final court of appeal in doubtful cases.
-Even when you knew me first, at the time of the affair which you have
-commemorated in 'A Study in Scarlet,' I had already established a
-considerable, though not a very lucrative, connection. You can hardly
-realize, then, how difficult I found it at first, and how long I had to
-wait before I succeeded in making any headway.
-
-"When I first came up to London I had rooms in Montague Street, just
-round the corner from the British Museum, and there I waited, filling in
-my too abundant leisure time by studying all those branches of science
-which might make me more efficient. Now and again cases came in my way,
-principally through the introduction of old fellow-students, for during
-my last years at the University there was a good deal of talk there
-about myself and my methods. The third of these cases was that of the
-Musgrave Ritual, and it is to the interest which was aroused by that
-singular chain of events, and the large issues which proved to be at
-stake, that I trace my first stride towards the position which I now
-hold.
-
-"Reginald Musgrave had been in the same college as myself, and I had
-some slight acquaintance with him. He was not generally popular among
-the undergraduates, though it always seemed to me that what was set down
-as pride was really an attempt to cover extreme natural diffidence.
-In appearance he was a man of exceedingly aristocratic type, thin,
-high-nosed, and large-eyed, with languid and yet courtly manners. He was
-indeed a scion of one of the very oldest families in the kingdom,
-though his branch was a cadet one which had separated from the northern
-Musgraves some time in the sixteenth century, and had established itself
-in western Sussex, where the Manor House of Hurlstone is perhaps the
-oldest inhabited building in the county. Something of his birth place
-seemed to cling to the man, and I never looked at his pale, keen face
-or the poise of his head without associating him with gray archways and
-mullioned windows and all the venerable wreckage of a feudal keep. Once
-or twice we drifted into talk, and I can remember that more than once he
-expressed a keen interest in my methods of observation and inference.
-
-"For four years I had seen nothing of him until one morning he walked
-into my room in Montague Street. He had changed little, was dressed like
-a young man of fashion--he was always a bit of a dandy--and preserved
-the same quiet, suave manner which had formerly distinguished him.
-
-"'How has all gone with you Musgrave?' I asked, after we had cordially
-shaken hands.
-
-"'You probably heard of my poor father's death,' said he; 'he was
-carried off about two years ago. Since then I have of course had the
-Hurlstone estates to manage, and as I am member for my district as well,
-my life has been a busy one. But I understand, Holmes, that you are
-turning to practical ends those powers with which you used to amaze us?'
-
-"'Yes,' said I, 'I have taken to living by my wits.'
-
-"'I am delighted to hear it, for your advice at present would be
-exceedingly valuable to me. We have had some very strange doings at
-Hurlstone, and the police have been able to throw no light upon the
-matter. It is really the most extraordinary and inexplicable business.'
-
-"You can imagine with what eagerness I listened to him, Watson, for
-the very chance for which I had been panting during all those months
-of inaction seemed to have come within my reach. In my inmost heart I
-believed that I could succeed where others failed, and now I had the
-opportunity to test myself.
-
-"'Pray, let me have the details,' I cried.
-
-"Reginald Musgrave sat down opposite to me, and lit the cigarette which
-I had pushed towards him.
-
-"'You must know,' said he, 'that though I am a bachelor, I have to keep
-up a considerable staff of servants at Hurlstone, for it is a rambling
-old place, and takes a good deal of looking after. I preserve, too, and
-in the pheasant months I usually have a house-party, so that it would
-not do to be short-handed. Altogether there are eight maids, the cook,
-the butler, two footmen, and a boy. The garden and the stables of course
-have a separate staff.
-
-"'Of these servants the one who had been longest in our service was
-Brunton the butler. He was a young school-master out of place when he
-was first taken up by my father, but he was a man of great energy and
-character, and he soon became quite invaluable in the household. He was
-a well-grown, handsome man, with a splendid forehead, and though he has
-been with us for twenty years he cannot be more than forty now. With
-his personal advantages and his extraordinary gifts--for he can speak
-several languages and play nearly every musical instrument--it is
-wonderful that he should have been satisfied so long in such a position,
-but I suppose that he was comfortable, and lacked energy to make any
-change. The butler of Hurlstone is always a thing that is remembered by
-all who visit us.
-
-"'But this paragon has one fault. He is a bit of a Don Juan, and you can
-imagine that for a man like him it is not a very difficult part to play
-in a quiet country district. When he was married it was all right, but
-since he has been a widower we have had no end of trouble with him. A
-few months ago we were in hopes that he was about to settle down again
-for he became engaged to Rachel Howells, our second house-maid; but he
-has thrown her over since then and taken up with Janet Tregellis, the
-daughter of the head game-keeper. Rachel--who is a very good girl, but
-of an excitable Welsh temperament--had a sharp touch of brain-fever,
-and goes about the house now--or did until yesterday--like a black-eyed
-shadow of her former self. That was our first drama at Hurlstone; but a
-second one came to drive it from our minds, and it was prefaced by the
-disgrace and dismissal of butler Brunton.
-
-"'This was how it came about. I have said that the man was intelligent,
-and this very intelligence has caused his ruin, for it seems to have
-led to an insatiable curiosity about things which did not in the least
-concern him. I had no idea of the lengths to which this would carry him,
-until the merest accident opened my eyes to it.
-
-"'I have said that the house is a rambling one. One day last week--on
-Thursday night, to be more exact--I found that I could not sleep,
-having foolishly taken a cup of strong café noir after my dinner. After
-struggling against it until two in the morning, I felt that it was quite
-hopeless, so I rose and lit the candle with the intention of continuing
-a novel which I was reading. The book, however, had been left in the
-billiard-room, so I pulled on my dressing-gown and started off to get
-it.
-
-"'In order to reach the billiard-room I had to descend a flight of
-stairs and then to cross the head of a passage which led to the library
-and the gun-room. You can imagine my surprise when, as I looked down
-this corridor, I saw a glimmer of light coming from the open door of the
-library. I had myself extinguished the lamp and closed the door before
-coming to bed. Naturally my first thought was of burglars. The corridors
-at Hurlstone have their walls largely decorated with trophies of old
-weapons. From one of these I picked a battle-axe, and then, leaving my
-candle behind me, I crept on tiptoe down the passage and peeped in at
-the open door.
-
-"'Brunton, the butler, was in the library. He was sitting, fully
-dressed, in an easy-chair, with a slip of paper which looked like a
-map upon his knee, and his forehead sunk forward upon his hand in deep
-thought. I stood dumb with astonishment, watching him from the darkness.
-A small taper on the edge of the table shed a feeble light which
-sufficed to show me that he was fully dressed. Suddenly, as I looked,
-he rose from his chair, and walking over to a bureau at the side, he
-unlocked it and drew out one of the drawers. From this he took a paper,
-and returning to his seat he flattened it out beside the taper on the
-edge of the table, and began to study it with minute attention. My
-indignation at this calm examination of our family documents overcame
-me so far that I took a step forward, and Brunton, looking up, saw me
-standing in the doorway. He sprang to his feet, his face turned livid
-with fear, and he thrust into his breast the chart-like paper which he
-had been originally studying.
-
-"'"So!" said I. "This is how you repay the trust which we have reposed
-in you. You will leave my service to-morrow."
-
-"'He bowed with the look of a man who is utterly crushed, and slunk past
-me without a word. The taper was still on the table, and by its light
-I glanced to see what the paper was which Brunton had taken from the
-bureau. To my surprise it was nothing of any importance at all,
-but simply a copy of the questions and answers in the singular old
-observance called the Musgrave Ritual. It is a sort of ceremony peculiar
-to our family, which each Musgrave for centuries past has gone through
-on his coming of age--a thing of private interest, and perhaps of some
-little importance to the archaeologist, like our own blazonings and
-charges, but of no practical use whatever.'
-
-"'We had better come back to the paper afterwards,' said I.
-
-"'If you think it really necessary,' he answered, with some hesitation.
-'To continue my statement, however: I relocked the bureau, using the key
-which Brunton had left, and I had turned to go when I was surprised to
-find that the butler had returned, and was standing before me.
-
-"'"Mr. Musgrave, sir," he cried, in a voice which was hoarse with
-emotion, "I can't bear disgrace, sir. I've always been proud above my
-station in life, and disgrace would kill me. My blood will be on your
-head, sir--it will, indeed--if you drive me to despair. If you cannot
-keep me after what has passed, then for God's sake let me give you
-notice and leave in a month, as if of my own free will. I could stand
-that, Mr. Musgrave, but not to be cast out before all the folk that I
-know so well."
-
-"'"You don't deserve much consideration, Brunton," I answered. "Your
-conduct has been most infamous. However, as you have been a long time in
-the family, I have no wish to bring public disgrace upon you. A month,
-however is too long. Take yourself away in a week, and give what reason
-you like for going."
-
-"'"Only a week, sir?" he cried, in a despairing voice. "A fortnight--say
-at least a fortnight!"
-
-"'"A week," I repeated, "and you may consider yourself to have been very
-leniently dealt with."
-
-"'He crept away, his face sunk upon his breast, like a broken man, while
-I put out the light and returned to my room.
-
-
-"'"For two days after this Brunton was most assiduous in his attention
-to his duties. I made no allusion to what had passed, and waited with
-some curiosity to see how he would cover his disgrace. On the third
-morning, however he did not appear, as was his custom, after breakfast
-to receive my instructions for the day. As I left the dining-room I
-happened to meet Rachel Howells, the maid. I have told you that she had
-only recently recovered from an illness, and was looking so wretchedly
-pale and wan that I remonstrated with her for being at work.
-
-"'"You should be in bed," I said. "Come back to your duties when you are
-stronger."
-
-"'She looked at me with so strange an expression that I began to suspect
-that her brain was affected.
-
-"'"I am strong enough, Mr. Musgrave," said she.
-
-"'"We will see what the doctor says," I answered. "You must stop work
-now, and when you go downstairs just say that I wish to see Brunton."
-
-"'"The butler is gone," said she.
-
-"'"Gone! Gone where?"
-
-"'"He is gone. No one has seen him. He is not in his room. Oh, yes, he
-is gone, he is gone!" She fell back against the wall with shriek after
-shriek of laughter, while I, horrified at this sudden hysterical attack,
-rushed to the bell to summon help. The girl was taken to her room, still
-screaming and sobbing, while I made inquiries about Brunton. There was
-no doubt about it that he had disappeared. His bed had not been slept
-in, he had been seen by no one since he had retired to his room the
-night before, and yet it was difficult to see how he could have left
-the house, as both windows and doors were found to be fastened in the
-morning. His clothes, his watch, and even his money were in his room,
-but the black suit which he usually wore was missing. His slippers,
-too, were gone, but his boots were left behind. Where then could butler
-Brunton have gone in the night, and what could have become of him now?
-
-"'Of course we searched the house from cellar to garret, but there was
-no trace of him. It is, as I have said, a labyrinth of an old house,
-especially the original wing, which is now practically uninhabited; but
-we ransacked every room and cellar without discovering the least sign
-of the missing man. It was incredible to me that he could have gone away
-leaving all his property behind him, and yet where could he be? I called
-in the local police, but without success. Rain had fallen on the night
-before and we examined the lawn and the paths all round the house, but
-in vain. Matters were in this state, when a new development quite drew
-our attention away from the original mystery.
-
-"'For two days Rachel Howells had been so ill, sometimes delirious,
-sometimes hysterical, that a nurse had been employed to sit up with her
-at night. On the third night after Brunton's disappearance, the nurse,
-finding her patient sleeping nicely, had dropped into a nap in the
-arm-chair, when she woke in the early morning to find the bed empty, the
-window open, and no signs of the invalid. I was instantly aroused, and,
-with the two footmen, started off at once in search of the missing girl.
-It was not difficult to tell the direction which she had taken, for,
-starting from under her window, we could follow her footmarks easily
-across the lawn to the edge of the mere, where they vanished close to
-the gravel path which leads out of the grounds. The lake there is eight
-feet deep, and you can imagine our feelings when we saw that the trail
-of the poor demented girl came to an end at the edge of it.
-
-"'Of course, we had the drags at once, and set to work to recover the
-remains, but no trace of the body could we find. On the other hand, we
-brought to the surface an object of a most unexpected kind. It was a
-linen bag which contained within it a mass of old rusted and discolored
-metal and several dull-colored pieces of pebble or glass. This strange
-find was all that we could get from the mere, and, although we made
-every possible search and inquiry yesterday, we know nothing of the fate
-either of Rachel Howells or of Richard Brunton. The county police are at
-their wits' end, and I have come up to you as a last resource.'
-
-"You can imagine, Watson, with what eagerness I listened to this
-extraordinary sequence of events, and endeavored to piece them together,
-and to devise some common thread upon which they might all hang. The
-butler was gone. The maid was gone. The maid had loved the butler, but
-had afterwards had cause to hate him. She was of Welsh blood, fiery
-and passionate. She had been terribly excited immediately after his
-disappearance. She had flung into the lake a bag containing some
-curious contents. These were all factors which had to be taken into
-consideration, and yet none of them got quite to the heart of the
-matter. What was the starting-point of this chain of events? There lay
-the end of this tangled line.
-
-"'I must see that paper, Musgrave,' said I, 'which this butler of your
-thought it worth his while to consult, even at the risk of the loss of
-his place.'
-
-"'It is rather an absurd business, this ritual of ours,' he answered.
-'But it has at least the saving grace of antiquity to excuse it. I have
-a copy of the questions and answers here if you care to run your eye
-over them.'
-
-"He handed me the very paper which I have here, Watson, and this is the
-strange catechism to which each Musgrave had to submit when he came to
-man's estate. I will read you the questions and answers as they stand.
-
-"'Whose was it?'
-
-"'His who is gone.'
-
-"'Who shall have it?'
-
-"'He who will come.'
-
-"'Where was the sun?'
-
-"'Over the oak.'
-
-"'Where was the shadow?'
-
-"'Under the elm.'
-
-"How was it stepped?'
-
-"'North by ten and by ten, east by five and by five, south by two and by
-two, west by one and by one, and so under.'
-
-"'What shall we give for it?'
-
-"'All that is ours.'
-
-"'Why should we give it?'
-
-"'For the sake of the trust.'
-
-"'The original has no date, but is in the spelling of the middle of the
-seventeenth century,' remarked Musgrave. 'I am afraid, however, that it
-can be of little help to you in solving this mystery.'
-
-"'At least,' said I, 'it gives us another mystery, and one which is even
-more interesting than the first. It may be that the solution of the one
-may prove to be the solution of the other. You will excuse me, Musgrave,
-if I say that your butler appears to me to have been a very clever man,
-and to have had a clearer insight than ten generations of his masters.'
-
-"'I hardly follow you,' said Musgrave. 'The paper seems to me to be of
-no practical importance.'
-
-"'But to me it seems immensely practical, and I fancy that Brunton took
-the same view. He had probably seen it before that night on which you
-caught him.'
-
-"'It is very possible. We took no pains to hide it.'
-
-"'He simply wished, I should imagine, to refresh his memory upon that
-last occasion. He had, as I understand, some sort of map or chart which
-he was comparing with the manuscript, and which he thrust into his
-pocket when you appeared.'
-
-"'That is true. But what could he have to do with this old family custom
-of ours, and what does this rigmarole mean?'
-
-"'I don't think that we should have much difficulty in determining
-that,' said I; 'with your permission we will take the first train down
-to Sussex, and go a little more deeply into the matter upon the spot.'
-
-
-"The same afternoon saw us both at Hurlstone. Possibly you have seen
-pictures and read descriptions of the famous old building, so I will
-confine my account of it to saying that it is built in the shape of
-an L, the long arm being the more modern portion, and the shorter the
-ancient nucleus, from which the other had developed. Over the low,
-heavily-lintelled door, in the centre of this old part, is chiseled the
-date, 1607, but experts are agreed that the beams and stone-work are
-really much older than this. The enormously thick walls and tiny windows
-of this part had in the last century driven the family into building the
-new wing, and the old one was used now as a store-house and a cellar,
-when it was used at all. A splendid park with fine old timber surrounds
-the house, and the lake, to which my client had referred, lay close to
-the avenue, about two hundred yards from the building.
-
-"I was already firmly convinced, Watson, that there were not three
-separate mysteries here, but one only, and that if I could read the
-Musgrave Ritual aright I should hold in my hand the clue which would
-lead me to the truth concerning both the butler Brunton and the maid
-Howells. To that then I turned all my energies. Why should this servant
-be so anxious to master this old formula? Evidently because he saw
-something in it which had escaped all those generations of country
-squires, and from which he expected some personal advantage. What was it
-then, and how had it affected his fate?
-
-"It was perfectly obvious to me, on reading the ritual, that the
-measurements must refer to some spot to which the rest of the document
-alluded, and that if we could find that spot, we should be in a fair way
-towards finding what the secret was which the old Musgraves had thought
-it necessary to embalm in so curious a fashion. There were two guides
-given us to start with, an oak and an elm. As to the oak there could be
-no question at all. Right in front of the house, upon the left-hand
-side of the drive, there stood a patriarch among oaks, one of the most
-magnificent trees that I have ever seen.
-
-"'That was there when your ritual was drawn up,' said I, as we drove
-past it.
-
-"'It was there at the Norman Conquest in all probability,' he answered.
-'It has a girth of twenty-three feet.'
-
-"'Have you any old elms?' I asked.
-
-"'There used to be a very old one over yonder but it was struck by
-lightning ten years ago, and we cut down the stump.'
-
-"'You can see where it used to be?'
-
-"'Oh, yes.'
-
-"'There are no other elms?'
-
-"'No old ones, but plenty of beeches.'
-
-"'I should like to see where it grew.'
-
-"We had driven up in a dog-cart, and my client led me away at once,
-without our entering the house, to the scar on the lawn where the
-elm had stood. It was nearly midway between the oak and the house. My
-investigation seemed to be progressing.
-
-"'I suppose it is impossible to find out how high the elm was?' I asked.
-
-"'I can give you it at once. It was sixty-four feet.'
-
-"'How do you come to know it?' I asked, in surprise.
-
-"'When my old tutor used to give me an exercise in trigonometry, it
-always took the shape of measuring heights. When I was a lad I worked
-out every tree and building in the estate.'
-
-"This was an unexpected piece of luck. My data were coming more quickly
-than I could have reasonably hoped.
-
-"'Tell me,' I asked, 'did your butler ever ask you such a question?'
-
-"Reginald Musgrave looked at me in astonishment. 'Now that you call it
-to my mind,' he answered, 'Brunton did ask me about the height of the
-tree some months ago, in connection with some little argument with the
-groom.'
-
-"This was excellent news, Watson, for it showed me that I was on the
-right road. I looked up at the sun. It was low in the heavens, and I
-calculated that in less than an hour it would lie just above the topmost
-branches of the old oak. One condition mentioned in the Ritual would
-then be fulfilled. And the shadow of the elm must mean the farther end
-of the shadow, otherwise the trunk would have been chosen as the guide.
-I had, then, to find where the far end of the shadow would fall when the
-sun was just clear of the oak."
-
-"That must have been difficult, Holmes, when the elm was no longer
-there."
-
-"Well, at least I knew that if Brunton could do it, I could also.
-Besides, there was no real difficulty. I went with Musgrave to his study
-and whittled myself this peg, to which I tied this long string with a
-knot at each yard. Then I took two lengths of a fishing-rod, which came
-to just six feet, and I went back with my client to where the elm had
-been. The sun was just grazing the top of the oak. I fastened the rod
-on end, marked out the direction of the shadow, and measured it. It was
-nine feet in length.
-
-"Of course the calculation now was a simple one. If a rod of six feet
-threw a shadow of nine, a tree of sixty-four feet would throw one of
-ninety-six, and the line of the one would of course be the line of the
-other. I measured out the distance, which brought me almost to the
-wall of the house, and I thrust a peg into the spot. You can imagine
-my exultation, Watson, when within two inches of my peg I saw a conical
-depression in the ground. I knew that it was the mark made by Brunton in
-his measurements, and that I was still upon his trail.
-
-"From this starting-point I proceeded to step, having first taken the
-cardinal points by my pocket-compass. Ten steps with each foot took me
-along parallel with the wall of the house, and again I marked my spot
-with a peg. Then I carefully paced off five to the east and two to the
-south. It brought me to the very threshold of the old door. Two steps
-to the west meant now that I was to go two paces down the stone-flagged
-passage, and this was the place indicated by the Ritual.
-
-"Never have I felt such a cold chill of disappointment, Watson. For a
-moment is seemed to me that there must be some radical mistake in my
-calculations. The setting sun shone full upon the passage floor, and I
-could see that the old, foot-worn gray stones with which it was paved
-were firmly cemented together, and had certainly not been moved for many
-a long year. Brunton had not been at work here. I tapped upon the floor,
-but it sounded the same all over, and there was no sign of any crack
-or crevice. But, fortunately, Musgrave, who had begun to appreciate the
-meaning of my proceedings, and who was now as excited as myself, took
-out his manuscript to check my calculation.
-
-"'And under,' he cried. 'You have omitted the "and under."'
-
-"I had thought that it meant that we were to dig, but now, of course,
-I saw at once that I was wrong. 'There is a cellar under this then?' I
-cried.
-
-"'Yes, and as old as the house. Down here, through this door.'
-
-"We went down a winding stone stair, and my companion, striking a match,
-lit a large lantern which stood on a barrel in the corner. In an instant
-it was obvious that we had at last come upon the true place, and that we
-had not been the only people to visit the spot recently.
-
-"It had been used for the storage of wood, but the billets, which had
-evidently been littered over the floor, were now piled at the sides, so
-as to leave a clear space in the middle. In this space lay a large and
-heavy flagstone with a rusted iron ring in the centre to which a thick
-shepherd's-check muffler was attached.
-
-"'By Jove!' cried my client. 'That's Brunton's muffler. I have seen it
-on him, and could swear to it. What has the villain been doing here?'
-
-"At my suggestion a couple of the county police were summoned to be
-present, and I then endeavored to raise the stone by pulling on the
-cravat. I could only move it slightly, and it was with the aid of one
-of the constables that I succeeded at last in carrying it to one side.
-A black hole yawned beneath into which we all peered, while Musgrave,
-kneeling at the side, pushed down the lantern.
-
-"A small chamber about seven feet deep and four feet square lay open to
-us. At one side of this was a squat, brass-bound wooden box, the lid of
-which was hinged upwards, with this curious old-fashioned key projecting
-from the lock. It was furred outside by a thick layer of dust, and damp
-and worms had eaten through the wood, so that a crop of livid fungi
-was growing on the inside of it. Several discs of metal, old coins
-apparently, such as I hold here, were scattered over the bottom of the
-box, but it contained nothing else.
-
-"At the moment, however, we had no thought for the old chest, for our
-eyes were riveted upon that which crouched beside it. It was the figure
-of a man, clad in a suit of black, who squatted down upon his hams with
-his forehead sunk upon the edge of the box and his two arms thrown out
-on each side of it. The attitude had drawn all the stagnant blood to
-the face, and no man could have recognized that distorted liver-colored
-countenance; but his height, his dress, and his hair were all sufficient
-to show my client, when we had drawn the body up, that it was indeed his
-missing butler. He had been dead some days, but there was no wound or
-bruise upon his person to show how he had met his dreadful end. When
-his body had been carried from the cellar we found ourselves still
-confronted with a problem which was almost as formidable as that with
-which we had started.
-
-"I confess that so far, Watson, I had been disappointed in my
-investigation. I had reckoned upon solving the matter when once I had
-found the place referred to in the Ritual; but now I was there, and was
-apparently as far as ever from knowing what it was which the family had
-concealed with such elaborate precautions. It is true that I had thrown
-a light upon the fate of Brunton, but now I had to ascertain how that
-fate had come upon him, and what part had been played in the matter by
-the woman who had disappeared. I sat down upon a keg in the corner and
-thought the whole matter carefully over.
-
-"You know my methods in such cases, Watson. I put myself in the man's
-place and, having first gauged his intelligence, I try to imagine how I
-should myself have proceeded under the same circumstances. In this
-case the matter was simplified by Brunton's intelligence being quite
-first-rate, so that it was unnecessary to make any allowance for the
-personal equation, as the astronomers have dubbed it. He knew that
-something valuable was concealed. He had spotted the place. He found
-that the stone which covered it was just too heavy for a man to move
-unaided. What would he do next? He could not get help from outside, even
-if he had some one whom he could trust, without the unbarring of doors
-and considerable risk of detection. It was better, if he could, to have
-his helpmate inside the house. But whom could he ask? This girl had been
-devoted to him. A man always finds it hard to realize that he may have
-finally lost a woman's love, however badly he may have treated her. He
-would try by a few attentions to make his peace with the girl Howells,
-and then would engage her as his accomplice. Together they would come at
-night to the cellar, and their united force would suffice to raise the
-stone. So far I could follow their actions as if I had actually seen
-them.
-
-"But for two of them, and one a woman, it must have been heavy work the
-raising of that stone. A burly Sussex policeman and I had found it no
-light job. What would they do to assist them? Probably what I should
-have done myself. I rose and examined carefully the different billets
-of wood which were scattered round the floor. Almost at once I came
-upon what I expected. One piece, about three feet in length, had a very
-marked indentation at one end, while several were flattened at the sides
-as if they had been compressed by some considerable weight. Evidently,
-as they had dragged the stone up they had thrust the chunks of wood into
-the chink, until at last, when the opening was large enough to crawl
-through, they would hold it open by a billet placed lengthwise, which
-might very well become indented at the lower end, since the whole weight
-of the stone would press it down on to the edge of this other slab. So
-far I was still on safe ground.
-
-"And now how was I to proceed to reconstruct this midnight drama?
-Clearly, only one could fit into the hole, and that one was Brunton. The
-girl must have waited above. Brunton then unlocked the box, handed up
-the contents presumably--since they were not to be found--and then--and
-then what happened?
-
-"What smouldering fire of vengeance had suddenly sprung into flame in
-this passionate Celtic woman's soul when she saw the man who had wronged
-her--wronged her, perhaps, far more than we suspected--in her power?
-Was it a chance that the wood had slipped, and that the stone had shut
-Brunton into what had become his sepulchre? Had she only been guilty of
-silence as to his fate? Or had some sudden blow from her hand dashed the
-support away and sent the slab crashing down into its place? Be that
-as it might, I seemed to see that woman's figure still clutching at her
-treasure trove and flying wildly up the winding stair, with her ears
-ringing perhaps with the muffled screams from behind her and with the
-drumming of frenzied hands against the slab of stone which was choking
-her faithless lover's life out.
-
-"Here was the secret of her blanched face, her shaken nerves, her peals
-of hysterical laughter on the next morning. But what had been in the
-box? What had she done with that? Of course, it must have been the old
-metal and pebbles which my client had dragged from the mere. She had
-thrown them in there at the first opportunity to remove the last trace
-of her crime.
-
-"For twenty minutes I had sat motionless, thinking the matter out.
-Musgrave still stood with a very pale face, swinging his lantern and
-peering down into the hole.
-
-"'These are coins of Charles the First,' said he, holding out the few
-which had been in the box; 'you see we were right in fixing our date for
-the Ritual.'
-
-"'We may find something else of Charles the First,' I cried, as the
-probable meaning of the first two questions of the Ritual broke suddenly
-upon me. 'Let me see the contents of the bag which you fished from the
-mere.'
-
-
-"We ascended to his study, and he laid the debris before me. I could
-understand his regarding it as of small importance when I looked at it,
-for the metal was almost black and the stones lustreless and dull. I
-rubbed one of them on my sleeve, however, and it glowed afterwards like
-a spark in the dark hollow of my hand. The metal work was in the form
-of a double ring, but it had been bent and twisted out of its original
-shape.
-
-"'You must bear in mind,' said I, 'that the royal party made head in
-England even after the death of the king, and that when they at last
-fled they probably left many of their most precious possessions buried
-behind them, with the intention of returning for them in more peaceful
-times.'
-
-"'My ancestor, Sir Ralph Musgrave, was a prominent Cavalier and the
-right-hand man of Charles the Second in his wanderings,' said my friend.
-
-"'Ah, indeed!' I answered. 'Well now, I think that really should give us
-the last link that we wanted. I must congratulate you on coming into
-the possession, though in rather a tragic manner of a relic which is of
-great intrinsic value, but of even greater importance as an historical
-curiosity.'
-
-"'What is it, then?' he gasped in astonishment.
-
-"'It is nothing less than the ancient crown of the kings of England.'
-
-"'The crown!'
-
-"'Precisely. Consider what the Ritual says: How does it run? "Whose was
-it?" "His who is gone." That was after the execution of Charles. Then,
-"Who shall have it?" "He who will come." That was Charles the Second,
-whose advent was already foreseen. There can, I think, be no doubt that
-this battered and shapeless diadem once encircled the brows of the royal
-Stuarts.'
-
-"'And how came it in the pond?'
-
-"'Ah, that is a question that will take some time to answer.' And with
-that I sketched out to him the whole long chain of surmise and of proof
-which I had constructed. The twilight had closed in and the moon was
-shining brightly in the sky before my narrative was finished.
-
-"'And how was it then that Charles did not get his crown when he
-returned?' asked Musgrave, pushing back the relic into its linen bag.
-
-"'Ah, there you lay your finger upon the one point which we shall
-probably never be able to clear up. It is likely that the Musgrave who
-held the secret died in the interval, and by some oversight left this
-guide to his descendant without explaining the meaning of it. From that
-day to this it has been handed down from father to son, until at last
-it came within reach of a man who tore its secret out of it and lost his
-life in the venture.'
-
-
-"And that's the story of the Musgrave Ritual, Watson. They have the
-crown down at Hurlstone--though they had some legal bother and a
-considerable sum to pay before they were allowed to retain it. I am sure
-that if you mentioned my name they would be happy to show it to you. Of
-the woman nothing was ever heard, and the probability is that she got
-away out of England and carried herself and the memory of her crime to
-some land beyond the seas."
-
-
-
-
-Adventure VI. The Reigate Puzzle
-
-
-It was some time before the health of my friend Mr. Sherlock Holmes
-recovered from the strain caused by his immense exertions in the spring
-of '87. The whole question of the Netherland-Sumatra Company and of the
-colossal schemes of Baron Maupertuis are too recent in the minds of the
-public, and are too intimately concerned with politics and finance to be
-fitting subjects for this series of sketches. They led, however, in an
-indirect fashion to a singular and complex problem which gave my friend
-an opportunity of demonstrating the value of a fresh weapon among the
-many with which he waged his life-long battle against crime.
-
-On referring to my notes I see that it was upon the 14th of April that
-I received a telegram from Lyons which informed me that Holmes was
-lying ill in the Hotel Dulong. Within twenty-four hours I was in his
-sick-room, and was relieved to find that there was nothing formidable in
-his symptoms. Even his iron constitution, however, had broken down
-under the strain of an investigation which had extended over two months,
-during which period he had never worked less than fifteen hours a day,
-and had more than once, as he assured me, kept to his task for five days
-at a stretch. Even the triumphant issue of his labors could not save him
-from reaction after so terrible an exertion, and at a time when Europe
-was ringing with his name and when his room was literally ankle-deep
-with congratulatory telegrams I found him a prey to the blackest
-depression. Even the knowledge that he had succeeded where the police of
-three countries had failed, and that he had outmanoeuvred at every point
-the most accomplished swindler in Europe, was insufficient to rouse him
-from his nervous prostration.
-
-Three days later we were back in Baker Street together; but it was
-evident that my friend would be much the better for a change, and the
-thought of a week of spring time in the country was full of attractions
-to me also. My old friend, Colonel Hayter, who had come under my
-professional care in Afghanistan, had now taken a house near Reigate in
-Surrey, and had frequently asked me to come down to him upon a visit. On
-the last occasion he had remarked that if my friend would only come
-with me he would be glad to extend his hospitality to him also. A little
-diplomacy was needed, but when Holmes understood that the establishment
-was a bachelor one, and that he would be allowed the fullest freedom,
-he fell in with my plans and a week after our return from Lyons we were
-under the Colonel's roof. Hayter was a fine old soldier who had seen
-much of the world, and he soon found, as I had expected, that Holmes and
-he had much in common.
-
-On the evening of our arrival we were sitting in the Colonel's gun-room
-after dinner, Holmes stretched upon the sofa, while Hayter and I looked
-over his little armory of Eastern weapons.
-
-"By the way," said he suddenly, "I think I'll take one of these pistols
-upstairs with me in case we have an alarm."
-
-"An alarm!" said I.
-
-"Yes, we've had a scare in this part lately. Old Acton, who is one of
-our county magnates, had his house broken into last Monday. No great
-damage done, but the fellows are still at large."
-
-"No clue?" asked Holmes, cocking his eye at the Colonel.
-
-"None as yet. But the affair is a petty one, one of our little country
-crimes, which must seem too small for your attention, Mr. Holmes, after
-this great international affair."
-
-Holmes waved away the compliment, though his smile showed that it had
-pleased him.
-
-"Was there any feature of interest?"
-
-"I fancy not. The thieves ransacked the library and got very little for
-their pains. The whole place was turned upside down, drawers burst open,
-and presses ransacked, with the result that an odd volume of Pope's
-'Homer,' two plated candlesticks, an ivory letter-weight, a small oak
-barometer, and a ball of twine are all that have vanished."
-
-"What an extraordinary assortment!" I exclaimed.
-
-"Oh, the fellows evidently grabbed hold of everything they could get."
-
-Holmes grunted from the sofa.
-
-"The county police ought to make something of that," said he; "why, it
-is surely obvious that--"
-
-But I held up a warning finger.
-
-"You are here for a rest, my dear fellow. For Heaven's sake don't get
-started on a new problem when your nerves are all in shreds."
-
-Holmes shrugged his shoulders with a glance of comic resignation towards
-the Colonel, and the talk drifted away into less dangerous channels.
-
-It was destined, however, that all my professional caution should be
-wasted, for next morning the problem obtruded itself upon us in such a
-way that it was impossible to ignore it, and our country visit took a
-turn which neither of us could have anticipated. We were at breakfast
-when the Colonel's butler rushed in with all his propriety shaken out of
-him.
-
-"Have you heard the news, sir?" he gasped. "At the Cunningham's sir!"
-
-"Burglary!" cried the Colonel, with his coffee-cup in mid-air.
-
-"Murder!"
-
-The Colonel whistled. "By Jove!" said he. "Who's killed, then? The J.P.
-or his son?"
-
-"Neither, sir. It was William the coachman. Shot through the heart, sir,
-and never spoke again."
-
-"Who shot him, then?"
-
-"The burglar, sir. He was off like a shot and got clean away. He'd just
-broke in at the pantry window when William came on him and met his end
-in saving his master's property."
-
-"What time?"
-
-"It was last night, sir, somewhere about twelve."
-
-"Ah, then, we'll step over afterwards," said the Colonel, coolly
-settling down to his breakfast again. "It's a baddish business," he
-added when the butler had gone; "he's our leading man about here, is old
-Cunningham, and a very decent fellow too. He'll be cut up over this, for
-the man has been in his service for years and was a good servant. It's
-evidently the same villains who broke into Acton's."
-
-"And stole that very singular collection," said Holmes, thoughtfully.
-
-"Precisely."
-
-"Hum! It may prove the simplest matter in the world, but all the same
-at first glance this is just a little curious, is it not? A gang of
-burglars acting in the country might be expected to vary the scene of
-their operations, and not to crack two cribs in the same district within
-a few days. When you spoke last night of taking precautions I remember
-that it passed through my mind that this was probably the last parish
-in England to which the thief or thieves would be likely to turn their
-attention--which shows that I have still much to learn."
-
-"I fancy it's some local practitioner," said the Colonel. "In that case,
-of course, Acton's and Cunningham's are just the places he would go for,
-since they are far the largest about here."
-
-"And richest?"
-
-"Well, they ought to be, but they've had a lawsuit for some years which
-has sucked the blood out of both of them, I fancy. Old Acton has some
-claim on half Cunningham's estate, and the lawyers have been at it with
-both hands."
-
-"If it's a local villain there should not be much difficulty in running
-him down," said Holmes with a yawn. "All right, Watson, I don't intend
-to meddle."
-
-"Inspector Forrester, sir," said the butler, throwing open the door.
-
-The official, a smart, keen-faced young fellow, stepped into the room.
-"Good-morning, Colonel," said he; "I hope I don't intrude, but we hear
-that Mr. Holmes of Baker Street is here."
-
-The Colonel waved his hand towards my friend, and the Inspector bowed.
-
-"We thought that perhaps you would care to step across, Mr. Holmes."
-
-"The fates are against you, Watson," said he, laughing. "We were
-chatting about the matter when you came in, Inspector. Perhaps you
-can let us have a few details." As he leaned back in his chair in the
-familiar attitude I knew that the case was hopeless.
-
-"We had no clue in the Acton affair. But here we have plenty to go on,
-and there's no doubt it is the same party in each case. The man was
-seen."
-
-"Ah!"
-
-"Yes, sir. But he was off like a deer after the shot that killed poor
-William Kirwan was fired. Mr. Cunningham saw him from the bedroom
-window, and Mr. Alec Cunningham saw him from the back passage. It was
-quarter to twelve when the alarm broke out. Mr. Cunningham had just got
-into bed, and Mr. Alec was smoking a pipe in his dressing-gown. They
-both heard William the coachman calling for help, and Mr. Alec ran down
-to see what was the matter. The back door was open, and as he came to
-the foot of the stairs he saw two men wrestling together outside. One of
-them fired a shot, the other dropped, and the murderer rushed across the
-garden and over the hedge. Mr. Cunningham, looking out of his bedroom,
-saw the fellow as he gained the road, but lost sight of him at once. Mr.
-Alec stopped to see if he could help the dying man, and so the villain
-got clean away. Beyond the fact that he was a middle-sized man and
-dressed in some dark stuff, we have no personal clue; but we are making
-energetic inquiries, and if he is a stranger we shall soon find him
-out."
-
-"What was this William doing there? Did he say anything before he died?"
-
-"Not a word. He lives at the lodge with his mother, and as he was a
-very faithful fellow we imagine that he walked up to the house with
-the intention of seeing that all was right there. Of course this Acton
-business has put every one on their guard. The robber must have just
-burst open the door--the lock has been forced--when William came upon
-him."
-
-"Did William say anything to his mother before going out?"
-
-"She is very old and deaf, and we can get no information from her. The
-shock has made her half-witted, but I understand that she was never
-very bright. There is one very important circumstance, however. Look at
-this!"
-
-He took a small piece of torn paper from a note-book and spread it out
-upon his knee.
-
-"This was found between the finger and thumb of the dead man. It appears
-to be a fragment torn from a larger sheet. You will observe that the
-hour mentioned upon it is the very time at which the poor fellow met his
-fate. You see that his murderer might have torn the rest of the sheet
-from him or he might have taken this fragment from the murderer. It
-reads almost as though it were an appointment."
-
-Holmes took up the scrap of paper, a fac-simile of which is here
-reproduced.
-
-     d at quarter to twelve learn what maybe
-
-"Presuming that it is an appointment," continued the Inspector, "it is
-of course a conceivable theory that this William Kirwan--though he had
-the reputation of being an honest man, may have been in league with the
-thief. He may have met him there, may even have helped him to break in
-the door, and then they may have fallen out between themselves."
-
-"This writing is of extraordinary interest," said Holmes, who had been
-examining it with intense concentration. "These are much deeper waters
-than I had thought." He sank his head upon his hands, while the Inspector
-smiled at the effect which his case had had upon the famous London
-specialist.
-
-"Your last remark," said Holmes, presently, "as to the possibility of
-there being an understanding between the burglar and the servant, and
-this being a note of appointment from one to the other, is an ingenious
-and not entirely impossible supposition. But this writing opens up--" He
-sank his head into his hands again and remained for some minutes in the
-deepest thought. When he raised his face again, I was surprised to see
-that his cheek was tinged with color, and his eyes as bright as before
-his illness. He sprang to his feet with all his old energy.
-
-"I'll tell you what," said he, "I should like to have a quiet little
-glance into the details of this case. There is something in it which
-fascinates me extremely. If you will permit me, Colonel, I will leave my
-friend Watson and you, and I will step round with the Inspector to test
-the truth of one or two little fancies of mine. I will be with you again
-in half an hour."
-
-An hour and half had elapsed before the Inspector returned alone.
-
-"Mr. Holmes is walking up and down in the field outside," said he. "He
-wants us all four to go up to the house together."
-
-"To Mr. Cunningham's?"
-
-"Yes, sir."
-
-"What for?"
-
-The Inspector shrugged his shoulders. "I don't quite know, sir. Between
-ourselves, I think Mr. Holmes had not quite got over his illness yet.
-He's been behaving very queerly, and he is very much excited."
-
-"I don't think you need alarm yourself," said I. "I have usually found
-that there was method in his madness."
-
-"Some folks might say there was madness in his method," muttered the
-Inspector. "But he's all on fire to start, Colonel, so we had best go
-out if you are ready."
-
-We found Holmes pacing up and down in the field, his chin sunk upon his
-breast, and his hands thrust into his trousers pockets.
-
-"The matter grows in interest," said he. "Watson, your country-trip has
-been a distinct success. I have had a charming morning."
-
-"You have been up to the scene of the crime, I understand," said the
-Colonel.
-
-"Yes; the Inspector and I have made quite a little reconnaissance
-together."
-
-"Any success?"
-
-"Well, we have seen some very interesting things. I'll tell you what we
-did as we walk. First of all, we saw the body of this unfortunate man.
-He certainly died from a revolver wound as reported."
-
-"Had you doubted it, then?"
-
-"Oh, it is as well to test everything. Our inspection was not wasted. We
-then had an interview with Mr. Cunningham and his son, who were able
-to point out the exact spot where the murderer had broken through the
-garden-hedge in his flight. That was of great interest."
-
-"Naturally."
-
-"Then we had a look at this poor fellow's mother. We could get no
-information from her, however, as she is very old and feeble."
-
-"And what is the result of your investigations?"
-
-"The conviction that the crime is a very peculiar one. Perhaps our visit
-now may do something to make it less obscure. I think that we are both
-agreed, Inspector that the fragment of paper in the dead man's hand,
-bearing, as it does, the very hour of his death written upon it, is of
-extreme importance."
-
-"It should give a clue, Mr. Holmes."
-
-"It does give a clue. Whoever wrote that note was the man who brought
-William Kirwan out of his bed at that hour. But where is the rest of
-that sheet of paper?"
-
-"I examined the ground carefully in the hope of finding it," said the
-Inspector.
-
-"It was torn out of the dead man's hand. Why was some one so anxious to
-get possession of it? Because it incriminated him. And what would he do
-with it? Thrust it into his pocket, most likely, never noticing that a
-corner of it had been left in the grip of the corpse. If we could get
-the rest of that sheet it is obvious that we should have gone a long way
-towards solving the mystery."
-
-"Yes, but how can we get at the criminal's pocket before we catch the
-criminal?"
-
-"Well, well, it was worth thinking over. Then there is another obvious
-point. The note was sent to William. The man who wrote it could not have
-taken it; otherwise, of course, he might have delivered his own message
-by word of mouth. Who brought the note, then? Or did it come through the
-post?"
-
-"I have made inquiries," said the Inspector. "William received a letter
-by the afternoon post yesterday. The envelope was destroyed by him."
-
-"Excellent!" cried Holmes, clapping the Inspector on the back. "You've
-seen the postman. It is a pleasure to work with you. Well, here is the
-lodge, and if you will come up, Colonel, I will show you the scene of
-the crime."
-
-We passed the pretty cottage where the murdered man had lived, and
-walked up an oak-lined avenue to the fine old Queen Anne house, which
-bears the date of Malplaquet upon the lintel of the door. Holmes and
-the Inspector led us round it until we came to the side gate, which is
-separated by a stretch of garden from the hedge which lines the road. A
-constable was standing at the kitchen door.
-
-"Throw the door open, officer," said Holmes. "Now, it was on those
-stairs that young Mr. Cunningham stood and saw the two men struggling
-just where we are. Old Mr. Cunningham was at that window--the second on
-the left--and he saw the fellow get away just to the left of that bush.
-Then Mr. Alec ran out and knelt beside the wounded man. The ground is
-very hard, you see, and there are no marks to guide us." As he spoke two
-men came down the garden path, from round the angle of the house. The
-one was an elderly man, with a strong, deep-lined, heavy-eyed face; the
-other a dashing young fellow, whose bright, smiling expression and showy
-dress were in strange contract with the business which had brought us
-there.
-
-"Still at it, then?" said he to Holmes. "I thought you Londoners were
-never at fault. You don't seem to be so very quick, after all."
-
-"Ah, you must give us a little time," said Holmes good-humoredly.
-
-"You'll want it," said young Alec Cunningham. "Why, I don't see that we
-have any clue at all."
-
-"There's only one," answered the Inspector. "We thought that if we could
-only find--Good heavens, Mr. Holmes! What is the matter?"
-
-My poor friend's face had suddenly assumed the most dreadful expression.
-His eyes rolled upwards, his features writhed in agony, and with a
-suppressed groan he dropped on his face upon the ground. Horrified
-at the suddenness and severity of the attack, we carried him into the
-kitchen, where he lay back in a large chair, and breathed heavily for
-some minutes. Finally, with a shamefaced apology for his weakness, he
-rose once more.
-
-"Watson would tell you that I have only just recovered from a severe
-illness," he explained. "I am liable to these sudden nervous attacks."
-
-"Shall I send you home in my trap?" asked old Cunningham.
-
-"Well, since I am here, there is one point on which I should like to
-feel sure. We can very easily verify it."
-
-"What was it?"
-
-"Well, it seems to me that it is just possible that the arrival of
-this poor fellow William was not before, but after, the entrance of
-the burglary into the house. You appear to take it for granted that,
-although the door was forced, the robber never got in."
-
-"I fancy that is quite obvious," said Mr. Cunningham, gravely. "Why, my
-son Alec had not yet gone to bed, and he would certainly have heard any
-one moving about."
-
-"Where was he sitting?"
-
-"I was smoking in my dressing-room."
-
-"Which window is that?"
-
-"The last on the left next my father's."
-
-"Both of your lamps were lit, of course?"
-
-"Undoubtedly."
-
-"There are some very singular points here," said Holmes, smiling. "Is
-it not extraordinary that a burglary--and a burglar who had had some
-previous experience--should deliberately break into a house at a time
-when he could see from the lights that two of the family were still
-afoot?"
-
-"He must have been a cool hand."
-
-"Well, of course, if the case were not an odd one we should not have
-been driven to ask you for an explanation," said young Mr. Alec. "But as
-to your ideas that the man had robbed the house before William tackled
-him, I think it a most absurd notion. Wouldn't we have found the place
-disarranged, and missed the things which he had taken?"
-
-"It depends on what the things were," said Holmes. "You must remember
-that we are dealing with a burglar who is a very peculiar fellow, and
-who appears to work on lines of his own. Look, for example, at the
-queer lot of things which he took from Acton's--what was it?--a ball of
-string, a letter-weight, and I don't know what other odds and ends."
-
-"Well, we are quite in your hands, Mr. Holmes," said old Cunningham.
-"Anything which you or the Inspector may suggest will most certainly be
-done."
-
-"In the first place," said Holmes, "I should like you to offer a
-reward--coming from yourself, for the officials may take a little time
-before they would agree upon the sum, and these things cannot be done
-too promptly. I have jotted down the form here, if you would not mind
-signing it. Fifty pounds was quite enough, I thought."
-
-"I would willingly give five hundred," said the J.P., taking the slip
-of paper and the pencil which Holmes handed to him. "This is not quite
-correct, however," he added, glancing over the document.
-
-"I wrote it rather hurriedly."
-
-"You see you begin, 'Whereas, at about a quarter to one on Tuesday
-morning an attempt was made,' and so on. It was at a quarter to twelve,
-as a matter of fact."
-
-I was pained at the mistake, for I knew how keenly Holmes would feel any
-slip of the kind. It was his specialty to be accurate as to fact, but
-his recent illness had shaken him, and this one little incident was
-enough to show me that he was still far from being himself. He was
-obviously embarrassed for an instant, while the Inspector raised his
-eyebrows, and Alec Cunningham burst into a laugh. The old gentleman
-corrected the mistake, however, and handed the paper back to Holmes.
-
-"Get it printed as soon as possible," he said; "I think your idea is an
-excellent one."
-
-Holmes put the slip of paper carefully away into his pocket-book.
-
-"And now," said he, "it really would be a good thing that we should all
-go over the house together and make certain that this rather erratic
-burglar did not, after all, carry anything away with him."
-
-Before entering, Holmes made an examination of the door which had been
-forced. It was evident that a chisel or strong knife had been thrust
-in, and the lock forced back with it. We could see the marks in the wood
-where it had been pushed in.
-
-"You don't use bars, then?" he asked.
-
-"We have never found it necessary."
-
-"You don't keep a dog?"
-
-"Yes, but he is chained on the other side of the house."
-
-"When do the servants go to bed?"
-
-"About ten."
-
-"I understand that William was usually in bed also at that hour."
-
-"Yes."
-
-"It is singular that on this particular night he should have been up.
-Now, I should be very glad if you would have the kindness to show us
-over the house, Mr. Cunningham."
-
-A stone-flagged passage, with the kitchens branching away from it, led
-by a wooden staircase directly to the first floor of the house. It came
-out upon the landing opposite to a second more ornamental stair which
-came up from the front hall. Out of this landing opened the drawing-room
-and several bedrooms, including those of Mr. Cunningham and his son.
-Holmes walked slowly, taking keen note of the architecture of the house.
-I could tell from his expression that he was on a hot scent, and yet
-I could not in the least imagine in what direction his inferences were
-leading him.
-
-"My good sir," said Mr. Cunningham with some impatience, "this is surely
-very unnecessary. That is my room at the end of the stairs, and my
-son's is the one beyond it. I leave it to your judgment whether it was
-possible for the thief to have come up here without disturbing us."
-
-"You must try round and get on a fresh scent, I fancy," said the son
-with a rather malicious smile.
-
-"Still, I must ask you to humor me a little further. I should like, for
-example, to see how far the windows of the bedrooms command the front.
-This, I understand is your son's room"--he pushed open the door--"and
-that, I presume, is the dressing-room in which he sat smoking when the
-alarm was given. Where does the window of that look out to?" He stepped
-across the bedroom, pushed open the door, and glanced round the other
-chamber.
-
-"I hope that you are satisfied now?" said Mr. Cunningham, tartly.
-
-"Thank you, I think I have seen all that I wished."
-
-"Then if it is really necessary we can go into my room."
-
-"If it is not too much trouble."
-
-The J. P. shrugged his shoulders, and led the way into his own chamber,
-which was a plainly furnished and commonplace room. As we moved across
-it in the direction of the window, Holmes fell back until he and I were
-the last of the group. Near the foot of the bed stood a dish of oranges
-and a carafe of water. As we passed it Holmes, to my unutterable
-astonishment, leaned over in front of me and deliberately knocked the
-whole thing over. The glass smashed into a thousand pieces and the fruit
-rolled about into every corner of the room.
-
-"You've done it now, Watson," said he, coolly. "A pretty mess you've
-made of the carpet."
-
-I stooped in some confusion and began to pick up the fruit,
-understanding for some reason my companion desired me to take the blame
-upon myself. The others did the same, and set the table on its legs
-again.
-
-"Hullo!" cried the Inspector, "where's he got to?"
-
-Holmes had disappeared.
-
-"Wait here an instant," said young Alec Cunningham. "The fellow is off
-his head, in my opinion. Come with me, father, and see where he has got
-to!"
-
-They rushed out of the room, leaving the Inspector, the Colonel, and me
-staring at each other.
-
-"'Pon my word, I am inclined to agree with Master Alec," said the
-official. "It may be the effect of this illness, but it seems to me
-that--"
-
-His words were cut short by a sudden scream of "Help! Help! Murder!"
-With a thrill I recognized the voice of that of my friend. I rushed
-madly from the room on to the landing. The cries, which had sunk down
-into a hoarse, inarticulate shouting, came from the room which we had
-first visited. I dashed in, and on into the dressing-room beyond. The
-two Cunninghams were bending over the prostrate figure of Sherlock
-Holmes, the younger clutching his throat with both hands, while the
-elder seemed to be twisting one of his wrists. In an instant the three
-of us had torn them away from him, and Holmes staggered to his feet,
-very pale and evidently greatly exhausted.
-
-"Arrest these men, Inspector," he gasped.
-
-"On what charge?"
-
-"That of murdering their coachman, William Kirwan."
-
-The Inspector stared about him in bewilderment. "Oh, come now, Mr.
-Holmes," said he at last, "I'm sure you don't really mean to--"
-
-"Tut, man, look at their faces!" cried Holmes, curtly.
-
-Never certainly have I seen a plainer confession of guilt upon human
-countenances. The older man seemed numbed and dazed with a heavy, sullen
-expression upon his strongly-marked face. The son, on the other hand,
-had dropped all that jaunty, dashing style which had characterized him,
-and the ferocity of a dangerous wild beast gleamed in his dark eyes
-and distorted his handsome features. The Inspector said nothing, but,
-stepping to the door, he blew his whistle. Two of his constables came at
-the call.
-
-"I have no alternative, Mr. Cunningham," said he. "I trust that this may
-all prove to be an absurd mistake, but you can see that--Ah, would you?
-Drop it!" He struck out with his hand, and a revolver which the younger
-man was in the act of cocking clattered down upon the floor.
-
-"Keep that," said Holmes, quietly putting his foot upon it; "you will
-find it useful at the trial. But this is what we really wanted." He held
-up a little crumpled piece of paper.
-
-"The remainder of the sheet!" cried the Inspector.
-
-"Precisely."
-
-"And where was it?"
-
-"Where I was sure it must be. I'll make the whole matter clear to you
-presently. I think, Colonel, that you and Watson might return now, and
-I will be with you again in an hour at the furthest. The Inspector and I
-must have a word with the prisoners, but you will certainly see me back
-at luncheon time."
-
-
-Sherlock Holmes was as good as his word, for about one o'clock he
-rejoined us in the Colonel's smoking-room. He was accompanied by a
-little elderly gentleman, who was introduced to me as the Mr. Acton
-whose house had been the scene of the original burglary.
-
-"I wished Mr. Acton to be present while I demonstrated this small matter
-to you," said Holmes, "for it is natural that he should take a keen
-interest in the details. I am afraid, my dear Colonel, that you must
-regret the hour that you took in such a stormy petrel as I am."
-
-"On the contrary," answered the Colonel, warmly, "I consider it the
-greatest privilege to have been permitted to study your methods of
-working. I confess that they quite surpass my expectations, and that I
-am utterly unable to account for your result. I have not yet seen the
-vestige of a clue."
-
-"I am afraid that my explanation may disillusion you but it has always
-been my habit to hide none of my methods, either from my friend Watson
-or from any one who might take an intelligent interest in them. But,
-first, as I am rather shaken by the knocking about which I had in
-the dressing-room, I think that I shall help myself to a dash of your
-brandy, Colonel. My strength had been rather tried of late."
-
-"I trust that you had no more of those nervous attacks."
-
-Sherlock Holmes laughed heartily. "We will come to that in its turn,"
-said he. "I will lay an account of the case before you in its due order,
-showing you the various points which guided me in my decision. Pray
-interrupt me if there is any inference which is not perfectly clear to
-you.
-
-"It is of the highest importance in the art of detection to be able
-to recognize, out of a number of facts, which are incidental and which
-vital. Otherwise your energy and attention must be dissipated instead of
-being concentrated. Now, in this case there was not the slightest doubt
-in my mind from the first that the key of the whole matter must be
-looked for in the scrap of paper in the dead man's hand.
-
-"Before going into this, I would draw your attention to the fact that,
-if Alec Cunningham's narrative was correct, and if the assailant, after
-shooting William Kirwan, had instantly fled, then it obviously could not
-be he who tore the paper from the dead man's hand. But if it was not he,
-it must have been Alec Cunningham himself, for by the time that the old
-man had descended several servants were upon the scene. The point is a
-simple one, but the Inspector had overlooked it because he had started
-with the supposition that these county magnates had had nothing to do
-with the matter. Now, I make a point of never having any prejudices,
-and of following docilely wherever fact may lead me, and so, in the
-very first stage of the investigation, I found myself looking a little
-askance at the part which had been played by Mr. Alec Cunningham.
-
-"And now I made a very careful examination of the corner of paper which
-the Inspector had submitted to us. It was at once clear to me that it
-formed part of a very remarkable document. Here it is. Do you not now
-observe something very suggestive about it?"
-
-"It has a very irregular look," said the Colonel.
-
-"My dear sir," cried Holmes, "there cannot be the least doubt in the
-world that it has been written by two persons doing alternate words.
-When I draw your attention to the strong t's of 'at' and 'to', and ask
-you to compare them with the weak ones of 'quarter' and 'twelve,' you
-will instantly recognize the fact. A very brief analysis of these
-four words would enable you to say with the utmost confidence that the
-'learn' and the 'maybe' are written in the stronger hand, and the 'what'
-in the weaker."
-
-"By Jove, it's as clear as day!" cried the Colonel. "Why on earth should
-two men write a letter in such a fashion?"
-
-"Obviously the business was a bad one, and one of the men who distrusted
-the other was determined that, whatever was done, each should have an
-equal hand in it. Now, of the two men, it is clear that the one who
-wrote the 'at' and 'to' was the ringleader."
-
-"How do you get at that?"
-
-"We might deduce it from the mere character of the one hand as compared
-with the other. But we have more assured reasons than that for supposing
-it. If you examine this scrap with attention you will come to the
-conclusion that the man with the stronger hand wrote all his words
-first, leaving blanks for the other to fill up. These blanks were not
-always sufficient, and you can see that the second man had a squeeze
-to fit his 'quarter' in between the 'at' and the 'to,' showing that the
-latter were already written. The man who wrote all his words first is
-undoubtedly the man who planned the affair."
-
-"Excellent!" cried Mr. Acton.
-
-"But very superficial," said Holmes. "We come now, however, to a point
-which is of importance. You may not be aware that the deduction of a
-man's age from his writing is one which has brought to considerable
-accuracy by experts. In normal cases one can place a man in his true
-decade with tolerable confidence. I say normal cases, because ill-health
-and physical weakness reproduce the signs of old age, even when the
-invalid is a youth. In this case, looking at the bold, strong hand of
-the one, and the rather broken-backed appearance of the other, which
-still retains its legibility although the t's have begun to lose their
-crossing, we can say that the one was a young man and the other was
-advanced in years without being positively decrepit."
-
-"Excellent!" cried Mr. Acton again.
-
-"There is a further point, however, which is subtler and of greater
-interest. There is something in common between these hands. They belong
-to men who are blood-relatives. It may be most obvious to you in the
-Greek e's, but to me there are many small points which indicate the same
-thing. I have no doubt at all that a family mannerism can be traced in
-these two specimens of writing. I am only, of course, giving you
-the leading results now of my examination of the paper. There were
-twenty-three other deductions which would be of more interest to experts
-than to you. They all tend to deepen the impression upon my mind that
-the Cunninghams, father and son, had written this letter.
-
-"Having got so far, my next step was, of course, to examine into the
-details of the crime, and to see how far they would help us. I went up
-to the house with the Inspector, and saw all that was to be seen. The
-wound upon the dead man was, as I was able to determine with absolute
-confidence, fired from a revolver at the distance of something over
-four yards. There was no powder-blackening on the clothes. Evidently,
-therefore, Alec Cunningham had lied when he said that the two men were
-struggling when the shot was fired. Again, both father and son agreed
-as to the place where the man escaped into the road. At that point,
-however, as it happens, there is a broadish ditch, moist at the bottom.
-As there were no indications of bootmarks about this ditch, I was
-absolutely sure not only that the Cunninghams had again lied, but that
-there had never been any unknown man upon the scene at all.
-
-"And now I have to consider the motive of this singular crime. To get
-at this, I endeavored first of all to solve the reason of the original
-burglary at Mr. Acton's. I understood, from something which the Colonel
-told us, that a lawsuit had been going on between you, Mr. Acton, and
-the Cunninghams. Of course, it instantly occurred to me that they had
-broken into your library with the intention of getting at some document
-which might be of importance in the case."
-
-"Precisely so," said Mr. Acton. "There can be no possible doubt as to
-their intentions. I have the clearest claim upon half of their present
-estate, and if they could have found a single paper--which, fortunately,
-was in the strong-box of my solicitors--they would undoubtedly have
-crippled our case."
-
-"There you are," said Holmes, smiling. "It was a dangerous, reckless
-attempt, in which I seem to trace the influence of young Alec. Having
-found nothing they tried to divert suspicion by making it appear to be
-an ordinary burglary, to which end they carried off whatever they could
-lay their hands upon. That is all clear enough, but there was much that
-was still obscure. What I wanted above all was to get the missing part
-of that note. I was certain that Alec had torn it out of the dead man's
-hand, and almost certain that he must have thrust it into the pocket of
-his dressing-gown. Where else could he have put it? The only question
-was whether it was still there. It was worth an effort to find out, and
-for that object we all went up to the house.
-
-"The Cunninghams joined us, as you doubtless remember, outside the
-kitchen door. It was, of course, of the very first importance that they
-should not be reminded of the existence of this paper, otherwise they
-would naturally destroy it without delay. The Inspector was about to
-tell them the importance which we attached to it when, by the luckiest
-chance in the world, I tumbled down in a sort of fit and so changed the
-conversation.
-
-"Good heavens!" cried the Colonel, laughing, "do you mean to say all our
-sympathy was wasted and your fit an imposture?"
-
-"Speaking professionally, it was admirably done," cried I, looking in
-amazement at this man who was forever confounding me with some new phase
-of his astuteness.
-
-"It is an art which is often useful," said he. "When I recovered I
-managed, by a device which had perhaps some little merit of ingenuity,
-to get old Cunningham to write the word 'twelve,' so that I might
-compare it with the 'twelve' upon the paper."
-
-"Oh, what an ass I have been!" I exclaimed.
-
-"I could see that you were commiserating me over my weakness," said
-Holmes, laughing. "I was sorry to cause you the sympathetic pain which
-I know that you felt. We then went upstairs together, and having entered
-the room and seen the dressing-gown hanging up behind the door, I
-contrived, by upsetting a table, to engage their attention for the
-moment, and slipped back to examine the pockets. I had hardly got the
-paper, however--which was, as I had expected, in one of them--when the
-two Cunninghams were on me, and would, I verily believe, have murdered
-me then and there but for your prompt and friendly aid. As it is, I feel
-that young man's grip on my throat now, and the father has twisted my
-wrist round in the effort to get the paper out of my hand. They saw that
-I must know all about it, you see, and the sudden change from absolute
-security to complete despair made them perfectly desperate.
-
-"I had a little talk with old Cunningham afterwards as to the motive of
-the crime. He was tractable enough, though his son was a perfect demon,
-ready to blow out his own or anybody else's brains if he could have got
-to his revolver. When Cunningham saw that the case against him was so
-strong he lost all heart and made a clean breast of everything. It seems
-that William had secretly followed his two masters on the night when
-they made their raid upon Mr. Acton's, and having thus got them into
-his power, proceeded, under threats of exposure, to levy blackmail upon
-them. Mr. Alec, however, was a dangerous man to play games of that
-sort with. It was a stroke of positive genius on his part to see in the
-burglary scare which was convulsing the country side an opportunity of
-plausibly getting rid of the man whom he feared. William was decoyed up
-and shot, and had they only got the whole of the note and paid a little
-more attention to detail in the accessories, it is very possible that
-suspicion might never have been aroused."
-
-"And the note?" I asked.
-
-Sherlock Holmes placed the subjoined paper before us.
-
-     If you will only come around to the east gate you it will
-     very much surprise you and be of the greatest service to you
-     and also to Annie Morrison. But say nothing to anyone upon
-     the matter.
-
-"It is very much the sort of thing that I expected," said he. "Of
-course, we do not yet know what the relations may have been between Alec
-Cunningham, William Kirwan, and Annie Morrison. The results shows that
-the trap was skillfully baited. I am sure that you cannot fail to be
-delighted with the traces of heredity shown in the p's and in the tails
-of the g's. The absence of the i-dots in the old man's writing is also
-most characteristic. Watson, I think our quiet rest in the country has
-been a distinct success, and I shall certainly return much invigorated
-to Baker Street to-morrow."
-
-
-
-
-Adventure VII. The Crooked Man
-
-
-One summer night, a few months after my marriage, I was seated by my own
-hearth smoking a last pipe and nodding over a novel, for my day's work
-had been an exhausting one. My wife had already gone upstairs, and the
-sound of the locking of the hall door some time before told me that the
-servants had also retired. I had risen from my seat and was knocking out
-the ashes of my pipe when I suddenly heard the clang of the bell.
-
-I looked at the clock. It was a quarter to twelve. This could not be
-a visitor at so late an hour. A patient, evidently, and possibly an
-all-night sitting. With a wry face I went out into the hall and opened
-the door. To my astonishment it was Sherlock Holmes who stood upon my
-step.
-
-"Ah, Watson," said he, "I hoped that I might not be too late to catch
-you."
-
-"My dear fellow, pray come in."
-
-"You look surprised, and no wonder! Relieved, too, I fancy! Hum! You
-still smoke the Arcadia mixture of your bachelor days then! There's no
-mistaking that fluffy ash upon your coat. It's easy to tell that you
-have been accustomed to wear a uniform, Watson. You'll never pass as
-a pure-bred civilian as long as you keep that habit of carrying your
-handkerchief in your sleeve. Could you put me up to-night?"
-
-"With pleasure."
-
-"You told me that you had bachelor quarters for one, and I see that you
-have no gentleman visitor at present. Your hat-stand proclaims as much."
-
-"I shall be delighted if you will stay."
-
-"Thank you. I'll fill the vacant peg then. Sorry to see that you've had
-the British workman in the house. He's a token of evil. Not the drains,
-I hope?"
-
-"No, the gas."
-
-"Ah! He has left two nail-marks from his boot upon your linoleum
-just where the light strikes it. No, thank you, I had some supper at
-Waterloo, but I'll smoke a pipe with you with pleasure."
-
-I handed him my pouch, and he seated himself opposite to me and smoked
-for some time in silence. I was well aware that nothing but business
-of importance would have brought him to me at such an hour, so I waited
-patiently until he should come round to it.
-
-"I see that you are professionally rather busy just now," said he,
-glancing very keenly across at me.
-
-"Yes, I've had a busy day," I answered. "It may seem very foolish in
-your eyes," I added, "but really I don't know how you deduced it."
-
-Holmes chuckled to himself.
-
-"I have the advantage of knowing your habits, my dear Watson," said he.
-"When your round is a short one you walk, and when it is a long one you
-use a hansom. As I perceive that your boots, although used, are by
-no means dirty, I cannot doubt that you are at present busy enough to
-justify the hansom."
-
-"Excellent!" I cried.
-
-"Elementary," said he. "It is one of those instances where the reasoner
-can produce an effect which seems remarkable to his neighbor, because
-the latter has missed the one little point which is the basis of the
-deduction. The same may be said, my dear fellow, for the effect of
-some of these little sketches of yours, which is entirely meretricious,
-depending as it does upon your retaining in your own hands some factors
-in the problem which are never imparted to the reader. Now, at present
-I am in the position of these same readers, for I hold in this hand
-several threads of one of the strangest cases which ever perplexed a
-man's brain, and yet I lack the one or two which are needful to complete
-my theory. But I'll have them, Watson, I'll have them!" His eyes kindled
-and a slight flush sprang into his thin cheeks. For an instant only.
-When I glanced again his face had resumed that red-Indian composure
-which had made so many regard him as a machine rather than a man.
-
-"The problem presents features of interest," said he. "I may even say
-exceptional features of interest. I have already looked into the matter,
-and have come, as I think, within sight of my solution. If you could
-accompany me in that last step you might be of considerable service to
-me."
-
-"I should be delighted."
-
-"Could you go as far as Aldershot to-morrow?"
-
-"I have no doubt Jackson would take my practice."
-
-"Very good. I want to start by the 11.10 from Waterloo."
-
-"That would give me time."
-
-"Then, if you are not too sleepy, I will give you a sketch of what has
-happened, and of what remains to be done."
-
-"I was sleepy before you came. I am quite wakeful now."
-
-"I will compress the story as far as may be done without omitting
-anything vital to the case. It is conceivable that you may even have
-read some account of the matter. It is the supposed murder of Colonel
-Barclay, of the Royal Munsters, at Aldershot, which I am investigating."
-
-"I have heard nothing of it."
-
-"It has not excited much attention yet, except locally. The facts are
-only two days old. Briefly they are these:
-
-"The Royal Munsters is, as you know, one of the most famous Irish
-regiments in the British army. It did wonders both in the Crimea and the
-Mutiny, and has since that time distinguished itself upon every possible
-occasion. It was commanded up to Monday night by James Barclay,
-a gallant veteran, who started as a full private, was raised to
-commissioned rank for his bravery at the time of the Mutiny, and so
-lived to command the regiment in which he had once carried a musket.
-
-"Colonel Barclay had married at the time when he was a sergeant, and
-his wife, whose maiden name was Miss Nancy Devoy, was the daughter of a
-former color-sergeant in the same corps. There was, therefore, as can
-be imagined, some little social friction when the young couple (for
-they were still young) found themselves in their new surroundings. They
-appear, however, to have quickly adapted themselves, and Mrs. Barclay
-has always, I understand, been as popular with the ladies of the
-regiment as her husband was with his brother officers. I may add that
-she was a woman of great beauty, and that even now, when she has been
-married for upwards of thirty years, she is still of a striking and
-queenly appearance.
-
-"Colonel Barclay's family life appears to have been a uniformly happy
-one. Major Murphy, to whom I owe most of my facts, assures me that he
-has never heard of any misunderstanding between the pair. On the whole,
-he thinks that Barclay's devotion to his wife was greater than his
-wife's to Barclay. He was acutely uneasy if he were absent from her for
-a day. She, on the other hand, though devoted and faithful, was less
-obtrusively affectionate. But they were regarded in the regiment as
-the very model of a middle-aged couple. There was absolutely nothing in
-their mutual relations to prepare people for the tragedy which was to
-follow.
-
-"Colonel Barclay himself seems to have had some singular traits in his
-character. He was a dashing, jovial old soldier in his usual mood,
-but there were occasions on which he seemed to show himself capable
-of considerable violence and vindictiveness. This side of his nature,
-however, appears never to have been turned towards his wife. Another
-fact, which had struck Major Murphy and three out of five of the other
-officers with whom I conversed, was the singular sort of depression
-which came upon him at times. As the major expressed it, the smile had
-often been struck from his mouth, as if by some invisible hand, when he
-has been joining the gayeties and chaff of the mess-table. For days on
-end, when the mood was on him, he has been sunk in the deepest gloom.
-This and a certain tinge of superstition were the only unusual traits
-in his character which his brother officers had observed. The latter
-peculiarity took the form of a dislike to being left alone, especially
-after dark. This puerile feature in a nature which was conspicuously
-manly had often given rise to comment and conjecture.
-
-"The first battalion of the Royal Munsters (which is the old 117th) has
-been stationed at Aldershot for some years. The married officers live
-out of barracks, and the Colonel has during all this time occupied a
-villa called Lachine, about half a mile from the north camp. The house
-stands in its own grounds, but the west side of it is not more than
-thirty yards from the high-road. A coachman and two maids form the
-staff of servants. These with their master and mistress were the sole
-occupants of Lachine, for the Barclays had no children, nor was it usual
-for them to have resident visitors.
-
-"Now for the events at Lachine between nine and ten on the evening of
-last Monday."
-
-"Mrs. Barclay was, it appears, a member of the Roman Catholic Church,
-and had interested herself very much in the establishment of the Guild
-of St. George, which was formed in connection with the Watt Street
-Chapel for the purpose of supplying the poor with cast-off clothing.
-A meeting of the Guild had been held that evening at eight, and Mrs.
-Barclay had hurried over her dinner in order to be present at it. When
-leaving the house she was heard by the coachman to make some commonplace
-remark to her husband, and to assure him that she would be back before
-very long. She then called for Miss Morrison, a young lady who lives
-in the next villa, and the two went off together to their meeting. It
-lasted forty minutes, and at a quarter-past nine Mrs. Barclay returned
-home, having left Miss Morrison at her door as she passed.
-
-"There is a room which is used as a morning-room at Lachine. This faces
-the road and opens by a large glass folding-door on to the lawn. The
-lawn is thirty yards across, and is only divided from the highway by
-a low wall with an iron rail above it. It was into this room that Mrs.
-Barclay went upon her return. The blinds were not down, for the room was
-seldom used in the evening, but Mrs. Barclay herself lit the lamp and
-then rang the bell, asking Jane Stewart, the house-maid, to bring her
-a cup of tea, which was quite contrary to her usual habits. The Colonel
-had been sitting in the dining-room, but hearing that his wife had
-returned he joined her in the morning-room. The coachman saw him cross
-the hall and enter it. He was never seen again alive.
-
-"The tea which had been ordered was brought up at the end of ten
-minutes; but the maid, as she approached the door, was surprised to
-hear the voices of her master and mistress in furious altercation. She
-knocked without receiving any answer, and even turned the handle, but
-only to find that the door was locked upon the inside. Naturally enough
-she ran down to tell the cook, and the two women with the coachman came
-up into the hall and listened to the dispute which was still raging.
-They all agreed that only two voices were to be heard, those of Barclay
-and of his wife. Barclay's remarks were subdued and abrupt, so that none
-of them were audible to the listeners. The lady's, on the other hand,
-were most bitter, and when she raised her voice could be plainly heard.
-'You coward!' she repeated over and over again. 'What can be done now?
-What can be done now? Give me back my life. I will never so much as
-breathe the same air with you again! You coward! You coward!' Those were
-scraps of her conversation, ending in a sudden dreadful cry in the man's
-voice, with a crash, and a piercing scream from the woman. Convinced
-that some tragedy had occurred, the coachman rushed to the door and
-strove to force it, while scream after scream issued from within. He was
-unable, however, to make his way in, and the maids were too distracted
-with fear to be of any assistance to him. A sudden thought struck him,
-however, and he ran through the hall door and round to the lawn upon
-which the long French windows open. One side of the window was open,
-which I understand was quite usual in the summer-time, and he passed
-without difficulty into the room. His mistress had ceased to scream and
-was stretched insensible upon a couch, while with his feet tilted over
-the side of an arm-chair, and his head upon the ground near the corner
-of the fender, was lying the unfortunate soldier stone dead in a pool of
-his own blood.
-
-"Naturally, the coachman's first thought, on finding that he could do
-nothing for his master, was to open the door. But here an unexpected and
-singular difficulty presented itself. The key was not in the inner side
-of the door, nor could he find it anywhere in the room. He went out
-again, therefore, through the window, and having obtained the help of
-a policeman and of a medical man, he returned. The lady, against whom
-naturally the strongest suspicion rested, was removed to her room, still
-in a state of insensibility. The Colonel's body was then placed upon the
-sofa, and a careful examination made of the scene of the tragedy.
-
-"The injury from which the unfortunate veteran was suffering was found
-to be a jagged cut some two inches long at the back part of his head,
-which had evidently been caused by a violent blow from a blunt weapon.
-Nor was it difficult to guess what that weapon may have been. Upon the
-floor, close to the body, was lying a singular club of hard carved wood
-with a bone handle. The Colonel possessed a varied collection of weapons
-brought from the different countries in which he had fought, and it
-is conjectured by the police that his club was among his trophies. The
-servants deny having seen it before, but among the numerous curiosities
-in the house it is possible that it may have been overlooked. Nothing
-else of importance was discovered in the room by the police, save the
-inexplicable fact that neither upon Mrs. Barclay's person nor upon that
-of the victim nor in any part of the room was the missing key to
-be found. The door had eventually to be opened by a locksmith from
-Aldershot.
-
-"That was the state of things, Watson, when upon the Tuesday morning I,
-at the request of Major Murphy, went down to Aldershot to supplement
-the efforts of the police. I think that you will acknowledge that the
-problem was already one of interest, but my observations soon made me
-realize that it was in truth much more extraordinary than would at first
-sight appear.
-
-"Before examining the room I cross-questioned the servants, but only
-succeeded in eliciting the facts which I have already stated. One other
-detail of interest was remembered by Jane Stewart, the housemaid. You
-will remember that on hearing the sound of the quarrel she descended and
-returned with the other servants. On that first occasion, when she was
-alone, she says that the voices of her master and mistress were sunk
-so low that she could hear hardly anything, and judged by their tones
-rather than their words that they had fallen out. On my pressing her,
-however, she remembered that she heard the word David uttered twice by
-the lady. The point is of the utmost importance as guiding us towards
-the reason of the sudden quarrel. The Colonel's name, you remember, was
-James.
-
-"There was one thing in the case which had made the deepest impression
-both upon the servants and the police. This was the contortion of the
-Colonel's face. It had set, according to their account, into the most
-dreadful expression of fear and horror which a human countenance is
-capable of assuming. More than one person fainted at the mere sight
-of him, so terrible was the effect. It was quite certain that he had
-foreseen his fate, and that it had caused him the utmost horror. This,
-of course, fitted in well enough with the police theory, if the Colonel
-could have seen his wife making a murderous attack upon him. Nor was
-the fact of the wound being on the back of his head a fatal objection to
-this, as he might have turned to avoid the blow. No information could
-be got from the lady herself, who was temporarily insane from an acute
-attack of brain-fever.
-
-"From the police I learned that Miss Morrison, who you remember went out
-that evening with Mrs. Barclay, denied having any knowledge of what it
-was which had caused the ill-humor in which her companion had returned.
-
-"Having gathered these facts, Watson, I smoked several pipes over them,
-trying to separate those which were crucial from others which were
-merely incidental. There could be no question that the most distinctive
-and suggestive point in the case was the singular disappearance of the
-door-key. A most careful search had failed to discover it in the room.
-Therefore it must have been taken from it. But neither the Colonel
-nor the Colonel's wife could have taken it. That was perfectly clear.
-Therefore a third person must have entered the room. And that third
-person could only have come in through the window. It seemed to me that
-a careful examination of the room and the lawn might possibly reveal
-some traces of this mysterious individual. You know my methods, Watson.
-There was not one of them which I did not apply to the inquiry. And it
-ended by my discovering traces, but very different ones from those which
-I had expected. There had been a man in the room, and he had crossed
-the lawn coming from the road. I was able to obtain five very clear
-impressions of his foot-marks: one in the roadway itself, at the point
-where he had climbed the low wall, two on the lawn, and two very faint
-ones upon the stained boards near the window where he had entered.
-He had apparently rushed across the lawn, for his toe-marks were much
-deeper than his heels. But it was not the man who surprised me. It was
-his companion."
-
-"His companion!"
-
-Holmes pulled a large sheet of tissue-paper out of his pocket and
-carefully unfolded it upon his knee.
-
-"What do you make of that?" he asked.
-
-The paper was covered with he tracings of the foot-marks of some small
-animal. It had five well-marked foot-pads, an indication of long nails,
-and the whole print might be nearly as large as a dessert-spoon.
-
-"It's a dog," said I.
-
-"Did you ever hear of a dog running up a curtain? I found distinct
-traces that this creature had done so."
-
-"A monkey, then?"
-
-"But it is not the print of a monkey."
-
-"What can it be, then?"
-
-"Neither dog nor cat nor monkey nor any creature that we are familiar
-with. I have tried to reconstruct it from the measurements. Here are
-four prints where the beast has been standing motionless. You see that
-it is no less than fifteen inches from fore-foot to hind. Add to that
-the length of neck and head, and you get a creature not much less than
-two feet long--probably more if there is any tail. But now observe this
-other measurement. The animal has been moving, and we have the length
-of its stride. In each case it is only about three inches. You have an
-indication, you see, of a long body with very short legs attached to it.
-It has not been considerate enough to leave any of its hair behind it.
-But its general shape must be what I have indicated, and it can run up a
-curtain, and it is carnivorous."
-
-"How do you deduce that?"
-
-"Because it ran up the curtain. A canary's cage was hanging in the
-window, and its aim seems to have been to get at the bird."
-
-"Then what was the beast?"
-
-"Ah, if I could give it a name it might go a long way towards solving
-the case. On the whole, it was probably some creature of the weasel and
-stoat tribe--and yet it is larger than any of these that I have seen."
-
-"But what had it to do with the crime?"
-
-"That, also, is still obscure. But we have learned a good deal, you
-perceive. We know that a man stood in the road looking at the quarrel
-between the Barclays--the blinds were up and the room lighted. We know,
-also, that he ran across the lawn, entered the room, accompanied by a
-strange animal, and that he either struck the Colonel or, as is equally
-possible, that the Colonel fell down from sheer fright at the sight of
-him, and cut his head on the corner of the fender. Finally, we have the
-curious fact that the intruder carried away the key with him when he
-left."
-
-"Your discoveries seem to have left the business more obscure that it
-was before," said I.
-
-"Quite so. They undoubtedly showed that the affair was much deeper than
-was at first conjectured. I thought the matter over, and I came to
-the conclusion that I must approach the case from another aspect. But
-really, Watson, I am keeping you up, and I might just as well tell you
-all this on our way to Aldershot to-morrow."
-
-"Thank you, you have gone rather too far to stop."
-
-"It is quite certain that when Mrs. Barclay left the house at half-past
-seven she was on good terms with her husband. She was never, as I think
-I have said, ostentatiously affectionate, but she was heard by the
-coachman chatting with the Colonel in a friendly fashion. Now, it was
-equally certain that, immediately on her return, she had gone to the
-room in which she was least likely to see her husband, had flown to tea
-as an agitated woman will, and finally, on his coming in to her, had
-broken into violent recriminations. Therefore something had occurred
-between seven-thirty and nine o'clock which had completely altered her
-feelings towards him. But Miss Morrison had been with her during the
-whole of that hour and a half. It was absolutely certain, therefore, in
-spite of her denial, that she must know something of the matter.
-
-"My first conjecture was, that possibly there had been some passages
-between this young lady and the old soldier, which the former had now
-confessed to the wife. That would account for the angry return, and
-also for the girl's denial that anything had occurred. Nor would it be
-entirely incompatible with most of the words overhead. But there was the
-reference to David, and there was the known affection of the Colonel for
-his wife, to weigh against it, to say nothing of the tragic intrusion
-of this other man, which might, of course, be entirely disconnected with
-what had gone before. It was not easy to pick one's steps, but, on the
-whole, I was inclined to dismiss the idea that there had been anything
-between the Colonel and Miss Morrison, but more than ever convinced that
-the young lady held the clue as to what it was which had turned Mrs.
-Barclay to hatred of her husband. I took the obvious course, therefore,
-of calling upon Miss M., of explaining to her that I was perfectly
-certain that she held the facts in her possession, and of assuring her
-that her friend, Mrs. Barclay, might find herself in the dock upon a
-capital charge unless the matter were cleared up.
-
-"Miss Morrison is a little ethereal slip of a girl, with timid eyes
-and blond hair, but I found her by no means wanting in shrewdness and
-common-sense. She sat thinking for some time after I had spoken, and
-then, turning to me with a brisk air of resolution, she broke into a
-remarkable statement which I will condense for your benefit.
-
-"'I promised my friend that I would say nothing of the matter, and a
-promise is a promise,' said she; 'but if I can really help her when
-so serious a charge is laid against her, and when her own mouth, poor
-darling, is closed by illness, then I think I am absolved from my
-promise. I will tell you exactly what happened upon Monday evening.
-
-"'We were returning from the Watt Street Mission about a quarter to nine
-o'clock. On our way we had to pass through Hudson Street, which is
-a very quiet thoroughfare. There is only one lamp in it, upon the
-left-hand side, and as we approached this lamp I saw a man coming
-towards us with his back very bent, and something like a box slung over
-one of his shoulders. He appeared to be deformed, for he carried his
-head low and walked with his knees bent. We were passing him when he
-raised his face to look at us in the circle of light thrown by the lamp,
-and as he did so he stopped and screamed out in a dreadful voice, "My
-God, it's Nancy!" Mrs. Barclay turned as white as death, and would have
-fallen down had the dreadful-looking creature not caught hold of her. I
-was going to call for the police, but she, to my surprise, spoke quite
-civilly to the fellow.
-
-"'"I thought you had been dead this thirty years, Henry," said she, in a
-shaking voice.
-
-"'"So I have," said he, and it was awful to hear the tones that he said
-it in. He had a very dark, fearsome face, and a gleam in his eyes that
-comes back to me in my dreams. His hair and whiskers were shot with
-gray, and his face was all crinkled and puckered like a withered apple.
-
-"'"Just walk on a little way, dear," said Mrs. Barclay; "I want to have
-a word with this man. There is nothing to be afraid of." She tried to
-speak boldly, but she was still deadly pale and could hardly get her
-words out for the trembling of her lips.
-
-"'I did as she asked me, and they talked together for a few minutes.
-Then she came down the street with her eyes blazing, and I saw the
-crippled wretch standing by the lamp-post and shaking his clenched fists
-in the air as if he were mad with rage. She never said a word until we
-were at the door here, when she took me by the hand and begged me to
-tell no one what had happened.
-
-"'"It's an old acquaintance of mine who has come down in the world,"
-said she. When I promised her I would say nothing she kissed me, and I
-have never seen her since. I have told you now the whole truth, and if
-I withheld it from the police it is because I did not realize then the
-danger in which my dear friend stood. I know that it can only be to her
-advantage that everything should be known.'
-
-"There was her statement, Watson, and to me, as you can imagine, it was
-like a light on a dark night. Everything which had been disconnected
-before began at once to assume its true place, and I had a shadowy
-presentiment of the whole sequence of events. My next step obviously was
-to find the man who had produced such a remarkable impression upon Mrs.
-Barclay. If he were still in Aldershot it should not be a very difficult
-matter. There are not such a very great number of civilians, and a
-deformed man was sure to have attracted attention. I spent a day in the
-search, and by evening--this very evening, Watson--I had run him down.
-The man's name is Henry Wood, and he lives in lodgings in this same
-street in which the ladies met him. He has only been five days in the
-place. In the character of a registration-agent I had a most interesting
-gossip with his landlady. The man is by trade a conjurer and performer,
-going round the canteens after nightfall, and giving a little
-entertainment at each. He carries some creature about with him in that
-box; about which the landlady seemed to be in considerable trepidation,
-for she had never seen an animal like it. He uses it in some of his
-tricks according to her account. So much the woman was able to tell me,
-and also that it was a wonder the man lived, seeing how twisted he was,
-and that he spoke in a strange tongue sometimes, and that for the last
-two nights she had heard him groaning and weeping in his bedroom. He
-was all right, as far as money went, but in his deposit he had given her
-what looked like a bad florin. She showed it to me, Watson, and it was
-an Indian rupee.
-
-"So now, my dear fellow, you see exactly how we stand and why it is I
-want you. It is perfectly plain that after the ladies parted from this
-man he followed them at a distance, that he saw the quarrel between
-husband and wife through the window, that he rushed in, and that
-the creature which he carried in his box got loose. That is all very
-certain. But he is the only person in this world who can tell us exactly
-what happened in that room."
-
-"And you intend to ask him?"
-
-"Most certainly--but in the presence of a witness."
-
-"And I am the witness?"
-
-"If you will be so good. If he can clear the matter up, well and good.
-If he refuses, we have no alternative but to apply for a warrant."
-
-"But how do you know he'll be there when we return?"
-
-"You may be sure that I took some precautions. I have one of my Baker
-Street boys mounting guard over him who would stick to him like a burr,
-go where he might. We shall find him in Hudson Street to-morrow, Watson,
-and meanwhile I should be the criminal myself if I kept you out of bed
-any longer."
-
-It was midday when we found ourselves at the scene of the tragedy, and,
-under my companion's guidance, we made our way at once to Hudson Street.
-In spite of his capacity for concealing his emotions, I could easily see
-that Holmes was in a state of suppressed excitement, while I was myself
-tingling with that half-sporting, half-intellectual pleasure which
-I invariably experienced when I associated myself with him in his
-investigations.
-
-"This is the street," said he, as we turned into a short thoroughfare
-lined with plain two-storied brick houses. "Ah, here is Simpson to
-report."
-
-"He's in all right, Mr. Holmes," cried a small street Arab, running up
-to us.
-
-"Good, Simpson!" said Holmes, patting him on the head. "Come along,
-Watson. This is the house." He sent in his card with a message that he
-had come on important business, and a moment later we were face to face
-with the man whom we had come to see. In spite of the warm weather he
-was crouching over a fire, and the little room was like an oven. The
-man sat all twisted and huddled in his chair in a way which gave an
-indescribably impression of deformity; but the face which he turned
-towards us, though worn and swarthy, must at some time have been
-remarkable for its beauty. He looked suspiciously at us now out of
-yellow-shot, bilious eyes, and, without speaking or rising, he waved
-towards two chairs.
-
-"Mr. Henry Wood, late of India, I believe," said Holmes, affably. "I've
-come over this little matter of Colonel Barclay's death."
-
-"What should I know about that?"
-
-"That's what I want to ascertain. You know, I suppose, that unless the
-matter is cleared up, Mrs. Barclay, who is an old friend of yours, will
-in all probability be tried for murder."
-
-The man gave a violent start.
-
-"I don't know who you are," he cried, "nor how you come to know what you
-do know, but will you swear that this is true that you tell me?"
-
-"Why, they are only waiting for her to come to her senses to arrest
-her."
-
-"My God! Are you in the police yourself?"
-
-"No."
-
-"What business is it of yours, then?"
-
-"It's every man's business to see justice done."
-
-"You can take my word that she is innocent."
-
-"Then you are guilty."
-
-"No, I am not."
-
-"Who killed Colonel James Barclay, then?"
-
-"It was a just providence that killed him. But, mind you this, that if
-I had knocked his brains out, as it was in my heart to do, he would have
-had no more than his due from my hands. If his own guilty conscience had
-not struck him down it is likely enough that I might have had his blood
-upon my soul. You want me to tell the story. Well, I don't know why I
-shouldn't, for there's no cause for me to be ashamed of it.
-
-"It was in this way, sir. You see me now with my back like a camel and
-my ribs all awry, but there was a time when Corporal Henry Wood was the
-smartest man in the 117th foot. We were in India then, in cantonments,
-at a place we'll call Bhurtee. Barclay, who died the other day, was
-sergeant in the same company as myself, and the belle of the regiment,
-ay, and the finest girl that ever had the breath of life between her
-lips, was Nancy Devoy, the daughter of the color-sergeant. There were
-two men that loved her, and one that she loved, and you'll smile when
-you look at this poor thing huddled before the fire, and hear me say
-that it was for my good looks that she loved me.
-
-"Well, though I had her heart, her father was set upon her marrying
-Barclay. I was a harum-scarum, reckless lad, and he had had an
-education, and was already marked for the sword-belt. But the girl held
-true to me, and it seemed that I would have had her when the Mutiny
-broke out, and all hell was loose in the country.
-
-"We were shut up in Bhurtee, the regiment of us with half a battery of
-artillery, a company of Sikhs, and a lot of civilians and women-folk.
-There were ten thousand rebels round us, and they were as keen as a set
-of terriers round a rat-cage. About the second week of it our water gave
-out, and it was a question whether we could communicate with General
-Neill's column, which was moving up country. It was our only chance, for
-we could not hope to fight our way out with all the women and children,
-so I volunteered to go out and to warn General Neill of our danger. My
-offer was accepted, and I talked it over with Sergeant Barclay, who was
-supposed to know the ground better than any other man, and who drew up
-a route by which I might get through the rebel lines. At ten o'clock the
-same night I started off upon my journey. There were a thousand lives to
-save, but it was of only one that I was thinking when I dropped over the
-wall that night.
-
-"My way ran down a dried-up watercourse, which we hoped would screen
-me from the enemy's sentries; but as I crept round the corner of it
-I walked right into six of them, who were crouching down in the dark
-waiting for me. In an instant I was stunned with a blow and bound hand
-and foot. But the real blow was to my heart and not to my head, for as
-I came to and listened to as much as I could understand of their talk,
-I heard enough to tell me that my comrade, the very man who had arranged
-the way that I was to take, had betrayed me by means of a native servant
-into the hands of the enemy.
-
-"Well, there's no need for me to dwell on that part of it. You know now
-what James Barclay was capable of. Bhurtee was relieved by Neill next
-day, but the rebels took me away with them in their retreat, and it was
-many a long year before ever I saw a white face again. I was tortured
-and tried to get away, and was captured and tortured again. You can see
-for yourselves the state in which I was left. Some of them that fled
-into Nepaul took me with them, and then afterwards I was up past
-Darjeeling. The hill-folk up there murdered the rebels who had me, and
-I became their slave for a time until I escaped; but instead of going
-south I had to go north, until I found myself among the Afghans. There
-I wandered about for many a year, and at last came back to the Punjab,
-where I lived mostly among the natives and picked up a living by the
-conjuring tricks that I had learned. What use was it for me, a wretched
-cripple, to go back to England or to make myself known to my old
-comrades? Even my wish for revenge would not make me do that. I had
-rather that Nancy and my old pals should think of Harry Wood as having
-died with a straight back, than see him living and crawling with a stick
-like a chimpanzee. They never doubted that I was dead, and I meant that
-they never should. I heard that Barclay had married Nancy, and that he
-was rising rapidly in the regiment, but even that did not make me speak.
-
-"But when one gets old one has a longing for home. For years I've been
-dreaming of the bright green fields and the hedges of England. At last I
-determined to see them before I died. I saved enough to bring me across,
-and then I came here where the soldiers are, for I know their ways and
-how to amuse them and so earn enough to keep me."
-
-"Your narrative is most interesting," said Sherlock Holmes. "I have
-already heard of your meeting with Mrs. Barclay, and your mutual
-recognition. You then, as I understand, followed her home and saw
-through the window an altercation between her husband and her, in which
-she doubtless cast his conduct to you in his teeth. Your own feelings
-overcame you, and you ran across the lawn and broke in upon them."
-
-"I did, sir, and at the sight of me he looked as I have never seen a man
-look before, and over he went with his head on the fender. But he was
-dead before he fell. I read death on his face as plain as I can read
-that text over the fire. The bare sight of me was like a bullet through
-his guilty heart."
-
-"And then?"
-
-"Then Nancy fainted, and I caught up the key of the door from her hand,
-intending to unlock it and get help. But as I was doing it it seemed to
-me better to leave it alone and get away, for the thing might look black
-against me, and any way my secret would be out if I were taken. In my
-haste I thrust the key into my pocket, and dropped my stick while I was
-chasing Teddy, who had run up the curtain. When I got him into his box,
-from which he had slipped, I was off as fast as I could run."
-
-"Who's Teddy?" asked Holmes.
-
-The man leaned over and pulled up the front of a kind of hutch in
-the corner. In an instant out there slipped a beautiful reddish-brown
-creature, thin and lithe, with the legs of a stoat, a long, thin nose,
-and a pair of the finest red eyes that ever I saw in an animal's head.
-
-"It's a mongoose," I cried.
-
-"Well, some call them that, and some call them ichneumon," said the
-man. "Snake-catcher is what I call them, and Teddy is amazing quick on
-cobras. I have one here without the fangs, and Teddy catches it every
-night to please the folk in the canteen.
-
-"Any other point, sir?"
-
-"Well, we may have to apply to you again if Mrs. Barclay should prove to
-be in serious trouble."
-
-"In that case, of course, I'd come forward."
-
-"But if not, there is no object in raking up this scandal against a
-dead man, foully as he has acted. You have at least the satisfaction
-of knowing that for thirty years of his life his conscience bitterly
-reproached him for this wicked deed. Ah, there goes Major Murphy on the
-other side of the street. Good-by, Wood. I want to learn if anything has
-happened since yesterday."
-
-We were in time to overtake the major before he reached the corner.
-
-"Ah, Holmes," he said: "I suppose you have heard that all this fuss has
-come to nothing?"
-
-"What then?"
-
-"The inquest is just over. The medical evidence showed conclusively
-that death was due to apoplexy. You see it was quite a simple case after
-all."
-
-"Oh, remarkably superficial," said Holmes, smiling. "Come, Watson, I
-don't think we shall be wanted in Aldershot any more."
-
-"There's one thing," said I, as we walked down to the station. "If the
-husband's name was James, and the other was Henry, what was this talk
-about David?"
-
-"That one word, my dear Watson, should have told me the whole story had
-I been the ideal reasoner which you are so fond of depicting. It was
-evidently a term of reproach."
-
-"Of reproach?"
-
-"Yes; David strayed a little occasionally, you know, and on one occasion
-in the same direction as Sergeant James Barclay. You remember the small
-affair of Uriah and Bathsheba? My biblical knowledge is a trifle rusty,
-I fear, but you will find the story in the first or second of Samuel."
-
-
-
-
-Adventure VIII. The Resident Patient
-
-
-Glancing over the somewhat incoherent series of Memoirs with which I
-have endeavored to illustrate a few of the mental peculiarities of my
-friend Mr. Sherlock Holmes, I have been struck by the difficulty which I
-have experienced in picking out examples which shall in every way answer
-my purpose. For in those cases in which Holmes has performed some tour
-de force of analytical reasoning, and has demonstrated the value of his
-peculiar methods of investigation, the facts themselves have often been
-so slight or so commonplace that I could not feel justified in laying
-them before the public. On the other hand, it has frequently happened
-that he has been concerned in some research where the facts have been of
-the most remarkable and dramatic character, but where the share which he
-has himself taken in determining their causes has been less pronounced
-than I, as his biographer, could wish. The small matter which I have
-chronicled under the heading of "A Study in Scarlet," and that other
-later one connected with the loss of the Gloria Scott, may serve as
-examples of this Scylla and Charybdis which are forever threatening the
-historian. It may be that in the business of which I am now about to
-write the part which my friend played is not sufficiently accentuated;
-and yet the whole train of circumstances is so remarkable that I cannot
-bring myself to omit it entirely from this series.
-
-It had been a close, rainy day in October. Our blinds were half-drawn,
-and Holmes lay curled upon the sofa, reading and re-reading a letter
-which he had received by the morning post. For myself, my term of
-service in India had trained me to stand heat better than cold, and
-a thermometer of 90 was no hardship. But the paper was uninteresting.
-Parliament had risen. Everybody was out of town, and I yearned for the
-glades of the New Forest or the shingle of Southsea. A depleted bank
-account had caused me to postpone my holiday, and as to my companion,
-neither the country nor the sea presented the slightest attraction to
-him. He loved to lie in the very centre of five millions of people, with
-his filaments stretching out and running through them, responsive to
-every little rumor or suspicion of unsolved crime. Appreciation of
-Nature found no place among his many gifts, and his only change was
-when he turned his mind from the evil-doer of the town to track down his
-brother of the country.
-
-Finding that Holmes was too absorbed for conversation, I had tossed
-aside the barren paper, and leaning back in my chair, I fell into a
-brown study. Suddenly my companion's voice broke in upon my thoughts.
-
-"You are right, Watson," said he. "It does seem a very preposterous way
-of settling a dispute."
-
-"Most preposterous!" I exclaimed, and then, suddenly realizing how
-he had echoed the inmost thought of my soul, I sat up in my chair and
-stared at him in blank amazement.
-
-"What is this, Holmes?" I cried. "This is beyond anything which I could
-have imagined."
-
-He laughed heartily at my perplexity.
-
-"You remember," said he, "that some little time ago, when I read you the
-passage in one of Poe's sketches, in which a close reasoner follows the
-unspoken thought of his companion, you were inclined to treat the
-matter as a mere tour de force of the author. On my remarking that I
-was constantly in the habit of doing the same thing you expressed
-incredulity."
-
-"Oh, no!"
-
-"Perhaps not with your tongue, my dear Watson, but certainly with your
-eyebrows. So when I saw you throw down your paper and enter upon a train
-of thought, I was very happy to have the opportunity of reading it
-off, and eventually of breaking into it, as a proof that I had been in
-rapport with you."
-
-But I was still far from satisfied. "In the example which you read to
-me," said I, "the reasoner drew his conclusions from the actions of the
-man whom he observed. If I remember right, he stumbled over a heap
-of stones, looked up at the stars, and so on. But I have been seated
-quietly in my chair, and what clues can I have given you?"
-
-"You do yourself an injustice. The features are given to man as the
-means by which he shall express his emotions, and yours are faithful
-servants."
-
-"Do you mean to say that you read my train of thoughts from my
-features?"
-
-"Your features, and especially your eyes. Perhaps you cannot yourself
-recall how your reverie commenced?"
-
-"No, I cannot."
-
-"Then I will tell you. After throwing down your paper, which was the
-action which drew my attention to you, you sat for half a minute with
-a vacant expression. Then your eyes fixed themselves upon your
-newly-framed picture of General Gordon, and I saw by the alteration in
-your face that a train of thought had been started. But it did not lead
-very far. Your eyes turned across to the unframed portrait of Henry Ward
-Beecher which stands upon the top of your books. You then glanced up at
-the wall, and of course your meaning was obvious. You were thinking
-that if the portrait were framed it would just cover that bare space and
-correspond with Gordon's picture over there."
-
-"You have followed me wonderfully!" I exclaimed.
-
-"So far I could hardly have gone astray. But now your thoughts went
-back to Beecher, and you looked hard across as if you were studying
-the character in his features. Then your eyes ceased to pucker, but
-you continued to look across, and your face was thoughtful. You were
-recalling the incidents of Beecher's career. I was well aware that you
-could not do this without thinking of the mission which he undertook
-on behalf of the North at the time of the Civil War, for I remember
-you expressing your passionate indignation at the way in which he was
-received by the more turbulent of our people. You felt so strongly about
-it that I knew you could not think of Beecher without thinking of that
-also. When a moment later I saw your eyes wander away from the picture,
-I suspected that your mind had now turned to the Civil War, and when
-I observed that your lips set, your eyes sparkled, and your hands
-clinched, I was positive that you were indeed thinking of the gallantry
-which was shown by both sides in that desperate struggle. But then,
-again, your face grew sadder; you shook your head. You were dwelling
-upon the sadness and horror and useless waste of life. Your hand stole
-towards your own old wound, and a smile quivered on your lips,
-which showed me that the ridiculous side of this method of settling
-international questions had forced itself upon your mind. At this point
-I agreed with you that it was preposterous, and was glad to find that
-all my deductions had been correct."
-
-"Absolutely!" said I. "And now that you have explained it, I confess
-that I am as amazed as before."
-
-"It was very superficial, my dear Watson, I assure you. I should not
-have intruded it upon your attention had you not shown some incredulity
-the other day. But the evening has brought a breeze with it. What do you
-say to a ramble through London?"
-
-I was weary of our little sitting-room and gladly acquiesced. For
-three hours we strolled about together, watching the ever-changing
-kaleidoscope of life as it ebbs and flows through Fleet Street and the
-Strand. His characteristic talk, with its keen observance of detail
-and subtle power of inference held me amused and enthralled. It was ten
-o'clock before we reached Baker Street again. A brougham was waiting at
-our door.
-
-"Hum! A doctor's--general practitioner, I perceive," said Holmes. "Not
-been long in practice, but has had a good deal to do. Come to consult
-us, I fancy! Lucky we came back!"
-
-I was sufficiently conversant with Holmes's methods to be able to follow
-his reasoning, and to see that the nature and state of the various
-medical instruments in the wicker basket which hung in the lamplight
-inside the brougham had given him the data for his swift deduction.
-The light in our window above showed that this late visit was indeed
-intended for us. With some curiosity as to what could have sent a
-brother medico to us at such an hour, I followed Holmes into our
-sanctum.
-
-A pale, taper-faced man with sandy whiskers rose up from a chair by the
-fire as we entered. His age may not have been more than three or four
-and thirty, but his haggard expression and unhealthy hue told of a life
-which has sapped his strength and robbed him of his youth. His manner
-was nervous and shy, like that of a sensitive gentleman, and the thin
-white hand which he laid on the mantelpiece as he rose was that of an
-artist rather than of a surgeon. His dress was quiet and sombre--a black
-frock-coat, dark trousers, and a touch of color about his necktie.
-
-"Good-evening, doctor," said Holmes, cheerily. "I am glad to see that
-you have only been waiting a very few minutes."
-
-"You spoke to my coachman, then?"
-
-"No, it was the candle on the side-table that told me. Pray resume your
-seat and let me know how I can serve you."
-
-"My name is Doctor Percy Trevelyan," said our visitor, "and I live at
-403 Brook Street."
-
-"Are you not the author of a monograph upon obscure nervous lesions?" I
-asked.
-
-His pale cheeks flushed with pleasure at hearing that his work was known
-to me.
-
-"I so seldom hear of the work that I thought it was quite dead," said
-he. "My publishers gave me a most discouraging account of its sale. You
-are yourself, I presume, a medical man?"
-
-"A retired army surgeon."
-
-"My own hobby has always been nervous disease. I should wish to make it
-an absolute specialty, but, of course, a man must take what he can get
-at first. This, however, is beside the question, Mr. Sherlock Holmes,
-and I quite appreciate how valuable your time is. The fact is that a
-very singular train of events has occurred recently at my house in Brook
-Street, and to-night they came to such a head that I felt it was quite
-impossible for me to wait another hour before asking for your advice and
-assistance."
-
-Sherlock Holmes sat down and lit his pipe. "You are very welcome
-to both," said he. "Pray let me have a detailed account of what the
-circumstances are which have disturbed you."
-
-"One or two of them are so trivial," said Dr. Trevelyan, "that really
-I am almost ashamed to mention them. But the matter is so inexplicable,
-and the recent turn which it has taken is so elaborate, that I shall
-lay it all before you, and you shall judge what is essential and what is
-not.
-
-"I am compelled, to begin with, to say something of my own college
-career. I am a London University man, you know, and I am sure that your
-will not think that I am unduly singing my own praises if I say that my
-student career was considered by my professors to be a very promising
-one. After I had graduated I continued to devote myself to research,
-occupying a minor position in King's College Hospital, and I was
-fortunate enough to excite considerable interest by my research into the
-pathology of catalepsy, and finally to win the Bruce Pinkerton prize and
-medal by the monograph on nervous lesions to which your friend has
-just alluded. I should not go too far if I were to say that there was a
-general impression at that time that a distinguished career lay before
-me.
-
-"But the one great stumbling-block lay in my want of capital. As you
-will readily understand, a specialist who aims high is compelled to
-start in one of a dozen streets in the Cavendish Square quarter, all
-of which entail enormous rents and furnishing expenses. Besides this
-preliminary outlay, he must be prepared to keep himself for some years,
-and to hire a presentable carriage and horse. To do this was quite
-beyond my power, and I could only hope that by economy I might in ten
-years' time save enough to enable me to put up my plate. Suddenly,
-however, an unexpected incident opened up quite a new prospect to me.
-
-"This was a visit from a gentleman of the name of Blessington, who was a
-complete stranger to me. He came up to my room one morning, and plunged
-into business in an instant.
-
-"'You are the same Percy Trevelyan who has had so distinguished a career
-and won a great prize lately?' said he.
-
-"I bowed.
-
-"'Answer me frankly,' he continued, 'for you will find it to your
-interest to do so. You have all the cleverness which makes a successful
-man. Have you the tact?'
-
-"I could not help smiling at the abruptness of the question.
-
-"'I trust that I have my share,' I said.
-
-"'Any bad habits? Not drawn towards drink, eh?'
-
-"'Really, sir!' I cried.
-
-"'Quite right! That's all right! But I was bound to ask. With all these
-qualities, why are you not in practice?'
-
-"I shrugged my shoulders.
-
-"'Come, come!' said he, in his bustling way. 'It's the old story. More
-in your brains than in your pocket, eh? What would you say if I were to
-start you in Brook Street?'
-
-"I stared at him in astonishment.
-
-"'Oh, it's for my sake, not for yours,' he cried. 'I'll be perfectly
-frank with you, and if it suits you it will suit me very well. I have a
-few thousands to invest, d'ye see, and I think I'll sink them in you.'
-
-"'But why?' I gasped.
-
-"'Well, it's just like any other speculation, and safer than most.'
-
-"'What am I to do, then?'
-
-"'I'll tell you. I'll take the house, furnish it, pay the maids, and run
-the whole place. All you have to do is just to wear out your chair in
-the consulting-room. I'll let you have pocket-money and everything. Then
-you hand over to me three quarters of what you earn, and you keep the
-other quarter for yourself.'
-
-"This was the strange proposal, Mr. Holmes, with which the man
-Blessington approached me. I won't weary you with the account of how
-we bargained and negotiated. It ended in my moving into the house next
-Lady-day, and starting in practice on very much the same conditions as
-he had suggested. He came himself to live with me in the character of a
-resident patient. His heart was weak, it appears, and he needed constant
-medical supervision. He turned the two best rooms of the first floor
-into a sitting-room and bedroom for himself. He was a man of singular
-habits, shunning company and very seldom going out. His life was
-irregular, but in one respect he was regularity itself. Every evening,
-at the same hour, he walked into the consulting-room, examined the
-books, put down five and three-pence for every guinea that I had earned,
-and carried the rest off to the strong-box in his own room.
-
-"I may say with confidence that he never had occasion to regret his
-speculation. From the first it was a success. A few good cases and the
-reputation which I had won in the hospital brought me rapidly to the
-front, and during the last few years I have made him a rich man.
-
-"So much, Mr. Holmes, for my past history and my relations with Mr.
-Blessington. It only remains for me now to tell you what has occurred to
-bring me here to-night.
-
-"Some weeks ago Mr. Blessington came down to me in, as it seemed to me,
-a state of considerable agitation. He spoke of some burglary which, he
-said, had been committed in the West End, and he appeared, I remember,
-to be quite unnecessarily excited about it, declaring that a day should
-not pass before we should add stronger bolts to our windows and doors.
-For a week he continued to be in a peculiar state of restlessness,
-peering continually out of the windows, and ceasing to take the short
-walk which had usually been the prelude to his dinner. From his manner
-it struck me that he was in mortal dread of something or somebody, but
-when I questioned him upon the point he became so offensive that I was
-compelled to drop the subject. Gradually, as time passed, his fears
-appeared to die away, and he had renewed his former habits, when a fresh
-event reduced him to the pitiable state of prostration in which he now
-lies.
-
-"What happened was this. Two days ago I received the letter which I now
-read to you. Neither address nor date is attached to it.
-
-"'A Russian nobleman who is now resident in England,' it runs, 'would
-be glad to avail himself of the professional assistance of Dr. Percy
-Trevelyan. He has been for some years a victim to cataleptic attacks, on
-which, as is well known, Dr. Trevelyan is an authority. He proposes to
-call at about quarter past six to-morrow evening, if Dr. Trevelyan will
-make it convenient to be at home.'
-
-"This letter interested me deeply, because the chief difficulty in the
-study of catalepsy is the rareness of the disease. You may believe,
-then, that I was in my consulting-room when, at the appointed hour, the
-page showed in the patient.
-
-"He was an elderly man, thin, demure, and commonplace--by no means the
-conception one forms of a Russian nobleman. I was much more struck by
-the appearance of his companion. This was a tall young man, surprisingly
-handsome, with a dark, fierce face, and the limbs and chest of a
-Hercules. He had his hand under the other's arm as they entered, and
-helped him to a chair with a tenderness which one would hardly have
-expected from his appearance.
-
-"'You will excuse my coming in, doctor,' said he to me, speaking English
-with a slight lisp. 'This is my father, and his health is a matter of
-the most overwhelming importance to me.'
-
-"I was touched by this filial anxiety. 'You would, perhaps, care to
-remain during the consultation?' said I.
-
-"'Not for the world,' he cried with a gesture of horror. 'It is more
-painful to me than I can express. If I were to see my father in one of
-these dreadful seizures I am convinced that I should never survive
-it. My own nervous system is an exceptionally sensitive one. With your
-permission, I will remain in the waiting-room while you go into my
-father's case.'
-
-"To this, of course, I assented, and the young man withdrew. The patient
-and I then plunged into a discussion of his case, of which I took
-exhaustive notes. He was not remarkable for intelligence, and his
-answers were frequently obscure, which I attributed to his limited
-acquaintance with our language. Suddenly, however, as I sat writing,
-he ceased to give any answer at all to my inquiries, and on my turning
-towards him I was shocked to see that he was sitting bolt upright in his
-chair, staring at me with a perfectly blank and rigid face. He was again
-in the grip of his mysterious malady.
-
-"My first feeling, as I have just said, was one of pity and horror.
-My second, I fear, was rather one of professional satisfaction. I made
-notes of my patient's pulse and temperature, tested the rigidity of his
-muscles, and examined his reflexes. There was nothing markedly abnormal
-in any of these conditions, which harmonized with my former experiences.
-I had obtained good results in such cases by the inhalation of nitrite
-of amyl, and the present seemed an admirable opportunity of testing
-its virtues. The bottle was downstairs in my laboratory, so leaving my
-patient seated in his chair, I ran down to get it. There was some little
-delay in finding it--five minutes, let us say--and then I returned.
-Imagine my amazement to find the room empty and the patient gone.
-
-"Of course, my first act was to run into the waiting-room. The son had
-gone also. The hall door had been closed, but not shut. My page who
-admits patients is a new boy and by no means quick. He waits downstairs,
-and runs up to show patients out when I ring the consulting-room bell.
-He had heard nothing, and the affair remained a complete mystery. Mr.
-Blessington came in from his walk shortly afterwards, but I did not say
-anything to him upon the subject, for, to tell the truth, I have got in
-the way of late of holding as little communication with him as possible.
-
-"Well, I never thought that I should see anything more of the Russian
-and his son, so you can imagine my amazement when, at the very same hour
-this evening, they both came marching into my consulting-room, just as
-they had done before.
-
-"'I feel that I owe you a great many apologies for my abrupt departure
-yesterday, doctor,' said my patient.
-
-"'I confess that I was very much surprised at it,' said I.
-
-"'Well, the fact is,' he remarked, 'that when I recover from these
-attacks my mind is always very clouded as to all that has gone before. I
-woke up in a strange room, as it seemed to me, and made my way out into
-the street in a sort of dazed way when you were absent.'
-
-"'And I,' said the son, 'seeing my father pass the door of the
-waiting-room, naturally thought that the consultation had come to an
-end. It was not until we had reached home that I began to realize the
-true state of affairs.'
-
-"'Well,' said I, laughing, 'there is no harm done except that you
-puzzled me terribly; so if you, sir, would kindly step into the
-waiting-room I shall be happy to continue our consultation which was
-brought to so abrupt an ending.'
-
-"'For half an hour or so I discussed that old gentleman's symptoms with
-him, and then, having prescribed for him, I saw him go off upon the arm
-of his son.
-
-"I have told you that Mr. Blessington generally chose this hour of the
-day for his exercise. He came in shortly afterwards and passed upstairs.
-An instant later I heard him running down, and he burst into my
-consulting-room like a man who is mad with panic.
-
-"'Who has been in my room?' he cried.
-
-"'No one,' said I.
-
-"'It's a lie! He yelled. 'Come up and look!'
-
-"I passed over the grossness of his language, as he seemed half out of
-his mind with fear. When I went upstairs with him he pointed to several
-footprints upon the light carpet.
-
-"'D'you mean to say those are mine?' he cried.
-
-"They were certainly very much larger than any which he could have made,
-and were evidently quite fresh. It rained hard this afternoon, as you
-know, and my patients were the only people who called. It must have been
-the case, then, that the man in the waiting-room had, for some unknown
-reason, while I was busy with the other, ascended to the room of my
-resident patient. Nothing had been touched or taken, but there were the
-footprints to prove that the intrusion was an undoubted fact.
-
-"Mr. Blessington seemed more excited over the matter than I should have
-thought possible, though of course it was enough to disturb anybody's
-peace of mind. He actually sat crying in an arm-chair, and I could
-hardly get him to speak coherently. It was his suggestion that I should
-come round to you, and of course I at once saw the propriety of it,
-for certainly the incident is a very singular one, though he appears to
-completely overrate its importance. If you would only come back with me
-in my brougham, you would at least be able to soothe him, though I
-can hardly hope that you will be able to explain this remarkable
-occurrence."
-
-Sherlock Holmes had listened to this long narrative with an intentness
-which showed me that his interest was keenly aroused. His face was as
-impassive as ever, but his lids had drooped more heavily over his eyes,
-and his smoke had curled up more thickly from his pipe to emphasize each
-curious episode in the doctor's tale. As our visitor concluded, Holmes
-sprang up without a word, handed me my hat, picked his own from the
-table, and followed Dr. Trevelyan to the door. Within a quarter of an
-hour we had been dropped at the door of the physician's residence
-in Brook Street, one of those sombre, flat-faced houses which one
-associates with a West-End practice. A small page admitted us, and we
-began at once to ascend the broad, well-carpeted stair.
-
-But a singular interruption brought us to a standstill. The light at
-the top was suddenly whisked out, and from the darkness came a reedy,
-quivering voice.
-
-"I have a pistol," it cried. "I give you my word that I'll fire if you
-come any nearer."
-
-"This really grows outrageous, Mr. Blessington," cried Dr. Trevelyan.
-
-"Oh, then it is you, doctor," said the voice, with a great heave of
-relief. "But those other gentlemen, are they what they pretend to be?"
-
-We were conscious of a long scrutiny out of the darkness.
-
-"Yes, yes, it's all right," said the voice at last. "You can come up,
-and I am sorry if my precautions have annoyed you."
-
-He relit the stair gas as he spoke, and we saw before us a
-singular-looking man, whose appearance, as well as his voice, testified
-to his jangled nerves. He was very fat, but had apparently at some time
-been much fatter, so that the skin hung about his face in loose pouches,
-like the cheeks of a blood-hound. He was of a sickly color, and his
-thin, sandy hair seemed to bristle up with the intensity of his emotion.
-In his hand he held a pistol, but he thrust it into his pocket as we
-advanced.
-
-"Good-evening, Mr. Holmes," said he. "I am sure I am very much obliged
-to you for coming round. No one ever needed your advice more than I do.
-I suppose that Dr. Trevelyan has told you of this most unwarrantable
-intrusion into my rooms."
-
-"Quite so," said Holmes. "Who are these two men Mr. Blessington, and why
-do they wish to molest you?"
-
-"Well, well," said the resident patient, in a nervous fashion, "of
-course it is hard to say that. You can hardly expect me to answer that,
-Mr. Holmes."
-
-"Do you mean that you don't know?"
-
-"Come in here, if you please. Just have the kindness to step in here."
-
-He led the way into his bedroom, which was large and comfortably
-furnished.
-
-"You see that," said he, pointing to a big black box at the end of his
-bed. "I have never been a very rich man, Mr. Holmes--never made but
-one investment in my life, as Dr. Trevelyan would tell you. But I don't
-believe in bankers. I would never trust a banker, Mr. Holmes. Between
-ourselves, what little I have is in that box, so you can understand what
-it means to me when unknown people force themselves into my rooms."
-
-Holmes looked at Blessington in his questioning way and shook his head.
-
-"I cannot possibly advise you if you try to deceive me," said he.
-
-"But I have told you everything."
-
-Holmes turned on his heel with a gesture of disgust. "Good-night, Dr.
-Trevelyan," said he.
-
-"And no advice for me?" cried Blessington, in a breaking voice.
-
-"My advice to you, sir, is to speak the truth."
-
-A minute later we were in the street and walking for home. We had
-crossed Oxford Street and were half way down Harley Street before I
-could get a word from my companion.
-
-"Sorry to bring you out on such a fool's errand, Watson," he said at
-last. "It is an interesting case, too, at the bottom of it."
-
-"I can make little of it," I confessed.
-
-"Well, it is quite evident that there are two men--more, perhaps, but
-at least two--who are determined for some reason to get at this fellow
-Blessington. I have no doubt in my mind that both on the first and on
-the second occasion that young man penetrated to Blessington's room,
-while his confederate, by an ingenious device, kept the doctor from
-interfering."
-
-"And the catalepsy?"
-
-"A fraudulent imitation, Watson, though I should hardly dare to hint as
-much to our specialist. It is a very easy complaint to imitate. I have
-done it myself."
-
-"And then?"
-
-"By the purest chance Blessington was out on each occasion. Their reason
-for choosing so unusual an hour for a consultation was obviously to
-insure that there should be no other patient in the waiting-room. It
-just happened, however, that this hour coincided with Blessington's
-constitutional, which seems to show that they were not very well
-acquainted with his daily routine. Of course, if they had been merely
-after plunder they would at least have made some attempt to search for
-it. Besides, I can read in a man's eye when it is his own skin that he
-is frightened for. It is inconceivable that this fellow could have made
-two such vindictive enemies as these appear to be without knowing of it.
-I hold it, therefore, to be certain that he does know who these men are,
-and that for reasons of his own he suppresses it. It is just possible
-that to-morrow may find him in a more communicative mood."
-
-"Is there not one alternative," I suggested, "grotesquely improbably,
-no doubt, but still just conceivable? Might the whole story of the
-cataleptic Russian and his son be a concoction of Dr. Trevelyan's, who
-has, for his own purposes, been in Blessington's rooms?"
-
-I saw in the gaslight that Holmes wore an amused smile at this brilliant
-departure of mine.
-
-"My dear fellow," said he, "it was one of the first solutions which
-occurred to me, but I was soon able to corroborate the doctor's tale.
-This young man has left prints upon the stair-carpet which made it quite
-superfluous for me to ask to see those which he had made in the room.
-When I tell you that his shoes were square-toed instead of being pointed
-like Blessington's, and were quite an inch and a third longer than the
-doctor's, you will acknowledge that there can be no doubt as to his
-individuality. But we may sleep on it now, for I shall be surprised if
-we do not hear something further from Brook Street in the morning."
-
-
-Sherlock Holmes's prophecy was soon fulfilled, and in a dramatic
-fashion. At half-past seven next morning, in the first glimmer of
-daylight, I found him standing by my bedside in his dressing-gown.
-
-"There's a brougham waiting for us, Watson," said he.
-
-"What's the matter, then?"
-
-"The Brook Street business."
-
-"Any fresh news?"
-
-"Tragic, but ambiguous," said he, pulling up the blind. "Look at this--a
-sheet from a note-book, with 'For God's sake come at once--P. T.,'
-scrawled upon it in pencil. Our friend, the doctor, was hard put to
-it when he wrote this. Come along, my dear fellow, for it's an urgent
-call."
-
-In a quarter of an hour or so we were back at the physician's house. He
-came running out to meet us with a face of horror.
-
-"Oh, such a business!" he cried, with his hands to his temples.
-
-"What then?"
-
-"Blessington has committed suicide!"
-
-Holmes whistled.
-
-"Yes, he hanged himself during the night."
-
-We had entered, and the doctor had preceded us into what was evidently
-his waiting-room.
-
-"I really hardly know what I am doing," he cried. "The police are
-already upstairs. It has shaken me most dreadfully."
-
-"When did you find it out?"
-
-"He has a cup of tea taken in to him early every morning. When the maid
-entered, about seven, there the unfortunate fellow was hanging in the
-middle of the room. He had tied his cord to the hook on which the heavy
-lamp used to hang, and he had jumped off from the top of the very box
-that he showed us yesterday."
-
-Holmes stood for a moment in deep thought.
-
-"With your permission," said he at last, "I should like to go upstairs
-and look into the matter."
-
-We both ascended, followed by the doctor.
-
-It was a dreadful sight which met us as we entered the bedroom door. I
-have spoken of the impression of flabbiness which this man Blessington
-conveyed. As he dangled from the hook it was exaggerated and intensified
-until he was scarce human in his appearance. The neck was drawn out
-like a plucked chicken's, making the rest of him seem the more obese and
-unnatural by the contrast. He was clad only in his long night-dress, and
-his swollen ankles and ungainly feet protruded starkly from beneath it.
-Beside him stood a smart-looking police-inspector, who was taking notes
-in a pocket-book.
-
-"Ah, Mr. Holmes," said he, heartily, as my friend entered, "I am
-delighted to see you."
-
-"Good-morning, Lanner," answered Holmes; "you won't think me an
-intruder, I am sure. Have you heard of the events which led up to this
-affair?"
-
-"Yes, I heard something of them."
-
-"Have you formed any opinion?"
-
-"As far as I can see, the man has been driven out of his senses by
-fright. The bed has been well slept in, you see. There's his impression
-deep enough. It's about five in the morning, you know, that suicides are
-most common. That would be about his time for hanging himself. It seems
-to have been a very deliberate affair."
-
-"I should say that he has been dead about three hours, judging by the
-rigidity of the muscles," said I.
-
-"Noticed anything peculiar about the room?" asked Holmes.
-
-"Found a screw-driver and some screws on the wash-hand stand. Seems to
-have smoked heavily during the night, too. Here are four cigar-ends that
-I picked out of the fireplace."
-
-"Hum!" said Holmes, "have you got his cigar-holder?"
-
-"No, I have seen none."
-
-"His cigar-case, then?"
-
-"Yes, it was in his coat-pocket."
-
-Holmes opened it and smelled the single cigar which it contained.
-
-"Oh, this is an Havana, and these others are cigars of the peculiar sort
-which are imported by the Dutch from their East Indian colonies. They
-are usually wrapped in straw, you know, and are thinner for their length
-than any other brand." He picked up the four ends and examined them with
-his pocket-lens.
-
-"Two of these have been smoked from a holder and two without," said he.
-"Two have been cut by a not very sharp knife, and two have had the ends
-bitten off by a set of excellent teeth. This is no suicide, Mr. Lanner.
-It is a very deeply planned and cold-blooded murder."
-
-"Impossible!" cried the inspector.
-
-"And why?"
-
-"Why should any one murder a man in so clumsy a fashion as by hanging
-him?"
-
-"That is what we have to find out."
-
-"How could they get in?"
-
-"Through the front door."
-
-"It was barred in the morning."
-
-"Then it was barred after them."
-
-"How do you know?"
-
-"I saw their traces. Excuse me a moment, and I may be able to give you
-some further information about it."
-
-He went over to the door, and turning the lock he examined it in his
-methodical way. Then he took out the key, which was on the inside, and
-inspected that also. The bed, the carpet, the chairs the mantelpiece,
-the dead body, and the rope were each in turn examined, until at last he
-professed himself satisfied, and with my aid and that of the inspector
-cut down the wretched object and laid it reverently under a sheet.
-
-"How about this rope?" he asked.
-
-"It is cut off this," said Dr. Trevelyan, drawing a large coil from
-under the bed. "He was morbidly nervous of fire, and always kept this
-beside him, so that he might escape by the window in case the stairs
-were burning."
-
-"That must have saved them trouble," said Holmes, thoughtfully. "Yes,
-the actual facts are very plain, and I shall be surprised if by the
-afternoon I cannot give you the reasons for them as well. I will take
-this photograph of Blessington, which I see upon the mantelpiece, as it
-may help me in my inquiries."
-
-"But you have told us nothing!" cried the doctor.
-
-"Oh, there can be no doubt as to the sequence of events," said Holmes.
-"There were three of them in it: the young man, the old man, and a
-third, to whose identity I have no clue. The first two, I need hardly
-remark, are the same who masqueraded as the Russian count and his son,
-so we can give a very full description of them. They were admitted by
-a confederate inside the house. If I might offer you a word of advice,
-Inspector, it would be to arrest the page, who, as I understand, has
-only recently come into your service, Doctor."
-
-"The young imp cannot be found," said Dr. Trevelyan; "the maid and the
-cook have just been searching for him."
-
-Holmes shrugged his shoulders.
-
-"He has played a not unimportant part in this drama," said he. "The
-three men having ascended the stairs, which they did on tiptoe, the
-elder man first, the younger man second, and the unknown man in the
-rear--"
-
-"My dear Holmes!" I ejaculated.
-
-"Oh, there could be no question as to the superimposing of the
-footmarks. I had the advantage of learning which was which last night.
-They ascended, then, to Mr. Blessington's room, the door of which they
-found to be locked. With the help of a wire, however, they forced round
-the key. Even without the lens you will perceive, by the scratches on
-this ward, where the pressure was applied.
-
-"On entering the room their first proceeding must have been to gag Mr.
-Blessington. He may have been asleep, or he may have been so paralyzed
-with terror as to have been unable to cry out. These walls are thick,
-and it is conceivable that his shriek, if he had time to utter one, was
-unheard.
-
-"Having secured him, it is evident to me that a consultation of some
-sort was held. Probably it was something in the nature of a judicial
-proceeding. It must have lasted for some time, for it was then that
-these cigars were smoked. The older man sat in that wicker chair; it
-was he who used the cigar-holder. The younger man sat over yonder; he
-knocked his ash off against the chest of drawers. The third fellow paced
-up and down. Blessington, I think, sat upright in the bed, but of that I
-cannot be absolutely certain.
-
-"Well, it ended by their taking Blessington and hanging him. The matter
-was so prearranged that it is my belief that they brought with them
-some sort of block or pulley which might serve as a gallows. That
-screw-driver and those screws were, as I conceive, for fixing it up.
-Seeing the hook, however they naturally saved themselves the trouble.
-Having finished their work they made off, and the door was barred behind
-them by their confederate."
-
-We had all listened with the deepest interest to this sketch of the
-night's doings, which Holmes had deduced from signs so subtle and minute
-that, even when he had pointed them out to us, we could scarcely follow
-him in his reasoning. The inspector hurried away on the instant to make
-inquiries about the page, while Holmes and I returned to Baker Street
-for breakfast.
-
-"I'll be back by three," said he, when we had finished our meal. "Both
-the inspector and the doctor will meet me here at that hour, and I hope
-by that time to have cleared up any little obscurity which the case may
-still present."
-
-
-Our visitors arrived at the appointed time, but it was a quarter to
-four before my friend put in an appearance. From his expression as he
-entered, however, I could see that all had gone well with him.
-
-"Any news, Inspector?"
-
-"We have got the boy, sir."
-
-"Excellent, and I have got the men."
-
-"You have got them!" we cried, all three.
-
-"Well, at least I have got their identity. This so-called Blessington
-is, as I expected, well known at headquarters, and so are his
-assailants. Their names are Biddle, Hayward, and Moffat."
-
-"The Worthingdon bank gang," cried the inspector.
-
-"Precisely," said Holmes.
-
-"Then Blessington must have been Sutton."
-
-"Exactly," said Holmes.
-
-"Why, that makes it as clear as crystal," said the inspector.
-
-But Trevelyan and I looked at each other in bewilderment.
-
-"You must surely remember the great Worthingdon bank business," said
-Holmes. "Five men were in it--these four and a fifth called Cartwright.
-Tobin, the care-taker, was murdered, and the thieves got away with seven
-thousand pounds. This was in 1875. They were all five arrested, but the
-evidence against them was by no means conclusive. This Blessington or
-Sutton, who was the worst of the gang, turned informer. On his evidence
-Cartwright was hanged and the other three got fifteen years apiece. When
-they got out the other day, which was some years before their full term,
-they set themselves, as you perceive, to hunt down the traitor and to
-avenge the death of their comrade upon him. Twice they tried to get at
-him and failed; a third time, you see, it came off. Is there anything
-further which I can explain, Dr. Trevelyan?"
-
-"I think you have made it all remarkable clear," said the doctor. "No
-doubt the day on which he was perturbed was the day when he had seen of
-their release in the newspapers."
-
-"Quite so. His talk about a burglary was the merest blind."
-
-"But why could he not tell you this?"
-
-"Well, my dear sir, knowing the vindictive character of his old
-associates, he was trying to hide his own identity from everybody as
-long as he could. His secret was a shameful one, and he could not bring
-himself to divulge it. However, wretch as he was, he was still living
-under the shield of British law, and I have no doubt, Inspector, that
-you will see that, though that shield may fail to guard, the sword of
-justice is still there to avenge."
-
-
-Such were the singular circumstances in connection with the Resident
-Patient and the Brook Street Doctor. From that night nothing has
-been seen of the three murderers by the police, and it is surmised
-at Scotland Yard that they were among the passengers of the ill-fated
-steamer Norah Creina, which was lost some years ago with all hands
-upon the Portuguese coast, some leagues to the north of Oporto. The
-proceedings against the page broke down for want of evidence, and the
-Brook Street Mystery, as it was called, has never until now been fully
-dealt with in any public print.
-
-
-
-
-Adventure IX. The Greek Interpreter
-
-
-During my long and intimate acquaintance with Mr. Sherlock Holmes I had
-never heard him refer to his relations, and hardly ever to his own early
-life. This reticence upon his part had increased the somewhat inhuman
-effect which he produced upon me, until sometimes I found myself
-regarding him as an isolated phenomenon, a brain without a heart, as
-deficient in human sympathy as he was pre-eminent in intelligence. His
-aversion to women and his disinclination to form new friendships were
-both typical of his unemotional character, but not more so than his
-complete suppression of every reference to his own people. I had come to
-believe that he was an orphan with no relatives living, but one day, to
-my very great surprise, he began to talk to me about his brother.
-
-It was after tea on a summer evening, and the conversation, which had
-roamed in a desultory, spasmodic fashion from golf clubs to the causes
-of the change in the obliquity of the ecliptic, came round at last
-to the question of atavism and hereditary aptitudes. The point under
-discussion was, how far any singular gift in an individual was due to
-his ancestry and how far to his own early training.
-
-"In your own case," said I, "from all that you have told me, it seems
-obvious that your faculty of observation and your peculiar facility for
-deduction are due to your own systematic training."
-
-"To some extent," he answered, thoughtfully. "My ancestors were country
-squires, who appear to have led much the same life as is natural to
-their class. But, none the less, my turn that way is in my veins, and
-may have come with my grandmother, who was the sister of Vernet, the
-French artist. Art in the blood is liable to take the strangest forms."
-
-"But how do you know that it is hereditary?"
-
-"Because my brother Mycroft possesses it in a larger degree than I do."
-
-This was news to me indeed. If there were another man with such singular
-powers in England, how was it that neither police nor public had heard
-of him? I put the question, with a hint that it was my companion's
-modesty which made him acknowledge his brother as his superior. Holmes
-laughed at my suggestion.
-
-"My dear Watson," said he, "I cannot agree with those who rank modesty
-among the virtues. To the logician all things should be seen exactly as
-they are, and to underestimate one's self is as much a departure from
-truth as to exaggerate one's own powers. When I say, therefore, that
-Mycroft has better powers of observation than I, you may take it that I
-am speaking the exact and literal truth."
-
-"Is he your junior?"
-
-"Seven years my senior."
-
-"How comes it that he is unknown?"
-
-"Oh, he is very well known in his own circle."
-
-"Where, then?"
-
-"Well, in the Diogenes Club, for example."
-
-I had never heard of the institution, and my face must have proclaimed
-as much, for Sherlock Holmes pulled out his watch.
-
-"The Diogenes Club is the queerest club in London, and Mycroft one of
-the queerest men. He's always there from quarter to five to twenty to
-eight. It's six now, so if you care for a stroll this beautiful evening
-I shall be very happy to introduce you to two curiosities."
-
-Five minutes later we were in the street, walking towards Regent's
-Circus.
-
-"You wonder," said my companion, "why it is that Mycroft does not use
-his powers for detective work. He is incapable of it."
-
-"But I thought you said--"
-
-"I said that he was my superior in observation and deduction. If the
-art of the detective began and ended in reasoning from an arm-chair, my
-brother would be the greatest criminal agent that ever lived. But he has
-no ambition and no energy. He will not even go out of his way to verify
-his own solutions, and would rather be considered wrong than take the
-trouble to prove himself right. Again and again I have taken a problem
-to him, and have received an explanation which has afterwards proved to
-be the correct one. And yet he was absolutely incapable of working out
-the practical points which must be gone into before a case could be laid
-before a judge or jury."
-
-"It is not his profession, then?"
-
-"By no means. What is to me a means of livelihood is to him the merest
-hobby of a dilettante. He has an extraordinary faculty for figures, and
-audits the books in some of the government departments. Mycroft lodges
-in Pall Mall, and he walks round the corner into Whitehall every morning
-and back every evening. From year's end to year's end he takes no other
-exercise, and is seen nowhere else, except only in the Diogenes Club,
-which is just opposite his rooms."
-
-"I cannot recall the name."
-
-"Very likely not. There are many men in London, you know, who, some from
-shyness, some from misanthropy, have no wish for the company of their
-fellows. Yet they are not averse to comfortable chairs and the latest
-periodicals. It is for the convenience of these that the Diogenes Club
-was started, and it now contains the most unsociable and unclubable men
-in town. No member is permitted to take the least notice of any
-other one. Save in the Stranger's Room, no talking is, under any
-circumstances, allowed, and three offences, if brought to the notice of
-the committee, render the talker liable to expulsion. My brother was one
-of the founders, and I have myself found it a very soothing atmosphere."
-
-We had reached Pall Mall as we talked, and were walking down it from the
-St. James's end. Sherlock Holmes stopped at a door some little distance
-from the Carlton, and, cautioning me not to speak, he led the way into
-the hall. Through the glass paneling I caught a glimpse of a large and
-luxurious room, in which a considerable number of men were sitting about
-and reading papers, each in his own little nook. Holmes showed me into a
-small chamber which looked out into Pall Mall, and then, leaving me for
-a minute, he came back with a companion whom I knew could only be his
-brother.
-
-Mycroft Holmes was a much larger and stouter man than Sherlock. His body
-was absolutely corpulent, but his face, though massive, had preserved
-something of the sharpness of expression which was so remarkable in that
-of his brother. His eyes, which were of a peculiarly light, watery gray,
-seemed to always retain that far-away, introspective look which I had
-only observed in Sherlock's when he was exerting his full powers.
-
-"I am glad to meet you, sir," said he, putting out a broad, fat hand
-like the flipper of a seal. "I hear of Sherlock everywhere since you
-became his chronicler. By the way, Sherlock, I expected to see you round
-last week, to consult me over that Manor House case. I thought you might
-be a little out of your depth."
-
-"No, I solved it," said my friend, smiling.
-
-"It was Adams, of course."
-
-"Yes, it was Adams."
-
-"I was sure of it from the first." The two sat down together in the
-bow-window of the club. "To any one who wishes to study mankind this is
-the spot," said Mycroft. "Look at the magnificent types! Look at these
-two men who are coming towards us, for example."
-
-"The billiard-marker and the other?"
-
-"Precisely. What do you make of the other?"
-
-The two men had stopped opposite the window. Some chalk marks over the
-waistcoat pocket were the only signs of billiards which I could see
-in one of them. The other was a very small, dark fellow, with his hat
-pushed back and several packages under his arm.
-
-"An old soldier, I perceive," said Sherlock.
-
-"And very recently discharged," remarked the brother.
-
-"Served in India, I see."
-
-"And a non-commissioned officer."
-
-"Royal Artillery, I fancy," said Sherlock.
-
-"And a widower."
-
-"But with a child."
-
-"Children, my dear boy, children."
-
-"Come," said I, laughing, "this is a little too much."
-
-"Surely," answered Holmes, "it is not hard to say that a man with that
-bearing, expression of authority, and sunbaked skin, is a soldier, is
-more than a private, and is not long from India."
-
-"That he has not left the service long is shown by his still wearing his
-ammunition boots, as they are called," observed Mycroft.
-
-"He had not the cavalry stride, yet he wore his hat on one side, as
-is shown by the lighter skin of that side of his brow. His weight is
-against his being a sapper. He is in the artillery."
-
-"Then, of course, his complete mourning shows that he has lost some one
-very dear. The fact that he is doing his own shopping looks as though
-it were his wife. He has been buying things for children, you perceive.
-There is a rattle, which shows that one of them is very young. The wife
-probably died in childbed. The fact that he has a picture-book under his
-arm shows that there is another child to be thought of."
-
-I began to understand what my friend meant when he said that his brother
-possessed even keener faculties that he did himself. He glanced across
-at me and smiled. Mycroft took snuff from a tortoise-shell box, and
-brushed away the wandering grains from his coat front with a large, red
-silk handkerchief.
-
-"By the way, Sherlock," said he, "I have had something quite after your
-own heart--a most singular problem--submitted to my judgment. I really
-had not the energy to follow it up save in a very incomplete fashion,
-but it gave me a basis for some pleasing speculation. If you would care
-to hear the facts--"
-
-"My dear Mycroft, I should be delighted."
-
-The brother scribbled a note upon a leaf of his pocket-book, and,
-ringing the bell, he handed it to the waiter.
-
-"I have asked Mr. Melas to step across," said he. "He lodges on the
-floor above me, and I have some slight acquaintance with him, which led
-him to come to me in his perplexity. Mr. Melas is a Greek by extraction,
-as I understand, and he is a remarkable linguist. He earns his living
-partly as interpreter in the law courts and partly by acting as guide to
-any wealthy Orientals who may visit the Northumberland Avenue hotels. I
-think I will leave him to tell his very remarkable experience in his own
-fashion."
-
-A few minutes later we were joined by a short, stout man whose olive
-face and coal-black hair proclaimed his Southern origin, though his
-speech was that of an educated Englishman. He shook hands eagerly
-with Sherlock Holmes, and his dark eyes sparkled with pleasure when he
-understood that the specialist was anxious to hear his story.
-
-"I do not believe that the police credit me--on my word, I do not," said
-he in a wailing voice. "Just because they have never heard of it before,
-they think that such a thing cannot be. But I know that I shall never
-be easy in my mind until I know what has become of my poor man with the
-sticking-plaster upon his face."
-
-"I am all attention," said Sherlock Holmes.
-
-"This is Wednesday evening," said Mr. Melas. "Well then, it was Monday
-night--only two days ago, you understand--that all this happened. I am
-an interpreter, as perhaps my neighbor there has told you. I interpret
-all languages--or nearly all--but as I am a Greek by birth and with a
-Grecian name, it is with that particular tongue that I am principally
-associated. For many years I have been the chief Greek interpreter in
-London, and my name is very well known in the hotels.
-
-"It happens not unfrequently that I am sent for at strange hours by
-foreigners who get into difficulties, or by travelers who arrive late
-and wish my services. I was not surprised, therefore, on Monday night
-when a Mr. Latimer, a very fashionably dressed young man, came up to my
-rooms and asked me to accompany him in a cab which was waiting at the
-door. A Greek friend had come to see him upon business, he said, and
-as he could speak nothing but his own tongue, the services of an
-interpreter were indispensable. He gave me to understand that his house
-was some little distance off, in Kensington, and he seemed to be in a
-great hurry, bustling me rapidly into the cab when we had descended to
-the street.
-
-"I say into the cab, but I soon became doubtful as to whether it was not
-a carriage in which I found myself. It was certainly more roomy than
-the ordinary four-wheeled disgrace to London, and the fittings, though
-frayed, were of rich quality. Mr. Latimer seated himself opposite to me
-and we started off through Charing Cross and up the Shaftesbury Avenue.
-We had come out upon Oxford Street and I had ventured some remark as to
-this being a roundabout way to Kensington, when my words were arrested
-by the extraordinary conduct of my companion.
-
-"He began by drawing a most formidable-looking bludgeon loaded with lead
-from his pocket, and switching it backward and forward several times,
-as if to test its weight and strength. Then he placed it without a word
-upon the seat beside him. Having done this, he drew up the windows on
-each side, and I found to my astonishment that they were covered with
-paper so as to prevent my seeing through them.
-
-"'I am sorry to cut off your view, Mr. Melas,' said he. 'The fact is
-that I have no intention that you should see what the place is to which
-we are driving. It might possibly be inconvenient to me if you could
-find your way there again.'
-
-"As you can imagine, I was utterly taken aback by such an address. My
-companion was a powerful, broad-shouldered young fellow, and, apart from
-the weapon, I should not have had the slightest chance in a struggle
-with him.
-
-"'This is very extraordinary conduct, Mr. Latimer,' I stammered. 'You
-must be aware that what you are doing is quite illegal.'
-
-"'It is somewhat of a liberty, no doubt,' said he, 'but we'll make it
-up to you. I must warn you, however, Mr. Melas, that if at any time
-to-night you attempt to raise an alarm or do anything which is against
-my interests, you will find it a very serious thing. I beg you to
-remember that no one knows where you are, and that, whether you are in
-this carriage or in my house, you are equally in my power.'
-
-"His words were quiet, but he had a rasping way of saying them which
-was very menacing. I sat in silence wondering what on earth could be
-his reason for kidnapping me in this extraordinary fashion. Whatever it
-might be, it was perfectly clear that there was no possible use in my
-resisting, and that I could only wait to see what might befall.
-
-"For nearly two hours we drove without my having the least clue as to
-where we were going. Sometimes the rattle of the stones told of a paved
-causeway, and at others our smooth, silent course suggested asphalt;
-but, save by this variation in sound, there was nothing at all which
-could in the remotest way help me to form a guess as to where we were.
-The paper over each window was impenetrable to light, and a blue curtain
-was drawn across the glass work in front. It was a quarter-past seven
-when we left Pall Mall, and my watch showed me that it was ten minutes
-to nine when we at last came to a standstill. My companion let down
-the window, and I caught a glimpse of a low, arched doorway with a lamp
-burning above it. As I was hurried from the carriage it swung open, and
-I found myself inside the house, with a vague impression of a lawn
-and trees on each side of me as I entered. Whether these were private
-grounds, however, or bona-fide country was more than I could possibly
-venture to say.
-
-"There was a colored gas-lamp inside which was turned so low that I
-could see little save that the hall was of some size and hung with
-pictures. In the dim light I could make out that the person who had
-opened the door was a small, mean-looking, middle-aged man with rounded
-shoulders. As he turned towards us the glint of the light showed me that
-he was wearing glasses.
-
-"'Is this Mr. Melas, Harold?' said he.
-
-"'Yes.'
-
-"'Well done, well done! No ill-will, Mr. Melas, I hope, but we could not
-get on without you. If you deal fair with us you'll not regret it,
-but if you try any tricks, God help you!' He spoke in a nervous, jerky
-fashion, and with little giggling laughs in between, but somehow he
-impressed me with fear more than the other.
-
-"'What do you want with me?' I asked.
-
-"'Only to ask a few questions of a Greek gentleman who is visiting us,
-and to let us have the answers. But say no more than you are told to
-say, or--' here came the nervous giggle again--'you had better never
-have been born.'
-
-"As he spoke he opened a door and showed the way into a room which
-appeared to be very richly furnished, but again the only light was
-afforded by a single lamp half-turned down. The chamber was certainly
-large, and the way in which my feet sank into the carpet as I stepped
-across it told me of its richness. I caught glimpses of velvet chairs, a
-high white marble mantel-piece, and what seemed to be a suit of Japanese
-armor at one side of it. There was a chair just under the lamp, and the
-elderly man motioned that I should sit in it. The younger had left
-us, but he suddenly returned through another door, leading with him
-a gentleman clad in some sort of loose dressing-gown who moved slowly
-towards us. As he came into the circle of dim light which enables me to
-see him more clearly I was thrilled with horror at his appearance. He
-was deadly pale and terribly emaciated, with the protruding, brilliant
-eyes of a man whose spirit was greater than his strength. But what
-shocked me more than any signs of physical weakness was that his face
-was grotesquely criss-crossed with sticking-plaster, and that one large
-pad of it was fastened over his mouth.
-
-"'Have you the slate, Harold?' cried the older man, as this strange
-being fell rather than sat down into a chair. 'Are his hands loose? Now,
-then, give him the pencil. You are to ask the questions, Mr. Melas, and
-he will write the answers. Ask him first of all whether he is prepared
-to sign the papers?'
-
-"The man's eyes flashed fire.
-
-"'Never!' he wrote in Greek upon the slate.
-
-"'On no condition?' I asked, at the bidding of our tyrant.
-
-"'Only if I see her married in my presence by a Greek priest whom I
-know.'
-
-"The man giggled in his venomous way.
-
-"'You know what awaits you, then?'
-
-"'I care nothing for myself.'
-
-"These are samples of the questions and answers which made up our
-strange half-spoken, half-written conversation. Again and again I had to
-ask him whether he would give in and sign the documents. Again and again
-I had the same indignant reply. But soon a happy thought came to me. I
-took to adding on little sentences of my own to each question, innocent
-ones at first, to test whether either of our companions knew anything
-of the matter, and then, as I found that they showed no signs I played a
-more dangerous game. Our conversation ran something like this:
-
-"'You can do no good by this obstinacy. Who are you?'
-
-"'I care not. I am a stranger in London.'
-
-"'Your fate will be upon your own head. How long have you been here?'
-
-"'Let it be so. Three weeks.'
-
-"'The property can never be yours. What ails you?'
-
-"'It shall not go to villains. They are starving me.'
-
-"'You shall go free if you sign. What house is this?'
-
-"'I will never sign. I do not know.'
-
-"'You are not doing her any service. What is your name?'
-
-"'Let me hear her say so. Kratides.'
-
-"'You shall see her if you sign. Where are you from?'
-
-"'Then I shall never see her. Athens.'
-
-"Another five minutes, Mr. Holmes, and I should have wormed out the
-whole story under their very noses. My very next question might have
-cleared the matter up, but at that instant the door opened and a woman
-stepped into the room. I could not see her clearly enough to know more
-than that she was tall and graceful, with black hair, and clad in some
-sort of loose white gown.
-
-"'Harold,' said she, speaking English with a broken accent. 'I could not
-stay away longer. It is so lonely up there with only--Oh, my God, it is
-Paul!'
-
-"These last words were in Greek, and at the same instant the man with
-a convulsive effort tore the plaster from his lips, and screaming out
-'Sophy! Sophy!' rushed into the woman's arms. Their embrace was but for
-an instant, however, for the younger man seized the woman and pushed
-her out of the room, while the elder easily overpowered his emaciated
-victim, and dragged him away through the other door. For a moment I was
-left alone in the room, and I sprang to my feet with some vague idea
-that I might in some way get a clue to what this house was in which I
-found myself. Fortunately, however, I took no steps, for looking up I
-saw that the older man was standing in the door-way with his eyes fixed
-upon me.
-
-"'That will do, Mr. Melas,' said he. 'You perceive that we have taken
-you into our confidence over some very private business. We should not
-have troubled you, only that our friend who speaks Greek and who began
-these negotiations has been forced to return to the East. It was
-quite necessary for us to find some one to take his place, and we were
-fortunate in hearing of your powers.'
-
-"I bowed.
-
-"'There are five sovereigns here,' said he, walking up to me, 'which
-will, I hope, be a sufficient fee. But remember,' he added, tapping me
-lightly on the chest and giggling, 'if you speak to a human soul about
-this--one human soul, mind--well, may God have mercy upon your soul!"
-
-"I cannot tell you the loathing and horror with which this
-insignificant-looking man inspired me. I could see him better now as the
-lamp-light shone upon him. His features were peaky and sallow, and his
-little pointed beard was thready and ill-nourished. He pushed his face
-forward as he spoke and his lips and eyelids were continually twitching
-like a man with St. Vitus's dance. I could not help thinking that his
-strange, catchy little laugh was also a symptom of some nervous malady.
-The terror of his face lay in his eyes, however, steel gray, and
-glistening coldly with a malignant, inexorable cruelty in their depths.
-
-"'We shall know if you speak of this,' said he. 'We have our own means
-of information. Now you will find the carriage waiting, and my friend
-will see you on your way.'
-
-"I was hurried through the hall and into the vehicle, again obtaining
-that momentary glimpse of trees and a garden. Mr. Latimer followed
-closely at my heels, and took his place opposite to me without a word.
-In silence we again drove for an interminable distance with the windows
-raised, until at last, just after midnight, the carriage pulled up.
-
-"'You will get down here, Mr. Melas,' said my companion. 'I am sorry
-to leave you so far from your house, but there is no alternative. Any
-attempt upon your part to follow the carriage can only end in injury to
-yourself.'
-
-"He opened the door as he spoke, and I had hardly time to spring out
-when the coachman lashed the horse and the carriage rattled away. I
-looked around me in astonishment. I was on some sort of a heathy common
-mottled over with dark clumps of furze-bushes. Far away stretched a
-line of houses, with a light here and there in the upper windows. On the
-other side I saw the red signal-lamps of a railway.
-
-"The carriage which had brought me was already out of sight. I stood
-gazing round and wondering where on earth I might be, when I saw some
-one coming towards me in the darkness. As he came up to me I made out
-that he was a railway porter.
-
-"'Can you tell me what place this is?' I asked.
-
-"'Wandsworth Common,' said he.
-
-"'Can I get a train into town?'
-
-"'If you walk on a mile or so to Clapham Junction,' said he, 'you'll
-just be in time for the last to Victoria.'
-
-"So that was the end of my adventure, Mr. Holmes. I do not know where I
-was, nor whom I spoke with, nor anything save what I have told you. But
-I know that there is foul play going on, and I want to help that unhappy
-man if I can. I told the whole story to Mr. Mycroft Holmes next morning,
-and subsequently to the police."
-
-We all sat in silence for some little time after listening to this
-extraordinary narrative. Then Sherlock looked across at his brother.
-
-"Any steps?" he asked.
-
-Mycroft picked up the Daily News, which was lying on the side-table.
-
-"'Anybody supplying any information to the whereabouts of a Greek
-gentleman named Paul Kratides, from Athens, who is unable to speak
-English, will be rewarded. A similar reward paid to any one giving
-information about a Greek lady whose first name is Sophy. X 2473.' That
-was in all the dailies. No answer."
-
-"How about the Greek Legation?"
-
-"I have inquired. They know nothing."
-
-"A wire to the head of the Athens police, then?"
-
-"Sherlock has all the energy of the family," said Mycroft, turning to
-me. "Well, you take the case up by all means, and let me know if you do
-any good."
-
-"Certainly," answered my friend, rising from his chair. "I'll let you
-know, and Mr. Melas also. In the meantime, Mr. Melas, I should certainly
-be on my guard, if I were you, for of course they must know through
-these advertisements that you have betrayed them."
-
-As we walked home together, Holmes stopped at a telegraph office and
-sent off several wires.
-
-"You see, Watson," he remarked, "our evening has been by no means
-wasted. Some of my most interesting cases have come to me in this way
-through Mycroft. The problem which we have just listened to, although
-it can admit of but one explanation, has still some distinguishing
-features."
-
-"You have hopes of solving it?"
-
-"Well, knowing as much as we do, it will be singular indeed if we fail
-to discover the rest. You must yourself have formed some theory which
-will explain the facts to which we have listened."
-
-"In a vague way, yes."
-
-"What was your idea, then?"
-
-"It seemed to me to be obvious that this Greek girl had been carried off
-by the young Englishman named Harold Latimer."
-
-"Carried off from where?"
-
-"Athens, perhaps."
-
-Sherlock Holmes shook his head. "This young man could not talk a word of
-Greek. The lady could talk English fairly well. Inference--that she had
-been in England some little time, but he had not been in Greece."
-
-"Well, then, we will presume that she had come on a visit to England,
-and that this Harold had persuaded her to fly with him."
-
-"That is more probable."
-
-"Then the brother--for that, I fancy, must be the relationship--comes
-over from Greece to interfere. He imprudently puts himself into the
-power of the young man and his older associate. They seize him and use
-violence towards him in order to make him sign some papers to make over
-the girl's fortune--of which he may be trustee--to them. This he refuses
-to do. In order to negotiate with him they have to get an interpreter,
-and they pitch upon this Mr. Melas, having used some other one before.
-The girl is not told of the arrival of her brother, and finds it out by
-the merest accident."
-
-"Excellent, Watson!" cried Holmes. "I really fancy that you are not far
-from the truth. You see that we hold all the cards, and we have only to
-fear some sudden act of violence on their part. If they give us time we
-must have them."
-
-"But how can we find where this house lies?"
-
-"Well, if our conjecture is correct and the girl's name is or was Sophy
-Kratides, we should have no difficulty in tracing her. That must be our
-main hope, for the brother is, of course, a complete stranger. It is
-clear that some time has elapsed since this Harold established these
-relations with the girl--some weeks, at any rate--since the brother in
-Greece has had time to hear of it and come across. If they have been
-living in the same place during this time, it is probable that we shall
-have some answer to Mycroft's advertisement."
-
-We had reached our house in Baker Street while we had been talking.
-Holmes ascended the stair first, and as he opened the door of our room
-he gave a start of surprise. Looking over his shoulder, I was equally
-astonished. His brother Mycroft was sitting smoking in the arm-chair.
-
-"Come in, Sherlock! Come in, sir," said he blandly, smiling at our
-surprised faces. "You don't expect such energy from me, do you,
-Sherlock? But somehow this case attracts me."
-
-"How did you get here?"
-
-"I passed you in a hansom."
-
-"There has been some new development?"
-
-"I had an answer to my advertisement."
-
-"Ah!"
-
-"Yes, it came within a few minutes of your leaving."
-
-"And to what effect?"
-
-Mycroft Holmes took out a sheet of paper.
-
-"Here it is," said he, "written with a J pen on royal cream paper by a
-middle-aged man with a weak constitution. 'Sir,' he says, 'in answer to
-your advertisement of to-day's date, I beg to inform you that I know the
-young lady in question very well. If you should care to call upon me I
-could give you some particulars as to her painful history. She is living
-at present at The Myrtles, Beckenham. Yours faithfully, J. Davenport.'
-
-"He writes from Lower Brixton," said Mycroft Holmes. "Do you not think
-that we might drive to him now, Sherlock, and learn these particulars?"
-
-"My dear Mycroft, the brother's life is more valuable than the sister's
-story. I think we should call at Scotland Yard for Inspector Gregson,
-and go straight out to Beckenham. We know that a man is being done to
-death, and every hour may be vital."
-
-"Better pick up Mr. Melas on our way," I suggested. "We may need an
-interpreter."
-
-"Excellent," said Sherlock Holmes. "Send the boy for a four-wheeler, and
-we shall be off at once." He opened the table-drawer as he spoke, and I
-noticed that he slipped his revolver into his pocket. "Yes," said he, in
-answer to my glance; "I should say from what we have heard, that we are
-dealing with a particularly dangerous gang."
-
-It was almost dark before we found ourselves in Pall Mall, at the rooms
-of Mr. Melas. A gentleman had just called for him, and he was gone.
-
-"Can you tell me where?" asked Mycroft Holmes.
-
-"I don't know, sir," answered the woman who had opened the door; "I only
-know that he drove away with the gentleman in a carriage."
-
-"Did the gentleman give a name?"
-
-"No, sir."
-
-"He wasn't a tall, handsome, dark young man?"
-
-"Oh, no, sir. He was a little gentleman, with glasses, thin in the face,
-but very pleasant in his ways, for he was laughing all the time that he
-was talking."
-
-"Come along!" cried Sherlock Holmes, abruptly. "This grows serious,"
-he observed, as we drove to Scotland Yard. "These men have got hold of
-Melas again. He is a man of no physical courage, as they are well
-aware from their experience the other night. This villain was able to
-terrorize him the instant that he got into his presence. No doubt
-they want his professional services, but, having used him, they may be
-inclined to punish him for what they will regard as his treachery."
-
-Our hope was that, by taking train, we might get to Beckenham as soon
-or sooner than the carriage. On reaching Scotland Yard, however, it was
-more than an hour before we could get Inspector Gregson and comply with
-the legal formalities which would enable us to enter the house. It was a
-quarter to ten before we reached London Bridge, and half past before the
-four of us alighted on the Beckenham platform. A drive of half a mile
-brought us to The Myrtles--a large, dark house standing back from the
-road in its own grounds. Here we dismissed our cab, and made our way up
-the drive together.
-
-"The windows are all dark," remarked the inspector. "The house seems
-deserted."
-
-"Our birds are flown and the nest empty," said Holmes.
-
-"Why do you say so?"
-
-"A carriage heavily loaded with luggage has passed out during the last
-hour."
-
-The inspector laughed. "I saw the wheel-tracks in the light of the
-gate-lamp, but where does the luggage come in?"
-
-"You may have observed the same wheel-tracks going the other way. But
-the outward-bound ones were very much deeper--so much so that we can
-say for a certainty that there was a very considerable weight on the
-carriage."
-
-"You get a trifle beyond me there," said the inspector, shrugging his
-shoulder. "It will not be an easy door to force, but we will try if we
-cannot make some one hear us."
-
-He hammered loudly at the knocker and pulled at the bell, but without
-any success. Holmes had slipped away, but he came back in a few minutes.
-
-"I have a window open," said he.
-
-"It is a mercy that you are on the side of the force, and not against
-it, Mr. Holmes," remarked the inspector, as he noted the clever way in
-which my friend had forced back the catch. "Well, I think that under the
-circumstances we may enter without an invitation."
-
-One after the other we made our way into a large apartment, which was
-evidently that in which Mr. Melas had found himself. The inspector
-had lit his lantern, and by its light we could see the two doors, the
-curtain, the lamp, and the suit of Japanese mail as he had described
-them. On the table lay two glasses, and empty brandy-bottle, and the
-remains of a meal.
-
-"What is that?" asked Holmes, suddenly.
-
-We all stood still and listened. A low moaning sound was coming from
-somewhere over our heads. Holmes rushed to the door and out into the
-hall. The dismal noise came from upstairs. He dashed up, the inspector
-and I at his heels, while his brother Mycroft followed as quickly as his
-great bulk would permit.
-
-Three doors faced up upon the second floor, and it was from the central
-of these that the sinister sounds were issuing, sinking sometimes into a
-dull mumble and rising again into a shrill whine. It was locked, but the
-key had been left on the outside. Holmes flung open the door and rushed
-in, but he was out again in an instant, with his hand to his throat.
-
-"It's charcoal," he cried. "Give it time. It will clear."
-
-Peering in, we could see that the only light in the room came from a
-dull blue flame which flickered from a small brass tripod in the centre.
-It threw a livid, unnatural circle upon the floor, while in the shadows
-beyond we saw the vague loom of two figures which crouched against the
-wall. From the open door there reeked a horrible poisonous exhalation
-which set us gasping and coughing. Holmes rushed to the top of the
-stairs to draw in the fresh air, and then, dashing into the room, he
-threw up the window and hurled the brazen tripod out into the garden.
-
-"We can enter in a minute," he gasped, darting out again. "Where is a
-candle? I doubt if we could strike a match in that atmosphere. Hold the
-light at the door and we shall get them out, Mycroft, now!"
-
-With a rush we got to the poisoned men and dragged them out into the
-well-lit hall. Both of them were blue-lipped and insensible, with
-swollen, congested faces and protruding eyes. Indeed, so distorted were
-their features that, save for his black beard and stout figure, we might
-have failed to recognize in one of them the Greek interpreter who had
-parted from us only a few hours before at the Diogenes Club. His hands
-and feet were securely strapped together, and he bore over one eye
-the marks of a violent blow. The other, who was secured in a similar
-fashion, was a tall man in the last stage of emaciation, with several
-strips of sticking-plaster arranged in a grotesque pattern over his
-face. He had ceased to moan as we laid him down, and a glance showed
-me that for him at least our aid had come too late. Mr. Melas, however,
-still lived, and in less than an hour, with the aid of ammonia and
-brandy I had the satisfaction of seeing him open his eyes, and of
-knowing that my hand had drawn him back from that dark valley in which
-all paths meet.
-
-It was a simple story which he had to tell, and one which did but
-confirm our own deductions. His visitor, on entering his rooms, had
-drawn a life-preserver from his sleeve, and had so impressed him with
-the fear of instant and inevitable death that he had kidnapped him for
-the second time. Indeed, it was almost mesmeric, the effect which this
-giggling ruffian had produced upon the unfortunate linguist, for he
-could not speak of him save with trembling hands and a blanched cheek.
-He had been taken swiftly to Beckenham, and had acted as interpreter in
-a second interview, even more dramatic than the first, in which the two
-Englishmen had menaced their prisoner with instant death if he did not
-comply with their demands. Finally, finding him proof against every
-threat, they had hurled him back into his prison, and after
-reproaching Melas with his treachery, which appeared from the newspaper
-advertisement, they had stunned him with a blow from a stick, and he
-remembered nothing more until he found us bending over him.
-
-And this was the singular case of the Grecian Interpreter, the
-explanation of which is still involved in some mystery. We were able
-to find out, by communicating with the gentleman who had answered the
-advertisement, that the unfortunate young lady came of a wealthy Grecian
-family, and that she had been on a visit to some friends in England.
-While there she had met a young man named Harold Latimer, who had
-acquired an ascendancy over he and had eventually persuaded her to fly
-with him. Her friends, shocked at the event, had contented themselves
-with informing her brother at Athens, and had then washed their hands
-of the matter. The brother, on his arrival in England, had imprudently
-placed himself in the power of Latimer and of his associate, whose name
-was Wilson Kemp--a man of the foulest antecedents. These two, finding
-that through his ignorance of the language he was helpless in their
-hands, had kept him a prisoner, and had endeavored by cruelty and
-starvation to make him sign away his own and his sister's property. They
-had kept him in the house without the girl's knowledge, and the plaster
-over the face had been for the purpose of making recognition difficult
-in case she should ever catch a glimpse of him. Her feminine perception,
-however, had instantly seen through the disguise when, on the occasion
-of the interpreter's visit, she had seen him for the first time. The
-poor girl, however, was herself a prisoner, for there was no one about
-the house except the man who acted as coachman, and his wife, both of
-whom were tools of the conspirators. Finding that their secret was out,
-and that their prisoner was not to be coerced, the two villains with the
-girl had fled away at a few hours' notice from the furnished house which
-they had hired, having first, as they thought, taken vengeance both upon
-the man who had defied and the one who had betrayed them.
-
-Months afterwards a curious newspaper cutting reached us from
-Buda-Pesth. It told how two Englishmen who had been traveling with a
-woman had met with a tragic end. They had each been stabbed, it seems,
-and the Hungarian police were of opinion that they had quarreled and had
-inflicted mortal injuries upon each other. Holmes, however, is, I fancy,
-of a different way of thinking, and holds to this day that, if one could
-find the Grecian girl, one might learn how the wrongs of herself and her
-brother came to be avenged.
-
-
-
-
-Adventure X. The Naval Treaty
-
-
-The July which immediately succeeded my marriage was made memorable
-by three cases of interest, in which I had the privilege of being
-associated with Sherlock Holmes and of studying his methods. I find them
-recorded in my notes under the headings of "The Adventure of the Second
-Stain," "The Adventure of the Naval Treaty," and "The Adventure of the
-Tired Captain." The first of these, however, deals with interest of such
-importance and implicates so many of the first families in the kingdom
-that for many years it will be impossible to make it public. No case,
-however, in which Holmes was engaged has ever illustrated the value
-of his analytical methods so clearly or has impressed those who were
-associated with him so deeply. I still retain an almost verbatim report
-of the interview in which he demonstrated the true facts of the case
-to Monsieur Dubugue of the Paris police, and Fritz von Waldbaum, the
-well-known specialist of Dantzig, both of whom had wasted their energies
-upon what proved to be side-issues. The new century will have come,
-however, before the story can be safely told. Meanwhile I pass on to
-the second on my list, which promised also at one time to be of national
-importance, and was marked by several incidents which give it a quite
-unique character.
-
-During my school-days I had been intimately associated with a lad named
-Percy Phelps, who was of much the same age as myself, though he was two
-classes ahead of me. He was a very brilliant boy, and carried away every
-prize which the school had to offer, finished his exploits by winning
-a scholarship which sent him on to continue his triumphant career at
-Cambridge. He was, I remember, extremely well connected, and even when
-we were all little boys together we knew that his mother's brother
-was Lord Holdhurst, the great conservative politician. This gaudy
-relationship did him little good at school. On the contrary, it seemed
-rather a piquant thing to us to chevy him about the playground and hit
-him over the shins with a wicket. But it was another thing when he
-came out into the world. I heard vaguely that his abilities and the
-influences which he commanded had won him a good position at the Foreign
-Office, and then he passed completely out of my mind until the following
-letter recalled his existence:
-
-
-Briarbrae, Woking. My dear Watson,--I have no doubt that you can
-remember "Tadpole" Phelps, who was in the fifth form when you were in
-the third. It is possible even that you may have heard that through my
-uncle's influence I obtained a good appointment at the Foreign Office,
-and that I was in a situation of trust and honor until a horrible
-misfortune came suddenly to blast my career.
-
-There is no use writing of the details of that dreadful event. In the
-event of your acceding to my request it is probably that I shall have
-to narrate them to you. I have only just recovered from nine weeks of
-brain-fever, and am still exceedingly weak. Do you think that you could
-bring your friend Mr. Holmes down to see me? I should like to have his
-opinion of the case, though the authorities assure me that nothing more
-can be done. Do try to bring him down, and as soon as possible. Every
-minute seems an hour while I live in this state of horrible suspense.
-Assure him that if I have not asked his advice sooner it was not because
-I did not appreciate his talents, but because I have been off my head
-ever since the blow fell. Now I am clear again, though I dare not think
-of it too much for fear of a relapse. I am still so weak that I have to
-write, as you see, by dictating. Do try to bring him.
-
-Your old school-fellow,
-
-Percy Phelps.
-
-
-There was something that touched me as I read this letter, something
-pitiable in the reiterated appeals to bring Holmes. So moved was I
-that even had it been a difficult matter I should have tried it, but
-of course I knew well that Holmes loved his art, so that he was ever
-as ready to bring his aid as his client could be to receive it. My wife
-agreed with me that not a moment should be lost in laying the matter
-before him, and so within an hour of breakfast-time I found myself back
-once more in the old rooms in Baker Street.
-
-Holmes was seated at his side-table clad in his dressing-gown, and
-working hard over a chemical investigation. A large curved retort
-was boiling furiously in the bluish flame of a Bunsen burner, and the
-distilled drops were condensing into a two-litre measure. My friend
-hardly glanced up as I entered, and I, seeing that his investigation
-must be of importance, seated myself in an arm-chair and waited. He
-dipped into this bottle or that, drawing out a few drops of each with
-his glass pipette, and finally brought a test-tube containing a solution
-over to the table. In his right hand he held a slip of litmus-paper.
-
-"You come at a crisis, Watson," said he. "If this paper remains blue,
-all is well. If it turns red, it means a man's life." He dipped it into
-the test-tube and it flushed at once into a dull, dirty crimson. "Hum!
-I thought as much!" he cried. "I will be at your service in an instant,
-Watson. You will find tobacco in the Persian slipper." He turned to his
-desk and scribbled off several telegrams, which were handed over to the
-page-boy. Then he threw himself down into the chair opposite, and drew
-up his knees until his fingers clasped round his long, thin shins.
-
-"A very commonplace little murder," said he. "You've got something
-better, I fancy. You are the stormy petrel of crime, Watson. What is
-it?"
-
-I handed him the letter, which he read with the most concentrated
-attention.
-
-"It does not tell us very much, does it?" he remarked, as he handed it
-back to me.
-
-"Hardly anything."
-
-"And yet the writing is of interest."
-
-"But the writing is not his own."
-
-"Precisely. It is a woman's."
-
-"A man's surely," I cried.
-
-"No, a woman's, and a woman of rare character. You see, at the
-commencement of an investigation it is something to know that your
-client is in close contact with some one who, for good or evil, has an
-exceptional nature. My interest is already awakened in the case. If you
-are ready we will start at once for Woking, and see this diplomatist who
-is in such evil case, and the lady to whom he dictates his letters."
-
-We were fortunate enough to catch an early train at Waterloo, and in
-a little under an hour we found ourselves among the fir-woods and
-the heather of Woking. Briarbrae proved to be a large detached house
-standing in extensive grounds within a few minutes' walk of the station.
-On sending in our cards we were shown into an elegantly appointed
-drawing-room, where we were joined in a few minutes by a rather stout
-man who received us with much hospitality. His age may have been nearer
-forty than thirty, but his cheeks were so ruddy and his eyes so merry
-that he still conveyed the impression of a plump and mischievous boy.
-
-"I am so glad that you have come," said he, shaking our hands with
-effusion. "Percy has been inquiring for you all morning. Ah, poor old
-chap, he clings to any straw! His father and his mother asked me to see
-you, for the mere mention of the subject is very painful to them."
-
-"We have had no details yet," observed Holmes. "I perceive that you are
-not yourself a member of the family."
-
-Our acquaintance looked surprised, and then, glancing down, he began to
-laugh.
-
-"Of course you saw the J H monogram on my locket," said he. "For a
-moment I thought you had done something clever. Joseph Harrison is my
-name, and as Percy is to marry my sister Annie I shall at least be a
-relation by marriage. You will find my sister in his room, for she has
-nursed him hand-and-foot this two months back. Perhaps we'd better go in
-at once, for I know how impatient he is."
-
-The chamber in which we were shown was on the same floor as the
-drawing-room. It was furnished partly as a sitting and partly as a
-bedroom, with flowers arranged daintily in every nook and corner. A
-young man, very pale and worn, was lying upon a sofa near the open
-window, through which came the rich scent of the garden and the balmy
-summer air. A woman was sitting beside him, who rose as we entered.
-
-"Shall I leave, Percy?" she asked.
-
-He clutched her hand to detain her. "How are you, Watson?" said he,
-cordially. "I should never have known you under that moustache, and I
-dare say you would not be prepared to swear to me. This I presume is
-your celebrated friend, Mr. Sherlock Holmes?"
-
-I introduced him in a few words, and we both sat down. The stout young
-man had left us, but his sister still remained with her hand in that of
-the invalid. She was a striking-looking woman, a little short and
-thick for symmetry, but with a beautiful olive complexion, large, dark,
-Italian eyes, and a wealth of deep black hair. Her rich tints made the
-white face of her companion the more worn and haggard by the contrast.
-
-"I won't waste your time," said he, raising himself upon the sofa.
-"I'll plunge into the matter without further preamble. I was a happy
-and successful man, Mr. Holmes, and on the eve of being married, when a
-sudden and dreadful misfortune wrecked all my prospects in life.
-
-"I was, as Watson may have told you, in the Foreign Office, and
-through the influences of my uncle, Lord Holdhurst, I rose rapidly to
-a responsible position. When my uncle became foreign minister in this
-administration he gave me several missions of trust, and as I always
-brought them to a successful conclusion, he came at last to have the
-utmost confidence in my ability and tact.
-
-"Nearly ten weeks ago--to be more accurate, on the 23d of May--he called
-me into his private room, and, after complimenting me on the good work
-which I had done, he informed me that he had a new commission of trust
-for me to execute.
-
-"'This,' said he, taking a gray roll of paper from his bureau, 'is the
-original of that secret treaty between England and Italy of which, I
-regret to say, some rumors have already got into the public press. It is
-of enormous importance that nothing further should leak out. The French
-or the Russian embassy would pay an immense sum to learn the contents
-of these papers. They should not leave my bureau were it not that it
-is absolutely necessary to have them copied. You have a desk in your
-office?"
-
-"'Yes, sir.'
-
-"'Then take the treaty and lock it up there. I shall give directions
-that you may remain behind when the others go, so that you may copy
-it at your leisure without fear of being overlooked. When you have
-finished, relock both the original and the draft in the desk, and hand
-them over to me personally to-morrow morning.'
-
-"I took the papers and--"
-
-"Excuse me an instant," said Holmes. "Were you alone during this
-conversation?"
-
-"Absolutely."
-
-"In a large room?"
-
-"Thirty feet each way."
-
-"In the centre?"
-
-"Yes, about it."
-
-"And speaking low?"
-
-"My uncle's voice is always remarkably low. I hardly spoke at all."
-
-"Thank you," said Holmes, shutting his eyes; "pray go on."
-
-"I did exactly what he indicated, and waited until the other clerks had
-departed. One of them in my room, Charles Gorot, had some arrears
-of work to make up, so I left him there and went out to dine. When I
-returned he was gone. I was anxious to hurry my work, for I knew that
-Joseph--the Mr. Harrison whom you saw just now--was in town, and that he
-would travel down to Woking by the eleven-o'clock train, and I wanted if
-possible to catch it.
-
-"When I came to examine the treaty I saw at once that it was of such
-importance that my uncle had been guilty of no exaggeration in what
-he had said. Without going into details, I may say that it defined the
-position of Great Britain towards the Triple Alliance, and fore-shadowed
-the policy which this country would pursue in the event of the
-French fleet gaining a complete ascendancy over that of Italy in the
-Mediterranean. The questions treated in it were purely naval. At the end
-were the signatures of the high dignitaries who had signed it. I glanced
-my eyes over it, and then settled down to my task of copying.
-
-"It was a long document, written in the French language, and containing
-twenty-six separate articles. I copied as quickly as I could, but at
-nine o'clock I had only done nine articles, and it seemed hopeless for
-me to attempt to catch my train. I was feeling drowsy and stupid, partly
-from my dinner and also from the effects of a long day's work. A cup of
-coffee would clear my brain. A commissionnaire remains all night in a
-little lodge at the foot of the stairs, and is in the habit of making
-coffee at his spirit-lamp for any of the officials who may be working
-over time. I rang the bell, therefore, to summon him.
-
-"To my surprise, it was a woman who answered the summons, a large,
-coarse-faced, elderly woman, in an apron. She explained that she was the
-commissionnaire's wife, who did the charing, and I gave her the order
-for the coffee.
-
-"I wrote two more articles and then, feeling more drowsy than ever, I
-rose and walked up and down the room to stretch my legs. My coffee had
-not yet come, and I wondered what was the cause of the delay could be.
-Opening the door, I started down the corridor to find out. There was a
-straight passage, dimly lighted, which led from the room in which I
-had been working, and was the only exit from it. It ended in a curving
-staircase, with the commissionnaire's lodge in the passage at the
-bottom. Half way down this staircase is a small landing, with another
-passage running into it at right angles. This second one leads by means
-of a second small stair to a side door, used by servants, and also as
-a short cut by clerks when coming from Charles Street. Here is a rough
-chart of the place."
-
-"Thank you. I think that I quite follow you," said Sherlock Holmes.
-
-"It is of the utmost importance that you should notice this point.
-I went down the stairs and into the hall, where I found the
-commissionnaire fast asleep in his box, with the kettle boiling
-furiously upon the spirit-lamp. I took off the kettle and blew out the
-lamp, for the water was spurting over the floor. Then I put out my hand
-and was about to shake the man, who was still sleeping soundly, when a
-bell over his head rang loudly, and he woke with a start.
-
-"'Mr. Phelps, sir!' said he, looking at me in bewilderment.
-
-"'I came down to see if my coffee was ready.'
-
-"'I was boiling the kettle when I fell asleep, sir.' He looked at me and
-then up at the still quivering bell with an ever-growing astonishment
-upon his face.
-
-"'If you was here, sir, then who rang the bell?' he asked.
-
-"'The bell!' I cried. 'What bell is it?'
-
-"'It's the bell of the room you were working in.'
-
-"A cold hand seemed to close round my heart. Some one, then, was in that
-room where my precious treaty lay upon the table. I ran frantically up
-the stair and along the passage. There was no one in the corridors, Mr.
-Holmes. There was no one in the room. All was exactly as I left it, save
-only that the papers which had been committed to my care had been taken
-from the desk on which they lay. The copy was there, and the original
-was gone."
-
-Holmes sat up in his chair and rubbed his hands. I could see that the
-problem was entirely to his heart. "Pray, what did you do then?" he
-murmured.
-
-"I recognized in an instant that the thief must have come up the stairs
-from the side door. Of course I must have met him if he had come the
-other way."
-
-"You were satisfied that he could not have been concealed in the room
-all the time, or in the corridor which you have just described as dimly
-lighted?"
-
-"It is absolutely impossible. A rat could not conceal himself either in
-the room or the corridor. There is no cover at all."
-
-"Thank you. Pray proceed."
-
-"The commissionnaire, seeing by my pale face that something was to be
-feared, had followed me upstairs. Now we both rushed along the corridor
-and down the steep steps which led to Charles Street. The door at the
-bottom was closed, but unlocked. We flung it open and rushed out. I can
-distinctly remember that as we did so there came three chimes from a
-neighboring clock. It was quarter to ten."
-
-"That is of enormous importance," said Holmes, making a note upon his
-shirt-cuff.
-
-"The night was very dark, and a thin, warm rain was falling. There was
-no one in Charles Street, but a great traffic was going on, as usual, in
-Whitehall, at the extremity. We rushed along the pavement, bare-headed
-as we were, and at the far corner we found a policeman standing.
-
-"'A robbery has been committed,' I gasped. 'A document of immense value
-has been stolen from the Foreign Office. Has any one passed this way?'
-
-"'I have been standing here for a quarter of an hour, sir,' said he;
-'only one person has passed during that time--a woman, tall and elderly,
-with a Paisley shawl.'
-
-"'Ah, that is only my wife,' cried the commissionnaire; 'has no one else
-passed?'
-
-"'No one.'
-
-"'Then it must be the other way that the thief took,' cried the fellow,
-tugging at my sleeve.
-
-"'But I was not satisfied, and the attempts which he made to draw me
-away increased my suspicions.
-
-"'Which way did the woman go?' I cried.
-
-"'I don't know, sir. I noticed her pass, but I had no special reason for
-watching her. She seemed to be in a hurry.'
-
-"'How long ago was it?'
-
-"'Oh, not very many minutes.'
-
-"'Within the last five?'
-
-"'Well, it could not be more than five.'
-
-"'You're only wasting your time, sir, and every minute now is of
-importance,' cried the commissionnaire; 'take my word for it that my old
-woman has nothing to do with it, and come down to the other end of the
-street. Well, if you won't, I will.' And with that he rushed off in the
-other direction.
-
-"But I was after him in an instant and caught him by the sleeve.
-
-"'Where do you live?' said I.
-
-"'16 Ivy Lane, Brixton,' he answered. 'But don't let yourself be drawn
-away upon a false scent, Mr. Phelps. Come to the other end of the street
-and let us see if we can hear of anything.'
-
-"Nothing was to be lost by following his advice. With the policeman we
-both hurried down, but only to find the street full of traffic, many
-people coming and going, but all only too eager to get to a place of
-safety upon so wet a night. There was no lounger who could tell us who
-had passed.
-
-"Then we returned to the office, and searched the stairs and the passage
-without result. The corridor which led to the room was laid down with
-a kind of creamy linoleum which shows an impression very easily. We
-examined it very carefully, but found no outline of any footmark."
-
-"Had it been raining all evening?"
-
-"Since about seven."
-
-"How is it, then, that the woman who came into the room about nine left
-no traces with her muddy boots?"
-
-"I am glad you raised the point. It occurred to me at the time.
-The charwomen are in the habit of taking off their boots at the
-commissionnaire's office, and putting on list slippers."
-
-"That is very clear. There were no marks, then, though the night was a
-wet one? The chain of events is certainly one of extraordinary interest.
-What did you do next?
-
-"We examined the room also. There is no possibility of a secret door,
-and the windows are quite thirty feet from the ground. Both of them
-were fastened on the inside. The carpet prevents any possibility of a
-trap-door, and the ceiling is of the ordinary whitewashed kind. I will
-pledge my life that whoever stole my papers could only have come through
-the door."
-
-"How about the fireplace?"
-
-"They use none. There is a stove. The bell-rope hangs from the wire just
-to the right of my desk. Whoever rang it must have come right up to the
-desk to do it. But why should any criminal wish to ring the bell? It is
-a most insoluble mystery."
-
-"Certainly the incident was unusual. What were your next steps? You
-examined the room, I presume, to see if the intruder had left any
-traces--any cigar-end or dropped glove or hairpin or other trifle?"
-
-"There was nothing of the sort."
-
-"No smell?"
-
-"Well, we never thought of that."
-
-"Ah, a scent of tobacco would have been worth a great deal to us in such
-an investigation."
-
-"I never smoke myself, so I think I should have observed it if there had
-been any smell of tobacco. There was absolutely no clue of any kind. The
-only tangible fact was that the commissionnaire's wife--Mrs. Tangey was
-the name--had hurried out of the place. He could give no explanation
-save that it was about the time when the woman always went home. The
-policeman and I agreed that our best plan would be to seize the woman
-before she could get rid of the papers, presuming that she had them.
-
-"The alarm had reached Scotland Yard by this time, and Mr. Forbes, the
-detective, came round at once and took up the case with a great deal of
-energy. We hired a hansom, and in half an hour we were at the address
-which had been given to us. A young woman opened the door, who proved to
-be Mrs. Tangey's eldest daughter. Her mother had not come back yet, and
-we were shown into the front room to wait.
-
-"About ten minutes later a knock came at the door, and here we made the
-one serious mistake for which I blame myself. Instead of opening the
-door ourselves, we allowed the girl to do so. We heard her say, 'Mother,
-there are two men in the house waiting to see you,' and an instant
-afterwards we heard the patter of feet rushing down the passage. Forbes
-flung open the door, and we both ran into the back room or kitchen, but
-the woman had got there before us. She stared at us with defiant
-eyes, and then, suddenly recognizing me, an expression of absolute
-astonishment came over her face.
-
-"'Why, if it isn't Mr. Phelps, of the office!' she cried.
-
-"'Come, come, who did you think we were when you ran away from us?'
-asked my companion.
-
-"'I thought you were the brokers,' said she, 'we have had some trouble
-with a tradesman.'
-
-"'That's not quite good enough,' answered Forbes. 'We have reason to
-believe that you have taken a paper of importance from the Foreign
-Office, and that you ran in here to dispose of it. You must come back
-with us to Scotland Yard to be searched.'
-
-"It was in vain that she protested and resisted. A four-wheeler was
-brought, and we all three drove back in it. We had first made an
-examination of the kitchen, and especially of the kitchen fire, to see
-whether she might have made away with the papers during the instant that
-she was alone. There were no signs, however, of any ashes or scraps.
-When we reached Scotland Yard she was handed over at once to the female
-searcher. I waited in an agony of suspense until she came back with her
-report. There were no signs of the papers.
-
-"Then for the first time the horror of my situation came in its full
-force. Hitherto I had been acting, and action had numbed thought. I had
-been so confident of regaining the treaty at once that I had not dared
-to think of what would be the consequence if I failed to do so. But
-now there was nothing more to be done, and I had leisure to realize
-my position. It was horrible. Watson there would tell you that I was a
-nervous, sensitive boy at school. It is my nature. I thought of my uncle
-and of his colleagues in the Cabinet, of the shame which I had brought
-upon him, upon myself, upon every one connected with me. What though I
-was the victim of an extraordinary accident? No allowance is made
-for accidents where diplomatic interests are at stake. I was ruined,
-shamefully, hopelessly ruined. I don't know what I did. I fancy I must
-have made a scene. I have a dim recollection of a group of officials who
-crowded round me, endeavoring to soothe me. One of them drove down with
-me to Waterloo, and saw me into the Woking train. I believe that he
-would have come all the way had it not been that Dr. Ferrier, who lives
-near me, was going down by that very train. The doctor most kindly took
-charge of me, and it was well he did so, for I had a fit in the station,
-and before we reached home I was practically a raving maniac.
-
-"You can imagine the state of things here when they were roused from
-their beds by the doctor's ringing and found me in this condition. Poor
-Annie here and my mother were broken-hearted. Dr. Ferrier had just heard
-enough from the detective at the station to be able to give an idea of
-what had happened, and his story did not mend matters. It was evident to
-all that I was in for a long illness, so Joseph was bundled out of this
-cheery bedroom, and it was turned into a sick-room for me. Here I have
-lain, Mr. Holmes, for over nine weeks, unconscious, and raving with
-brain-fever. If it had not been for Miss Harrison here and for the
-doctor's care I should not be speaking to you now. She has nursed me by
-day and a hired nurse has looked after me by night, for in my mad fits
-I was capable of anything. Slowly my reason has cleared, but it is only
-during the last three days that my memory has quite returned. Sometimes
-I wish that it never had. The first thing that I did was to wire to
-Mr. Forbes, who had the case in hand. He came out, and assures me that,
-though everything has been done, no trace of a clue has been discovered.
-The commissionnaire and his wife have been examined in every way without
-any light being thrown upon the matter. The suspicions of the police
-then rested upon young Gorot, who, as you may remember, stayed over time
-in the office that night. His remaining behind and his French name were
-really the only two points which could suggest suspicion; but, as a
-matter of fact, I did not begin work until he had gone, and his people
-are of Huguenot extraction, but as English in sympathy and tradition as
-you and I are. Nothing was found to implicate him in any way, and there
-the matter dropped. I turn to you, Mr. Holmes, as absolutely my last
-hope. If you fail me, then my honor as well as my position are forever
-forfeited."
-
-The invalid sank back upon his cushions, tired out by this long recital,
-while his nurse poured him out a glass of some stimulating medicine.
-Holmes sat silently, with his head thrown back and his eyes closed, in
-an attitude which might seem listless to a stranger, but which I knew
-betokened the most intense self-absorption.
-
-"You statement has been so explicit," said he at last, "that you have
-really left me very few questions to ask. There is one of the very
-utmost importance, however. Did you tell any one that you had this
-special task to perform?"
-
-"No one."
-
-"Not Miss Harrison here, for example?"
-
-"No. I had not been back to Woking between getting the order and
-executing the commission."
-
-"And none of your people had by chance been to see you?"
-
-"None."
-
-"Did any of them know their way about in the office?"
-
-"Oh, yes, all of them had been shown over it."
-
-"Still, of course, if you said nothing to any one about the treaty these
-inquiries are irrelevant."
-
-"I said nothing."
-
-"Do you know anything of the commissionnaire?"
-
-"Nothing except that he is an old soldier."
-
-"What regiment?"
-
-"Oh, I have heard--Coldstream Guards."
-
-"Thank you. I have no doubt I can get details from Forbes. The
-authorities are excellent at amassing facts, though they do not always
-use them to advantage. What a lovely thing a rose is!"
-
-He walked past the couch to the open window, and held up the drooping
-stalk of a moss-rose, looking down at the dainty blend of crimson and
-green. It was a new phase of his character to me, for I had never before
-seen him show any keen interest in natural objects.
-
-"There is nothing in which deduction is so necessary as in religion,"
-said he, leaning with his back against the shutters. "It can be built
-up as an exact science by the reasoner. Our highest assurance of the
-goodness of Providence seems to me to rest in the flowers. All other
-things, our powers our desires, our food, are all really necessary for
-our existence in the first instance. But this rose is an extra. Its
-smell and its color are an embellishment of life, not a condition of it.
-It is only goodness which gives extras, and so I say again that we have
-much to hope from the flowers."
-
-Percy Phelps and his nurse looked at Holmes during this demonstration
-with surprise and a good deal of disappointment written upon their
-faces. He had fallen into a reverie, with the moss-rose between his
-fingers. It had lasted some minutes before the young lady broke in upon
-it.
-
-"Do you see any prospect of solving this mystery, Mr. Holmes?" she
-asked, with a touch of asperity in her voice.
-
-"Oh, the mystery!" he answered, coming back with a start to the
-realities of life. "Well, it would be absurd to deny that the case is
-a very abstruse and complicated one, but I can promise you that I will
-look into the matter and let you know any points which may strike me."
-
-"Do you see any clue?"
-
-"You have furnished me with seven, but, of course, I must test them
-before I can pronounce upon their value."
-
-"You suspect some one?"
-
-"I suspect myself."
-
-"What!"
-
-"Of coming to conclusions too rapidly."
-
-"Then go to London and test your conclusions."
-
-"Your advice is very excellent, Miss Harrison," said Holmes, rising. "I
-think, Watson, we cannot do better. Do not allow yourself to indulge in
-false hopes, Mr. Phelps. The affair is a very tangled one."
-
-"I shall be in a fever until I see you again," cried the diplomatist.
-
-"Well, I'll come out by the same train to-morrow, though it's more than
-likely that my report will be a negative one."
-
-"God bless you for promising to come," cried our client. "It gives me
-fresh life to know that something is being done. By the way, I have had
-a letter from Lord Holdhurst."
-
-"Ha! What did he say?"
-
-"He was cold, but not harsh. I dare say my severe illness prevented
-him from being that. He repeated that the matter was of the utmost
-importance, and added that no steps would be taken about my future--by
-which he means, of course, my dismissal--until my health was restored
-and I had an opportunity of repairing my misfortune."
-
-"Well, that was reasonable and considerate," said Holmes. "Come, Watson,
-for we have a good day's work before us in town."
-
-Mr. Joseph Harrison drove us down to the station, and we were soon
-whirling up in a Portsmouth train. Holmes was sunk in profound thought,
-and hardly opened his mouth until we had passed Clapham Junction.
-
-"It's a very cheery thing to come into London by any of these lines
-which run high, and allow you to look down upon the houses like this."
-
-I thought he was joking, for the view was sordid enough, but he soon
-explained himself.
-
-"Look at those big, isolated clumps of building rising up above the
-slates, like brick islands in a lead-colored sea."
-
-"The board-schools."
-
-"Light-houses, my boy! Beacons of the future! Capsules with hundreds of
-bright little seeds in each, out of which will spring the wise, better
-England of the future. I suppose that man Phelps does not drink?"
-
-"I should not think so."
-
-"Nor should I, but we are bound to take every possibility into account.
-The poor devil has certainly got himself into very deep water, and it's
-a question whether we shall ever be able to get him ashore. What did you
-think of Miss Harrison?"
-
-"A girl of strong character."
-
-"Yes, but she is a good sort, or I am mistaken. She and her brother are
-the only children of an iron-master somewhere up Northumberland way. He
-got engaged to her when traveling last winter, and she came down to
-be introduced to his people, with her brother as escort. Then came
-the smash, and she stayed on to nurse her lover, while brother Joseph,
-finding himself pretty snug, stayed on too. I've been making a few
-independent inquiries, you see. But to-day must be a day of inquiries."
-
-"My practice--" I began.
-
-"Oh, if you find your own cases more interesting than mine--" said
-Holmes, with some asperity.
-
-"I was going to say that my practice could get along very well for a day
-or two, since it is the slackest time in the year."
-
-"Excellent," said he, recovering his good-humor. "Then we'll look into
-this matter together. I think that we should begin by seeing Forbes.
-He can probably tell us all the details we want until we know from what
-side the case is to be approached."
-
-"You said you had a clue?"
-
-"Well, we have several, but we can only test their value by further
-inquiry. The most difficult crime to track is the one which is
-purposeless. Now this is not purposeless. Who is it who profits by it?
-There is the French ambassador, there is the Russian, there is whoever
-might sell it to either of these, and there is Lord Holdhurst."
-
-"Lord Holdhurst!"
-
-"Well, it is just conceivable that a statesman might find himself in
-a position where he was not sorry to have such a document accidentally
-destroyed."
-
-"Not a statesman with the honorable record of Lord Holdhurst?"
-
-"It is a possibility and we cannot afford to disregard it. We shall see
-the noble lord to-day and find out if he can tell us anything. Meanwhile
-I have already set inquiries on foot."
-
-"Already?"
-
-"Yes, I sent wires from Woking station to every evening paper in London.
-This advertisement will appear in each of them."
-
-He handed over a sheet torn from a note-book. On it was scribbled in
-pencil: "L10 reward. The number of the cab which dropped a fare at or
-about the door of the Foreign Office in Charles Street at quarter to ten
-in the evening of May 23d. Apply 221 B, Baker Street."
-
-"You are confident that the thief came in a cab?"
-
-"If not, there is no harm done. But if Mr. Phelps is correct in stating
-that there is no hiding-place either in the room or the corridors, then
-the person must have come from outside. If he came from outside on so
-wet a night, and yet left no trace of damp upon the linoleum, which
-was examined within a few minutes of his passing, then it is exceeding
-probable that he came in a cab. Yes, I think that we may safely deduce a
-cab."
-
-"It sounds plausible."
-
-"That is one of the clues of which I spoke. It may lead us to something.
-And then, of course, there is the bell--which is the most distinctive
-feature of the case. Why should the bell ring? Was it the thief who did
-it out of bravado? Or was it some one who was with the thief who did it
-in order to prevent the crime? Or was it an accident? Or was it--?" He
-sank back into the state of intense and silent thought from which he
-had emerged; but it seemed to me, accustomed as I was to his every mood,
-that some new possibility had dawned suddenly upon him.
-
-It was twenty past three when we reached our terminus, and after a hasty
-luncheon at the buffet we pushed on at once to Scotland Yard. Holmes
-had already wired to Forbes, and we found him waiting to receive us--a
-small, foxy man with a sharp but by no means amiable expression. He
-was decidedly frigid in his manner to us, especially when he heard the
-errand upon which we had come.
-
-"I've heard of your methods before now, Mr. Holmes," said he, tartly.
-"You are ready enough to use all the information that the police can lay
-at your disposal, and then you try to finish the case yourself and bring
-discredit on them."
-
-"On the contrary," said Holmes, "out of my last fifty-three cases my
-name has only appeared in four, and the police have had all the credit
-in forty-nine. I don't blame you for not knowing this, for you are young
-and inexperienced, but if you wish to get on in your new duties you will
-work with me and not against me."
-
-"I'd be very glad of a hint or two," said the detective, changing his
-manner. "I've certainly had no credit from the case so far."
-
-"What steps have you taken?"
-
-"Tangey, the commissionnaire, has been shadowed. He left the Guards with
-a good character and we can find nothing against him. His wife is a bad
-lot, though. I fancy she knows more about this than appears."
-
-"Have you shadowed her?"
-
-"We have set one of our women on to her. Mrs. Tangey drinks, and our
-woman has been with her twice when she was well on, but she could get
-nothing out of her."
-
-"I understand that they have had brokers in the house?"
-
-"Yes, but they were paid off."
-
-"Where did the money come from?"
-
-"That was all right. His pension was due. They have not shown any sign
-of being in funds."
-
-"What explanation did she give of having answered the bell when Mr.
-Phelps rang for the coffee?"
-
-"She said that he husband was very tired and she wished to relieve him."
-
-"Well, certainly that would agree with his being found a little later
-asleep in his chair. There is nothing against them then but the woman's
-character. Did you ask her why she hurried away that night? Her haste
-attracted the attention of the police constable."
-
-"She was later than usual and wanted to get home."
-
-"Did you point out to her that you and Mr. Phelps, who started at least
-twenty minutes after her, got home before her?"
-
-"She explains that by the difference between a 'bus and a hansom."
-
-"Did she make it clear why, on reaching her house, she ran into the back
-kitchen?"
-
-"Because she had the money there with which to pay off the brokers."
-
-"She has at least an answer for everything. Did you ask her whether in
-leaving she met any one or saw any one loitering about Charles Street?"
-
-"She saw no one but the constable."
-
-"Well, you seem to have cross-examined her pretty thoroughly. What else
-have you done?"
-
-"The clerk Gorot has been shadowed all these nine weeks, but without
-result. We can show nothing against him."
-
-"Anything else?"
-
-"Well, we have nothing else to go upon--no evidence of any kind."
-
-"Have you formed a theory about how that bell rang?"
-
-"Well, I must confess that it beats me. It was a cool hand, whoever it
-was, to go and give the alarm like that."
-
-"Yes, it was queer thing to do. Many thanks to you for what you have
-told me. If I can put the man into your hands you shall hear from me.
-Come along, Watson."
-
-"Where are we going to now?" I asked, as we left the office.
-
-"We are now going to interview Lord Holdhurst, the cabinet minister and
-future premier of England."
-
-We were fortunate in finding that Lord Holdhurst was still in his
-chambers in Downing Street, and on Holmes sending in his card we were
-instantly shown up. The statesman received us with that old-fashioned
-courtesy for which he is remarkable, and seated us on the two luxuriant
-lounges on either side of the fireplace. Standing on the rug between us,
-with his slight, tall figure, his sharp features, thoughtful face, and
-curling hair prematurely tinged with gray, he seemed to represent that
-not too common type, a nobleman who is in truth noble.
-
-"Your name is very familiar to me, Mr. Holmes," said he, smiling. "And,
-of course, I cannot pretend to be ignorant of the object of your visit.
-There has only been one occurrence in these offices which could call for
-your attention. In whose interest are you acting, may I ask?"
-
-"In that of Mr. Percy Phelps," answered Holmes.
-
-"Ah, my unfortunate nephew! You can understand that our kinship makes
-it the more impossible for me to screen him in any way. I fear that the
-incident must have a very prejudicial effect upon his career."
-
-"But if the document is found?"
-
-"Ah, that, of course, would be different."
-
-"I had one or two questions which I wished to ask you, Lord Holdhurst."
-
-"I shall be happy to give you any information in my power."
-
-"Was it in this room that you gave your instructions as to the copying
-of the document?"
-
-"It was."
-
-"Then you could hardly have been overheard?"
-
-"It is out of the question."
-
-"Did you ever mention to any one that it was your intention to give any
-one the treaty to be copied?"
-
-"Never."
-
-"You are certain of that?"
-
-"Absolutely."
-
-"Well, since you never said so, and Mr. Phelps never said so, and nobody
-else knew anything of the matter, then the thief's presence in the room
-was purely accidental. He saw his chance and he took it."
-
-The statesman smiled. "You take me out of my province there," said he.
-
-Holmes considered for a moment. "There is another very important
-point which I wish to discuss with you," said he. "You feared, as I
-understand, that very grave results might follow from the details of
-this treaty becoming known."
-
-A shadow passed over the expressive face of the statesman. "Very grave
-results indeed."
-
-"Any have they occurred?"
-
-"Not yet."
-
-"If the treaty had reached, let us say, the French or Russian Foreign
-Office, you would expect to hear of it?"
-
-"I should," said Lord Holdhurst, with a wry face.
-
-"Since nearly ten weeks have elapsed, then, and nothing has been heard,
-it is not unfair to suppose that for some reason the treaty has not
-reached them."
-
-Lord Holdhurst shrugged his shoulders.
-
-"We can hardly suppose, Mr. Holmes, that the thief took the treaty in
-order to frame it and hang it up."
-
-"Perhaps he is waiting for a better price."
-
-"If he waits a little longer he will get no price at all. The treaty
-will cease to be secret in a few months."
-
-"That is most important," said Holmes. "Of course, it is a possible
-supposition that the thief has had a sudden illness--"
-
-"An attack of brain-fever, for example?" asked the statesman, flashing a
-swift glance at him.
-
-"I did not say so," said Holmes, imperturbably. "And now, Lord
-Holdhurst, we have already taken up too much of your valuable time, and
-we shall wish you good-day."
-
-"Every success to your investigation, be the criminal who it may,"
-answered the nobleman, as he bowed us out the door.
-
-"He's a fine fellow," said Holmes, as we came out into Whitehall. "But
-he has a struggle to keep up his position. He is far from rich and has
-many calls. You noticed, of course, that his boots had been resoled.
-Now, Watson, I won't detain you from your legitimate work any longer.
-I shall do nothing more to-day, unless I have an answer to my cab
-advertisement. But I should be extremely obliged to you if you would
-come down with me to Woking to-morrow, by the same train which we took
-yesterday."
-
-
-I met him accordingly next morning and we traveled down to Woking
-together. He had had no answer to his advertisement, he said, and no
-fresh light had been thrown upon the case. He had, when he so willed
-it, the utter immobility of countenance of a red Indian, and I could
-not gather from his appearance whether he was satisfied or not with
-the position of the case. His conversation, I remember, was about the
-Bertillon system of measurements, and he expressed his enthusiastic
-admiration of the French savant.
-
-We found our client still under the charge of his devoted nurse, but
-looking considerably better than before. He rose from the sofa and
-greeted us without difficulty when we entered.
-
-"Any news?" he asked, eagerly.
-
-"My report, as I expected, is a negative one," said Holmes. "I have seen
-Forbes, and I have seen your uncle, and I have set one or two trains of
-inquiry upon foot which may lead to something."
-
-"You have not lost heart, then?"
-
-"By no means."
-
-"God bless you for saying that!" cried Miss Harrison. "If we keep our
-courage and our patience the truth must come out."
-
-"We have more to tell you than you have for us," said Phelps, reseating
-himself upon the couch.
-
-"I hoped you might have something."
-
-"Yes, we have had an adventure during the night, and one which might
-have proved to be a serious one." His expression grew very grave as he
-spoke, and a look of something akin to fear sprang up in his eyes. "Do
-you know," said he, "that I begin to believe that I am the unconscious
-centre of some monstrous conspiracy, and that my life is aimed at as
-well as my honor?"
-
-"Ah!" cried Holmes.
-
-"It sounds incredible, for I have not, as far as I know, an enemy in
-the world. Yet from last night's experience I can come to no other
-conclusion."
-
-"Pray let me hear it."
-
-"You must know that last night was the very first night that I have ever
-slept without a nurse in the room. I was so much better that I thought
-I could dispense with one. I had a night-light burning, however. Well,
-about two in the morning I had sunk into a light sleep when I was
-suddenly aroused by a slight noise. It was like the sound which a mouse
-makes when it is gnawing a plank, and I lay listening to it for some
-time under the impression that it must come from that cause. Then it
-grew louder, and suddenly there came from the window a sharp metallic
-snick. I sat up in amazement. There could be no doubt what the sounds
-were now. The first ones had been caused by some one forcing an
-instrument through the slit between the sashes, and the second by the
-catch being pressed back.
-
-"There was a pause then for about ten minutes, as if the person were
-waiting to see whether the noise had awakened me. Then I heard a gentle
-creaking as the window was very slowly opened. I could stand it no
-longer, for my nerves are not what they used to be. I sprang out of bed
-and flung open the shutters. A man was crouching at the window. I could
-see little of him, for he was gone like a flash. He was wrapped in some
-sort of cloak which came across the lower part of his face. One thing
-only I am sure of, and that is that he had some weapon in his hand. It
-looked to me like a long knife. I distinctly saw the gleam of it as he
-turned to run."
-
-"This is most interesting," said Holmes. "Pray what did you do then?"
-
-"I should have followed him through the open window if I had been
-stronger. As it was, I rang the bell and roused the house. It took me
-some little time, for the bell rings in the kitchen and the servants all
-sleep upstairs. I shouted, however, and that brought Joseph down, and he
-roused the others. Joseph and the groom found marks on the bed outside
-the window, but the weather has been so dry lately that they found it
-hopeless to follow the trail across the grass. There's a place, however,
-on the wooden fence which skirts the road which shows signs, they tell
-me, as if some one had got over, and had snapped the top of the rail in
-doing so. I have said nothing to the local police yet, for I thought I
-had best have your opinion first."
-
-This tale of our client's appeared to have an extraordinary effect upon
-Sherlock Holmes. He rose from his chair and paced about the room in
-uncontrollable excitement.
-
-"Misfortunes never come single," said Phelps, smiling, though it was
-evident that his adventure had somewhat shaken him.
-
-"You have certainly had your share," said Holmes. "Do you think you
-could walk round the house with me?"
-
-"Oh, yes, I should like a little sunshine. Joseph will come, too."
-
-"And I also," said Miss Harrison.
-
-"I am afraid not," said Holmes, shaking his head. "I think I must ask
-you to remain sitting exactly where you are."
-
-The young lady resumed her seat with an air of displeasure. Her brother,
-however, had joined us and we set off all four together. We passed round
-the lawn to the outside of the young diplomatist's window. There were,
-as he had said, marks upon the bed, but they were hopelessly blurred and
-vague. Holmes stopped over them for an instant, and then rose shrugging
-his shoulders.
-
-"I don't think any one could make much of this," said he. "Let us go
-round the house and see why this particular room was chosen by the
-burglar. I should have thought those larger windows of the drawing-room
-and dining-room would have had more attractions for him."
-
-"They are more visible from the road," suggested Mr. Joseph Harrison.
-
-"Ah, yes, of course. There is a door here which he might have attempted.
-What is it for?"
-
-"It is the side entrance for trades-people. Of course it is locked at
-night."
-
-"Have you ever had an alarm like this before?"
-
-"Never," said our client.
-
-"Do you keep plate in the house, or anything to attract burglars?"
-
-"Nothing of value."
-
-Holmes strolled round the house with his hands in his pockets and a
-negligent air which was unusual with him.
-
-"By the way," said he to Joseph Harrison, "you found some place, I
-understand, where the fellow scaled the fence. Let us have a look at
-that!"
-
-The plump young man led us to a spot where the top of one of the wooden
-rails had been cracked. A small fragment of the wood was hanging down.
-Holmes pulled it off and examined it critically.
-
-"Do you think that was done last night? It looks rather old, does it
-not?"
-
-"Well, possibly so."
-
-"There are no marks of any one jumping down upon the other side. No, I
-fancy we shall get no help here. Let us go back to the bedroom and talk
-the matter over."
-
-Percy Phelps was walking very slowly, leaning upon the arm of his future
-brother-in-law. Holmes walked swiftly across the lawn, and we were at
-the open window of the bedroom long before the others came up.
-
-"Miss Harrison," said Holmes, speaking with the utmost intensity of
-manner, "you must stay where you are all day. Let nothing prevent you
-from staying where you are all day. It is of the utmost importance."
-
-"Certainly, if you wish it, Mr. Holmes," said the girl in astonishment.
-
-"When you go to bed lock the door of this room on the outside and keep
-the key. Promise to do this."
-
-"But Percy?"
-
-"He will come to London with us."
-
-"And am I to remain here?"
-
-"It is for his sake. You can serve him. Quick! Promise!"
-
-She gave a quick nod of assent just as the other two came up.
-
-"Why do you sit moping there, Annie?" cried her brother. "Come out into
-the sunshine!"
-
-"No, thank you, Joseph. I have a slight headache and this room is
-deliciously cool and soothing."
-
-"What do you propose now, Mr. Holmes?" asked our client.
-
-"Well, in investigating this minor affair we must not lose sight of our
-main inquiry. It would be a very great help to me if you would come up
-to London with us."
-
-"At once?"
-
-"Well, as soon as you conveniently can. Say in an hour."
-
-"I feel quite strong enough, if I can really be of any help."
-
-"The greatest possible."
-
-"Perhaps you would like me to stay there to-night?"
-
-"I was just going to propose it."
-
-"Then, if my friend of the night comes to revisit me, he will find the
-bird flown. We are all in your hands, Mr. Holmes, and you must tell us
-exactly what you would like done. Perhaps you would prefer that Joseph
-came with us so as to look after me?"
-
-"Oh, no; my friend Watson is a medical man, you know, and he'll look
-after you. We'll have our lunch here, if you will permit us, and then we
-shall all three set off for town together."
-
-It was arranged as he suggested, though Miss Harrison excused herself
-from leaving the bedroom, in accordance with Holmes's suggestion. What
-the object of my friend's manoeuvres was I could not conceive, unless it
-were to keep the lady away from Phelps, who, rejoiced by his
-returning health and by the prospect of action, lunched with us in the
-dining-room. Holmes had a still more startling surprise for us, however,
-for, after accompanying us down to the station and seeing us into
-our carriage, he calmly announced that he had no intention of leaving
-Woking.
-
-"There are one or two small points which I should desire to clear up
-before I go," said he. "Your absence, Mr. Phelps, will in some ways
-rather assist me. Watson, when you reach London you would oblige me by
-driving at once to Baker Street with our friend here, and remaining
-with him until I see you again. It is fortunate that you are old
-school-fellows, as you must have much to talk over. Mr. Phelps can
-have the spare bedroom to-night, and I will be with you in time for
-breakfast, for there is a train which will take me into Waterloo at
-eight."
-
-"But how about our investigation in London?" asked Phelps, ruefully.
-
-"We can do that to-morrow. I think that just at present I can be of more
-immediate use here."
-
-"You might tell them at Briarbrae that I hope to be back to-morrow
-night," cried Phelps, as we began to move from the platform.
-
-"I hardly expect to go back to Briarbrae," answered Holmes, and waved
-his hand to us cheerily as we shot out from the station.
-
-Phelps and I talked it over on our journey, but neither of us could
-devise a satisfactory reason for this new development.
-
-"I suppose he wants to find out some clue as to the burglary last night,
-if a burglar it was. For myself, I don't believe it was an ordinary
-thief."
-
-"What is your own idea, then?"
-
-"Upon my word, you may put it down to my weak nerves or not, but I
-believe there is some deep political intrigue going on around me, and
-that for some reason that passes my understanding my life is aimed at
-by the conspirators. It sounds high-flown and absurd, but consider the
-facts! Why should a thief try to break in at a bedroom window, where
-there could be no hope of any plunder, and why should he come with a
-long knife in his hand?"
-
-"You are sure it was not a house-breaker's jimmy?"
-
-"Oh, no, it was a knife. I saw the flash of the blade quite distinctly."
-
-"But why on earth should you be pursued with such animosity?"
-
-"Ah, that is the question."
-
-"Well, if Holmes takes the same view, that would account for his action,
-would it not? Presuming that your theory is correct, if he can lay his
-hands upon the man who threatened you last night he will have gone a
-long way towards finding who took the naval treaty. It is absurd to
-suppose that you have two enemies, one of whom robs you, while the other
-threatens your life."
-
-"But Holmes said that he was not going to Briarbrae."
-
-"I have known him for some time," said I, "but I never knew him do
-anything yet without a very good reason," and with that our conversation
-drifted off on to other topics.
-
-But it was a weary day for me. Phelps was still weak after his long
-illness, and his misfortune made him querulous and nervous. In vain
-I endeavored to interest him in Afghanistan, in India, in social
-questions, in anything which might take his mind out of the groove.
-He would always come back to his lost treaty, wondering, guessing,
-speculating, as to what Holmes was doing, what steps Lord Holdhurst was
-taking, what news we should have in the morning. As the evening wore on
-his excitement became quite painful.
-
-"You have implicit faith in Holmes?" he asked.
-
-"I have seen him do some remarkable things."
-
-"But he never brought light into anything quite so dark as this?"
-
-"Oh, yes; I have known him solve questions which presented fewer clues
-than yours."
-
-"But not where such large interests are at stake?"
-
-"I don't know that. To my certain knowledge he has acted on behalf of
-three of the reigning houses of Europe in very vital matters."
-
-"But you know him well, Watson. He is such an inscrutable fellow that I
-never quite know what to make of him. Do you think he is hopeful? Do you
-think he expects to make a success of it?"
-
-"He has said nothing."
-
-"That is a bad sign."
-
-"On the contrary, I have noticed that when he is off the trail he
-generally says so. It is when he is on a scent and is not quite
-absolutely sure yet that it is the right one that he is most taciturn.
-Now, my dear fellow, we can't help matters by making ourselves nervous
-about them, so let me implore you to go to bed and so be fresh for
-whatever may await us to-morrow."
-
-I was able at last to persuade my companion to take my advice, though I
-knew from his excited manner that there was not much hope of sleep for
-him. Indeed, his mood was infectious, for I lay tossing half the night
-myself, brooding over this strange problem, and inventing a hundred
-theories, each of which was more impossible than the last. Why had
-Holmes remained at Woking? Why had he asked Miss Harrison to remain
-in the sick-room all day? Why had he been so careful not to inform the
-people at Briarbrae that he intended to remain near them? I cudgelled
-my brains until I fell asleep in the endeavor to find some explanation
-which would cover all these facts.
-
-It was seven o'clock when I awoke, and I set off at once for Phelps's
-room, to find him haggard and spent after a sleepless night. His first
-question was whether Holmes had arrived yet.
-
-"He'll be here when he promised," said I, "and not an instant sooner or
-later."
-
-And my words were true, for shortly after eight a hansom dashed up to
-the door and our friend got out of it. Standing in the window we saw
-that his left hand was swathed in a bandage and that his face was very
-grim and pale. He entered the house, but it was some little time before
-he came upstairs.
-
-"He looks like a beaten man," cried Phelps.
-
-I was forced to confess that he was right. "After all," said I, "the
-clue of the matter lies probably here in town."
-
-Phelps gave a groan.
-
-"I don't know how it is," said he, "but I had hoped for so much from his
-return. But surely his hand was not tied up like that yesterday. What
-can be the matter?"
-
-"You are not wounded, Holmes?" I asked, as my friend entered the room.
-
-"Tut, it is only a scratch through my own clumsiness," he answered,
-nodding his good-mornings to us. "This case of yours, Mr. Phelps, is
-certainly one of the darkest which I have ever investigated."
-
-"I feared that you would find it beyond you."
-
-"It has been a most remarkable experience."
-
-"That bandage tells of adventures," said I. "Won't you tell us what has
-happened?"
-
-"After breakfast, my dear Watson. Remember that I have breathed thirty
-miles of Surrey air this morning. I suppose that there has been no
-answer from my cabman advertisement? Well, well, we cannot expect to
-score every time."
-
-The table was all laid, and just as I was about to ring Mrs. Hudson
-entered with the tea and coffee. A few minutes later she brought in
-three covers, and we all drew up to the table, Holmes ravenous, I
-curious, and Phelps in the gloomiest state of depression.
-
-"Mrs. Hudson has risen to the occasion," said Holmes, uncovering a dish
-of curried chicken. "Her cuisine is a little limited, but she has
-as good an idea of breakfast as a Scotch-woman. What have you here,
-Watson?"
-
-"Ham and eggs," I answered.
-
-"Good! What are you going to take, Mr. Phelps--curried fowl or eggs, or
-will you help yourself?"
-
-"Thank you. I can eat nothing," said Phelps.
-
-"Oh, come! Try the dish before you."
-
-"Thank you, I would really rather not."
-
-"Well, then," said Holmes, with a mischievous twinkle, "I suppose that
-you have no objection to helping me?"
-
-Phelps raised the cover, and as he did so he uttered a scream, and sat
-there staring with a face as white as the plate upon which he looked.
-Across the centre of it was lying a little cylinder of blue-gray paper.
-He caught it up, devoured it with his eyes, and then danced madly about
-the room, pressing it to his bosom and shrieking out in his delight.
-Then he fell back into an arm-chair so limp and exhausted with his own
-emotions that we had to pour brandy down his throat to keep him from
-fainting.
-
-"There! there!" said Holmes, soothing, patting him upon the shoulder.
-"It was too bad to spring it on you like this, but Watson here will tell
-you that I never can resist a touch of the dramatic."
-
-Phelps seized his hand and kissed it. "God bless you!" he cried. "You
-have saved my honor."
-
-"Well, my own was at stake, you know," said Holmes. "I assure you it is
-just as hateful to me to fail in a case as it can be to you to blunder
-over a commission."
-
-Phelps thrust away the precious document into the innermost pocket of
-his coat.
-
-"I have not the heart to interrupt your breakfast any further, and yet I
-am dying to know how you got it and where it was."
-
-Sherlock Holmes swallowed a cup of coffee, and turned his attention to
-the ham and eggs. Then he rose, lit his pipe, and settled himself down
-into his chair.
-
-"I'll tell you what I did first, and how I came to do it afterwards,"
-said he. "After leaving you at the station I went for a charming walk
-through some admirable Surrey scenery to a pretty little village called
-Ripley, where I had my tea at an inn, and took the precaution of filling
-my flask and of putting a paper of sandwiches in my pocket. There I
-remained until evening, when I set off for Woking again, and found
-myself in the high-road outside Briarbrae just after sunset.
-
-"Well, I waited until the road was clear--it is never a very frequented
-one at any time, I fancy--and then I clambered over the fence into the
-grounds."
-
-"Surely the gate was open!" ejaculated Phelps.
-
-"Yes, but I have a peculiar taste in these matters. I chose the place
-where the three fir-trees stand, and behind their screen I got over
-without the least chance of any one in the house being able to see me.
-I crouched down among the bushes on the other side, and crawled from one
-to the other--witness the disreputable state of my trouser knees--until
-I had reached the clump of rhododendrons just opposite to your bedroom
-window. There I squatted down and awaited developments.
-
-"The blind was not down in your room, and I could see Miss Harrison
-sitting there reading by the table. It was quarter-past ten when she
-closed her book, fastened the shutters, and retired.
-
-"I heard her shut the door, and felt quite sure that she had turned the
-key in the lock."
-
-"The key!" ejaculated Phelps.
-
-"Yes; I had given Miss Harrison instructions to lock the door on the
-outside and take the key with her when she went to bed. She carried out
-every one of my injunctions to the letter, and certainly without her
-cooperation you would not have that paper in you coat-pocket. She
-departed then and the lights went out, and I was left squatting in the
-rhododendron-bush.
-
-"The night was fine, but still it was a very weary vigil. Of course it
-has the sort of excitement about it that the sportsman feels when he
-lies beside the water-course and waits for the big game. It was very
-long, though--almost as long, Watson, as when you and I waited in that
-deadly room when we looked into the little problem of the Speckled Band.
-There was a church-clock down at Woking which struck the quarters, and I
-thought more than once that it had stopped. At last however about two
-in the morning, I suddenly heard the gentle sound of a bolt being pushed
-back and the creaking of a key. A moment later the servants' door was
-opened, and Mr. Joseph Harrison stepped out into the moonlight."
-
-"Joseph!" ejaculated Phelps.
-
-"He was bare-headed, but he had a black coat thrown over his shoulder so
-that he could conceal his face in an instant if there were any alarm. He
-walked on tiptoe under the shadow of the wall, and when he reached the
-window he worked a long-bladed knife through the sash and pushed back
-the catch. Then he flung open the window, and putting his knife through
-the crack in the shutters, he thrust the bar up and swung them open.
-
-"From where I lay I had a perfect view of the inside of the room and of
-every one of his movements. He lit the two candles which stood upon the
-mantelpiece, and then he proceeded to turn back the corner of the carpet
-in the neighborhood of the door. Presently he stopped and picked out a
-square piece of board, such as is usually left to enable plumbers to get
-at the joints of the gas-pipes. This one covered, as a matter of
-fact, the T joint which gives off the pipe which supplies the kitchen
-underneath. Out of this hiding-place he drew that little cylinder
-of paper, pushed down the board, rearranged the carpet, blew out the
-candles, and walked straight into my arms as I stood waiting for him
-outside the window.
-
-"Well, he has rather more viciousness than I gave him credit for, has
-Master Joseph. He flew at me with his knife, and I had to grasp him
-twice, and got a cut over the knuckles, before I had the upper hand of
-him. He looked murder out of the only eye he could see with when we had
-finished, but he listened to reason and gave up the papers. Having
-got them I let my man go, but I wired full particulars to Forbes this
-morning. If he is quick enough to catch his bird, well and good. But
-if, as I shrewdly suspect, he finds the nest empty before he gets there,
-why, all the better for the government. I fancy that Lord Holdhurst for
-one, and Mr. Percy Phelps for another, would very much rather that the
-affair never got as far as a police-court.
-
-"My God!" gasped our client. "Do you tell me that during these long ten
-weeks of agony the stolen papers were within the very room with me all
-the time?"
-
-"So it was."
-
-"And Joseph! Joseph a villain and a thief!"
-
-"Hum! I am afraid Joseph's character is a rather deeper and more
-dangerous one than one might judge from his appearance. From what I
-have heard from him this morning, I gather that he has lost heavily in
-dabbling with stocks, and that he is ready to do anything on earth to
-better his fortunes. Being an absolutely selfish man, when a chance
-presented itself he did not allow either his sister's happiness or your
-reputation to hold his hand."
-
-Percy Phelps sank back in his chair. "My head whirls," said he. "Your
-words have dazed me."
-
-"The principal difficulty in your case," remarked Holmes, in his
-didactic fashion, "lay in the fact of there being too much evidence.
-What was vital was overlaid and hidden by what was irrelevant. Of all
-the facts which were presented to us we had to pick just those which we
-deemed to be essential, and then piece them together in their order, so
-as to reconstruct this very remarkable chain of events. I had already
-begun to suspect Joseph, from the fact that you had intended to travel
-home with him that night, and that therefore it was a likely enough
-thing that he should call for you, knowing the Foreign Office well, upon
-his way. When I heard that some one had been so anxious to get into the
-bedroom, in which no one but Joseph could have concealed anything--you
-told us in your narrative how you had turned Joseph out when you arrived
-with the doctor--my suspicions all changed to certainties, especially as
-the attempt was made on the first night upon which the nurse was absent,
-showing that the intruder was well acquainted with the ways of the
-house."
-
-"How blind I have been!"
-
-"The facts of the case, as far as I have worked them out, are these:
-this Joseph Harrison entered the office through the Charles Street door,
-and knowing his way he walked straight into your room the instant after
-you left it. Finding no one there he promptly rang the bell, and at
-the instant that he did so his eyes caught the paper upon the table.
-A glance showed him that chance had put in his way a State document of
-immense value, and in an instant he had thrust it into his pocket and
-was gone. A few minutes elapsed, as you remember, before the sleepy
-commissionnaire drew your attention to the bell, and those were just
-enough to give the thief time to make his escape.
-
-"He made his way to Woking by the first train, and having examined his
-booty and assured himself that it really was of immense value, he
-had concealed it in what he thought was a very safe place, with the
-intention of taking it out again in a day or two, and carrying it to the
-French embassy, or wherever he thought that a long price was to be
-had. Then came your sudden return. He, without a moment's warning, was
-bundled out of his room, and from that time onward there were always at
-least two of you there to prevent him from regaining his treasure. The
-situation to him must have been a maddening one. But at last he thought
-he saw his chance. He tried to steal in, but was baffled by your
-wakefulness. You remember that you did not take your usual draught that
-night."
-
-"I remember."
-
-"I fancy that he had taken steps to make that draught efficacious,
-and that he quite relied upon your being unconscious. Of course, I
-understood that he would repeat the attempt whenever it could be done
-with safety. Your leaving the room gave him the chance he wanted. I kept
-Miss Harrison in it all day so that he might not anticipate us. Then,
-having given him the idea that the coast was clear, I kept guard as
-I have described. I already knew that the papers were probably in the
-room, but I had no desire to rip up all the planking and skirting in
-search of them. I let him take them, therefore, from the hiding-place,
-and so saved myself an infinity of trouble. Is there any other point
-which I can make clear?"
-
-"Why did he try the window on the first occasion," I asked, "when he
-might have entered by the door?"
-
-"In reaching the door he would have to pass seven bedrooms. On the other
-hand, he could get out on to the lawn with ease. Anything else?"
-
-"You do not think," asked Phelps, "that he had any murderous intention?
-The knife was only meant as a tool."
-
-"It may be so," answered Holmes, shrugging his shoulders. "I can only
-say for certain that Mr. Joseph Harrison is a gentleman to whose mercy I
-should be extremely unwilling to trust."
-
-
-
-
-Adventure XI. The Final Problem
-
-
-It is with a heavy heart that I take up my pen to write these the last
-words in which I shall ever record the singular gifts by which my friend
-Mr. Sherlock Holmes was distinguished. In an incoherent and, as I deeply
-feel, an entirely inadequate fashion, I have endeavored to give some
-account of my strange experiences in his company from the chance which
-first brought us together at the period of the "Study in Scarlet," up
-to the time of his interference in the matter of the "Naval Treaty"--an
-interference which had the unquestionable effect of preventing a serious
-international complication. It was my intention to have stopped there,
-and to have said nothing of that event which has created a void in my
-life which the lapse of two years has done little to fill. My hand
-has been forced, however, by the recent letters in which Colonel James
-Moriarty defends the memory of his brother, and I have no choice but to
-lay the facts before the public exactly as they occurred. I alone know
-the absolute truth of the matter, and I am satisfied that the time has
-come when no good purpose is to be served by its suppression. As far as
-I know, there have been only three accounts in the public press: that
-in the Journal de Geneve on May 6th, 1891, the Reuter's despatch in the
-English papers on May 7th, and finally the recent letter to which I have
-alluded. Of these the first and second were extremely condensed, while
-the last is, as I shall now show, an absolute perversion of the facts.
-It lies with me to tell for the first time what really took place
-between Professor Moriarty and Mr. Sherlock Holmes.
-
-It may be remembered that after my marriage, and my subsequent start in
-private practice, the very intimate relations which had existed between
-Holmes and myself became to some extent modified. He still came to me
-from time to time when he desired a companion in his investigation, but
-these occasions grew more and more seldom, until I find that in the year
-1890 there were only three cases of which I retain any record. During
-the winter of that year and the early spring of 1891, I saw in the
-papers that he had been engaged by the French government upon a matter
-of supreme importance, and I received two notes from Holmes, dated from
-Narbonne and from Nimes, from which I gathered that his stay in France
-was likely to be a long one. It was with some surprise, therefore, that
-I saw him walk into my consulting-room upon the evening of April 24th.
-It struck me that he was looking even paler and thinner than usual.
-
-"Yes, I have been using myself up rather too freely," he remarked, in
-answer to my look rather than to my words; "I have been a little pressed
-of late. Have you any objection to my closing your shutters?"
-
-The only light in the room came from the lamp upon the table at which I
-had been reading. Holmes edged his way round the wall and flinging the
-shutters together, he bolted them securely.
-
-"You are afraid of something?" I asked.
-
-"Well, I am."
-
-"Of what?"
-
-"Of air-guns."
-
-"My dear Holmes, what do you mean?"
-
-"I think that you know me well enough, Watson, to understand that I am
-by no means a nervous man. At the same time, it is stupidity rather than
-courage to refuse to recognize danger when it is close upon you. Might
-I trouble you for a match?" He drew in the smoke of his cigarette as if
-the soothing influence was grateful to him.
-
-"I must apologize for calling so late," said he, "and I must further beg
-you to be so unconventional as to allow me to leave your house presently
-by scrambling over your back garden wall."
-
-"But what does it all mean?" I asked.
-
-He held out his hand, and I saw in the light of the lamp that two of his
-knuckles were burst and bleeding.
-
-"It is not an airy nothing, you see," said he, smiling. "On the
-contrary, it is solid enough for a man to break his hand over. Is Mrs.
-Watson in?"
-
-"She is away upon a visit."
-
-"Indeed! You are alone?"
-
-"Quite."
-
-"Then it makes it the easier for me to propose that you should come away
-with me for a week to the Continent."
-
-"Where?"
-
-"Oh, anywhere. It's all the same to me."
-
-There was something very strange in all this. It was not Holmes's nature
-to take an aimless holiday, and something about his pale, worn face told
-me that his nerves were at their highest tension. He saw the question in
-my eyes, and, putting his finger-tips together and his elbows upon his
-knees, he explained the situation.
-
-"You have probably never heard of Professor Moriarty?" said he.
-
-"Never."
-
-"Aye, there's the genius and the wonder of the thing!" he cried. "The
-man pervades London, and no one has heard of him. That's what puts
-him on a pinnacle in the records of crime. I tell you, Watson, in all
-seriousness, that if I could beat that man, if I could free society
-of him, I should feel that my own career had reached its summit, and
-I should be prepared to turn to some more placid line in life. Between
-ourselves, the recent cases in which I have been of assistance to the
-royal family of Scandinavia, and to the French republic, have left me in
-such a position that I could continue to live in the quiet fashion
-which is most congenial to me, and to concentrate my attention upon my
-chemical researches. But I could not rest, Watson, I could not sit quiet
-in my chair, if I thought that such a man as Professor Moriarty were
-walking the streets of London unchallenged."
-
-"What has he done, then?"
-
-"His career has been an extraordinary one. He is a man of good birth and
-excellent education, endowed by nature with a phenomenal mathematical
-faculty. At the age of twenty-one he wrote a treatise upon the Binomial
-Theorem, which has had a European vogue. On the strength of it he won
-the Mathematical Chair at one of our smaller universities, and had, to
-all appearances, a most brilliant career before him. But the man had
-hereditary tendencies of the most diabolical kind. A criminal strain
-ran in his blood, which, instead of being modified, was increased and
-rendered infinitely more dangerous by his extraordinary mental powers.
-Dark rumors gathered round him in the university town, and eventually he
-was compelled to resign his chair and to come down to London, where he
-set up as an army coach. So much is known to the world, but what I am
-telling you now is what I have myself discovered.
-
-"As you are aware, Watson, there is no one who knows the higher criminal
-world of London so well as I do. For years past I have continually been
-conscious of some power behind the malefactor, some deep organizing
-power which forever stands in the way of the law, and throws its shield
-over the wrong-doer. Again and again in cases of the most varying
-sorts--forgery cases, robberies, murders--I have felt the presence of
-this force, and I have deduced its action in many of those undiscovered
-crimes in which I have not been personally consulted. For years I have
-endeavored to break through the veil which shrouded it, and at last
-the time came when I seized my thread and followed it, until it led
-me, after a thousand cunning windings, to ex-Professor Moriarty of
-mathematical celebrity.
-
-"He is the Napoleon of crime, Watson. He is the organizer of half that
-is evil and of nearly all that is undetected in this great city. He is a
-genius, a philosopher, an abstract thinker. He has a brain of the first
-order. He sits motionless, like a spider in the center of its web, but
-that web has a thousand radiations, and he knows well every quiver of
-each of them. He does little himself. He only plans. But his agents are
-numerous and splendidly organized. Is there a crime to be done, a
-paper to be abstracted, we will say, a house to be rifled, a man to be
-removed--the word is passed to the Professor, the matter is organized
-and carried out. The agent may be caught. In that case money is found
-for his bail or his defence. But the central power which uses the agent
-is never caught--never so much as suspected. This was the organization
-which I deduced, Watson, and which I devoted my whole energy to exposing
-and breaking up.
-
-"But the Professor was fenced round with safeguards so cunningly devised
-that, do what I would, it seemed impossible to get evidence which would
-convict in a court of law. You know my powers, my dear Watson, and yet
-at the end of three months I was forced to confess that I had at last
-met an antagonist who was my intellectual equal. My horror at his crimes
-was lost in my admiration at his skill. But at last he made a trip--only
-a little, little trip--but it was more than he could afford when I was
-so close upon him. I had my chance, and, starting from that point, I
-have woven my net round him until now it is all ready to close. In three
-days--that is to say, on Monday next--matters will be ripe, and the
-Professor, with all the principal members of his gang, will be in the
-hands of the police. Then will come the greatest criminal trial of the
-century, the clearing up of over forty mysteries, and the rope for all
-of them; but if we move at all prematurely, you understand, they may
-slip out of our hands even at the last moment.
-
-"Now, if I could have done this without the knowledge of Professor
-Moriarty, all would have been well. But he was too wily for that. He saw
-every step which I took to draw my toils round him. Again and again
-he strove to break away, but I as often headed him off. I tell you,
-my friend, that if a detailed account of that silent contest could
-be written, it would take its place as the most brilliant bit of
-thrust-and-parry work in the history of detection. Never have I risen to
-such a height, and never have I been so hard pressed by an opponent. He
-cut deep, and yet I just undercut him. This morning the last steps were
-taken, and three days only were wanted to complete the business. I was
-sitting in my room thinking the matter over, when the door opened and
-Professor Moriarty stood before me.
-
-"My nerves are fairly proof, Watson, but I must confess to a start when
-I saw the very man who had been so much in my thoughts standing there on
-my threshhold. His appearance was quite familiar to me. He is extremely
-tall and thin, his forehead domes out in a white curve, and his two
-eyes are deeply sunken in his head. He is clean-shaven, pale, and
-ascetic-looking, retaining something of the professor in his features.
-His shoulders are rounded from much study, and his face protrudes
-forward, and is forever slowly oscillating from side to side in a
-curiously reptilian fashion. He peered at me with great curiosity in his
-puckered eyes.
-
-"'You have less frontal development than I should have expected,' said
-he, at last. 'It is a dangerous habit to finger loaded firearms in the
-pocket of one's dressing-gown.'
-
-"The fact is that upon his entrance I had instantly recognized the
-extreme personal danger in which I lay. The only conceivable escape for
-him lay in silencing my tongue. In an instant I had slipped the revolver
-from the drawer into my pocket, and was covering him through the cloth.
-At his remark I drew the weapon out and laid it cocked upon the table.
-He still smiled and blinked, but there was something about his eyes
-which made me feel very glad that I had it there.
-
-"'You evidently don't know me,' said he.
-
-"'On the contrary,' I answered, 'I think it is fairly evident that I do.
-Pray take a chair. I can spare you five minutes if you have anything to
-say.'
-
-"'All that I have to say has already crossed your mind,' said he.
-
-"'Then possibly my answer has crossed yours,' I replied.
-
-"'You stand fast?'
-
-"'Absolutely.'
-
-"He clapped his hand into his pocket, and I raised the pistol from
-the table. But he merely drew out a memorandum-book in which he had
-scribbled some dates.
-
-"'You crossed my path on the 4th of January,' said he. 'On the 23d you
-incommoded me; by the middle of February I was seriously inconvenienced
-by you; at the end of March I was absolutely hampered in my plans; and
-now, at the close of April, I find myself placed in such a position
-through your continual persecution that I am in positive danger of
-losing my liberty. The situation is becoming an impossible one.'
-
-"'Have you any suggestion to make?' I asked.
-
-"'You must drop it, Mr. Holmes,' said he, swaying his face about. 'You
-really must, you know.'
-
-"'After Monday,' said I.
-
-"'Tut, tut,' said he. 'I am quite sure that a man of your intelligence
-will see that there can be but one outcome to this affair. It is
-necessary that you should withdraw. You have worked things in such a
-fashion that we have only one resource left. It has been an intellectual
-treat to me to see the way in which you have grappled with this affair,
-and I say, unaffectedly, that it would be a grief to me to be forced
-to take any extreme measure. You smile, sir, but I assure you that it
-really would.'
-
-"'Danger is part of my trade,' I remarked.
-
-"'That is not danger,' said he. 'It is inevitable destruction. You stand
-in the way not merely of an individual, but of a mighty organization,
-the full extent of which you, with all your cleverness, have been unable
-to realize. You must stand clear, Mr. Holmes, or be trodden under foot.'
-
-"'I am afraid,' said I, rising, 'that in the pleasure of this
-conversation I am neglecting business of importance which awaits me
-elsewhere.'
-
-"He rose also and looked at me in silence, shaking his head sadly.
-
-"'Well, well,' said he, at last. 'It seems a pity, but I have done
-what I could. I know every move of your game. You can do nothing before
-Monday. It has been a duel between you and me, Mr. Holmes. You hope to
-place me in the dock. I tell you that I will never stand in the dock.
-You hope to beat me. I tell you that you will never beat me. If you are
-clever enough to bring destruction upon me, rest assured that I shall do
-as much to you.'
-
-"'You have paid me several compliments, Mr. Moriarty,' said I. 'Let me
-pay you one in return when I say that if I were assured of the former
-eventuality I would, in the interests of the public, cheerfully accept
-the latter.'
-
-"'I can promise you the one, but not the other,' he snarled, and so
-turned his rounded back upon me, and went peering and blinking out of
-the room.
-
-"That was my singular interview with Professor Moriarty. I confess that
-it left an unpleasant effect upon my mind. His soft, precise fashion
-of speech leaves a conviction of sincerity which a mere bully could
-not produce. Of course, you will say: 'Why not take police precautions
-against him?' the reason is that I am well convinced that it is from his
-agents the blow will fall. I have the best proofs that it would be so."
-
-"You have already been assaulted?"
-
-"My dear Watson, Professor Moriarty is not a man who lets the grass grow
-under his feet. I went out about mid-day to transact some business in
-Oxford Street. As I passed the corner which leads from Bentinck Street
-on to the Welbeck Street crossing a two-horse van furiously driven
-whizzed round and was on me like a flash. I sprang for the foot-path
-and saved myself by the fraction of a second. The van dashed round by
-Marylebone Lane and was gone in an instant. I kept to the pavement after
-that, Watson, but as I walked down Vere Street a brick came down from
-the roof of one of the houses, and was shattered to fragments at my
-feet. I called the police and had the place examined. There were slates
-and bricks piled up on the roof preparatory to some repairs, and they
-would have me believe that the wind had toppled over one of these. Of
-course I knew better, but I could prove nothing. I took a cab after that
-and reached my brother's rooms in Pall Mall, where I spent the day. Now
-I have come round to you, and on my way I was attacked by a rough with a
-bludgeon. I knocked him down, and the police have him in custody; but
-I can tell you with the most absolute confidence that no possible
-connection will ever be traced between the gentleman upon whose front
-teeth I have barked my knuckles and the retiring mathematical coach, who
-is, I dare say, working out problems upon a black-board ten miles away.
-You will not wonder, Watson, that my first act on entering your rooms
-was to close your shutters, and that I have been compelled to ask your
-permission to leave the house by some less conspicuous exit than the
-front door."
-
-I had often admired my friend's courage, but never more than now, as he
-sat quietly checking off a series of incidents which must have combined
-to make up a day of horror.
-
-"You will spend the night here?" I said.
-
-"No, my friend, you might find me a dangerous guest. I have my plans
-laid, and all will be well. Matters have gone so far now that they can
-move without my help as far as the arrest goes, though my presence is
-necessary for a conviction. It is obvious, therefore, that I cannot do
-better than get away for the few days which remain before the police are
-at liberty to act. It would be a great pleasure to me, therefore, if you
-could come on to the Continent with me."
-
-"The practice is quiet," said I, "and I have an accommodating neighbor.
-I should be glad to come."
-
-"And to start to-morrow morning?"
-
-"If necessary."
-
-"Oh yes, it is most necessary. Then these are your instructions, and I
-beg, my dear Watson, that you will obey them to the letter, for you are
-now playing a double-handed game with me against the cleverest rogue and
-the most powerful syndicate of criminals in Europe. Now listen! You
-will dispatch whatever luggage you intend to take by a trusty messenger
-unaddressed to Victoria to-night. In the morning you will send for a
-hansom, desiring your man to take neither the first nor the second which
-may present itself. Into this hansom you will jump, and you will drive
-to the Strand end of the Lowther Arcade, handing the address to the
-cabman upon a slip of paper, with a request that he will not throw it
-away. Have your fare ready, and the instant that your cab stops,
-dash through the Arcade, timing yourself to reach the other side at a
-quarter-past nine. You will find a small brougham waiting close to the
-curb, driven by a fellow with a heavy black cloak tipped at the collar
-with red. Into this you will step, and you will reach Victoria in time
-for the Continental express."
-
-"Where shall I meet you?"
-
-"At the station. The second first-class carriage from the front will be
-reserved for us."
-
-"The carriage is our rendezvous, then?"
-
-"Yes."
-
-It was in vain that I asked Holmes to remain for the evening. It was
-evident to me that he thought he might bring trouble to the roof he was
-under, and that that was the motive which impelled him to go. With a few
-hurried words as to our plans for the morrow he rose and came out with
-me into the garden, clambering over the wall which leads into Mortimer
-Street, and immediately whistling for a hansom, in which I heard him
-drive away.
-
-In the morning I obeyed Holmes's injunctions to the letter. A hansom was
-procured with such precaution as would prevent its being one which was
-placed ready for us, and I drove immediately after breakfast to the
-Lowther Arcade, through which I hurried at the top of my speed. A
-brougham was waiting with a very massive driver wrapped in a dark cloak,
-who, the instant that I had stepped in, whipped up the horse and rattled
-off to Victoria Station. On my alighting there he turned the carriage,
-and dashed away again without so much as a look in my direction.
-
-So far all had gone admirably. My luggage was waiting for me, and I had
-no difficulty in finding the carriage which Holmes had indicated, the
-less so as it was the only one in the train which was marked "Engaged."
-My only source of anxiety now was the non-appearance of Holmes. The
-station clock marked only seven minutes from the time when we were
-due to start. In vain I searched among the groups of travellers and
-leave-takers for the lithe figure of my friend. There was no sign of
-him. I spent a few minutes in assisting a venerable Italian priest, who
-was endeavoring to make a porter understand, in his broken English,
-that his luggage was to be booked through to Paris. Then, having taken
-another look round, I returned to my carriage, where I found that the
-porter, in spite of the ticket, had given me my decrepit Italian friend
-as a traveling companion. It was useless for me to explain to him that
-his presence was an intrusion, for my Italian was even more limited than
-his English, so I shrugged my shoulders resignedly, and continued to
-look out anxiously for my friend. A chill of fear had come over me, as I
-thought that his absence might mean that some blow had fallen during the
-night. Already the doors had all been shut and the whistle blown, when--
-
-"My dear Watson," said a voice, "you have not even condescended to say
-good-morning."
-
-I turned in uncontrollable astonishment. The aged ecclesiastic had
-turned his face towards me. For an instant the wrinkles were smoothed
-away, the nose drew away from the chin, the lower lip ceased to protrude
-and the mouth to mumble, the dull eyes regained their fire, the drooping
-figure expanded. The next the whole frame collapsed again, and Holmes
-had gone as quickly as he had come.
-
-"Good heavens!" I cried; "how you startled me!"
-
-"Every precaution is still necessary," he whispered. "I have reason to
-think that they are hot upon our trail. Ah, there is Moriarty himself."
-
-The train had already begun to move as Holmes spoke. Glancing back, I
-saw a tall man pushing his way furiously through the crowd, and waving
-his hand as if he desired to have the train stopped. It was too late,
-however, for we were rapidly gathering momentum, and an instant later
-had shot clear of the station.
-
-"With all our precautions, you see that we have cut it rather fine,"
-said Holmes, laughing. He rose, and throwing off the black cassock and
-hat which had formed his disguise, he packed them away in a hand-bag.
-
-"Have you seen the morning paper, Watson?"
-
-"No."
-
-"You haven't' seen about Baker Street, then?"
-
-"Baker Street?"
-
-"They set fire to our rooms last night. No great harm was done."
-
-"Good heavens, Holmes! this is intolerable."
-
-"They must have lost my track completely after their bludgeon-man was
-arrested. Otherwise they could not have imagined that I had returned
-to my rooms. They have evidently taken the precaution of watching you,
-however, and that is what has brought Moriarty to Victoria. You could
-not have made any slip in coming?"
-
-"I did exactly what you advised."
-
-"Did you find your brougham?"
-
-"Yes, it was waiting."
-
-"Did you recognize your coachman?"
-
-"No."
-
-"It was my brother Mycroft. It is an advantage to get about in such a
-case without taking a mercenary into your confidence. But we must plan
-what we are to do about Moriarty now."
-
-"As this is an express, and as the boat runs in connection with it, I
-should think we have shaken him off very effectively."
-
-"My dear Watson, you evidently did not realize my meaning when I said
-that this man may be taken as being quite on the same intellectual plane
-as myself. You do not imagine that if I were the pursuer I should allow
-myself to be baffled by so slight an obstacle. Why, then, should you
-think so meanly of him?"
-
-"What will he do?"
-
-"What I should do?"
-
-"What would you do, then?"
-
-"Engage a special."
-
-"But it must be late."
-
-"By no means. This train stops at Canterbury; and there is always at
-least a quarter of an hour's delay at the boat. He will catch us there."
-
-"One would think that we were the criminals. Let us have him arrested on
-his arrival."
-
-"It would be to ruin the work of three months. We should get the big
-fish, but the smaller would dart right and left out of the net. On
-Monday we should have them all. No, an arrest is inadmissible."
-
-"What then?"
-
-"We shall get out at Canterbury."
-
-"And then?"
-
-"Well, then we must make a cross-country journey to Newhaven, and so
-over to Dieppe. Moriarty will again do what I should do. He will get on
-to Paris, mark down our luggage, and wait for two days at the depot.
-In the meantime we shall treat ourselves to a couple of carpet-bags,
-encourage the manufactures of the countries through which we travel, and
-make our way at our leisure into Switzerland, via Luxembourg and Basle."
-
-At Canterbury, therefore, we alighted, only to find that we should have
-to wait an hour before we could get a train to Newhaven.
-
-I was still looking rather ruefully after the rapidly disappearing
-luggage-van which contained my wardrobe, when Holmes pulled my sleeve
-and pointed up the line.
-
-"Already, you see," said he.
-
-Far away, from among the Kentish woods there rose a thin spray of smoke.
-A minute later a carriage and engine could be seen flying along the open
-curve which leads to the station. We had hardly time to take our place
-behind a pile of luggage when it passed with a rattle and a roar,
-beating a blast of hot air into our faces.
-
-"There he goes," said Holmes, as we watched the carriage swing and
-rock over the points. "There are limits, you see, to our friend's
-intelligence. It would have been a coup-de-maitre had he deduced what I
-would deduce and acted accordingly."
-
-"And what would he have done had he overtaken us?"
-
-"There cannot be the least doubt that he would have made a murderous
-attack upon me. It is, however, a game at which two may play. The
-question now is whether we should take a premature lunch here, or run
-our chance of starving before we reach the buffet at Newhaven."
-
-
-We made our way to Brussels that night and spent two days there, moving
-on upon the third day as far as Strasburg. On the Monday morning Holmes
-had telegraphed to the London police, and in the evening we found a
-reply waiting for us at our hotel. Holmes tore it open, and then with a
-bitter curse hurled it into the grate.
-
-"I might have known it!" he groaned. "He has escaped!"
-
-"Moriarty?"
-
-"They have secured the whole gang with the exception of him. He has
-given them the slip. Of course, when I had left the country there was no
-one to cope with him. But I did think that I had put the game in their
-hands. I think that you had better return to England, Watson."
-
-"Why?"
-
-"Because you will find me a dangerous companion now. This man's
-occupation is gone. He is lost if he returns to London. If I read his
-character right he will devote his whole energies to revenging himself
-upon me. He said as much in our short interview, and I fancy that he
-meant it. I should certainly recommend you to return to your practice."
-
-It was hardly an appeal to be successful with one who was an
-old campaigner as well as an old friend. We sat in the Strasburg
-salle-à-manger arguing the question for half an hour, but the same night
-we had resumed our journey and were well on our way to Geneva.
-
-For a charming week we wandered up the Valley of the Rhone, and then,
-branching off at Leuk, we made our way over the Gemmi Pass, still deep
-in snow, and so, by way of Interlaken, to Meiringen. It was a lovely
-trip, the dainty green of the spring below, the virgin white of the
-winter above; but it was clear to me that never for one instant did
-Holmes forget the shadow which lay across him. In the homely Alpine
-villages or in the lonely mountain passes, I could tell by his quick
-glancing eyes and his sharp scrutiny of every face that passed us,
-that he was well convinced that, walk where we would, we could not walk
-ourselves clear of the danger which was dogging our footsteps.
-
-Once, I remember, as we passed over the Gemmi, and walked along
-the border of the melancholy Daubensee, a large rock which had been
-dislodged from the ridge upon our right clattered down and roared into
-the lake behind us. In an instant Holmes had raced up on to the ridge,
-and, standing upon a lofty pinnacle, craned his neck in every direction.
-It was in vain that our guide assured him that a fall of stones was a
-common chance in the spring-time at that spot. He said nothing, but
-he smiled at me with the air of a man who sees the fulfillment of that
-which he had expected.
-
-And yet for all his watchfulness he was never depressed. On the
-contrary, I can never recollect having seen him in such exuberant
-spirits. Again and again he recurred to the fact that if he could
-be assured that society was freed from Professor Moriarty he would
-cheerfully bring his own career to a conclusion.
-
-"I think that I may go so far as to say, Watson, that I have not lived
-wholly in vain," he remarked. "If my record were closed to-night I could
-still survey it with equanimity. The air of London is the sweeter for my
-presence. In over a thousand cases I am not aware that I have ever used
-my powers upon the wrong side. Of late I have been tempted to look into
-the problems furnished by nature rather than those more superficial ones
-for which our artificial state of society is responsible. Your memoirs
-will draw to an end, Watson, upon the day that I crown my career by
-the capture or extinction of the most dangerous and capable criminal in
-Europe."
-
-I shall be brief, and yet exact, in the little which remains for me to
-tell. It is not a subject on which I would willingly dwell, and yet I am
-conscious that a duty devolves upon me to omit no detail.
-
-It was on the 3d of May that we reached the little village of Meiringen,
-where we put up at the Englischer Hof, then kept by Peter Steiler the
-elder. Our landlord was an intelligent man, and spoke excellent English,
-having served for three years as waiter at the Grosvenor Hotel in
-London. At his advice, on the afternoon of the 4th we set off together,
-with the intention of crossing the hills and spending the night at the
-hamlet of Rosenlaui. We had strict injunctions, however, on no account
-to pass the falls of Reichenbach, which are about half-way up the hill,
-without making a small detour to see them.
-
-It is indeed, a fearful place. The torrent, swollen by the melting snow,
-plunges into a tremendous abyss, from which the spray rolls up like the
-smoke from a burning house. The shaft into which the river hurls itself
-is an immense chasm, lined by glistening coal-black rock, and narrowing
-into a creaming, boiling pit of incalculable depth, which brims over and
-shoots the stream onward over its jagged lip. The long sweep of green
-water roaring forever down, and the thick flickering curtain of spray
-hissing forever upward, turn a man giddy with their constant whirl and
-clamor. We stood near the edge peering down at the gleam of the breaking
-water far below us against the black rocks, and listening to the
-half-human shout which came booming up with the spray out of the abyss.
-
-The path has been cut half-way round the fall to afford a complete view,
-but it ends abruptly, and the traveler has to return as he came. We had
-turned to do so, when we saw a Swiss lad come running along it with
-a letter in his hand. It bore the mark of the hotel which we had just
-left, and was addressed to me by the landlord. It appeared that within a
-very few minutes of our leaving, an English lady had arrived who was in
-the last stage of consumption. She had wintered at Davos Platz, and was
-journeying now to join her friends at Lucerne, when a sudden hemorrhage
-had overtaken her. It was thought that she could hardly live a few
-hours, but it would be a great consolation to her to see an English
-doctor, and, if I would only return, etc. The good Steiler assured me
-in a postscript that he would himself look upon my compliance as a very
-great favor, since the lady absolutely refused to see a Swiss physician,
-and he could not but feel that he was incurring a great responsibility.
-
-The appeal was one which could not be ignored. It was impossible to
-refuse the request of a fellow-countrywoman dying in a strange land. Yet
-I had my scruples about leaving Holmes. It was finally agreed, however,
-that he should retain the young Swiss messenger with him as guide and
-companion while I returned to Meiringen. My friend would stay some
-little time at the fall, he said, and would then walk slowly over the
-hill to Rosenlaui, where I was to rejoin him in the evening. As I turned
-away I saw Holmes, with his back against a rock and his arms folded,
-gazing down at the rush of the waters. It was the last that I was ever
-destined to see of him in this world.
-
-When I was near the bottom of the descent I looked back. It was
-impossible, from that position, to see the fall, but I could see the
-curving path which winds over the shoulder of the hill and leads to it.
-Along this a man was, I remember, walking very rapidly.
-
-I could see his black figure clearly outlined against the green behind
-him. I noted him, and the energy with which he walked but he passed from
-my mind again as I hurried on upon my errand.
-
-It may have been a little over an hour before I reached Meiringen. Old
-Steiler was standing at the porch of his hotel.
-
-"Well," said I, as I came hurrying up, "I trust that she is no worse?"
-
-A look of surprise passed over his face, and at the first quiver of his
-eyebrows my heart turned to lead in my breast.
-
-"You did not write this?" I said, pulling the letter from my pocket.
-"There is no sick Englishwoman in the hotel?"
-
-"Certainly not!" he cried. "But it has the hotel mark upon it! Ha, it
-must have been written by that tall Englishman who came in after you had
-gone. He said--"
-
-But I waited for none of the landlord's explanations. In a tingle of
-fear I was already running down the village street, and making for the
-path which I had so lately descended. It had taken me an hour to come
-down. For all my efforts two more had passed before I found myself at
-the fall of Reichenbach once more. There was Holmes's Alpine-stock still
-leaning against the rock by which I had left him. But there was no sign
-of him, and it was in vain that I shouted. My only answer was my own
-voice reverberating in a rolling echo from the cliffs around me.
-
-It was the sight of that Alpine-stock which turned me cold and sick.
-He had not gone to Rosenlaui, then. He had remained on that three-foot
-path, with sheer wall on one side and sheer drop on the other, until his
-enemy had overtaken him. The young Swiss had gone too. He had probably
-been in the pay of Moriarty, and had left the two men together. And then
-what had happened? Who was to tell us what had happened then?
-
-I stood for a minute or two to collect myself, for I was dazed with the
-horror of the thing. Then I began to think of Holmes's own methods and
-to try to practise them in reading this tragedy. It was, alas, only too
-easy to do. During our conversation we had not gone to the end of the
-path, and the Alpine-stock marked the place where we had stood. The
-blackish soil is kept forever soft by the incessant drift of spray,
-and a bird would leave its tread upon it. Two lines of footmarks were
-clearly marked along the farther end of the path, both leading away from
-me. There were none returning. A few yards from the end the soil was
-all ploughed up into a patch of mud, and the branches and ferns which
-fringed the chasm were torn and bedraggled. I lay upon my face and
-peered over with the spray spouting up all around me. It had darkened
-since I left, and now I could only see here and there the glistening of
-moisture upon the black walls, and far away down at the end of the shaft
-the gleam of the broken water. I shouted; but only the same half-human
-cry of the fall was borne back to my ears.
-
-But it was destined that I should after all have a last word of greeting
-from my friend and comrade. I have said that his Alpine-stock had been
-left leaning against a rock which jutted on to the path. From the top of
-this bowlder the gleam of something bright caught my eye, and, raising
-my hand, I found that it came from the silver cigarette-case which he
-used to carry. As I took it up a small square of paper upon which it
-had lain fluttered down on to the ground. Unfolding it, I found that it
-consisted of three pages torn from his note-book and addressed to me. It
-was characteristic of the man that the direction was a precise, and the
-writing as firm and clear, as though it had been written in his study.
-
-My dear Watson [it said], I write these few lines through the courtesy
-of Mr. Moriarty, who awaits my convenience for the final discussion of
-those questions which lie between us. He has been giving me a sketch
-of the methods by which he avoided the English police and kept himself
-informed of our movements. They certainly confirm the very high opinion
-which I had formed of his abilities. I am pleased to think that I shall
-be able to free society from any further effects of his presence, though
-I fear that it is at a cost which will give pain to my friends, and
-especially, my dear Watson, to you. I have already explained to you,
-however, that my career had in any case reached its crisis, and that
-no possible conclusion to it could be more congenial to me than this.
-Indeed, if I may make a full confession to you, I was quite convinced
-that the letter from Meiringen was a hoax, and I allowed you to depart
-on that errand under the persuasion that some development of this sort
-would follow. Tell Inspector Patterson that the papers which he needs
-to convict the gang are in pigeonhole M., done up in a blue envelope
-and inscribed "Moriarty." I made every disposition of my property before
-leaving England, and handed it to my brother Mycroft. Pray give my
-greetings to Mrs. Watson, and believe me to be, my dear fellow,
-
-Very sincerely yours,
-
-Sherlock Holmes
-
-
-A few words may suffice to tell the little that remains. An examination
-by experts leaves little doubt that a personal contest between the two
-men ended, as it could hardly fail to end in such a situation, in their
-reeling over, locked in each other's arms. Any attempt at recovering the
-bodies was absolutely hopeless, and there, deep down in that dreadful
-caldron of swirling water and seething foam, will lie for all time the
-most dangerous criminal and the foremost champion of the law of their
-generation. The Swiss youth was never found again, and there can be no
-doubt that he was one of the numerous agents whom Moriarty kept in this
-employ. As to the gang, it will be within the memory of the public
-how completely the evidence which Holmes had accumulated exposed their
-organization, and how heavily the hand of the dead man weighed
-upon them. Of their terrible chief few details came out during the
-proceedings, and if I have now been compelled to make a clear statement
-of his career it is due to those injudicious champions who have
-endeavored to clear his memory by attacks upon him whom I shall ever
-regard as the best and the wisest man whom I have ever known.
-
-
-
-
-
-End of the Project Gutenberg EBook of Memoirs of Sherlock Holmes, by 
-Sir Arthur Conan Doyle
-
-*** END OF THIS PROJECT GUTENBERG EBOOK MEMOIRS OF SHERLOCK HOLMES ***
-
-***** This file should be named 834-8.txt or 834-8.zip *****
-This and all associated files of various formats will be found in:
-        http://www.gutenberg.org/8/3/834/
-
-Produced by Angela M. Cable
-
-Updated editions will replace the previous one--the old editions
-will be renamed.
-
-Creating the works from public domain print editions means that no
-one owns a United States copyright in these works, so the Foundation
-(and you!) can copy and distribute it in the United States without
-permission and without paying copyright royalties.  Special rules,
-set forth in the General Terms of Use part of this license, apply to
-copying and distributing Project Gutenberg-tm electronic works to
-protect the PROJECT GUTENBERG-tm concept and trademark.  Project
-Gutenberg is a registered trademark, and may not be used if you
-charge for the eBooks, unless you receive specific permission.  If you
-do not charge anything for copies of this eBook, complying with the
-rules is very easy.  You may use this eBook for nearly any purpose
-such as creation of derivative works, reports, performances and
-research.  They may be modified and printed and given away--you may do
-practically ANYTHING with public domain eBooks.  Redistribution is
-subject to the trademark license, especially commercial
-redistribution.
-
-
-
-*** START: FULL LICENSE ***
-
-THE FULL PROJECT GUTENBERG LICENSE
-PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK
-
-To protect the Project Gutenberg-tm mission of promoting the free
-distribution of electronic works, by using or distributing this work
-(or any other work associated in any way with the phrase "Project
-Gutenberg"), you agree to comply with all the terms of the Full Project
-Gutenberg-tm License (available with this file or online at
-http://gutenberg.org/license).
-
-
-Section 1.  General Terms of Use and Redistributing Project Gutenberg-tm
-electronic works
-
-1.A.  By reading or using any part of this Project Gutenberg-tm
-electronic work, you indicate that you have read, understand, agree to
-and accept all the terms of this license and intellectual property
-(trademark/copyright) agreement.  If you do not agree to abide by all
-the terms of this agreement, you must cease using and return or destroy
-all copies of Project Gutenberg-tm electronic works in your possession.
-If you paid a fee for obtaining a copy of or access to a Project
-Gutenberg-tm electronic work and you do not agree to be bound by the
-terms of this agreement, you may obtain a refund from the person or
-entity to whom you paid the fee as set forth in paragraph 1.E.8.
-
-1.B.  "Project Gutenberg" is a registered trademark.  It may only be
-used on or associated in any way with an electronic work by people who
-agree to be bound by the terms of this agreement.  There are a few
-things that you can do with most Project Gutenberg-tm electronic works
-even without complying with the full terms of this agreement.  See
-paragraph 1.C below.  There are a lot of things you can do with Project
-Gutenberg-tm electronic works if you follow the terms of this agreement
-and help preserve free future access to Project Gutenberg-tm electronic
-works.  See paragraph 1.E below.
-
-1.C.  The Project Gutenberg Literary Archive Foundation ("the Foundation"
-or PGLAF), owns a compilation copyright in the collection of Project
-Gutenberg-tm electronic works.  Nearly all the individual works in the
-collection are in the public domain in the United States.  If an
-individual work is in the public domain in the United States and you are
-located in the United States, we do not claim a right to prevent you from
-copying, distributing, performing, displaying or creating derivative
-works based on the work as long as all references to Project Gutenberg
-are removed.  Of course, we hope that you will support the Project
-Gutenberg-tm mission of promoting free access to electronic works by
-freely sharing Project Gutenberg-tm works in compliance with the terms of
-this agreement for keeping the Project Gutenberg-tm name associated with
-the work.  You can easily comply with the terms of this agreement by
-keeping this work in the same format with its attached full Project
-Gutenberg-tm License when you share it without charge with others.
-
-1.D.  The copyright laws of the place where you are located also govern
-what you can do with this work.  Copyright laws in most countries are in
-a constant state of change.  If you are outside the United States, check
-the laws of your country in addition to the terms of this agreement
-before downloading, copying, displaying, performing, distributing or
-creating derivative works based on this work or any other Project
-Gutenberg-tm work.  The Foundation makes no representations concerning
-the copyright status of any work in any country outside the United
-States.
-
-1.E.  Unless you have removed all references to Project Gutenberg:
-
-1.E.1.  The following sentence, with active links to, or other immediate
-access to, the full Project Gutenberg-tm License must appear prominently
-whenever any copy of a Project Gutenberg-tm work (any work on which the
-phrase "Project Gutenberg" appears, or with which the phrase "Project
-Gutenberg" is associated) is accessed, displayed, performed, viewed,
-copied or distributed:
-
-This eBook is for the use of anyone anywhere at no cost and with
-almost no restrictions whatsoever.  You may copy it, give it away or
-re-use it under the terms of the Project Gutenberg License included
-with this eBook or online at www.gutenberg.org
-
-1.E.2.  If an individual Project Gutenberg-tm electronic work is derived
-from the public domain (does not contain a notice indicating that it is
-posted with permission of the copyright holder), the work can be copied
-and distributed to anyone in the United States without paying any fees
-or charges.  If you are redistributing or providing access to a work
-with the phrase "Project Gutenberg" associated with or appearing on the
-work, you must comply either with the requirements of paragraphs 1.E.1
-through 1.E.7 or obtain permission for the use of the work and the
-Project Gutenberg-tm trademark as set forth in paragraphs 1.E.8 or
-1.E.9.
-
-1.E.3.  If an individual Project Gutenberg-tm electronic work is posted
-with the permission of the copyright holder, your use and distribution
-must comply with both paragraphs 1.E.1 through 1.E.7 and any additional
-terms imposed by the copyright holder.  Additional terms will be linked
-to the Project Gutenberg-tm License for all works posted with the
-permission of the copyright holder found at the beginning of this work.
-
-1.E.4.  Do not unlink or detach or remove the full Project Gutenberg-tm
-License terms from this work, or any files containing a part of this
-work or any other work associated with Project Gutenberg-tm.
-
-1.E.5.  Do not copy, display, perform, distribute or redistribute this
-electronic work, or any part of this electronic work, without
-prominently displaying the sentence set forth in paragraph 1.E.1 with
-active links or immediate access to the full terms of the Project
-Gutenberg-tm License.
-
-1.E.6.  You may convert to and distribute this work in any binary,
-compressed, marked up, nonproprietary or proprietary form, including any
-word processing or hypertext form.  However, if you provide access to or
-distribute copies of a Project Gutenberg-tm work in a format other than
-"Plain Vanilla ASCII" or other format used in the official version
-posted on the official Project Gutenberg-tm web site (www.gutenberg.org),
-you must, at no additional cost, fee or expense to the user, provide a
-copy, a means of exporting a copy, or a means of obtaining a copy upon
-request, of the work in its original "Plain Vanilla ASCII" or other
-form.  Any alternate format must include the full Project Gutenberg-tm
-License as specified in paragraph 1.E.1.
-
-1.E.7.  Do not charge a fee for access to, viewing, displaying,
-performing, copying or distributing any Project Gutenberg-tm works
-unless you comply with paragraph 1.E.8 or 1.E.9.
-
-1.E.8.  You may charge a reasonable fee for copies of or providing
-access to or distributing Project Gutenberg-tm electronic works provided
-that
-
-- You pay a royalty fee of 20% of the gross profits you derive from
-     the use of Project Gutenberg-tm works calculated using the method
-     you already use to calculate your applicable taxes.  The fee is
-     owed to the owner of the Project Gutenberg-tm trademark, but he
-     has agreed to donate royalties under this paragraph to the
-     Project Gutenberg Literary Archive Foundation.  Royalty payments
-     must be paid within 60 days following each date on which you
-     prepare (or are legally required to prepare) your periodic tax
-     returns.  Royalty payments should be clearly marked as such and
-     sent to the Project Gutenberg Literary Archive Foundation at the
-     address specified in Section 4, "Information about donations to
-     the Project Gutenberg Literary Archive Foundation."
-
-- You provide a full refund of any money paid by a user who notifies
-     you in writing (or by e-mail) within 30 days of receipt that s/he
-     does not agree to the terms of the full Project Gutenberg-tm
-     License.  You must require such a user to return or
-     destroy all copies of the works possessed in a physical medium
-     and discontinue all use of and all access to other copies of
-     Project Gutenberg-tm works.
-
-- You provide, in accordance with paragraph 1.F.3, a full refund of any
-     money paid for a work or a replacement copy, if a defect in the
-     electronic work is discovered and reported to you within 90 days
-     of receipt of the work.
-
-- You comply with all other terms of this agreement for free
-     distribution of Project Gutenberg-tm works.
-
-1.E.9.  If you wish to charge a fee or distribute a Project Gutenberg-tm
-electronic work or group of works on different terms than are set
-forth in this agreement, you must obtain permission in writing from
-both the Project Gutenberg Literary Archive Foundation and Michael
-Hart, the owner of the Project Gutenberg-tm trademark.  Contact the
-Foundation as set forth in Section 3 below.
-
-1.F.
-
-1.F.1.  Project Gutenberg volunteers and employees expend considerable
-effort to identify, do copyright research on, transcribe and proofread
-public domain works in creating the Project Gutenberg-tm
-collection.  Despite these efforts, Project Gutenberg-tm electronic
-works, and the medium on which they may be stored, may contain
-"Defects," such as, but not limited to, incomplete, inaccurate or
-corrupt data, transcription errors, a copyright or other intellectual
-property infringement, a defective or damaged disk or other medium, a
-computer virus, or computer codes that damage or cannot be read by
-your equipment.
-
-1.F.2.  LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for the "Right
-of Replacement or Refund" described in paragraph 1.F.3, the Project
-Gutenberg Literary Archive Foundation, the owner of the Project
-Gutenberg-tm trademark, and any other party distributing a Project
-Gutenberg-tm electronic work under this agreement, disclaim all
-liability to you for damages, costs and expenses, including legal
-fees.  YOU AGREE THAT YOU HAVE NO REMEDIES FOR NEGLIGENCE, STRICT
-LIABILITY, BREACH OF WARRANTY OR BREACH OF CONTRACT EXCEPT THOSE
-PROVIDED IN PARAGRAPH F3.  YOU AGREE THAT THE FOUNDATION, THE
-TRADEMARK OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL NOT BE
-LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE OR
-INCIDENTAL DAMAGES EVEN IF YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH
-DAMAGE.
-
-1.F.3.  LIMITED RIGHT OF REPLACEMENT OR REFUND - If you discover a
-defect in this electronic work within 90 days of receiving it, you can
-receive a refund of the money (if any) you paid for it by sending a
-written explanation to the person you received the work from.  If you
-received the work on a physical medium, you must return the medium with
-your written explanation.  The person or entity that provided you with
-the defective work may elect to provide a replacement copy in lieu of a
-refund.  If you received the work electronically, the person or entity
-providing it to you may choose to give you a second opportunity to
-receive the work electronically in lieu of a refund.  If the second copy
-is also defective, you may demand a refund in writing without further
-opportunities to fix the problem.
-
-1.F.4.  Except for the limited right of replacement or refund set forth
-in paragraph 1.F.3, this work is provided to you 'AS-IS' WITH NO OTHER
-WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
-WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR ANY PURPOSE.
-
-1.F.5.  Some states do not allow disclaimers of certain implied
-warranties or the exclusion or limitation of certain types of damages.
-If any disclaimer or limitation set forth in this agreement violates the
-law of the state applicable to this agreement, the agreement shall be
-interpreted to make the maximum disclaimer or limitation permitted by
-the applicable state law.  The invalidity or unenforceability of any
-provision of this agreement shall not void the remaining provisions.
-
-1.F.6.  INDEMNITY - You agree to indemnify and hold the Foundation, the
-trademark owner, any agent or employee of the Foundation, anyone
-providing copies of Project Gutenberg-tm electronic works in accordance
-with this agreement, and any volunteers associated with the production,
-promotion and distribution of Project Gutenberg-tm electronic works,
-harmless from all liability, costs and expenses, including legal fees,
-that arise directly or indirectly from any of the following which you do
-or cause to occur: (a) distribution of this or any Project Gutenberg-tm
-work, (b) alteration, modification, or additions or deletions to any
-Project Gutenberg-tm work, and (c) any Defect you cause.
-
-
-Section  2.  Information about the Mission of Project Gutenberg-tm
-
-Project Gutenberg-tm is synonymous with the free distribution of
-electronic works in formats readable by the widest variety of computers
-including obsolete, old, middle-aged and new computers.  It exists
-because of the efforts of hundreds of volunteers and donations from
-people in all walks of life.
-
-Volunteers and financial support to provide volunteers with the
-assistance they need, is critical to reaching Project Gutenberg-tm's
-goals and ensuring that the Project Gutenberg-tm collection will
-remain freely available for generations to come.  In 2001, the Project
-Gutenberg Literary Archive Foundation was created to provide a secure
-and permanent future for Project Gutenberg-tm and future generations.
-To learn more about the Project Gutenberg Literary Archive Foundation
-and how your efforts and donations can help, see Sections 3 and 4
-and the Foundation web page at http://www.pglaf.org.
-
-
-Section 3.  Information about the Project Gutenberg Literary Archive
-Foundation
-
-The Project Gutenberg Literary Archive Foundation is a non profit
-501(c)(3) educational corporation organized under the laws of the
-state of Mississippi and granted tax exempt status by the Internal
-Revenue Service.  The Foundation's EIN or federal tax identification
-number is 64-6221541.  Its 501(c)(3) letter is posted at
-http://pglaf.org/fundraising.  Contributions to the Project Gutenberg
-Literary Archive Foundation are tax deductible to the full extent
-permitted by U.S. federal laws and your state's laws.
-
-The Foundation's principal office is located at 4557 Melan Dr. S.
-Fairbanks, AK, 99712., but its volunteers and employees are scattered
-throughout numerous locations.  Its business office is located at
-809 North 1500 West, Salt Lake City, UT 84116, (801) 596-1887, email
-business@pglaf.org.  Email contact links and up to date contact
-information can be found at the Foundation's web site and official
-page at http://pglaf.org
-
-For additional contact information:
-     Dr. Gregory B. Newby
-     Chief Executive and Director
-     gbnewby@pglaf.org
-
-
-Section 4.  Information about Donations to the Project Gutenberg
-Literary Archive Foundation
-
-Project Gutenberg-tm depends upon and cannot survive without wide
-spread public support and donations to carry out its mission of
-increasing the number of public domain and licensed works that can be
-freely distributed in machine readable form accessible by the widest
-array of equipment including outdated equipment.  Many small donations
-($1 to $5,000) are particularly important to maintaining tax exempt
-status with the IRS.
-
-The Foundation is committed to complying with the laws regulating
-charities and charitable donations in all 50 states of the United
-States.  Compliance requirements are not uniform and it takes a
-considerable effort, much paperwork and many fees to meet and keep up
-with these requirements.  We do not solicit donations in locations
-where we have not received written confirmation of compliance.  To
-SEND DONATIONS or determine the status of compliance for any
-particular state visit http://pglaf.org
-
-While we cannot and do not solicit contributions from states where we
-have not met the solicitation requirements, we know of no prohibition
-against accepting unsolicited donations from donors in such states who
-approach us with offers to donate.
-
-International donations are gratefully accepted, but we cannot make
-any statements concerning tax treatment of donations received from
-outside the United States.  U.S. laws alone swamp our small staff.
-
-Please check the Project Gutenberg Web pages for current donation
-methods and addresses.  Donations are accepted in a number of other
-ways including checks, online payments and credit card donations.
-To donate, please visit: http://pglaf.org/donate
-
-
-Section 5.  General Information About Project Gutenberg-tm electronic
-works.
-
-Professor Michael S. Hart is the originator of the Project Gutenberg-tm
-concept of a library of electronic works that could be freely shared
-with anyone.  For thirty years, he produced and distributed Project
-Gutenberg-tm eBooks with only a loose network of volunteer support.
-
-
-Project Gutenberg-tm eBooks are often created from several printed
-editions, all of which are confirmed as Public Domain in the U.S.
-unless a copyright notice is included.  Thus, we do not necessarily
-keep eBooks in compliance with any particular paper edition.
-
-
-Most people start at our Web site which has the main PG search facility:
-
-     http://www.gutenberg.org
-
-This Web site includes information about Project Gutenberg-tm,
-including how to make donations to the Project Gutenberg Literary
-Archive Foundation, how to help produce our new eBooks, and how to
-subscribe to our email newsletter to hear about new eBooks.
diff --git a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/job/wordcount/wordcount.job b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/job/wordcount/wordcount.job
deleted file mode 100644
index 3843a3b..0000000
--- a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/job/wordcount/wordcount.job
+++ /dev/null
@@ -1,12 +0,0 @@
-mapred.input.dir=data/file1.txt
-mapred.output.dir=output
-mapred.job.name=wordcount(static)
-mapred.mapper.class=org.apache.hyracks.examples.wordcount.WordCount$Map
-mapred.combiner.class=org.apache.hyracks.examples.wordcount.WordCount$Reduce
-mapred.reducer.class=org.apache.hyracks.examples.wordcount.WordCount$Reduce
-mapred.input.format.class=org.apache.hadoop.mapred.TextInputFormat
-mapred.output.format.class=org.apache.hadoop.mapred.TextOutputFormat
-mapred.mapoutput.key.class=org.apache.hadoop.io.Text
-mapred.mapoutput.value.class=org.apache.hadoop.io.IntWritable
-mapred.output.key.class=org.apache.hadoop.io.Text
-mapred.output.value.class=org.apache.hadoop.io.IntWritable
diff --git a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/pom.xml b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/pom.xml
deleted file mode 100644
index d8b9a1e..0000000
--- a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/pom.xml
+++ /dev/null
@@ -1,182 +0,0 @@
-<!--
- ! Licensed to the Apache Software Foundation (ASF) under one
- ! or more contributor license agreements.  See the NOTICE file
- ! distributed with this work for additional information
- ! regarding copyright ownership.  The ASF licenses this file
- ! to you 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.
- !-->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.hyracks.examples.compat</groupId>
-  <artifactId>hadoopcompatserver</artifactId>
-  <version>0.2.16-SNAPSHOT</version>
-  <name>hadoopcompatserver</name>
-
-  <parent>
-    <groupId>org.apache.hyracks.examples</groupId>
-    <artifactId>hadoop-compat-example</artifactId>
-    <version>0.2.16-SNAPSHOT</version>
-  </parent>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>appassembler-maven-plugin</artifactId>
-        <version>1.3</version>
-        <executions>
-          <execution>
-            <configuration>
-              <programs>
-                <program>
-                  <mainClass>org.apache.hyracks.control.cc.CCDriver</mainClass>
-                  <name>hyrackscc</name>
-                </program>
-                <program>
-                  <mainClass>org.apache.hyracks.control.nc.NCDriver</mainClass>
-                  <name>hyracksnc</name>
-                </program>
-              </programs>
-              <repositoryLayout>flat</repositoryLayout>
-              <repositoryName>lib</repositoryName>
-            </configuration>
-            <phase>package</phase>
-            <goals>
-              <goal>assemble</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <version>2.2-beta-5</version>
-        <executions>
-          <execution>
-            <configuration>
-              <descriptors>
-                <descriptor>src/main/assembly/binary-assembly.xml</descriptor>
-              </descriptors>
-            </configuration>
-            <phase>package</phase>
-            <goals>
-              <goal>attached</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-      	<groupId>org.apache.hyracks</groupId>
-      	<artifactId>hyracks-virtualcluster-maven-plugin</artifactId>
-      	<version>0.2.16-SNAPSHOT</version>
-        <configuration>
-          <hyracksServerHome>${basedir}/target/hadoopcompatserver-${project.version}-binary-assembly</hyracksServerHome>
-          <jvmOptions>${jvm.extraargs}</jvmOptions>
-        </configuration>
-        <executions>
-          <execution>
-            <id>hyracks-cc-start</id>
-            <phase>pre-integration-test</phase>
-            <goals>
-              <goal>start-cc</goal>
-            </goals>
-          </execution>
-          <execution>
-            <id>hyracks-nc1-start</id>
-            <phase>pre-integration-test</phase>
-            <goals>
-              <goal>start-nc</goal>
-            </goals>
-            <configuration>
-              <nodeId>NC1</nodeId>
-              <dataIpAddress>127.0.0.1</dataIpAddress>
-              <ccHost>localhost</ccHost>
-            </configuration>
-          </execution>
-          <execution>
-            <id>hyracks-nc2-start</id>
-            <phase>pre-integration-test</phase>
-            <goals>
-              <goal>start-nc</goal>
-            </goals>
-            <configuration>
-              <nodeId>NC2</nodeId>
-              <dataIpAddress>127.0.0.1</dataIpAddress>
-              <ccHost>localhost</ccHost>
-            </configuration>
-          </execution>
-          <execution>
-            <id>stop-services</id>
-            <phase>post-integration-test</phase>
-            <goals>
-              <goal>stop-services</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-      	<groupId>org.apache.maven.plugins</groupId>
-      	<artifactId>maven-compiler-plugin</artifactId>
-      	<version>2.0.2</version>
-        <configuration>
-          <source>1.6</source>
-          <target>1.6</target>
-        </configuration>
-      </plugin>
-      <plugin>
-      	<groupId>org.apache.maven.plugins</groupId>
-      	<artifactId>maven-failsafe-plugin</artifactId>
-      	<version>2.8.1</version>
-      	<executions>
-      	  <execution>
-      	    <id>it</id>
-      	    <phase>integration-test</phase>
-      	    <goals>
-      	      <goal>integration-test</goal>
-      	    </goals>
-      	  </execution>
-      	</executions>
-      </plugin>
-    </plugins>
-  </build>
-  <dependencies>
-     <dependency>
-        <groupId>org.apache.hyracks.examples.compat</groupId>
-        <artifactId>hadoopcompathelper</artifactId>
-        <version>0.2.16-SNAPSHOT</version>
-        <scope>compile</scope>
-     </dependency>
-  	<dependency>
-  		<groupId>org.apache.hyracks</groupId>
-  		<artifactId>hyracks-control-cc</artifactId>
-  		<version>0.2.16-SNAPSHOT</version>
-  		<type>jar</type>
-  		<scope>compile</scope>
-  	</dependency>
-  	<dependency>
-  		<groupId>org.apache.hyracks</groupId>
-  		<artifactId>hyracks-control-nc</artifactId>
-  		<version>0.2.16-SNAPSHOT</version>
-  		<type>jar</type>
-  		<scope>compile</scope>
-  	</dependency>
-     <dependency>
-        <groupId>org.apache.hyracks.examples.compat</groupId>
-  	    <artifactId>hadoopcompatclient</artifactId>
-  	    <version>0.2.16-SNAPSHOT</version>
-  	    <type>jar</type>
-  	    <scope>test</scope>
-     </dependency>
-  </dependencies>
-</project>
diff --git a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/src/main/assembly/binary-assembly.xml b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/src/main/assembly/binary-assembly.xml
deleted file mode 100644
index d7f678d..0000000
--- a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/src/main/assembly/binary-assembly.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<!--
- ! Licensed to the Apache Software Foundation (ASF) under one
- ! or more contributor license agreements.  See the NOTICE file
- ! distributed with this work for additional information
- ! regarding copyright ownership.  The ASF licenses this file
- ! to you 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.
- !-->
-
-<assembly>
-  <id>binary-assembly</id>
-  <formats>
-    <format>zip</format>
-    <format>dir</format>
-  </formats>
-  <includeBaseDirectory>false</includeBaseDirectory>
-  <fileSets>
-    <fileSet>
-      <directory>target/appassembler/bin</directory>
-      <outputDirectory>bin</outputDirectory>
-      <fileMode>0755</fileMode>
-    </fileSet>
-    <fileSet>
-      <directory>target/appassembler/lib</directory>
-      <outputDirectory>lib</outputDirectory>
-    </fileSet>
-    <fileSet>
-      <directory>docs</directory>
-      <outputDirectory>docs</outputDirectory>
-    </fileSet>
-  </fileSets>
-</assembly>
diff --git a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/src/test/java/org/apache/hyracks/examples/compat/test/WordCountCompatibilityIT.java b/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/src/test/java/org/apache/hyracks/examples/compat/test/WordCountCompatibilityIT.java
deleted file mode 100644
index 5177d74..0000000
--- a/hyracks/hyracks-examples/hadoop-compat-example/hadoopcompatserver/src/test/java/org/apache/hyracks/examples/compat/test/WordCountCompatibilityIT.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-package org.apache.hyracks.examples.compat.test;
-
-import java.io.File;
-
-import org.junit.Test;
-
-import org.apache.hyracks.examples.compat.client.WordCountCompatibility;
-
-public class WordCountCompatibilityIT {
-    @Test
-    public void runWordCount() throws Exception {
-        WordCountCompatibility.main(new String[] { "-cluster", getClusterConf(), "-jobFiles", getWordCountJobFile(),
-                "-applicationName", "compat" });
-    }
-
-    private String getClusterConf() {
-        return new File("conf/local_cluster.conf").getAbsolutePath();
-    }
-
-    private String getWordCountJobFile() {
-        return new File("job/wordcount/wordcount.job").getAbsolutePath();
-    }
-}
\ No newline at end of file
diff --git a/hyracks/hyracks-examples/hadoop-compat-example/pom.xml b/hyracks/hyracks-examples/hadoop-compat-example/pom.xml
deleted file mode 100644
index 9020f64..0000000
--- a/hyracks/hyracks-examples/hadoop-compat-example/pom.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--
- ! Licensed to the Apache Software Foundation (ASF) under one
- ! or more contributor license agreements.  See the NOTICE file
- ! distributed with this work for additional information
- ! regarding copyright ownership.  The ASF licenses this file
- ! to you 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.
- !-->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>org.apache.hyracks.examples</groupId>
-  <artifactId>hadoop-compat-example</artifactId>
-  <packaging>pom</packaging>
-  <name>hadoop-compat-example</name>
-
-  <parent>
-    <groupId>org.apache.hyracks</groupId>
-    <artifactId>hyracks-examples</artifactId>
-    <version>0.2.16-SNAPSHOT</version>
-  </parent>
-
-  <modules>
-    <module>hadoopcompathelper</module>
-    <module>hadoopcompatclient</module>
-    <module>hadoopcompatserver</module>
-  </modules>
-
-  <dependencies>
-      <dependency>
-         <groupId>org.apache.hadoop</groupId>
-         <artifactId>hadoop-client</artifactId>
-         <type>jar</type>
-         <scope>compile</scope>
-      </dependency>
-
-      <dependency>
-         <groupId>org.apache.hyracks</groupId>
-         <artifactId>hyracks-hadoop-compat</artifactId>
-         <version>0.2.16-SNAPSHOT</version>
-         <type>jar</type>
-         <scope>compile</scope>
-      </dependency>
-  </dependencies>
-</project>
diff --git a/hyracks/hyracks-examples/pom.xml b/hyracks/hyracks-examples/pom.xml
index 91666a4..e3e39d4 100644
--- a/hyracks/hyracks-examples/pom.xml
+++ b/hyracks/hyracks-examples/pom.xml
@@ -44,7 +44,7 @@
     <module>text-example</module>
     <module>btree-example</module>
     <module>hyracks-integration-tests</module>
-    <module>hadoop-compat-example</module>
+    <!--module>hadoop-compat-example</module-->
     <module>hyracks-shutdown-test</module>
   </modules>
 </project>
diff --git a/hyracks/hyracks-hadoop-compat/pom.xml b/hyracks/hyracks-hadoop-compat/pom.xml
deleted file mode 100644
index 2e15200..0000000
--- a/hyracks/hyracks-hadoop-compat/pom.xml
+++ /dev/null
@@ -1,116 +0,0 @@
-<!--
- ! Licensed to the Apache Software Foundation (ASF) under one
- ! or more contributor license agreements.  See the NOTICE file
- ! distributed with this work for additional information
- ! regarding copyright ownership.  The ASF licenses this file
- ! to you 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.
- !-->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>hyracks-hadoop-compat</artifactId>
-  <name>hyracks-hadoop-compat</name>
-
-  <parent>
-    <groupId>org.apache.hyracks</groupId>
-    <artifactId>hyracks</artifactId>
-    <version>0.2.16-SNAPSHOT</version>
-  </parent>
-
-  <licenses>
-    <license>
-      <name>Apache License, Version 2.0</name>
-      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
-      <distribution>repo</distribution>
-      <comments>A business-friendly OSS license</comments>
-    </license>
-  </licenses>
-
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <version>2.0.2</version>
-        <configuration>
-          <source>1.7</source>
-          <target>1.7</target>
-          <fork>true</fork>
-        </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>appassembler-maven-plugin</artifactId>
-        <version>1.3</version>
-        <executions>
-          <execution>
-            <configuration>
-              <programs>
-                <program>
-                  <mainClass>org.apache.hyracks.hadoop.compat.driver.CompatibilityLayer</mainClass>
-                  <name>hadoop-compat</name>
-                </program>
-              </programs>
-              <repositoryLayout>flat</repositoryLayout>
-              <repositoryName>lib</repositoryName>
-            </configuration>
-            <phase>package</phase>
-            <goals>
-              <goal>assemble</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <version>2.2-beta-5</version>
-        <executions>
-          <execution>
-            <configuration>
-              <descriptors>
-                <descriptor>src/main/assembly/binary-assembly.xml</descriptor>
-              </descriptors>
-            </configuration>
-            <phase>package</phase>
-            <goals>
-              <goal>attached</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <dependencies>
-  	<dependency>
-  		<groupId>org.apache.hadoop</groupId>
-  		<artifactId>hadoop-client</artifactId>
-  		<type>jar</type>
-  		<scope>compile</scope>
-  	</dependency>
-    <dependency>
-        <groupId>edu.uci.ics.dcache</groupId>
-        <artifactId>dcache-client</artifactId>
-        <version>0.0.1</version>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-    	<groupId>org.apache.hyracks</groupId>
-    	<artifactId>hyracks-dataflow-hadoop</artifactId>
-    	<version>0.2.16-SNAPSHOT</version>
-    	<type>jar</type>
-    	<scope>compile</scope>
-    </dependency>
-  </dependencies>
-</project>
diff --git a/hyracks/hyracks-hadoop-compat/src/main/assembly/binary-assembly.xml b/hyracks/hyracks-hadoop-compat/src/main/assembly/binary-assembly.xml
deleted file mode 100644
index d4a2ea1..0000000
--- a/hyracks/hyracks-hadoop-compat/src/main/assembly/binary-assembly.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<!--
- ! Licensed to the Apache Software Foundation (ASF) under one
- ! or more contributor license agreements.  See the NOTICE file
- ! distributed with this work for additional information
- ! regarding copyright ownership.  The ASF licenses this file
- ! to you 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.
- !-->
-
-<assembly>
-  <id>binary-assembly</id>
-  <formats>
-    <format>zip</format>
-    <format>dir</format>
-  </formats>
-  <includeBaseDirectory>false</includeBaseDirectory>
-  <fileSets>
-    <fileSet>
-      <directory>target/appassembler/bin</directory>
-      <outputDirectory>bin</outputDirectory>
-      <fileMode>0755</fileMode>
-    </fileSet>
-    <fileSet>
-      <directory>target/appassembler/lib</directory>
-      <outputDirectory>lib</outputDirectory>
-    </fileSet>
-  </fileSets>
-</assembly>
diff --git a/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/client/HyracksClient.java b/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/client/HyracksClient.java
deleted file mode 100644
index d0ef2a9..0000000
--- a/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/client/HyracksClient.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-package org.apache.hyracks.hadoop.compat.client;
-
-import java.util.EnumSet;
-import java.util.HashSet;
-import java.util.Properties;
-import java.util.Set;
-
-import org.apache.hyracks.api.client.HyracksConnection;
-import org.apache.hyracks.api.job.JobFlag;
-import org.apache.hyracks.api.job.JobId;
-import org.apache.hyracks.api.job.JobSpecification;
-import org.apache.hyracks.api.job.JobStatus;
-import org.apache.hyracks.hadoop.compat.util.ConfigurationConstants;
-import org.apache.hyracks.hadoop.compat.util.Utilities;
-
-public class HyracksClient {
-
-    private static HyracksConnection connection;
-    private static final String jobProfilingKey = "jobProfilingKey";
-    Set<String> systemLibs;
-
-    public HyracksClient(Properties clusterProperties) throws Exception {
-        initialize(clusterProperties);
-    }
-
-    private void initialize(Properties properties) throws Exception {
-        String clusterController = (String) properties.get(ConfigurationConstants.clusterControllerHost);
-        connection = new HyracksConnection(clusterController, 1098);
-        systemLibs = new HashSet<String>();
-        for (String systemLib : ConfigurationConstants.systemLibs) {
-            String systemLibPath = properties.getProperty(systemLib);
-            if (systemLibPath != null) {
-                systemLibs.add(systemLibPath);
-            }
-        }
-    }
-
-    public HyracksClient(String clusterConf, char delimiter) throws Exception {
-        Properties properties = Utilities.getProperties(clusterConf, delimiter);
-        initialize(properties);
-    }
-
-    public JobStatus getJobStatus(JobId jobId) throws Exception {
-        return connection.getJobStatus(jobId);
-    }
-
-    public HyracksRunningJob submitJob(String applicationName, JobSpecification spec) throws Exception {
-        String jobProfilingVal = System.getenv(jobProfilingKey);
-        boolean doProfiling = ("true".equalsIgnoreCase(jobProfilingVal));
-        JobId jobId;
-        if (doProfiling) {
-            System.out.println("PROFILING");
-            jobId = connection.startJob(spec, EnumSet.of(JobFlag.PROFILE_RUNTIME));
-        } else {
-            jobId = connection.startJob(spec);
-        }
-        HyracksRunningJob runningJob = new HyracksRunningJob(jobId, spec, this);
-        return runningJob;
-    }
-
-    public HyracksRunningJob submitJob(String applicationName, JobSpecification spec, Set<String> userLibs)
-            throws Exception {
-        return submitJob(applicationName, spec);
-    }
-
-    public void waitForCompleton(JobId jobId) throws Exception {
-        connection.waitForCompletion(jobId);
-    }
-}
diff --git a/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/client/HyracksRunningJob.java b/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/client/HyracksRunningJob.java
deleted file mode 100644
index 921de2d..0000000
--- a/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/client/HyracksRunningJob.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-package org.apache.hyracks.hadoop.compat.client;
-
-import java.io.IOException;
-
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.mapred.Counters;
-import org.apache.hadoop.mapred.JobID;
-import org.apache.hadoop.mapred.JobStatus;
-import org.apache.hadoop.mapred.RunningJob;
-import org.apache.hadoop.mapred.TaskAttemptID;
-import org.apache.hadoop.mapred.TaskCompletionEvent;
-
-import org.apache.hyracks.api.job.IOperatorDescriptorRegistry;
-import org.apache.hyracks.api.job.JobId;
-
-public class HyracksRunningJob implements RunningJob {
-
-    JobId jobId;
-    IOperatorDescriptorRegistry spec;
-    HyracksClient hyracksClient;
-
-    public JobId getJobId() {
-        return jobId;
-    }
-
-    public void setJobId(JobId jobId) {
-        this.jobId = jobId;
-    }
-
-    public IOperatorDescriptorRegistry getSpec() {
-        return spec;
-    }
-
-    public void setSpec(IOperatorDescriptorRegistry spec) {
-        this.spec = spec;
-    }
-
-    public HyracksRunningJob(JobId jobId, IOperatorDescriptorRegistry jobSpec, HyracksClient hyracksClient) {
-        this.spec = jobSpec;
-        this.jobId = jobId;
-        this.hyracksClient = hyracksClient;
-    }
-
-    @Override
-    public float cleanupProgress() throws IOException {
-        return 0;
-    }
-
-    @Override
-    public Counters getCounters() throws IOException {
-        return new Counters();
-    }
-
-    @Override
-    public JobID getID() {
-        return new JobID(this.jobId.toString(), 1);
-    }
-
-    @Override
-    public String getJobFile() {
-        return "";
-    }
-
-    @Override
-    public String getJobID() {
-        return this.jobId.toString();
-    }
-
-    @Override
-    public String getJobName() {
-        return this.jobId.toString();
-    }
-
-    @Override
-    public int getJobState() throws IOException {
-        return isComplete() ? 2 : 1;
-    }
-
-    @Override
-    public TaskCompletionEvent[] getTaskCompletionEvents(int startFrom) throws IOException {
-        return new TaskCompletionEvent[0];
-    }
-
-    @Override
-    public String getTrackingURL() {
-        return " running on hyrax, remote kill is not supported ";
-    }
-
-    @Override
-    public boolean isComplete() throws IOException {
-        org.apache.hyracks.api.job.JobStatus status = null;
-        try {
-            status = hyracksClient.getJobStatus(jobId);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        return status.equals(org.apache.hyracks.api.job.JobStatus.TERMINATED);
-    }
-
-    @Override
-    public boolean isSuccessful() throws IOException {
-        return isComplete();
-    }
-
-    @Override
-    public void killJob() throws IOException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void killTask(String taskId, boolean shouldFail) throws IOException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public float mapProgress() throws IOException {
-        return 0;
-    }
-
-    @Override
-    public float reduceProgress() throws IOException {
-        return 0;
-    }
-
-    @Override
-    public void setJobPriority(String priority) throws IOException {
-
-    }
-
-    @Override
-    public float setupProgress() throws IOException {
-        return 0;
-    }
-
-    @Override
-    public void waitForCompletion() throws IOException {
-        while (!isComplete()) {
-            try {
-                Thread.sleep(5000);
-            } catch (InterruptedException ie) {
-            }
-        }
-    }
-
-    @Override
-    public String[] getTaskDiagnostics(TaskAttemptID arg0) throws IOException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public void killTask(TaskAttemptID arg0, boolean arg1) throws IOException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public Configuration getConfiguration() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public String getFailureInfo() throws IOException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public String getHistoryUrl() throws IOException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public JobStatus getJobStatus() throws IOException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public boolean isRetired() throws IOException {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-}
diff --git a/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/driver/CompatibilityLayer.java b/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/driver/CompatibilityLayer.java
deleted file mode 100644
index 87b0127..0000000
--- a/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/driver/CompatibilityLayer.java
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-package org.apache.hyracks.hadoop.compat.driver;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.Set;
-
-import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.mapred.JobConf;
-import org.kohsuke.args4j.CmdLineParser;
-
-import org.apache.hyracks.api.job.JobId;
-import org.apache.hyracks.api.job.JobSpecification;
-import org.apache.hyracks.hadoop.compat.client.HyracksClient;
-import org.apache.hyracks.hadoop.compat.client.HyracksRunningJob;
-import org.apache.hyracks.hadoop.compat.util.CompatibilityConfig;
-import org.apache.hyracks.hadoop.compat.util.ConfigurationConstants;
-import org.apache.hyracks.hadoop.compat.util.DCacheHandler;
-import org.apache.hyracks.hadoop.compat.util.HadoopAdapter;
-import org.apache.hyracks.hadoop.compat.util.Utilities;
-
-public class CompatibilityLayer {
-
-    HyracksClient hyracksClient;
-    DCacheHandler dCacheHander = null;
-    Properties clusterConf;
-    HadoopAdapter hadoopAdapter;
-
-    private static char configurationFileDelimiter = '=';
-    private static final String dacheKeyPrefix = "dcache.key";
-
-    public CompatibilityLayer(CompatibilityConfig clConfig) throws Exception {
-        initialize(clConfig);
-    }
-
-    private void initialize(CompatibilityConfig clConfig) throws Exception {
-        clusterConf = Utilities.getProperties(clConfig.clusterConf, configurationFileDelimiter);
-        hadoopAdapter = new HadoopAdapter(clusterConf.getProperty(ConfigurationConstants.namenodeURL));
-        hyracksClient = new HyracksClient(clusterConf);
-        dCacheHander = new DCacheHandler(clusterConf.getProperty(ConfigurationConstants.dcacheServerConfiguration));
-    }
-
-    public HyracksRunningJob submitJob(JobConf conf, Set<String> userLibs) throws Exception {
-        List<JobConf> jobConfs = new ArrayList<JobConf>();
-        jobConfs.add(conf);
-        String applicationName = conf.getJobName() + System.currentTimeMillis();
-        JobSpecification spec = hadoopAdapter.getJobSpecification(jobConfs);
-        HyracksRunningJob hyracksRunningJob = hyracksClient.submitJob(applicationName, spec, userLibs);
-        return hyracksRunningJob;
-    }
-
-    public HyracksRunningJob submitJobs(String applicationName, String[] jobFiles, Set<String> userLibs)
-            throws Exception {
-        List<JobConf> jobConfs = constructHadoopJobConfs(jobFiles);
-        populateDCache(jobFiles[0]);
-        JobSpecification spec = hadoopAdapter.getJobSpecification(jobConfs);
-        HyracksRunningJob hyracksRunningJob = hyracksClient.submitJob(applicationName, spec, userLibs);
-        return hyracksRunningJob;
-    }
-
-    public HyracksRunningJob submitJobs(String applicationName, String[] jobFiles) throws Exception {
-        List<JobConf> jobConfs = constructHadoopJobConfs(jobFiles);
-        populateDCache(jobFiles[0]);
-        JobSpecification spec = hadoopAdapter.getJobSpecification(jobConfs);
-        HyracksRunningJob hyracksRunningJob = hyracksClient.submitJob(applicationName, spec);
-        return hyracksRunningJob;
-    }
-
-    private void populateDCache(String jobFile) throws IOException {
-        Map<String, String> dcacheTasks = preparePreLaunchDCacheTasks(jobFile);
-        String tempDir = "/tmp";
-        if (dcacheTasks.size() > 0) {
-            for (String key : dcacheTasks.keySet()) {
-                String destPath = tempDir + "/" + key + System.currentTimeMillis();
-                hadoopAdapter.getHDFSClient().copyToLocalFile(new Path(dcacheTasks.get(key)), new Path(destPath));
-                System.out.println(" source :" + dcacheTasks.get(key));
-                System.out.println(" dest :" + destPath);
-                System.out.println(" key :" + key);
-                System.out.println(" value :" + destPath);
-                dCacheHander.put(key, destPath);
-            }
-        }
-    }
-
-    private String getApplicationNameForHadoopJob(JobConf jobConf) {
-        String jar = jobConf.getJar();
-        if (jar != null) {
-            return jar.substring(jar.lastIndexOf("/") >= 0 ? jar.lastIndexOf("/") + 1 : 0);
-        } else {
-            return "" + System.currentTimeMillis();
-        }
-    }
-
-    private Map<String, String> initializeCustomProperties(Properties properties, String prefix) {
-        Map<String, String> foundProperties = new HashMap<String, String>();
-        Set<Entry<Object, Object>> entrySet = properties.entrySet();
-        for (Entry entry : entrySet) {
-            String key = (String) entry.getKey();
-            String value = (String) entry.getValue();
-            if ((key.startsWith(prefix))) {
-                String actualKey = key.substring(prefix.length() + 1); // "cut off '<prefix>.' from the beginning"
-                foundProperties.put(actualKey, value);
-            }
-        }
-        return foundProperties;
-    }
-
-    public Map<String, String> preparePreLaunchDCacheTasks(String jobFile) {
-        Properties jobProperties = Utilities.getProperties(jobFile, ',');
-        Map<String, String> dcacheTasks = new HashMap<String, String>();
-        Map<String, String> dcacheKeys = initializeCustomProperties(jobProperties, dacheKeyPrefix);
-        for (String key : dcacheKeys.keySet()) {
-            String sourcePath = dcacheKeys.get(key);
-            if (sourcePath != null) {
-                dcacheTasks.put(key, sourcePath);
-            }
-        }
-        return dcacheTasks;
-    }
-
-    public void waitForCompletion(JobId jobId) throws Exception {
-        hyracksClient.waitForCompleton(jobId);
-    }
-
-    private List<JobConf> constructHadoopJobConfs(String[] jobFiles) throws Exception {
-        List<JobConf> jobConfs = new ArrayList<JobConf>();
-        for (String jobFile : jobFiles) {
-            jobConfs.add(constructHadoopJobConf(jobFile));
-        }
-        return jobConfs;
-    }
-
-    private JobConf constructHadoopJobConf(String jobFile) {
-        Properties jobProperties = Utilities.getProperties(jobFile, '=');
-        JobConf conf = new JobConf(hadoopAdapter.getConf());
-        for (Entry entry : jobProperties.entrySet()) {
-            conf.set((String) entry.getKey(), (String) entry.getValue());
-            System.out.println((String) entry.getKey() + " : " + (String) entry.getValue());
-        }
-        return conf;
-    }
-
-    private String[] getJobs(CompatibilityConfig clConfig) {
-        return clConfig.jobFiles == null ? new String[0] : clConfig.jobFiles.split(",");
-    }
-
-    public static void main(String args[]) throws Exception {
-        long startTime = System.nanoTime();
-        CompatibilityConfig clConfig = new CompatibilityConfig();
-        CmdLineParser cp = new CmdLineParser(clConfig);
-        try {
-            cp.parseArgument(args);
-        } catch (Exception e) {
-            System.err.println(e.getMessage());
-            cp.printUsage(System.err);
-            return;
-        }
-        CompatibilityLayer compatLayer = new CompatibilityLayer(clConfig);
-        String applicationName = clConfig.applicationName;
-        String[] jobFiles = compatLayer.getJobs(clConfig);
-        String[] userLibraries = null;
-        if (clConfig.userLibs != null) {
-            userLibraries = clConfig.userLibs.split(",");
-        }
-        try {
-            HyracksRunningJob hyraxRunningJob = null;
-            if (userLibraries != null) {
-                Set<String> userLibs = new HashSet<String>();
-                for (String userLib : userLibraries) {
-                    userLibs.add(userLib);
-                }
-                hyraxRunningJob = compatLayer.submitJobs(applicationName, jobFiles, userLibs);
-            } else {
-                hyraxRunningJob = compatLayer.submitJobs(applicationName, jobFiles);
-            }
-            compatLayer.waitForCompletion(hyraxRunningJob.getJobId());
-            long end_time = System.nanoTime();
-            System.out.println("TOTAL TIME (from Launch to Completion):"
-                    + ((end_time - startTime) / (float) 1000000000.0) + " seconds.");
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw e;
-        }
-    }
-}
diff --git a/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/util/CompatibilityConfig.java b/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/util/CompatibilityConfig.java
deleted file mode 100644
index fb4b607..0000000
--- a/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/util/CompatibilityConfig.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-package org.apache.hyracks.hadoop.compat.util;
-
-import org.kohsuke.args4j.Option;
-
-public class CompatibilityConfig {
-
-	@Option(name = "-cluster", required = true, usage = "Defines the path to the configuration file that provides the following info: +"
-			+ " (1) Address of HyracksClusterController service"
-			+ " (2) Address of Hadoop namenode service")
-	public String clusterConf;
-
-	@Option(name = "-jobFiles", usage = "Comma separated list of jobFiles. "
-			+ "Each job file defines the hadoop job + "
-			+ "The order in the list defines the sequence in which"
-			+ "the jobs are to be executed")
-	public String jobFiles;
-
-	@Option(name = "-applicationName", usage = " The application as part of which the job executes")
-	public String applicationName;
-
-	@Option(name = "-userLibs", usage = " A comma separated list of jar files that are required to be addedd to classpath when running ")
-	public String userLibs;
-}
diff --git a/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/util/ConfigurationConstants.java b/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/util/ConfigurationConstants.java
deleted file mode 100644
index 88cef77..0000000
--- a/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/util/ConfigurationConstants.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-package org.apache.hyracks.hadoop.compat.util;
-
-public class ConfigurationConstants {
-
-    public static final String clusterControllerHost = "clusterControllerHost";
-    public static final String namenodeURL = "fs.default.name";
-    public static final String dcacheServerConfiguration = "dcacheServerConfiguration";
-    public static final String[] systemLibs = new String[] { "hyracksDataflowStdLib", "hyracksDataflowCommonLib",
-            "hyracksDataflowHadoopLib", "hadoopCoreLib"};
-
-}
diff --git a/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/util/DCacheHandler.java b/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/util/DCacheHandler.java
deleted file mode 100644
index 39a43fc..0000000
--- a/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/util/DCacheHandler.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-package org.apache.hyracks.hadoop.compat.util;
-
-import java.io.IOException;
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-import edu.uci.ics.dcache.client.DCacheClient;
-import edu.uci.ics.dcache.client.DCacheClientConfig;
-
-public class DCacheHandler {
-
-    String clientPropertyFile;
-    String key;
-    String valueFilePath;
-
-    public enum Operation {
-        GET,
-        PUT,
-        DELETE
-    }
-
-    private static DCacheClient dCacheClient;
-    private static final String[] operations = { "GET", "PUT", "DELETE" };
-
-    public DCacheHandler(String clientPropertyFile) throws Exception {
-        this.clientPropertyFile = clientPropertyFile;
-        init();
-    }
-
-    private void init() throws Exception {
-        dCacheClient = DCacheClient.get();
-        DCacheClientConfig dcacheClientConfig = new DCacheClientConfig();
-        dCacheClient.init(dcacheClientConfig);
-    }
-
-    public static DCacheClient getInstance(String clientPropertyFile) {
-        if (dCacheClient == null) {
-            dCacheClient = DCacheClient.get();
-        }
-        return dCacheClient;
-    }
-
-    public String getClientPropertyFile() {
-        return clientPropertyFile;
-    }
-
-    public void put(String key, String value) throws IOException {
-        dCacheClient.set(key, value);
-        System.out.println(" added to cache " + key + " : " + value);
-    }
-
-    public Object get(String key) throws IOException {
-        return dCacheClient.get(key);
-    }
-
-    public void delete(String key) throws IOException {
-        dCacheClient.delete(key);
-    }
-
-    public Object performOperation(String operation, String[] args) throws Exception {
-        Object returnValue = null;
-        int operationIndex = getOperation(operation);
-        switch (operationIndex) {
-            case 0:
-                returnValue = dCacheClient.get(args[2]);
-                System.out.println(" get from cache " + returnValue);
-                break;
-            case 1:
-                dCacheClient.set(args[2], args[3]);
-                System.out.println(" added to cache " + args[2] + " : " + args[3]);
-                break;
-            case 2:
-                dCacheClient.delete(args[2]);
-                System.out.println(" removed from cache " + args[2]);
-                break;
-            default:
-                System.out.println("Error : Operation not supported !");
-                break;
-        }
-        return returnValue;
-    }
-
-    private int getOperation(String operation) {
-        for (int i = 0; i < operations.length; i++) {
-            if (operations[i].equalsIgnoreCase(operation)) {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-}
diff --git a/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/util/HadoopAdapter.java b/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/util/HadoopAdapter.java
deleted file mode 100644
index d2f9c19..0000000
--- a/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/util/HadoopAdapter.java
+++ /dev/null
@@ -1,427 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-package org.apache.hyracks.hadoop.compat.util;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.HashMap;
-
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.hdfs.protocol.ClientProtocol;
-import org.apache.hadoop.io.RawComparator;
-import org.apache.hadoop.io.Writable;
-import org.apache.hadoop.io.WritableComparable;
-import org.apache.hadoop.io.WritableComparator;
-import org.apache.hadoop.ipc.RPC;
-import org.apache.hadoop.ipc.VersionedProtocol;
-import org.apache.hadoop.mapred.InputFormat;
-import org.apache.hadoop.mapred.InputSplit;
-import org.apache.hadoop.mapred.JobConf;
-import org.apache.hadoop.mapred.Partitioner;
-import org.apache.hadoop.mapred.JobContext;
-import org.apache.hadoop.mapred.JobContextImpl;
-import org.apache.hadoop.util.ReflectionUtils;
-
-import org.apache.hyracks.api.constraints.PartitionConstraintHelper;
-import org.apache.hyracks.api.dataflow.IConnectorDescriptor;
-import org.apache.hyracks.api.dataflow.IOperatorDescriptor;
-import org.apache.hyracks.api.dataflow.OperatorDescriptorId;
-import org.apache.hyracks.api.dataflow.value.IBinaryComparatorFactory;
-import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
-import org.apache.hyracks.api.dataflow.value.ITuplePartitionComputerFactory;
-import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
-import org.apache.hyracks.api.job.IConnectorDescriptorRegistry;
-import org.apache.hyracks.api.job.IOperatorDescriptorRegistry;
-import org.apache.hyracks.api.job.JobSpecification;
-import org.apache.hyracks.dataflow.hadoop.HadoopMapperOperatorDescriptor;
-import org.apache.hyracks.dataflow.hadoop.HadoopReducerOperatorDescriptor;
-import org.apache.hyracks.dataflow.hadoop.HadoopWriteOperatorDescriptor;
-import org.apache.hyracks.dataflow.hadoop.data.HadoopHashTuplePartitionComputerFactory;
-import org.apache.hyracks.dataflow.hadoop.data.HadoopPartitionerTuplePartitionComputerFactory;
-import org.apache.hyracks.dataflow.hadoop.data.WritableComparingBinaryComparatorFactory;
-import org.apache.hyracks.dataflow.hadoop.util.ClasspathBasedHadoopClassFactory;
-import org.apache.hyracks.dataflow.hadoop.util.DatatypeHelper;
-import org.apache.hyracks.dataflow.hadoop.util.IHadoopClassFactory;
-import org.apache.hyracks.dataflow.std.connectors.MToNPartitioningConnectorDescriptor;
-import org.apache.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor;
-import org.apache.hyracks.dataflow.std.sort.ExternalSortOperatorDescriptor;
-import org.apache.hyracks.dataflow.std.sort.InMemorySortOperatorDescriptor;
-
-public class HadoopAdapter {
-
-	public static final String FS_DEFAULT_NAME = "fs.default.name";
-	private JobConf jobConf;
-	private Map<OperatorDescriptorId, Integer> operatorInstanceCount = new HashMap<OperatorDescriptorId, Integer>();
-	public static final String HYRACKS_EX_SORT_FRAME_LIMIT = "HYRACKS_EX_SORT_FRAME_LIMIT";
-	public static final int DEFAULT_EX_SORT_FRAME_LIMIT = 4096;
-	public static final int DEFAULT_MAX_MAPPERS = 40;
-	public static final int DEFAULT_MAX_REDUCERS = 40;
-	public static final String MAX_MAPPERS_KEY = "maxMappers";
-	public static final String MAX_REDUCERS_KEY = "maxReducers";
-	public static final String EX_SORT_FRAME_LIMIT_KEY = "sortFrameLimit";
-
-	private int maxMappers = DEFAULT_MAX_MAPPERS;
-	private int maxReducers = DEFAULT_MAX_REDUCERS;
-	private int exSortFrame = DEFAULT_EX_SORT_FRAME_LIMIT;
-
-	class NewHadoopConstants {
-		public static final String INPUT_FORMAT_CLASS_ATTR = "mapreduce.inputformat.class";
-		public static final String MAP_CLASS_ATTR = "mapreduce.map.class";
-		public static final String COMBINE_CLASS_ATTR = "mapreduce.combine.class";
-		public static final String REDUCE_CLASS_ATTR = "mapreduce.reduce.class";
-		public static final String OUTPUT_FORMAT_CLASS_ATTR = "mapreduce.outputformat.class";
-		public static final String PARTITIONER_CLASS_ATTR = "mapreduce.partitioner.class";
-	}
-
-	public HadoopAdapter(String namenodeUrl) {
-		jobConf = new JobConf(true);
-		jobConf.set(FS_DEFAULT_NAME, namenodeUrl);
-		if (System.getenv(MAX_MAPPERS_KEY) != null) {
-			maxMappers = Integer.parseInt(System.getenv(MAX_MAPPERS_KEY));
-		}
-		if (System.getenv(MAX_REDUCERS_KEY) != null) {
-			maxReducers = Integer.parseInt(System.getenv(MAX_REDUCERS_KEY));
-		}
-		if (System.getenv(EX_SORT_FRAME_LIMIT_KEY) != null) {
-			exSortFrame = Integer.parseInt(System
-					.getenv(EX_SORT_FRAME_LIMIT_KEY));
-		}
-	}
-
-	private String getEnvironmentVariable(String key, String def) {
-		String ret = System.getenv(key);
-		return ret != null ? ret : def;
-	}
-
-	public JobConf getConf() {
-		return jobConf;
-	}
-	//TODO: Why is there now a type mismatch? Why does a bounded wildcard fix it?
-	public static VersionedProtocol getProtocol(Class<? extends VersionedProtocol> protocolClass,
-			InetSocketAddress inetAddress, JobConf jobConf) throws IOException {
-		VersionedProtocol versionedProtocol = RPC.getProxy(protocolClass,
-				ClientProtocol.versionID, inetAddress, jobConf);
-		return versionedProtocol;
-	}
-
-	private static RecordDescriptor getHadoopRecordDescriptor(
-			String className1, String className2) {
-		RecordDescriptor recordDescriptor = null;
-		try {
-			recordDescriptor = DatatypeHelper.createKeyValueRecordDescriptor(
-					(Class<? extends Writable>) Class.forName(className1),
-					(Class<? extends Writable>) Class.forName(className2));
-		} catch (ClassNotFoundException cnfe) {
-			cnfe.printStackTrace();
-		}
-		return recordDescriptor;
-	}
-
-	private Object[] getInputSplits(JobConf conf) throws IOException,
-			ClassNotFoundException, InterruptedException {
-		if (conf.getUseNewMapper()) {
-			return getNewInputSplits(conf);
-		} else {
-			return getOldInputSplits(conf);
-		}
-	}
-
-	private org.apache.hadoop.mapreduce.InputSplit[] getNewInputSplits(
-			JobConf conf) throws ClassNotFoundException, IOException,
-			InterruptedException {
-		org.apache.hadoop.mapreduce.InputSplit[] splits = null;
-		JobContext context = new JobContextImpl(conf, null);
-		org.apache.hadoop.mapreduce.InputFormat inputFormat = ReflectionUtils
-				.newInstance(context.getInputFormatClass(), conf);
-		List<org.apache.hadoop.mapreduce.InputSplit> inputSplits = inputFormat
-				.getSplits(context);
-		return inputSplits
-				.toArray(new org.apache.hadoop.mapreduce.InputSplit[] {});
-	}
-
-	private InputSplit[] getOldInputSplits(JobConf conf) throws IOException {
-		InputFormat inputFormat = conf.getInputFormat();
-		return inputFormat.getSplits(conf, conf.getNumMapTasks());
-	}
-
-	private void configurePartitionCountConstraint(JobSpecification spec,
-			IOperatorDescriptor operator, int instanceCount) {
-		PartitionConstraintHelper.addPartitionCountConstraint(spec, operator,
-				instanceCount);
-		operatorInstanceCount.put(operator.getOperatorId(), instanceCount);
-	}
-
-	public HadoopMapperOperatorDescriptor getMapper(JobConf conf,
-			JobSpecification spec, IOperatorDescriptor previousOp)
-			throws Exception {
-		boolean selfRead = previousOp == null;
-		IHadoopClassFactory classFactory = new ClasspathBasedHadoopClassFactory();
-		HadoopMapperOperatorDescriptor mapOp = null;
-		if (selfRead) {
-			Object[] splits = getInputSplits(conf, maxMappers);
-			mapOp = new HadoopMapperOperatorDescriptor(spec, conf, splits,
-					classFactory);
-			configurePartitionCountConstraint(spec, mapOp, splits.length);
-		} else {
-			configurePartitionCountConstraint(spec, mapOp,
-					getInstanceCount(previousOp));
-			mapOp = new HadoopMapperOperatorDescriptor(spec, conf, classFactory);
-			spec.connect(new OneToOneConnectorDescriptor(spec), previousOp, 0,
-					mapOp, 0);
-		}
-		return mapOp;
-	}
-
-	public HadoopReducerOperatorDescriptor getReducer(JobConf conf,
-			IOperatorDescriptorRegistry spec, boolean useAsCombiner) {
-		HadoopReducerOperatorDescriptor reduceOp = new HadoopReducerOperatorDescriptor(
-				spec, conf, null, new ClasspathBasedHadoopClassFactory(),
-				useAsCombiner);
-		return reduceOp;
-	}
-
-	public FileSystem getHDFSClient() {
-		FileSystem fileSystem = null;
-		try {
-			fileSystem = FileSystem.get(jobConf);
-		} catch (IOException ioe) {
-			ioe.printStackTrace();
-		}
-		return fileSystem;
-	}
-
-	public JobSpecification getJobSpecification(List<JobConf> jobConfs)
-			throws Exception {
-		JobSpecification spec = null;
-		if (jobConfs.size() == 1) {
-			spec = getJobSpecification(jobConfs.get(0));
-		} else {
-			spec = getPipelinedSpec(jobConfs);
-		}
-		return spec;
-	}
-
-	private IOperatorDescriptor configureOutput(
-			IOperatorDescriptor previousOperator, JobConf conf,
-			JobSpecification spec) throws Exception {
-		int instanceCountPreviousOperator = operatorInstanceCount
-				.get(previousOperator.getOperatorId());
-		int numOutputters = conf.getNumReduceTasks() != 0 ? conf
-				.getNumReduceTasks() : instanceCountPreviousOperator;
-		HadoopWriteOperatorDescriptor writer = null;
-		writer = new HadoopWriteOperatorDescriptor(spec, conf, numOutputters);
-		configurePartitionCountConstraint(spec, writer, numOutputters);
-		spec.connect(new OneToOneConnectorDescriptor(spec), previousOperator,
-				0, writer, 0);
-		return writer;
-	}
-
-	private int getInstanceCount(IOperatorDescriptor operator) {
-		return operatorInstanceCount.get(operator.getOperatorId());
-	}
-
-	private IOperatorDescriptor addCombiner(
-			IOperatorDescriptor previousOperator, JobConf jobConf,
-			JobSpecification spec) throws Exception {
-		boolean useCombiner = (jobConf.getCombinerClass() != null);
-		IOperatorDescriptor mapSideOutputOp = previousOperator;
-		if (useCombiner) {
-			System.out.println("Using Combiner:"
-					+ jobConf.getCombinerClass().getName());
-			IOperatorDescriptor mapSideCombineSortOp = getExternalSorter(
-					jobConf, spec);
-			configurePartitionCountConstraint(spec, mapSideCombineSortOp,
-					getInstanceCount(previousOperator));
-
-			HadoopReducerOperatorDescriptor mapSideCombineReduceOp = getReducer(
-					jobConf, spec, true);
-			configurePartitionCountConstraint(spec, mapSideCombineReduceOp,
-					getInstanceCount(previousOperator));
-			spec.connect(new OneToOneConnectorDescriptor(spec),
-					previousOperator, 0, mapSideCombineSortOp, 0);
-			spec.connect(new OneToOneConnectorDescriptor(spec),
-					mapSideCombineSortOp, 0, mapSideCombineReduceOp, 0);
-			mapSideOutputOp = mapSideCombineReduceOp;
-		}
-		return mapSideOutputOp;
-	}
-
-	private int getNumReduceTasks(JobConf jobConf) {
-		int numReduceTasks = Math.min(maxReducers, jobConf.getNumReduceTasks());
-		return numReduceTasks;
-	}
-
-	private IOperatorDescriptor addReducer(
-			IOperatorDescriptor previousOperator, JobConf jobConf,
-			JobSpecification spec) throws Exception {
-		IOperatorDescriptor mrOutputOperator = previousOperator;
-		if (jobConf.getNumReduceTasks() != 0) {
-			IOperatorDescriptor sorter = getExternalSorter(jobConf, spec);
-			HadoopReducerOperatorDescriptor reducer = getReducer(jobConf, spec,
-					false);
-			int numReduceTasks = getNumReduceTasks(jobConf);
-			configurePartitionCountConstraint(spec, sorter, numReduceTasks);
-			configurePartitionCountConstraint(spec, reducer, numReduceTasks);
-
-			IConnectorDescriptor mToNConnectorDescriptor = getMtoNHashPartitioningConnector(
-					jobConf, spec);
-			spec.connect(mToNConnectorDescriptor, previousOperator, 0, sorter,
-					0);
-			spec.connect(new OneToOneConnectorDescriptor(spec), sorter, 0,
-					reducer, 0);
-			mrOutputOperator = reducer;
-		}
-		return mrOutputOperator;
-	}
-
-	private long getInputSize(Object[] splits, JobConf conf)
-			throws IOException, InterruptedException {
-		long totalInputSize = 0;
-		if (conf.getUseNewMapper()) {
-			for (org.apache.hadoop.mapreduce.InputSplit split : (org.apache.hadoop.mapreduce.InputSplit[]) splits) {
-				totalInputSize += split.getLength();
-			}
-		} else {
-			for (InputSplit split : (InputSplit[]) splits) {
-				totalInputSize += split.getLength();
-			}
-		}
-		return totalInputSize;
-	}
-
-	private Object[] getInputSplits(JobConf conf, int desiredMaxMappers)
-			throws Exception {
-		Object[] splits = getInputSplits(conf);
-		if (splits.length > desiredMaxMappers) {
-			long totalInputSize = getInputSize(splits, conf);
-			long goalSize = (totalInputSize / desiredMaxMappers);
-			conf.setLong("mapred.min.split.size", goalSize);
-			conf.setNumMapTasks(desiredMaxMappers);
-			splits = getInputSplits(conf);
-		}
-		return splits;
-	}
-
-	public JobSpecification getPipelinedSpec(List<JobConf> jobConfs)
-			throws Exception {
-		JobSpecification spec = new JobSpecification();
-		Iterator<JobConf> iterator = jobConfs.iterator();
-		JobConf firstMR = iterator.next();
-		IOperatorDescriptor mrOutputOp = configureMapReduce(null, spec, firstMR);
-		while (iterator.hasNext())
-			for (JobConf currentJobConf : jobConfs) {
-				mrOutputOp = configureMapReduce(mrOutputOp, spec,
-						currentJobConf);
-			}
-		configureOutput(mrOutputOp, jobConfs.get(jobConfs.size() - 1), spec);
-		return spec;
-	}
-
-	public JobSpecification getJobSpecification(JobConf conf) throws Exception {
-		JobSpecification spec = new JobSpecification();
-		IOperatorDescriptor mrOutput = configureMapReduce(null, spec, conf);
-		IOperatorDescriptor printer = configureOutput(mrOutput, conf, spec);
-		spec.addRoot(printer);
-		System.out.println(spec);
-		return spec;
-	}
-
-	private IOperatorDescriptor configureMapReduce(
-			IOperatorDescriptor previousOuputOp, JobSpecification spec,
-			JobConf conf) throws Exception {
-		IOperatorDescriptor mapper = getMapper(conf, spec, previousOuputOp);
-		IOperatorDescriptor mapSideOutputOp = addCombiner(mapper, conf, spec);
-		IOperatorDescriptor reducer = addReducer(mapSideOutputOp, conf, spec);
-		return reducer;
-	}
-
-	public static InMemorySortOperatorDescriptor getInMemorySorter(
-			JobConf conf, IOperatorDescriptorRegistry spec) {
-		InMemorySortOperatorDescriptor inMemorySortOp = null;
-		RecordDescriptor recordDescriptor = getHadoopRecordDescriptor(conf
-				.getMapOutputKeyClass().getName(), conf
-				.getMapOutputValueClass().getName());
-		Class<? extends RawComparator> rawComparatorClass = null;
-		WritableComparator writableComparator = WritableComparator.get(conf
-				.getMapOutputKeyClass().asSubclass(WritableComparable.class));
-		WritableComparingBinaryComparatorFactory comparatorFactory = new WritableComparingBinaryComparatorFactory(
-				writableComparator.getClass());
-		inMemorySortOp = new InMemorySortOperatorDescriptor(spec,
-				new int[] { 0 },
-				new IBinaryComparatorFactory[] { comparatorFactory },
-				recordDescriptor);
-		return inMemorySortOp;
-	}
-
-	public static ExternalSortOperatorDescriptor getExternalSorter(
-			JobConf conf, IOperatorDescriptorRegistry spec) {
-		ExternalSortOperatorDescriptor externalSortOp = null;
-		RecordDescriptor recordDescriptor = getHadoopRecordDescriptor(conf
-				.getMapOutputKeyClass().getName(), conf
-				.getMapOutputValueClass().getName());
-		Class<? extends RawComparator> rawComparatorClass = null;
-		WritableComparator writableComparator = WritableComparator.get(conf
-				.getMapOutputKeyClass().asSubclass(WritableComparable.class));
-		WritableComparingBinaryComparatorFactory comparatorFactory = new WritableComparingBinaryComparatorFactory(
-				writableComparator.getClass());
-		externalSortOp = new ExternalSortOperatorDescriptor(spec, conf.getInt(
-				HYRACKS_EX_SORT_FRAME_LIMIT, DEFAULT_EX_SORT_FRAME_LIMIT),
-				new int[] { 0 },
-				new IBinaryComparatorFactory[] { comparatorFactory },
-				recordDescriptor);
-		return externalSortOp;
-	}
-
-	public static MToNPartitioningConnectorDescriptor getMtoNHashPartitioningConnector(
-			JobConf conf, IConnectorDescriptorRegistry spec) {
-
-		Class mapOutputKeyClass = conf.getMapOutputKeyClass();
-		Class mapOutputValueClass = conf.getMapOutputValueClass();
-
-		MToNPartitioningConnectorDescriptor connectorDescriptor = null;
-		ITuplePartitionComputerFactory factory = null;
-		conf.getMapOutputKeyClass();
-		if (conf.getPartitionerClass() != null
-				&& !conf.getPartitionerClass().getName().startsWith(
-						"org.apache.hadoop")) {
-			Class<? extends Partitioner> partitioner = conf
-					.getPartitionerClass();
-			factory = new HadoopPartitionerTuplePartitionComputerFactory(
-					partitioner, DatatypeHelper
-							.createSerializerDeserializer(mapOutputKeyClass),
-					DatatypeHelper
-							.createSerializerDeserializer(mapOutputValueClass));
-		} else {
-			RecordDescriptor recordDescriptor = DatatypeHelper
-					.createKeyValueRecordDescriptor(mapOutputKeyClass,
-							mapOutputValueClass);
-			ISerializerDeserializer mapOutputKeySerializerDerserializer = DatatypeHelper
-					.createSerializerDeserializer(mapOutputKeyClass);
-			factory = new HadoopHashTuplePartitionComputerFactory(
-					mapOutputKeySerializerDerserializer);
-		}
-		connectorDescriptor = new MToNPartitioningConnectorDescriptor(spec,
-				factory);
-		return connectorDescriptor;
-	}
-
-}
diff --git a/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/util/Utilities.java b/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/util/Utilities.java
deleted file mode 100644
index 8f326b8..0000000
--- a/hyracks/hyracks-hadoop-compat/src/main/java/org/apache/hyracks/hadoop/compat/util/Utilities.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you 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.
- */
-package org.apache.hyracks.hadoop.compat.util;
-
-import java.io.BufferedReader;
-import java.io.DataInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.HashSet;
-import java.util.Properties;
-import java.util.Set;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-import org.apache.hadoop.mapred.InputSplit;
-import org.apache.hadoop.mapred.Reporter;
-import org.apache.hadoop.mapred.Counters.Counter;
-
-public class Utilities {
-
-    public static Properties getProperties(String filePath, char delimiter) {
-        Properties properties = new Properties();
-        try {
-            FileInputStream fins = new FileInputStream(new File(filePath));
-            DataInputStream dins = new DataInputStream(fins);
-            BufferedReader br = new BufferedReader(new InputStreamReader(dins));
-            String strLine;
-            while ((strLine = br.readLine()) != null) {
-                int split = strLine.indexOf(delimiter);
-                if (split >= 0) {
-                    properties.put((strLine.substring(0, split)).trim(), strLine.substring(split + 1, strLine.length())
-                            .trim());
-                }
-            }
-        } catch (IOException ioe) {
-            ioe.printStackTrace();
-        }
-        return properties;
-    }
-
-    public static File getHyracksArchive(String applicationName, Set<String> libJars) {
-       String target = applicationName + ".zip";
-        // Create a buffer for reading the files
-        byte[] buf = new byte[1024];
-        Set<String> fileNames = new HashSet<String>();
-        try {
-            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(target));
-            for (String libJar : libJars) {
-                String fileName = libJar.substring(libJar.lastIndexOf("/") + 1);
-                if(fileNames.contains(fileName)){
-                    continue;
-                }
-                FileInputStream in = new FileInputStream(libJar);
-                out.putNextEntry(new ZipEntry(fileName));
-                int len;
-                while ((len = in.read(buf)) > 0) {
-                    out.write(buf, 0, len);
-                }
-                out.closeEntry();
-                in.close();
-                fileNames.add(fileName);
-            }
-            out.close();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        File har = new File(target);
-        har.deleteOnExit();
-        return har;
-    }
-    
-    public static Reporter createReporter() {
-        Reporter reporter = new Reporter() {
-
-            @Override
-            public void progress() {
-
-            }
-
-            @Override
-            public void setStatus(String arg0) {
-
-            }
-
-            @Override
-            public void incrCounter(String arg0, String arg1, long arg2) {
-
-            }
-
-            @Override
-            public void incrCounter(Enum<?> arg0, long arg1) {
-
-            }
-
-            @Override
-            public InputSplit getInputSplit() throws UnsupportedOperationException {
-                return null;
-            }
-
-            @Override
-            public Counter getCounter(String arg0, String arg1) {
-                return null;
-            }
-
-            @Override
-            public Counter getCounter(Enum<?> arg0) {
-                return null;
-            }
-
-            @Override
-            public float getProgress() {
-                // TODO Auto-generated method stub
-                return 0f;
-            }
-        };
-        return reporter;
-    }
-}
diff --git a/hyracks/pom.xml b/hyracks/pom.xml
index 1e9b523..aa1ae28 100644
--- a/hyracks/pom.xml
+++ b/hyracks/pom.xml
@@ -92,7 +92,7 @@
     <module>hyracks-server</module>
     <module>hyracks-examples</module>
     <module>hyracks-documentation</module>
-    <module>hyracks-hadoop-compat</module>
+    <!--module>hyracks-hadoop-compat</module-->
     <module>hyracks-maven-plugins</module>
     <module>hyracks-hdfs</module>
     <module>hyracks-dist</module>
