Asserts: Proper Care and Feeding

Vocabulary

First off, we need to agree on a common vocabulary. Language is how we communicate, and it only works when we all agree to the same meaning for the words. Dictionary.com offers this as a defintion for assert: “to state with assurance, confidence, or force; state strongly or positively; affirm.” That’s good background information, but in the context of C++ we have a slightly more specific meaning. To avoid confusion when speaking to C++ programmers, we need look no further than <assert.h> for the definition we seek.

Simply put, assert is a macro which evaluates an expression and halts the program if the expression is false. The name of the file as well as the line number where the assert can be found are provided as output.

Yes you knew that already didn’t you? Of course you did. We all know what an assert is. Yet why do I keep hearing the phrase, “non-fatal assert?” We’ve agreed that an assert will halt the program. That’s what it does. So what would be the meaning of an assert that does not halt the program?

It is very reasonable to want to use some of the features of the assert macro for debugging purposes in a way that would not require the program to stop. Perhaps there is some sort of non-fatal glitch you want to monitor, but you don’t want to interfere with everyone else’s progress. You would like a macro that evaluates an expression and outputs the filename and line number if that expression is false but does not halt. This is a great idea. I would suggest that we refer to such conditions as warnings so that they are not confused with asserts.

Asserts are Not Break-Points

Where people start to really go wrong with their asserts is when they overuse them. Many years ago, I was working on a game with one other engineer - a perfectly competent one at that. One day a designers came to me because his game was crashing every time he tried to go to a particular area of the map - naturally the area where he was working that day. I tried it for myself and found that the crash he was experiencing was actually an assert. With only the 2 programmers on the team, it wasn’t too hard to find the right guy to ask about this. When I pointed it out to him, he replied, “Oh, that’s just there for debugging, you can go ahead and step over that.”

Seems he was looking for some sort of bug, and he was using asserts sprinkled all over to try to catch it. Clearly this bug wasn’t so severe that it was going to cause major problems without the assert because he had just told me to skip over the assert.

I should not have to say this, but this is not the correct way to use asserts. In this case, the programmer had managed to turn a minor bug into a progression-blocker that had already wasted multiple man-hours of designer time not to mention the time I had also wasted on it already.

Do all of your artists and designers run with debuggers open so they can “step-over” your asserts? Yeah mine don’t either. Do the other programmers on the team know which asserts are important and which are just your own personal experiment? How would they?

Do Not Allow Asserts to be Skipped

As I said, this example shows how the really catastrophic assert abuse gets started, but that’s only the beginning. What happens next goes something like this…

  1. There are asserts in the code which are otherwise non-fatal (such as in the above example).
  2. The rest of the team must not be blocked by innocuous asserts.
  3. We must therefore set up a way for asserts to be skipped-over!

Brilliant! Oh, and you thought you were a genius for coming up with that one first right? Well congratulations, you’ve just broken asserts. Once you implement this lovely new feature, asserts will immediately start becoming more and more useless.

Don’t agree? Here’s how it goes. Once asserts can be skipped over, they are no longer a progression blocker. This gives you a license to put asserts in wherever you want to with no worries that it will prevent anyone from getting their work done. So what happens next is asserts start going in where warnings belong. The team will start using asserts to warn artists and designers about mistakes they seem to have made:

assert(pFrog->pLilyPad);  // the frog must have a lily pad!
assert(hitPoints > 0);    // monsters must have hit points!
// make sure your triangle is not degenerate!
assert(vertex[0].x != vertex[1].x || vertex[1].x != vertex[2].x
|| vertex[0].y != vertex[1].y || vertex[1].y != vertex[2].y
|| vertex[0].z != vertex[1].z || vertex[1].z != vertex[2].z);

Ok so I made up the lily pad bit, but the degenerate triangle is one I’ve actually run across before.

Still don’t see the problem? The designers get warned every time they create a frog and forget to give him a lily pad. Sounds great right? In practice, you don’t have a serious problem yet. Like hair in your shower drain, it takes a while for the clog to really build up.

The way it happens is so simple, it’s almost hard to believe it could become a problem. One day an artist is working happily along and he gets an assert because some frog doesn’t have a lily pad. “Not my problem,” he says to himself. He quietly hits the “ignore it” button and moves on. And then he ignores the next one, and the next until before long, there are so many of them that he no longer even pays any attention to them at all. Now he will silently click right past the assert that was intended for him to see and take no action to fix it.

There’s a certain critical mass of error messages that gets reached at some point, and once you hit it, all error messages become just another line of spam to be ignored as they scroll past glazed-over eyes. This critical mass is different for everybody, but the key factor to remember is that it is invariably lower for the end-user than it is for the programmer. For many non-technical people, I would guess this critical mass may be as low as 2 errors per run. In fact, if a non-technical person becomes accustomed to seeing 2 errors every run, I would hazard a guess that it would become very unlikely that they would even notice a 3rd error should it suddenly appear. Once you’ve added that “ignore it” button, that’s exactly what will happen - people will start to ignore your errors.

If you’re one of those people who still doesn’t see the problem, you’re probably thinking something like, “It’s not my fault if people ignore errors that are right in front of them. They need to pay attention to those.”

If you’re still thinking that way, then consider this: Just how bad could it get?

How Bad Could It Get?

Imagine the scenerio I described is allowed to go unchecked for a little while. Imagine a team of 100 (30 of whom are programmers) working together for 2 years under the philosophy that every conceivable error will have an assert on it. Now imagine you are dropped into the midst of that team. Perhaps you are a new hire, or maybe you are a temporary contractor brought on for some last-minute optimization. What might this project be like?

I’ll give you a real-world example. Without naming names, I have seen an actual video game project where booting into the first level of the game from a cold start results in 17 unique asserts with another 11 over the course of playing that first level. I tried to count the total number of occurances, but after getting 20 instances of the first assert, I gave up and punched the “ignore this assert” button. Hard to believe? This is a true story, and I’m not talking about early in development. This project was post-beta at the time I performed this test.

So when you find yourself dealing with this, what’s the first thing you do? That’s right - you figure out a way to disable asserts altogether. Only now you find yourself asking, “what do I do when I actually want an assert?” Well you’ll probably eventually break down and create a new assert macro. Maybe this time you’ll call it “crash” because the assert doesn’t crash anymore, and you want to be sure yours does. In fact this same project I’m talking about already has a crash() macro. I’ll give you one guess what that macro does. If you guessed “it crashes,” sorry, but thanks for playing. Once upon a time it crashed, but at some point, the brain-trust who decided that asserts should be skippable came along and “fixed” crash() too. On this project, crash() merely logs the event to a text file and happily moves on without a blip - completely unnoticed.

Improved Asserts

Don’t get me wrong, there are ways to legitimately improve the assert macro. Just remember not to alter the fundamentals we agreed on for the definition of “assert”.

  1. Evaluate an expression
  2. Halt the program if the expression is false
  3. Provide the location of the assert

So what are some ways to improve the simple assert?

  • Warnings The first thing you should do is create that warning() macro so that people are not tempted to use asserts for non-fatal issues. I urge you for all of our sakes please do not call your warning macro assert_nonfatal. Don’t perpetuate the idea that asserts can in any way be non-fatal.
  • Messages The standard assert will echo back only the expression, the filename, and the line number. These are likely to mean absolutely nothing to the end user. Adding a meaningful string to the assert will help the team bring it to the correct programmer’s attention faster. I like to use a little macro assert_msg(expression, message) for that.
    • Author These asserts must be addressed by programmers - you aren’t using asserts to remind designers to give their frogs lily pads right? So the only important part of the assert message is which programmer needs to know about it. I know of one company where they have created special assert macros with the initials of the programmer on it like assert_mrw(expression). When one of these goes off, it tells the victim which programmer to go talk to.
  • On-Screen Displays I mostly work on consoles, and some consoles don’t provide text output outside of the debugger. What that means is artists, designers, and even testers will get an assert and be unable to see the text. The assert is there to provide valuable information about the crash, so in these situations, it is worth the effort to print the relevant information on the display in addition to the text output before breaking.
  • Unconditional Asserts I see these all the time, and to be honest they bug me, but there’s technically nothing wrong with them so enjoy yourself. If you’d prefer to type assert_unconditional() instead of assert(0), well that’s your choice. You won’t catch me doing it.

Summary

Asserts are really very simple as long as we all agree on what they mean and use them correctly. If you maintain a strict difference between a warning and an assert, your project will run smoothly.

You may still be sitting there saying, “this will never happen to me because we won’t let it get that bad.” Maybe you’re right, but I think it comes down to a matter of philosophy. If you have a philosophy at your organization where it’s ok to misuse asserts, you should expect them to be misused.

Leave a Reply


Cialis
Cialis Order
Online Cialis
Cialis 20mg
Cialis Price
Cialis Soft
Buy Cialis Online
Cialis Soft Tab
Cialis For Sale
Order Cialis Online
Buy Cheap Cialis
Cialis Online Pharmacy
Cheapest Cialis
Cialis Online
Buying Cialis
Cialis On Line
Cialis 20
Cialis Pill
Cialis Tablet
Cialis Pills
Order Cialis
Cialis Cost
What Is Cialis
Cialis 20 Mg
Cheap Cialis Online
Discount Cialis
Buy Cialis
Cialis On Line
Cialis Prices
Cialis Buy
Soft Cialis
Canada Cialis
Purchase Cialis
Cialis Cheap

Ultram Tramadol
Online Tramadol
Prescription Tramadol
Tramadol Side Effects
Buy Tramadol
Tramadol
Tramadol Hydrochloride
Order Tramadol
Cheap Tramadol
Tramadol Cheap
Tramadol Drug
Discount Tramadol
Tramadol Side
Tramadol Online
Buy Tramadol Online
Tramadol Hcl
Tramadol Prescription
What Is Tramadol
Tramadol

does water increase effectiveness of hydrocodone does hydrocodone effect sperm positive meridia reviews adipex quick message boards on adipex hydrocodone rebound headaches carisoprodol soma rbcmail ru hydrocodone reference side effect for adipex soma whyville no records hydrocodone tcater adipex soma addition rehab mixing levitra with alcohol does xenical expire nuphedragen vs adipex canadian pharmacy levitra attorney colorado meridia can levitra cause a heart attack soma side effects meridias capital aaron dennis month take xenical xenical year soma and heart disease hydrocodone bit 10mg 500m discount discount discount hepsera hydrocodone soma soma nag generic hydrocodone identification are hydrocodone and vicodin the same xenical ship to arkansas hydrocodone versus oycodone weight loss drug meridia generic propecia retin ultram hydrocodone bitartrate production hydrocodone apap 5 500 tab mck bases view topic adipex dangers hydrocodone and codine hydrocodone abuse by inhaling hydrocodone side effects hydrocodone v 3592 myth of soma crafting guide personal experiences with meridia taking hydrocodone and darvocet togeather indiana meridia find legal firm phentermine forums adipex vs didrex help sibutramine xenical hair loss information propecia hairlosstreatments biz cialis vs levitra faq ultram and prozac soma tablets phentermine adipex ionamin direct ultram soma sonic crazy moon lyrics can women take propecia meridia attorneys opp xenical orlistat 120mg lyrics to soma nationwide denied insurance meridia effects of grapefruit with levitra what are side effects of ultram soma domain hydrocodone xodol vicodin germany meridia drug interactions carisoprodol soma muscle relaxer hydrocodone w soma smoothies hydrocodone-apap 7.5 750mg vicodin es hydrocodone m367 information soma 350mg 120 generic names for hydrocodone indiana meridia enforcement hydrocodone foreign pharmacies no records 6 propecia and rogaine discount hydrocodone and xanax xenical obesity drug oxycodone ultram er extended release tramadol cultram hydrocodone import hydrocodone 4 days before colonscopy keyword ultram mexican pharmacies levitra generic viagra and generic soma finasteride proscar propecia xenical reviews hydrocodone interaction klonopin vardenafil hydrochloride marketed as levitra patient guaifenesin hydrocodone carisoprodol soma by chicos coupon codes ultram pain medicine weight loss hair loss propecia addiction soma weight gain with hydrocodone hydrocodone 10325 acyclovir adipex alprazolam alternative gastrointestinal xenical bleed harmful effects of phentermine for adipex hydrocodone soma adipex without pescription crushed hydrocodone 1 purchase soma birth defects from propecia xenical results soma and cimetidine 2new levitra adipex side effects ultram pharmaceutical hydrocodone fentanyle equivelency adipex gateway pharm itchy rash with fatigue and propecia nexium vaniqa xenical tramadol is xenical dangerous inexpesive adipex adipex diet dangerous oklahoma criminal defense grants meridia book carisoprodol carisoprodol site somarbcmailru what is propecia product fedex soma legal dot lab tests hydrocodone v codiene dangers of hydrocodone mg ultram prescribing levitra is meridia a scam ultram what is ultram ultram addiction zyrtec acyclovir xenical acyclovir hydrocodone picture of narcotic painkillers viagra levitra compared description of hydrocodone dependance john arnold 2b meridia mexico soma restaurant phoenix hydrocodone vs vicadon combination propecia rogaine soma imitrex viagra levitra soma and codeine ultram versus norcos minimum lethal dosage soma wellbutrin and adipex medication soma soma vs tramadol ultram services party poker generic hydrocodone m361 what is hydrocodone called in mexico le meridia park atlantic hotel soma software program hydrocodone apap 7.5 650 where can i find hydrocodone what is soma 3f hydrocodone medicinie biochemistry hydrocodone generic propecia viagra cialis levitra compare discount finasteride propecia xenical nebenwirkungen viagra levitra cialis side effects tagament hydrocodone soma weight hydrocodone apap7.5 attractive brunette levitra ad meridia mexican pharmacy soma daisy soma 1 hydrocodone 10 mg green hydrocodone fioricet soma hair propecia treatment hydrocodone laws when to take levitra tadalafil and proscar propecia success willaim and soma hydrocodone children cough syrup xenical and low carbohydrate diet xenical user hydrocodone acet meridia generic only sibutramine soma life international independent distributors hydrocodone u s fast delivery hydrocodone vs oxycontin flonase ultram hydrocodone guaifensin syr adipex resin soma saliva life fluid chest pain meridia discount meridia generic only sibutramine viagra cialis levitra review soma compound codeine difference between hydrocodone and codeine hydrocodone purchases purchase of levitra ultram danger pericarditis meridia allegra d walgreen's meridia message script sildenafil citrate viagra cialis levitra made adipex for sell meridia and psychosis ultram urinalysis pics of 5mg hydrocodone get high on ultram can you snort hydrocodone percocet hydrocodone equals codeine equivalency ultram ephedra cialis dysfunction erection levitra over the counter and xenical soma yoga 350 soma side ultram withdrawl symptoms best propecia doses soma drug sc ultram strengths meridia history side effects of cyclobenzaprine and hydrocodone ultram addiction story generic meridia 15 mg dizziness levitra hydrocodone base and msds compare viagra cialis levitra soma side effect what makes up soma hydrocodone codeine ultram er tabs 100mg soma bijou hydrocodone bitartrate side effects ultram ultracet saturday overnight shipping xenical pravachol soma muscle relaxants hydrocodone apap 10 ultram drug abuse soma institute washington precio de meridia en espa a what is adipex tramadol hydrocodone pain 6hair loss baldness propecia soma jerri lynn two somas hydrocodone m357 finasteride or propecia or proscar hydrocodone equivilant morphine codeine ultram search results adipex phentermine vs akane soma ruddy effectiveness propecia proscar hydrocodone 30 mg hydrocodone 1000 pictures hydrocodone detection urine duration xenical capsule obestat sibutramine meridia ingredients in ultram adipex p meridia phentermine discount cialis levitra viagra meridia lawyer denver drug levitra new ultram and detected in urine meridia sibutramine hydrochloride monohydrate xenical otc med acetaminophen 500mg hydrocodone bitartrate cialis compar compar levitra viagra advertising grants organized crime council meridia tcater adipex 619 hydrocodone without a pre soma laurel park place livonia dose hydrocodone lethal ashes of soma mp3 soma philadelphia is there benzoin soma generic for meridia neurontin and ultram interaction xenical vs meridia meridia weight loss stories federal reserve system soma portfolio snort ultram hydrocodone description hillcrest hospital meridia hydrocodone m 360 dr soma new york soma med spa tennessee ultram er and alcohol meridia better than xenical mixing cocaine hydrocodone facts no consult no script hydrocodone soma hernandez what happen if you smoke hydrocodone soma brakes bvuy soma ultram tramadol abrupt cessation bu darvocet v soma ultram for weight loss tabletki odchudzajace meridia soma inn cafe ultram valve causes reflux soma tropin low-dose xenical does bontril work better than adipex itching hydrocodone inexpensive soma 7 xenical viagra zyban proscar ultram real estate agent name badge high on generic hydrocodone with acetaminophen potentiating hydrocodone adipex using american express adipex and myocarditis soma and seeds hydrocodone withdrawal cold turkey ultram and medication and information hydrocodone 5mg 500mg for tooth pain is meridia a stimulant rx indications for soma imodium hydrocodone 582 coupon levitra 839 soma spa ma hydrocodone effects sperm adipex p phentermine hydrochloride acetaminophen hydrocodone liver damage repair meridia huron hospital is ultram better then darvocet hair propecia rogain propecia hydrocodone dosage and administration your source for phentermine adipex viagra zestril hydrocodone soma and union square ultram and fever meridia recall foreign websites viagra levitra patients cialis trans meridia airline soma distillery hydrocodone for sore throat 6generic propecia somas oil morocco discount meridia purchase metropolol levitra meridia reductil sibutramine generic meridia cod effects of tylenol on hydrocodone soma consultants ltd can 5 somas kill you getting soma questions about meridia places to visit in meridia m367 lortab 10mg hydrocodone m367 pregnancy with soma ultram in the blood system codeine morphine oxycodone hydrocodone and ayame soma hydrocodone numbness of mouth hydrocodone without a persciption 6 finasteride propecia contraindications taking zoloft and adipex oxandrolone with propecia bitartate hydrocodone hydrocodone info lortab 7.5 500 what is soma made of acetaminophen and hydrocodone medlineplus viagra cialis phentermine soma adipex-p and ionamin soma valium for sleep aid aura soma paint additives adipex damages sight meridia liquid piet hein soma cube meridia hospital health insurance pay for propecia ultram and ibuprofin generic levitra india ultram mechanism nude photos before and after xenical generic meridia reductil caverta levitra cialis veega lozenges propecia nhs propecia soma finacial meridia attorneys bonifay florida hydrocodone for sale affect meridia side tussionex removing hydrocodone vicodin soma ata generic soma carisoprodol adipex p overnight no rx somas cafe is ultram a narcatic ionamin adipex amphetamine vardenafil hcl levitra smashing pumpkins soma mp3 carisoprodol soma 350 separate hydrocodone from apap continuous release hydrocodone bose wave radio soma pdr 5 mg hydrocodone yoshino soma tapering off meridia effects propecia pregnancy does propecia cause ocd adipex generic brand hydrocodone vicodin overdose difference between hydrocodone and percoset hydrocodone and ambien celebrex meridia m366 hydrocodone soma center lake worth fl 37.5 adipex mg adipex and drug screen adipex and wellbutrin hydrocodone and sleep hydrocodone side effects and warnings soma alcohol oxyconton hydrocodone positive drug screens generic meridia overnight take levitra soma 325mg 120 hydrocodone blood thinner meridia product bad effects with soma between difference levitra viagra hydrocodone brands meridia diet medication soma pieces michael payne meridias capitol sleep soma comparisons of rogaine and propecia compare hydrocodone to oxycodone can you take bupropion and hydrocodone 2737 aid clarinex prevacid propecia zyrtec people who use propecia soma pharmacy suite cialis viagra levitra hydrocodone pain relief tramadal and soma phentermine adipex p fastin obenix meridia landmark cases extended hydrocodone use soma b johari women chat levitra too much hydrocodone soma zach actress in the levitra commercial soma institute chicago inexpensive levitra finasteride b propecia b hydrocodone withdraw symtoms general maximus decimus meridias effect propecia side hydrocodone apap5 adipex vs meridia information soma special atorvastatin hydrocodone meprogesic soma compound vistaril ultram ultram a span td tr cialis attractive brunette levitra ad effects side xenical adipex bontril ionamin meridia phentermine xenical bontril meridia phentermine xenical soma dose hydrocodone addiction forums soma missouri school of massage hydrocodone with aspirin cafe soma san francisco hydrocodone compound pulmonell hypertension and vardenafil levitra adipex no physician dosage adipex somali music dur dur ultram indications tablet xenical uv spectrum of hydrocodone overnight delivery adipex 1cialis comparison levitra viagra hydrocodone apap 10 80 adipex compare generic dexedrine hydrocodone soma music detox for ultram hydrocodone and heart palpitations side effects of adipex isolate hydrocodone medication named ultram soma buses san francisco comments on meridia history of xenical ultram er next day type of drug is soma hydrocodone definition generic soma celebrex propecia soma food pantry ultram website adipex official website hydrocodones in drug tests long term effect of hydrocodone find adipex 37.5 no perscription robutussin and hydrocodone loss result weight xenical adipex ups xenical reductil hydrocodone swollen face injecting lortab hydrocodone adipex without a perscription soma double cross bad tooth pain hydrocodone claritin hydrocodone interaction aura product soma ultram dangers nasonex metrogel propecia flonase ejaculation levitra premature 042 survey ultram meridia discounted oxycontin and hydrocodone similar side effects of stopping meridia false positive and meridia canadian meridia rx nida 5 hydrocodone ingredient in hydrocodone cialis generic levitra review viagra xenical peru meridia lawyers opelika hydrocodone acetaminophen oral pharmcom xenical cirrhosis frequency levitra ramipril hydrocodone adipex appetite suppressant adipex master card meridia south pointe hospital hydrocodone apap 5-500 120 hydrocodone tablets 7.5 apap hydrocodone 2cialis generic levitra viagra hydrocodone and smoking soma high blood pressure xenical on formulary list what is hydrocodone gg syrup skelaxin vs soma meridia attorneys abbeville soma lofts drug type soma high dose ultram xenical and flabby skin clinical propecia study hydrocodone with ibeprofin hydrocodone inhaled watson 853 hydrocodone soma no prescrition overnight shipping side effects of meridia drug landlord grants rifle meridia information meridia compared to xenical meridia without perscription the brewing of soma acetaminophen hydrocodone tablets soma communications 60 mg xenical meridia how long phentermine and meridia commercial actress levitra hydrocodone apap 10 325mg robaxcin and soma soma stencils xenical with wellbutrin ramakrishna soma soma holiday cd greenwheel soma furniture san francisco hydrocodone pain dog meridia tablet hydrocodone cold water method soma turns into phenobarbitol adipex no perscription soma drug classification adipex xenical pregnancy first trimester drug interaction xanax and hydrocodone ultram interactions with other drugs hydrocodone and drug test carisoprodol domain soma rbcmail ru indiana meridia court decisions kana soma hydrocodone high meridias mortgage soma passwords soma media meridia phentermine xenical tenuate hydrocodone on urinalysis soma magnetics phenaphen codeine mix hydrocodone female levitra mixing gabapentin and hydrocodone adipex fastin p phentermine soma 250mg soma cube directions soma 2007 half ironman difference between hydrocodone and ocycodone internet levitra pharmacy zoloft zoloft and meridia ultram er and bone pain myth soma macros keywords cialis levitra vs meridia attorney greenville hydrocodone syrup dosage addiction to adipex p classification of hydrocodone hydrocodone addiction withdrawal soma phoenix hydrocodone potentiator ultram tramadol adipex deliverd 24 hours physicians hydrocodone pharmacy lortab lorcet find info on xenical medication hydrocodone is the generic ingredient in hydrocodone adverse effects soma recreational use meridia lawyer colorado hydrocodone ibs commentscgi levitra mt zinc propecia akane soma pictures humatrope soma tropina ultram 50 mil ultram 100 hydrocodone bitartrate ibuprofen viagra levitra cialis stuffy nose will ultram ruin a drug test soma chair mixing vicodin and soma 120mg xenical 2737 aid condylox prevacid xenical crushing ultram denver lawyer meridia drug screen hydrocodone fda approve xenical over the counter by levitra posted hydrocodone insomnia hydrocodone apap 5mg 500mg tabs somas yoga class xenical w o rx ultram bipolar dose ultram fastin adipex ionamin rogaine and propecia edema with soma compound happens levitra stop when working taking soma and provigil soma sleep xenical helped me lose weight wendy soma money saving coupons for meridia neuro soma technique adipex didrex phentermine tenuate established fda guidelines meridia fioricet info soma carisoprodol picture of hydrocodone 10 what hydrocodone is ultram an adictive nacotic hydrocodone recovered meridia law office adipex hi meet nice people u hair loss information propecia adipex shipped overnight 102f325 hydrocodone soma international furniture carisoprodol soma hydrocodone blood levels olympian labs nu soma hydrocodone 10 650 pic generic propecia uk soma tavern contra effects of zoloft with hydrocodone effects negative side xenical ultram birth defects by comment levitra meridias capital difference soma by chico s 2737 aid levitra retin 41 levitra poll 59 xenical and meridia combination generic meridia and fast shipping adipex purchase site meridia lawyers greenville common hydrocodone syrup compounds hydrocodone and naproxen soma valium minoxidil propecia hydrocodone 7.5 750 and percocet compare mixing hydrocodone cocaine effects meridia phentermine watson hydrocodone 5mg 325mg soma orange county tagament potentiate hydrocodone soma environmental technologies ca cialis compare levitra performance viagra taking phenteramine and xenical together abuse soma pictures of soma difference between hydrocodone and oxycodone meridia weightloss drug comparison viagra cialis levitra 2737 aid denavir prevacid propecia combining levitra with flomax meridia center asset protection legal lump in thoat adipex 300 ultram mag compare ed medicines cialis and levitra weaning off of meridia is adipex amp phentermi meridia airlines adipex mastercard generic tramadol ultram soma dasgupta generic lortab hydrocodone generic lortab picture adipex without consulting physician tussionex ext rel susp hydrocodone mg ultram detoxification dea drug schedule for soma ultram er withdrawls remedies hydrocodone 445 ultram pregnancy hydrocodone atorvastatin skin rashed due to hydrocodone viagra vs levitra reviews xenical weight loss result pregnancy soma methdone oxycodone hydrocodone adipex p tab adipex p 32 abusing somas tappering off hydrocodone drug levitra 10 350 hydrocodone consultation fedex meridia sibutramine oral search cialis dose levitra low viagra achat xenical red sea abu soma hotel meridia fatigue hydrocodone bt ibuprofen side effect adipex and phentermine compare xenical alli tramadol ultram hci meridia migraine medication ultram product information better meridia phentermine xenical versus meridia adipex sale what is in hydrocodone hydrocodone and oxycodone adipex and tenuate ultram pros and cons difference viagra levitra cialis long carisoprodol soma stay system viagra levitra cialis compare what is soma for canadian propecia rx ultram urine test hair loss baldness propecia search 3592 dose hydrocodone medication vicodin combining lorazepam and soma soma tire lever soma conference fl pregnancy hydrocodone 10 levitra mg whatis levitra comparison levitra cialis prepac hydrocodone hydrocodone ibuprofen systemic since hydrocodone acetaminophen distillation adipex discounts available detox hydrocodone rapid discount discount hepsera hydrocodone carisoprodol soma pochta ru aura soma metatron detection of hydrocodone in urine cheep adipex without a rx lortab hydrocodone side effects agent soma picture of soma bottle soma optics soma north ultram pain reliever compare fastin phentermine adipex hydrocodone 5-500 is there propecia for women adipex page edit kwiki myth of soma hydrocodone withdrawl duration soma center new jersey ultram time release patanol valtrex xenical acyclovir mixing soma and alcohol mix the drugs vioxx and ultram hydrocodone overdose symptom aura soma and animals ultram weight loss somas ab hydrocodone fat solubility difference adipex phentermine hydrocodone amide cialis levitra xanax us approved pharmacies hydrocodone and 363 xenical gastro bleed adipex bontril phentermine sibutramine or meridia ultram xr prescribing information long term use of ultram mix lorazapam soma and ambien hydrocodone bitartrate and acetaminophen low cost no prescripton hydrocodone adipex p rosemont 500mg 5mg apap hydrocodone tab m 362 hydrocodone herbal xenical jon alan carroll soma literary review 2006 february mt xenical acne cause propecia hydrocodone what are the specks meridia review soma therapy w broadway soma effects expiration date meridia sibutramine and xenical orlistat meridia medicine hydrocodone bitartrate information soma pottery compare hydrocodone oxycodone phoenix soma health food form of adipex xenical nasdaq hydrocodone guaifenesin syrup argento soma torrent hydrocodone clorpheniramine ultram and drinking alcohol vaniqa ultram retin-a ortho tri-cyclen pharmocology oxycodone vs hydrocodone adipex effects p side watson hydrocodone inferior not effective meridia and allergic reactions xenical research beaches close to meridia mexico over dose of soma app bitartrate hydrocodone meridia 26 fda best source information about propecia soma refills canada