  for I was come to the whole depth of my tale; and
  meant, indeed, to occupy the argument no longer.

ROMEO 
  Here's goodly gear!

  Enter Nurse and PETER
MERCUTIO 
  A sail, a sail!

BENVOLIO 
  Two, two; a shirt and a smock.

Nurse 
  Peter!

PETER 
  Anon!

Nurse 
  My fan, Peter.

MERCUTIO 
  Good Peter, to hide her face; for her fan's the
  fairer face.

Nurse 
  God ye good morrow, gentlemen.

MERCUTIO 
  God ye good den, fair gentlewoman.

Nurse 
  Is it good den?

MERCUTIO 
  'Tis no less, I tell you, for the bawdy hand of the
  dial is now upon the prick of noon.

Nurse 
  Out upon you! what a man are you!

ROMEO 
  One, gentlewoman, that God hath made for himself to
  mar.

Nurse 
  By my troth, it is well said; 'for himself to mar,'
  quoth a'? Gentlemen, can any of you tell me where I
  may find the young Romeo?

ROMEO 
  I can tell you; but young Romeo will be older when
  you have found him than he was when you sought him:
  I am the youngest of that name, for fault of a worse.

Nurse 
  You say well.

MERCUTIO 
  Yea, is the worst well? very well took, i' faith;
  wisely, wisely.

Nurse 
  if you be he, sir, I desire some confidence with
  you.

BENVOLIO 
  She will indite him to some supper.

MERCUTIO 
  A bawd, a bawd, a bawd! so ho!

ROMEO 
  What hast thou found?

MERCUTIO 
  No hare, sir; unless a hare, sir, in a lenten pie,
  that is something stale and hoar ere it be spent.

  Sings
  An old hare hoar,
  And an old hare hoar,
  Is very good meat in lent
  But a hare that is hoar
  Is too much for a score,
  When it hoars ere it be spent.
  Romeo, will you come to your father's? we'll
  to dinner, thither.

ROMEO 
  I will follow you.

MERCUTIO 
  Farewell, ancient lady; farewell,

  Singing
  'lady, lady, lady.'

  Exeunt MERCUTIO and BENVOLIO
Nurse 
  Marry, farewell! I pray you, sir, what saucy
  merchant was this, that was so full of his ropery?

ROMEO 
  A gentleman, nurse, that loves to hear himself talk,
  and will speak more in a minute than he will stand
  to in a month.

Nurse 
  An a' speak any thing against me, I'll take him
  down, an a' were lustier than he is, and twenty such
  Jacks; and if I cannot, I'll find those that shall.
  Scurvy knave! I am none of his flirt-gills; I am
  none of his skains-mates. And thou must stand by
  too, and suffer every knave to use me at his pleasure?

PETER 
  I saw no man use you a pleasure; if I had, my weapon
  should quickly have been out, I warrant you: I dare
  draw as soon as another man, if I see occasion in a
  good quarrel, and the law on my side.

Nurse 
  Now, afore God, I am so vexed, that every part about
  me quivers. Scurvy knave! Pray you, sir, a word:
  and as I told you, my young lady bade me inquire you
  out; what she bade me say, I will keep to myself:
  but first let me tell ye, if ye should lead her into
  a fool's paradise, as they say, it were a very gross
  kind of behavior, as they say: for the gentlewoman
  is young; and, therefore, if you should deal double
  with her, truly it were an ill thing to be offered
  to any gentlewoman, and very weak dealing.

ROMEO 
  Nurse, commend me to thy lady and mistress. I
  protest unto thee--

Nurse 
  Good heart, and, i' faith, I will tell her as much:
  Lord, Lord, she will be a joyful woman.

ROMEO 
  What wilt thou tell her, nurse? thou dost not mark me.

Nurse 
  I will tell her, sir, that you do protest; which, as
  I take it, is a gentlemanlike offer.

ROMEO 
  Bid her devise
  Some means to come to shrift this afternoon;
  And there she shall at Friar Laurence' cell
  Be shrived and married. Here is for thy pains.

Nurse 
  No truly sir; not a penny.

ROMEO 
  Go to; I say you shall.

Nurse 
  This afternoon, sir? well, she shall be there.

ROMEO 
  And stay, good nurse, behind the abbey wall:
  Within this hour my man shall be with thee
  And bring thee cords made like a tackled stair;
  Which to the high top-gallant of my joy
  Must be my convoy in the secret night.
  Farewell; be trusty, and I'll quit thy pains:
  Farewell; commend me to thy mistress.

Nurse 
  Now God in heaven bless thee! Hark you, sir.

ROMEO 
  What say'st thou, my dear nurse?

Nurse 
  Is your man secret? Did you ne'er hear say,
  Two may keep counsel, putting one away?

ROMEO 
  I warrant thee, my man's as true as steel.

NURSE 
  Well, sir; my mistress is the sweetest lady--Lord,
  Lord! when 'twas a little prating thing:--O, there
  is a nobleman in town, one Paris, that would fain
  lay knife aboard; but she, good soul, had as lief
  see a toad, a very toad, as see him. I anger her
  sometimes and tell her that Paris is the properer
  man; but, I'll warrant you, when I say so, she looks
  as pale as any clout in the versal world. Doth not
  rosemary and Romeo begin both with a letter?

ROMEO 
  Ay, nurse; what of that? both with an R.

Nurse 
  Ah. mocker! that's the dog's name; R is for
  the--No; I know it begins with some other
  letter:--and she hath the prettiest sententious of
  it, of you and rosemary, that it would do you good
  to hear it.

ROMEO 
  Commend me to thy lady.

Nurse 
  Ay, a thousand times.

  Exit Romeo
  Peter!

PETER 
  Anon!

Nurse 
  Peter, take my fan, and go before and apace.

  Exeunt
SCENE V. Capulet's orchard.
  Enter JULIET 
JULIET 
  The clock struck nine when I did send the nurse;
  In half an hour she promised to return.
  Perchance she cannot meet him: that's not so.
  O, she is lame! love's heralds should be thoughts,
  Which ten times faster glide than the sun's beams,
  Driving back shadows over louring hills:
  Therefore do nimble-pinion'd doves draw love,
  And therefore hath the wind-swift Cupid wings.
  Now is the sun upon the highmost hill
  Of this day's journey, and from nine till twelve
  Is three long hours, yet she is not come.
  Had she affections and warm youthful blood,
  She would be as swift in motion as a ball;
  My words would bandy her to my sweet love,
  And his to me:
  But old folks, many feign as they were dead;
  Unwieldy, slow, heavy and pale as lead.
  O God, she comes!

  Enter Nurse and PETER
  O honey nurse, what news?
  Hast thou met with him? Send thy man away.

Nurse 
  Peter, stay at the gate.

  Exit PETER
JULIET 
  Now, good sweet nurse,--O Lord, why look'st thou sad?
  Though news be sad, yet tell them merrily;
  If good, thou shamest the music of sweet news
  By playing it to me with so sour a face.

Nurse 
  I am a-weary, give me leave awhile:
  Fie, how my bones ache! what a jaunt have I had!

JULIET 
  I would thou hadst my bones, and I thy news:
  Nay, come, I pray thee, speak; good, good nurse, speak.

Nurse 
  Jesu, what haste? can you not stay awhile?
  Do you not see that I am out of breath?

JULIET 
  How art thou out of breath, when thou hast breath
  To say to me that thou art out of breath?
  The excuse that thou dost make in this delay
  Is longer than the tale thou dost excuse.
  Is thy news good, or bad? answer to that;
  Say either, and I'll stay the circumstance:
  Let me be satisfied, is't good or bad?

Nurse 
  Well, you have made a simple choice; you know not
  how to choose a man: Romeo! no, not he; though his
  face be better than any man's, yet his leg excels
  all men's; and for a hand, and a foot, and a body,
  though they be not to be talked on, yet they are
  past compare: he is not the flower of courtesy,
  but, I'll warrant him, as gentle as a lamb. Go thy
  ways, wench; serve God. What, have you dined at home?

JULIET 
  No, no: but all this did I know before.
  What says he of our marriage? what of that?

Nurse 
  Lord, how my head aches! what a head have I!
  It beats as it would fall in twenty pieces.
  My back o' t' other side,--O, my back, my back!
  Beshrew your heart for sending me about,
  To catch my death with jaunting up and down!

JULIET 
  I' faith, I am sorry that thou art not well.
  Sweet, sweet, sweet nurse, tell me, what says my love?

Nurse 
  Your love says, like an honest gentleman, and a
  courteous, and a kind, and a handsome, and, I
  warrant, a virtuous,--Where is your mother?

JULIET 
  Where is my mother! why, she is within;
  Where should she be? How oddly thou repliest!
  'Your love says, like an honest gentleman,
  Where is your mother?'

Nurse 
  O God's lady dear!
  Are you so hot? marry, come up, I trow;
  Is this the poultice for my aching bones?
  Henceforward do your messages yourself.

JULIET 
  Here's such a coil! come, what says Romeo?

Nurse 
  Have you got leave to go to shrift to-day?

JULIET 
  I have.

Nurse 
  Then hie you hence to Friar Laurence' cell;
  There stays a husband to make you a wife:
  Now comes the wanton blood up in your cheeks,
  They'll be in scarlet straight at any news.
  Hie you to church; I must another way,
  To fetch a ladder, by the which your love
  Must climb a bird's nest soon when it is dark:
  I am the drudge and toil in your delight,
  But you shall bear the burden soon at night.
  Go; I'll to dinner: hie you to the cell.

JULIET 
  Hie to high fortune! Honest nurse, farewell.

  Exeunt
SCENE VI. Friar Laurence's cell.
  Enter FRIAR LAURENCE and ROMEO 
FRIAR LAURENCE 
  So smile the heavens upon this holy act,
  That after hours with sorrow chide us not!

ROMEO 
  Amen, amen! but come what sorrow can,
  It cannot countervail the exchange of joy
  That one short minute gives me in her sight:
  Do thou but close our hands with holy words,
  Then love-devouring death do what he dare;
  It is enough I may but call her mine.

FRIAR LAURENCE 
  These violent delights have violent ends
  And in their triumph die, like fire and powder,
  Which as they kiss consume: the sweetest honey
  Is loathsome in his own deliciousness
  And in the taste confounds the appetite:
  Therefore love moderately; long love doth so;
  Too swift arrives as tardy as too slow.

  Enter JULIET
  Here comes the lady: O, so light a foot
  Will ne'er wear out the everlasting flint:
  A lover may bestride the gossamer
  That idles in the wanton summer air,
  And yet not fall; so light is vanity.

JULIET 
  Good even to my ghostly confessor.

FRIAR LAURENCE 
  Romeo shall thank thee, daughter, for us both.

JULIET 
  As much to him, else is his thanks too much.

ROMEO 
  Ah, Juliet, if the measure of thy joy
  Be heap'd like mine and that thy skill be more
  To blazon it, then sweeten with thy breath
  This neighbour air, and let rich music's tongue
  Unfold the imagined happiness that both
  Receive in either by this dear encounter.

JULIET 
  Conceit, more rich in matter than in words,
  Brags of his substance, not of ornament:
  They are but beggars that can count their worth;
  But my true love is grown to such excess
  I cannot sum up sum of half my wealth.

FRIAR LAURENCE 
  Come, come with me, and we will make short work;
  For, by your leaves, you shall not stay alone
  Till holy church incorporate two in one.

  Exeunt
ACT III
SCENE I. A public place.
  Enter MERCUTIO, BENVOLIO, Page, and Servants 
BENVOLIO 
  I pray thee, good Mercutio, let's retire:
  The day is hot, the Capulets abroad,
  And, if we meet, we shall not scape a brawl;
  For now, these hot days, is the mad blood stirring.

MERCUTIO 
  Thou art like one of those fellows that when he
  enters the confines of a tavern claps me his sword
  upon the table and says 'God send me no need of
  thee!' and by the operation of the second cup draws
  it on the drawer, when indeed there is no need.

BENVOLIO 
  Am I like such a fellow?

MERCUTIO 
  Come, come, thou art as hot a Jack in thy mood as
  any in Italy, and as soon moved to be moody, and as
  soon moody to be moved.

BENVOLIO 
  And what to?

MERCUTIO 
  Nay, an there were two such, we should have none
  shortly, for one would kill the other. Thou! why,
  thou wilt quarrel with a man that hath a hair more,
  or a hair less, in his beard, than thou hast: thou
  wilt quarrel with a man for cracking nuts, having no
  other reason but because thou hast hazel eyes: what
  eye but such an eye would spy out such a quarrel?
  Thy head is as fun of quarrels as an egg is full of
  meat, and yet thy head hath been beaten as addle as
  an egg for quarrelling: thou hast quarrelled with a
  man for coughing in the street, because he hath
  wakened thy dog that hath lain asleep in the sun:
  didst thou not fall out with a tailor for wearing
  his new doublet before Easter? with another, for
  tying his new shoes with old riband? and yet thou
  wilt tutor me from quarrelling!

BENVOLIO 
  An I were so apt to quarrel as thou art, any man
  should buy the fee-simple of my life for an hour and a quarter.

MERCUTIO 
  The fee-simple! O simple!

BENVOLIO 
  By my head, here come the Capulets.

MERCUTIO 
  By my heel, I care not.

  Enter TYBALT and others
TYBALT 
  Follow me close, for I will speak to them.
  Gentlemen, good den: a word with one of you.

MERCUTIO 
  And but one word with one of us? couple it with
  something; make it a word and a blow.

TYBALT 
  You shall find me apt enough to that, sir, an you
  will give me occasion.

MERCUTIO 
  Could you not take some occasion without giving?

TYBALT 
  Mercutio, thou consort'st with Romeo,--

MERCUTIO 
  Consort! what, dost thou make us minstrels? an
  thou make minstrels of us, look to hear nothing but
  discords: here's my fiddlestick; here's that shall
  make you dance. 'Zounds, consort!

BENVOLIO 
  We talk here in the public haunt of men:
  Either withdraw unto some private place,
  And reason coldly of your grievances,
  Or else depart; here all eyes gaze on us.

MERCUTIO 
  Men's eyes were made to look, and let them gaze;
  I will not budge for no man's pleasure, I.

  Enter ROMEO
TYBALT 
  Well, peace be with you, sir: here comes my man.

MERCUTIO 
  But I'll be hanged, sir, if he wear your livery:
  Marry, go before to field, he'll be your follower;
  Your worship in that sense may call him 'man.'

TYBALT 
  Romeo, the hate I bear thee can afford
  No better term than this,--thou art a villain.

ROMEO 
  Tybalt, the reason that I have to love thee
  Doth much excuse the appertaining rage
  To such a greeting: villain am I none;
  Therefore farewell; I see thou know'st me not.

TYBALT 
  Boy, this shall not excuse the injuries
  That thou hast done me; therefore turn and draw.

ROMEO 
  I do protest, I never injured thee,
  But love thee better than thou canst devise,
  Till thou shalt know the reason of my love:
  And so, good Capulet,--which name I tender
  As dearly as my own,--be satisfied.

MERCUTIO 
  O calm, dishonourable, vile submission!
  Alla stoccata carries it away.

  Draws
  Tybalt, you rat-catcher, will you walk?

TYBALT 
  What wouldst thou have with me?

MERCUTIO 
  Good king of cats, nothing but one of your nine
  lives; that I mean to make bold withal, and as you
  shall use me hereafter, drybeat the rest of the
  eight. Will you pluck your sword out of his pitcher
  by the ears? make haste, lest mine be about your
  ears ere it be out.

TYBALT 
  I am for you.

  Drawing
ROMEO 
  Gentle Mercutio, put thy rapier up.

MERCUTIO 
  Come, sir, your passado.

  They fight
ROMEO 
  Draw, Benvolio; beat down their weapons.
  Gentlemen, for shame, forbear this outrage!
  Tybalt, Mercutio, the prince expressly hath
  Forbidden bandying in Verona streets:
  Hold, Tybalt! good Mercutio!

  TYBALT under ROMEO's arm stabs MERCUTIO, and flies with his followers
MERCUTIO 
  I am hurt.
  A plague o' both your houses! I am sped.
  Is he gone, and hath nothing?

BENVOLIO 
  What, art thou hurt?

MERCUTIO 
  Ay, ay, a scratch, a scratch; marry, 'tis enough.
  Where is my page? Go, villain, fetch a surgeon.

  Exit Page
ROMEO 
  Courage, man; the hurt cannot be much.

MERCUTIO 
  No, 'tis not so deep as a well, nor so wide as a
  church-door; but 'tis enough,'twill serve: ask for
  me to-morrow, and you shall find me a grave man. I
  am peppered, I warrant, for this world. A plague o'
  both your houses! 'Zounds, a dog, a rat, a mouse, a
  cat, to scratch a man to death! a braggart, a
  rogue, a villain, that fights by the book of
  arithmetic! Why the devil came you between us? I
  was hurt under your arm.

ROMEO 
  I thought all for the best.

MERCUTIO 
  Help me into some house, Benvolio,
  Or I shall faint. A plague o' both your houses!
  They have made worms' meat of me: I have it,
  And soundly too: your houses!

  Exeunt MERCUTIO and BENVOLIO
ROMEO 
  This gentleman, the prince's near ally,
  My very friend, hath got his mortal hurt
  In my behalf; my reputation stain'd
  With Tybalt's slander,--Tybalt, that an hour
  Hath been my kinsman! O sweet Juliet,
  Thy beauty hath made me effeminate
  And in my temper soften'd valour's steel!

  Re-enter BENVOLIO
BENVOLIO 
  O Romeo, Romeo, brave Mercutio's dead!
  That gallant spirit hath aspired the clouds,
  Which too untimely here did scorn the earth.

ROMEO 
  This day's black fate on more days doth depend;
  This but begins the woe, others must end.

BENVOLIO 
  Here comes the furious Tybalt back again.

ROMEO 
  Alive, in triumph! and Mercutio slain!
  Away to heaven, respective lenity,
  And fire-eyed fury be my conduct now!

  Re-enter TYBALT
  Now, Tybalt, take the villain back again,
  That late thou gavest me; for Mercutio's soul
  Is but a little way above our heads,
  Staying for thine to keep him company:
  Either thou, or I, or both, must go with him.

TYBALT 
  Thou, wretched boy, that didst consort him here,
  Shalt with him hence.

ROMEO 
  This shall determine that.

  They fight; TYBALT falls
BENVOLIO 
  Romeo, away, be gone!
  The citizens are up, and Tybalt slain.
  Stand not amazed: the prince will doom thee death,
  If thou art taken: hence, be gone, away!

ROMEO 
  O, I am fortune's fool!

BENVOLIO 
  Why dost thou stay?

  Exit ROMEO
  Enter Citizens, & c
First Citizen 
  Which way ran he that kill'd Mercutio?
  Tybalt, that murderer, which way ran he?

BENVOLIO 
  There lies that Tybalt.

First Citizen 
  Up, sir, go with me;
  I charge thee in the princes name, obey.

  Enter Prince, attended; MONTAGUE, CAPULET, their Wives, and others
PRINCE 
  Where are the vile beginners of this fray?

BENVOLIO 
  O noble prince, I can discover all
  The unlucky manage of this fatal brawl:
  There lies the man, slain by young Romeo,
  That slew thy kinsman, brave Mercutio.

LADY CAPULET 
  Tybalt, my cousin! O my brother's child!
  O prince! O cousin! husband! O, the blood is spilt
  O my dear kinsman! Prince, as thou art true,
  For blood of ours, shed blood of Montague.
  O cousin, cousin!

PRINCE 
  Benvolio, who began this bloody fray?

BENVOLIO 
  Tybalt, here slain, whom Romeo's hand did slay;
  Romeo that spoke him fair, bade him bethink
  How nice the quarrel was, and urged withal
  Your high displeasure: all this uttered
  With gentle breath, calm look, knees humbly bow'd,
  Could not take truce with the unruly spleen
  Of Tybalt deaf to peace, but that he tilts
  With piercing steel at bold Mercutio's breast,
  Who all as hot, turns deadly point to point,
  And, with a martial scorn, with one hand beats
  Cold death aside, and with the other sends
  It back to Tybalt, whose dexterity,
  Retorts it: Romeo he cries aloud,
  'Hold, friends! friends, part!' and, swifter than
  his tongue,
  His agile arm beats down their fatal points,
  And 'twixt them rushes; underneath whose arm
  An envious thrust from Tybalt hit the life
  Of stout Mercutio, and then Tybalt fled;
  But by and by comes back to Romeo,
  Who had but newly entertain'd revenge,
  And to 't they go like lightning, for, ere I
  Could draw to part them, was stout Tybalt slain.
  And, as he fell, did Romeo turn and fly.
  This is the truth, or let Benvolio die.

LADY CAPULET 
  He is a kinsman to the Montague;
  Affection makes him false; he speaks not true:
  Some twenty of them fought in this black strife,
  And all those twenty could but kill one life.
  I beg for justice, which thou, prince, must give;
  Romeo slew Tybalt, Romeo must not live.

PRINCE 
  Romeo slew him, he slew Mercutio;
  Who now the price of his dear blood doth owe?

MONTAGUE 
  Not Romeo, prince, he was Mercutio's friend;
  His fault concludes but what the law should end,
  The life of Tybalt.

PRINCE 
  And for that offence
  Immediately we do exile him hence:
  I have an interest in your hate's proceeding,
  My blood for your rude brawls doth lie a-bleeding;
  But I'll amerce you with so strong a fine
  That you shall all repent the loss of mine:
  I will be deaf to pleading and excuses;
  Nor tears nor prayers shall purchase out abuses:
  Therefore use none: let Romeo hence in haste,
  Else, when he's found, that hour is his last.
  Bear hence this body and attend our will:
  Mercy but murders, pardoning those that kill.

  Exeunt
SCENE II. Capulet's orchard.
  Enter JULIET 
JULIET 
  Gallop apace, you fiery-footed steeds,
  Towards Phoebus' lodging: such a wagoner
  As Phaethon would whip you to the west,
  And bring in cloudy night immediately.
  Spread thy close curtain, love-performing night,
  That runaway's eyes may wink and Romeo
  Leap to these arms, untalk'd of and unseen.
  Lovers can see to do their amorous rites
  By their own beauties; or, if love be blind,
  It best agrees with night. Come, civil night,
  Thou sober-suited matron, all in black,
  And learn me how to lose a winning match,
  Play'd for a pair of stainless maidenhoods:
  Hood my unmann'd blood, bating in my cheeks,
  With thy black mantle; till strange love, grown bold,
  Think true love acted simple modesty.
  Come, night; come, Romeo; come, thou day in night;
  For thou wilt lie upon the wings of night
  Whiter than new snow on a raven's back.
  Come, gentle night, come, loving, black-brow'd night,
  Give me my Romeo; and, when he shall die,
  Take him and cut him out in little stars,
  And he will make the face of heaven so fine
  That all the world will be in love with night
  And pay no worship to the garish sun.
  O, I have bought the mansion of a love,
  But not possess'd it, and, though I am sold,
  Not yet enjoy'd: so tedious is this day
  As is the night before some festival
  To an impatient child that hath new robes
  And may not wear them. O, here comes my nurse,
  And she brings news; and every tongue that speaks
  But Romeo's name speaks heavenly eloquence.

  Enter Nurse, with cords
  Now, nurse, what news? What hast thou there? the cords
  That Romeo bid thee fetch?

Nurse 
  Ay, ay, the cords.

  Throws them down
JULIET 
  Ay me! what news? why dost thou wring thy hands?

Nurse 
  Ah, well-a-day! he's dead, he's dead, he's dead!
  We are undone, lady, we are undone!
  Alack the day! he's gone, he's kill'd, he's dead!

JULIET 
  Can heaven be so envious?

Nurse 
  Romeo can,
  Though heaven cannot: O Romeo, Romeo!
  Who ever would have thought it? Romeo!

JULIET 
  What devil art thou, that dost torment me thus?
  This torture should be roar'd in dismal hell.
  Hath Romeo slain himself? say thou but 'I,'
  And that bare vowel 'I' shall poison more
  Than the death-darting eye of cockatrice:
  I am not I, if there be such an I;
  Or those eyes shut, that make thee answer 'I.'
  If he be slain, say 'I'; or if not, no:
  Brief sounds determine of my weal or woe.

Nurse 
  I saw the wound, I saw it with mine eyes,--
  God save the mark!--here on his manly breast:
  A piteous corse, a bloody piteous corse;
  Pale, pale as ashes, all bedaub'd in blood,
  All in gore-blood; I swounded at the sight.

JULIET 
  O, break, my heart! poor bankrupt, break at once!
  To prison, eyes, ne'er look on liberty!
  Vile earth, to earth resign; end motion here;
  And thou and Romeo press one heavy bier!

Nurse 
  O Tybalt, Tybalt, the best friend I had!
  O courteous Tybalt! honest gentleman!
  That ever I should live to see thee dead!

JULIET 
  What storm is this that blows so contrary?
  Is Romeo slaughter'd, and is Tybalt dead?
  My dear-loved cousin, and my dearer lord?
  Then, dreadful trumpet, sound the general doom!
  For who is living, if those two are gone?

Nurse 
  Tybalt is gone, and Romeo banished;
  Romeo that kill'd him, he is banished.

JULIET 
  O God! did Romeo's hand shed Tybalt's blood?

Nurse 
  It did, it did; alas the day, it did!

JULIET 
  O serpent heart, hid with a flowering face!
  Did ever dragon keep so fair a cave?
  Beautiful tyrant! fiend angelical!
  Dove-feather'd raven! wolvish-ravening lamb!
  Despised substance of divinest show!
  Just opposite to what thou justly seem'st,
  A damned saint, an honourable villain!
  O nature, what hadst thou to do in hell,
  When thou didst bower the spirit of a fiend
  In moral paradise of such sweet flesh?
  Was ever book containing such vile matter
  So fairly bound? O that deceit should dwell
  In such a gorgeous palace!

Nurse 
  There's no trust,
  No faith, no honesty in men; all perjured,
  All forsworn, all naught, all dissemblers.
  Ah, where's my man? give me some aqua vitae:
  These griefs, these woes, these sorrows make me old.
  Shame come to Romeo!

JULIET 
  Blister'd be thy tongue
  For such a wish! he was not born to shame:
  Upon his brow shame is ashamed to sit;
  For 'tis a throne where honour may be crown'd
  Sole monarch of the universal earth.
  O, what a beast was I to chide at him!

Nurse 
  Will you speak well of him that kill'd your cousin?

JULIET 
  Shall I speak ill of him that is my husband?
  Ah, poor my lord, what tongue shall smooth thy name,
  When I, thy three-hours wife, have mangled it?
  But, wherefore, villain, didst thou kill my cousin?
  That villain cousin would have kill'd my husband:
  Back, foolish tears, back to your native spring;
  Your tributary drops belong to woe,
  Which you, mistaking, offer up to joy.
  My husband lives, that Tybalt would have slain;
  And Tybalt's dead, that would have slain my husband:
  All this is comfort; wherefore weep I then?
  Some word there was, worser than Tybalt's death,
  That murder'd me: I would forget it fain;
  But, O, it presses to my memory,
  Like damned guilty deeds to sinners' minds:
  'Tybalt is dead, and Romeo--banished;'
  That 'banished,' that one word 'banished,'
  Hath slain ten thousand Tybalts. Tybalt's death
  Was woe enough, if it had ended there:
  Or, if sour woe delights in fellowship
  And needly will be rank'd with other griefs,
  Why follow'd not, when she said 'Tybalt's dead,'
  Thy father, or thy mother, nay, or both,
  Which modern lamentations might have moved?
  But with a rear-ward following Tybalt's death,
  'Romeo is banished,' to speak that word,
  Is father, mother, Tybalt, Romeo, Juliet,
  All slain, all dead. 'Romeo is banished!'
  There is no end, no limit, measure, bound,
  In that word's death; no words can that woe sound.
  Where is my father, and my mother, nurse?

Nurse 
  Weeping and wailing over Tybalt's corse:
  Will you go to them? I will bring you thither.

JULIET 
  Wash they his wounds with tears: mine shall be spent,
  When theirs are dry, for Romeo's banishment.
  Take up those cords: poor ropes, you are beguiled,
  Both you and I; for Romeo is exiled:
  He made you for a highway to my bed;
  But I, a maid, die maiden-widowed.
  Come, cords, come, nurse; I'll to my wedding-bed;
  And death, not Romeo, take my maidenhead!

Nurse 
  Hie to your chamber: I'll find Romeo
  To comfort you: I wot well where he is.
  Hark ye, your Romeo will be here at night:
  I'll to him; he is hid at Laurence' cell.

JULIET 
  O, find him! give this ring to my true knight,
  And bid him come to take his last farewell.

  Exeunt
SCENE III. Friar Laurence's cell.
  Enter FRIAR LAURENCE 
FRIAR LAURENCE 
  Romeo, come forth; come forth, thou fearful man:
  Affliction is enamour'd of thy parts,
  And thou art wedded to calamity.

  Enter ROMEO
ROMEO 
  Father, what news? what is the prince's doom?
  What sorrow craves acquaintance at my hand,
  That I yet know not?

FRIAR LAURENCE 
  Too familiar
  Is my dear son with such sour company:
  I bring thee tidings of the prince's doom.

ROMEO 
  What less than dooms-day is the prince's doom?

FRIAR LAURENCE 
  A gentler judgment vanish'd from his lips,
  Not body's death, but body's banishment.

ROMEO 
  Ha, banishment! be merciful, say 'death;'
  For exile hath more terror in his look,
  Much more than death: do not say 'banishment.'

FRIAR LAURENCE 
  Hence from Verona art thou banished:
  Be patient, for the world is broad and wide.

ROMEO 
  There is no world without Verona walls,
  But purgatory, torture, hell itself.
  Hence-banished is banish'd from the world,
  And world's exile is death: then banished,
  Is death mis-term'd: calling death banishment,
  Thou cutt'st my head off with a golden axe,
  And smilest upon the stroke that murders me.

FRIAR LAURENCE 
  O deadly sin! O rude unthankfulness!
  Thy fault our law calls death; but the kind prince,
  Taking thy part, hath rush'd aside the law,
  And turn'd that black word death to banishment:
  This is dear mercy, and thou seest it not.

