text:
There Are 2,000 Untested Chemicals in Packaged Foods—and It's Legal
Melissa Kravitz Hoeffner November 12, 2019
We shouldn't have to be toxicologists to be able to grab something at the grocery store that doesn't contain dangerous ingredients. (Photo: Daniel Orth, Flickr)
This potential scandal is so large, it's hard to fully comprehend what the implications may be.
A major but largely glossed over report by the Environmental Working Group (EWG), an environmental and public health nonprofit based in Washington, D.C., shows that thousands of untested chemicals (an estimated 2,000, to be exact) are found in conventional packaged foods purchasable in U.S. supermarkets. And yes, all of them are legal.
The extensive collection of permissible additives includes several known or suspected carcinogens, such as synthetic sodium nitrate, found in processed meats and considered probably carcinogenic by the World Health Organization, and butylated hydroxyanisole, also known as BHA, a chemical listed as a cancer-causing chemical by the state of California and found in commonplace items like frozen pepperoni pizza. Other unappealing chemicals are commonly found in our food packaging, such as polypropylene, sulfuric acid and bisphenol A—all of which can have impacts on human health and the environment.
How much should consumers panic before their next supermarket trip? "It really depends on what level of risk consumers are comfortable with," says Dawn Undurraga, a nutritionist at EWG and co-author of the study. "The more we learn about what is in conventional foods, the more evidence for concern we accumulate." Independent laboratory tests commissioned by EWG, for example, found glyphosate, a probable carcinogen, in every sample of conventional oats tested.
The fact that dangerous chemicals are legal for use in our food is a major public health concern that goes largely unrecognized by the U.S. government. "Unfortunately, our current policy on food additives was written in 1958 and has been completely co-opted by food and chemical companies," Undurraga says. "Additives that are deemed 'Generally Recognized as Safe,' or GRAS, by a food or chemical company or trade association are exempt from the food additive petition process where the U.S. Food and Drug Administration (FDA) reviews the safety of the additive."
Originally, this GRAS exemption was created to cover ingredients widely known to be safe, like vinegar, but with advancements in food science, the provision has been applied to thousands of chemicals. As a result, questionable substances have been allowed into a host of conventional foods. In 2017, EWG joined several other public health groups to file a lawsuit against the FDA in an effort to eliminate the GRAS loophole.
"Rather than close the loophole, the FDA has instead allowed companies to voluntarily notify the agency about food chemicals and to allow companies to summarize the industry science supporting their conclusions," reads the EWG study, elucidating that many scientists who conduct these reviews have been paid by the industry. Plus, the FDA does not subsequently review underlying biological and chemical data, leaving consumers to literally do the dirty work. The FDA did not respond to Truthout's request for comment.
"Consumers shouldn't have to be toxicologists to be able to grab something at the grocery store that doesn't contain questionable or dangerous ingredients," Undurraga says. Even so, toxicology literacy won't help in the frozen food aisle. According to Undurraga, there are absolutely no defining signs on food packaging to indicate that any of the 2,000 synthetic chemicals approved for use in food are present in that specific item.
In fact, the only way to minimize exposure to these chemicals is to purchase certified organic packaged foods and look at EWG's Food Scores, which measure nutrition, ingredient and processing concerns in more than 80,000 common foods, from frozen vegetables and baby food to packaged nuts, berries and grains across hundreds of popular brands; and EWG's Dirty Dozen List of Food Additives, which ranks the worst food additives common in U.S. supermarket food and where you'll likely encounter them, like potassium bromate in packaged loaves of bread and propylparaben in packaged tortillas and muffins.
If additives don't have you worried enough about what we're legally permitted to consume, know that pesticides, found to be carcinogenic and also severely damaging to the environment, are still more than prevalent alongside the packaged food chemicals at your grocery store. Every year, EWG reviews the U.S. Department of Agriculture's pesticide residue tests on conventional produce.
"Last year, nearly 70 percent of conventionally grown produce was contaminated with pesticide residues," says Undurraga. "This is especially concerning for pregnant women and small children."
Sure, organic packaged food and organic produce are typically more expensive than their conventional counterparts, but you're paying for more rigorous additive standards and investing in your long-term health and the health of the environment. Currently, fewer than 40 synthetic ingredients are permitted in organic packaged foods—and this is only after each chemical has been reviewed by both independent and government experts. And yet only around 3 percent of packaged food sold in the U.S. is organic. Perhaps this is because people who shop organic are not interested in pre-packaged meals. More likely, it's because the dangers of conventional packaged food are not well-known.
Those who want to plan their supermarket trips with a budget in mind can look to EWG's shopper's guide to know what to prioritize in their carts. Beyond opting for organic packaged goods when going the pre-made route, consumers can elect to buy organic versions of fruits and vegetables whose conventional counterparts have made EWG's "Dirty Dozen" list, which calls out those conventionally grown items found with the most pesticide residue: strawberries, spinach, kale, nectarines, apples, grapes, peaches, cherries, pears, tomatoes, celery and potatoes.
On the flip side, consumers can opt for conventional versions of the produce items that are listed on EWG's "Clean Fifteen"—those with relatively little pesticide residue: avocados, sweet corn, pineapples, frozen sweet peas, onions, papayas, eggplants, asparagus, kiwis, cabbages, cauliflower, cantaloupes, broccoli, mushrooms and honeydew melons.
Though it's unlikely Americans are going to stop buying conventional packaged food in the near future (or ever), pressure on the government to make packaged food actually safe to eat is necessary to enact change. And with so little information readily available about what we're actually eating when these chemicals aren't disclosed, keeping up with research by independent groups like the EWG remains imperative to educate consumers.
Combining their research and policy platform, EWG has launched a petition to encourage food companies like General Mills, Quaker and Kellogg's to remove cancer-linked glyphosate from our food. And that's just the beginning. Other consumer safety advocates, including the Environmental Defense Fund and the Center for Food Safety, both represented by Earthjustice, have challenged the FDA's GRAS interpretation in court earlier this year.
Ignorance may bring peace of mind to grocery shoppers, but as more information about the hazards in our daily food purchases comes to light, it's likely we'll see more consumer pushback against dangerous practices that have become the norm.
This article first appeared on Truthout and was produced in partnership with Earth | Food | Life, a project of the Independent Media Institute.
Melissa Kravitz Hoeffner
Melissa Kravitz Hoeffner is a writer based in New York. She is a writing fellow at Earth | Food | Life, a project of the Independent Media Institute. She's written for Bon Appetit, Food & Wine, Travel & Leisure, Conde Nast Traveler, Glamour, AlterNet, Cosmopolitan, Teen Vogue, Architectural Digest, Them and other publications. She holds a bachelor's degree in creative writing from Columbia University and is also at work on a forthcoming novel. Follow her on Twitter: @melissabethk.
Palestine Elections Planned, Could Elections Bring Much Needed National Unity?
Supreme Court Debates Fate of 700,000 DACA Recipients
by Melissa Kravitz Hoeffner, Citizen Truth

There Are 2,000 Untested Chemicals in Packaged Foods—and It's Legal

by Melissa Kravitz Hoeffner, Citizen Truth
November 12, 2019

This potential scandal is so large, it's hard to fully comprehend what the implications may be.

A major but largely glossed over report by the Environmental Working Group (EWG), an environmental and public health nonprofit based in Washington, D.C., shows that thousands of untested chemicals (an estimated 2,000, to be exact) are found in conventional packaged foods purchasable in U.S. supermarkets. And yes, all of them are legal.

The extensive collection of permissible additives includes several known or suspected carcinogens, such as synthetic sodium nitrate, found in processed meats and considered probably carcinogenic by the World Health Organization, and butylated hydroxyanisole, also known as BHA, a chemical listed as a cancer-causing chemical by the state of California and found in commonplace items like frozen pepperoni pizza. Other unappealing chemicals are commonly found in our food packaging, such as polypropylene, sulfuric acid and bisphenol A—all of which can have impacts on human health and the environment.

How much should consumers panic before their next supermarket trip? "It really depends on what level of risk consumers are comfortable with," says Dawn Undurraga, a nutritionist at EWG and co-author of the study. "The more we learn about what is in conventional foods, the more evidence for concern we accumulate." Independent laboratory tests commissioned by EWG, for example, found glyphosate, a probable carcinogen, in every sample of conventional oats tested.

The fact that dangerous chemicals are legal for use in our food is a major public health concern that goes largely unrecognized by the U.S. government. "Unfortunately, our current policy on food additives was written in 1958 and has been completely co-opted by food and chemical companies," Undurraga says. "Additives that are deemed 'Generally Recognized as Safe,' or GRAS, by a food or chemical company or trade association are exempt from the food additive petition process where the U.S. Food and Drug Administration (FDA) reviews the safety of the additive."

Originally, this GRAS exemption was created to cover ingredients widely known to be safe, like vinegar, but with advancements in food science, the provision has been applied to thousands of chemicals. As a result, questionable substances have been allowed into a host of conventional foods. In 2017, EWG joined several other public health groups to file a lawsuit against the FDA in an effort to eliminate the GRAS loophole.

"Rather than close the loophole, the FDA has instead allowed companies to voluntarily notify the agency about food chemicals and to allow companies to summarize the industry science supporting their conclusions," reads the EWG study, elucidating that many scientists who conduct these reviews have been paid by the industry. Plus, the FDA does not subsequently review underlying biological and chemical data, leaving consumers to literally do the dirty work. The FDA did not respond to Truthout's request for comment.

"Consumers shouldn't have to be toxicologists to be able to grab something at the grocery store that doesn't contain questionable or dangerous ingredients," Undurraga says. Even so, toxicology literacy won't help in the frozen food aisle. According to Undurraga, there are absolutely no defining signs on food packaging to indicate that any of the 2,000 synthetic chemicals approved for use in food are present in that specific item.

In fact, the only way to minimize exposure to these chemicals is to purchase certified organic packaged foods and look at EWG's Food Scores, which measure nutrition, ingredient and processing concerns in more than 80,000 common foods, from frozen vegetables and baby food to packaged nuts, berries and grains across hundreds of popular brands; and EWG's Dirty Dozen List of Food Additives, which ranks the worst food additives common in U.S. supermarket food and where you'll likely encounter them, like potassium bromate in packaged loaves of bread and propylparaben in packaged tortillas and muffins.

If additives don't have you worried enough about what we're legally permitted to consume, know that pesticides, found to be carcinogenic and also severely damaging to the environment, are still more than prevalent alongside the packaged food chemicals at your grocery store. Every year, EWG reviews the U.S. Department of Agriculture's pesticide residue tests on conventional produce.

"Last year, nearly 70 percent of conventionally grown produce was contaminated with pesticide residues," says Undurraga. "This is especially concerning for pregnant women and small children."

Sure, organic packaged food and organic produce are typically more expensive than their conventional counterparts, but you're paying for more rigorous additive standards and investing in your long-term health and the health of the environment. Currently, fewer than 40 synthetic ingredients are permitted in organic packaged foods—and this is only after each chemical has been reviewed by both independent and government experts. And yet only around 3 percent of packaged food sold in the U.S. is organic. Perhaps this is because people who shop organic are not interested in pre-packaged meals. More likely, it's because the dangers of conventional packaged food are not well-known.

Those who want to plan their supermarket trips with a budget in mind can look to EWG's shopper's guide to know what to prioritize in their carts. Beyond opting for organic packaged goods when going the pre-made route, consumers can elect to buy organic versions of fruits and vegetables whose conventional counterparts have made EWG's "Dirty Dozen" list, which calls out those conventionally grown items found with the most pesticide residue: strawberries, spinach, kale, nectarines, apples, grapes, peaches, cherries, pears, tomatoes, celery and potatoes.

On the flip side, consumers can opt for conventional versions of the produce items that are listed on EWG's "Clean Fifteen"—those with relatively little pesticide residue: avocados, sweet corn, pineapples, frozen sweet peas, onions, papayas, eggplants, asparagus, kiwis, cabbages, cauliflower, cantaloupes, broccoli, mushrooms and honeydew melons.

Though it's unlikely Americans are going to stop buying conventional packaged food in the near future (or ever), pressure on the government to make packaged food actually safe to eat is necessary to enact change. And with so little information readily available about what we're actually eating when these chemicals aren't disclosed, keeping up with research by independent groups like the EWG remains imperative to educate consumers.

Combining their research and policy platform, EWG has launched a petition to encourage food companies like General Mills, Quaker and Kellogg's to remove cancer-linked glyphosate from our food. And that's just the beginning. Other consumer safety advocates, including the Environmental Defense Fund and the Center for Food Safety, both represented by Earthjustice, have challenged the FDA's GRAS interpretation in court earlier this year.

Ignorance may bring peace of mind to grocery shoppers, but as more information about the hazards in our daily food purchases comes to light, it's likely we'll see more consumer pushback against dangerous practices that have become the norm.

This article first appeared on Truthout and was produced in partnership with Earth | Food | Life, a project of the Independent Media Institute.

This article first appeared on Citizen Truth and is republished here under a Creative Commons license.
Utilities Took $1.25 Billion in Pandemic Aid Then Shut Off Power to Households Nearly 1 Million Times: Report
Around the Empire Interview: 9/11 Unanswered Questions
Interview: Running Toward The Future With a Handful of Seeds With Lyla June
Clear Away the Hype: The U.S. and Australia Signed a Nuclear Arms Deal, Simple as That
Afghanistan's Impoverished People Live Amid Enormous Riches
Europe After Angela Merkel: Is the Atlantic Era Over?
Epistemic Vice: A Critique of Quassim Cassam's "Conspiracy Theories"


text:
← James Erskine
Douglas Gemmell →
Ian Donald
Before Ian Donald joined the club in 1964, Clydesdale Harriers had last won medals in the Scottish Cross Country Championships in 1955 when they were third. That generation of runners had almost all departed: some like John Hume and Jackie Hislop emigrated, some like Bobby Clark left the area altogether and others like John Wright had been injured and were out of top class running. Solid team performances had been put in by good runners like Johnny B Maclachlan, Neil Buchanan, young Bobby Shields (who would go on to great things as a hill runner) and Pat Younger. Club spirit was still high but nothing major had been won in the ten years before Ian joined the club in 1964. From the time when he won his first team gold medals as a Youth for Shettleston in 1955, he had been used to being in winning teams. The record before us was impressive. In the Edinburgh to Glasgow Relay, Shettleston Harriers had been 2nd, 3rd, 1st, 1st, 1st, 5th, 4th, 6th over the period and were lamenting not winning medals, while Clydesdale were 5th, 5th , 11th, 15th, 15th, 18th, 13th, 18th and rejoicing in 'making the race' and hoping for the most meritorious medals. The story in the National Cross Country Championships was similar with Shettleston winning four in a row from 1959 – 1963. To some extent ambition had gone, a lot of the confidence had gone. But Ian had a pedigree that could not be denied and it could not help influence the club members.
Ian joined the club in December 1964 after training with us from April. He had won many gold medals as part of Shettleston Senior Men's teams over the years in the
National Cross Country Championships (gold in 1959, 1960, 1961, 1962);
Edinburgh to Glasgow Relay Race (1960 and 1961);
District Championships – two gold, two silver and two bronze between 1959 and 1964;
County Championships – one gold and three silver between '60 and '63;
He had competed at British level in the London – Brighton race four times ('59, '60, '61, '62)
He was also the Shettleston Club Champion in seasons 1962/63 and '63/'64 so he was a quality athlete probably at the peak of his career.
He had moved to live in Old Kilpatrick when he started work at Maclehose the Printers in the West End of Glasgow. His presence started building confidence in club members without him realising that he was doing it. The fact that a runner of his calibre would leave a successful team and join up was in itself a boost but there were other factors about Ian. First, he trained with the club at least twice a week, more often three times and on occasion more than that. Just by running with an acknowledged top runner, club members felt better. As in every club, when a new member comes along the club 'top guns' have a go at him. To their surprise they found that they could run with him for further than they might have thought they could and at times even outrun him in training. This all helped. Second, he very seldom spoke of his previous club but when he started to say that training was as hard as it was at Shettleston and that as a club we should be doing better, we believed him. The fact that Shettleston didn't want to lose him was further recommendation if more were needed. When his change of club form arrived at the SCCU Committee, the Shettleston representative was reduced to arguing that he hadn't moved from one town to another because Barrachnie was not a town and Old Kilpatrick was not a town either! It was a petty argument but virulently argued, albeit in vain.
After he joined the club he ran in every cross country race that he could and in all club championships. In fact his very first race was the day after he got clearance from the SAAA. This was the Dunbartonshire Championships at Dumbarton where Ian (second behind Lachie Stewart) with Johnny B Maclachlan, Ian Leggett and Bobby Shields was a member of the winning team. He went on to win the club championship, the Hannah Cup for the fastest time in the handicap race and the Dan MacDonald Cup for the highest points total in Championship races over the winter. The impact was immediate and massive. In the summer of 1965 he was second in the County Three Miles Championships, second in the West District Six Miles Championships and ended the summer with fourth place in the Ben Nevis Race – young Bobby Shields was seven places back. In between he raced on the roads and on the track as well as over the hills. Like most of the top men Ian was never a big time runner who did his own thing and raced when he felt like it. Every winter he raced in everything from the McAndrew Relays at the start of October right through to the National Championships and beyond. In cross country races, a lot was learned just going over the trail with him before a cross country race. He was the best 'reader' of a trail that I ever met. At the start of 1966 he won the race at Stewarton then was eleventh in the National Cross Country Championships – the highest by a Clydesdale since 1955. At the AGM in 1967 Jim Shields "congratulated the club on a fairly successful season emphasising the leadership of Ian Donald". (Extract from the club Minute Book)
At this time, the club had organised various outings to the Glen Orchy Ski Hut, to Ben Lomond at New Year, and so on and Ian and Helen supported these whole heartedly. The club also had an annual outing to Ben Lomond on New Year's Day led by David Bowman and Ian and Helen supported these too. Club presentations – they had to come because he had won so much! They were also part of a group with David and Evelyn Bowman, John and Janice Wright, Ian and Cathie Leggett and Brian and Betty McAusland at every Scottish Marathon Club Presentation. Helen had been a Scottish International 1500 metres athlete in her own right when with Bellahouston Harriers and for a time helped with the coaching of the girls in the club. They were both very popular.
Ian and Helen on Ben Nevis in 1963
In summer he turned out in club teams on the road and track but preferred hill running and racing. Bobby Shields had already absorbed the hill running culture before Ian arrived and he was ambitious in that direction. A very gifted hill runner whose wins were all his own, he would be the first to say that he learned a lot from Ian and it was with his help that he won the Ben Nevis race in 1967. Bobby had been eleventh in the Ben race in 1965, third in 1966 with Ian one place ahead and won it in 1967. He went on to be in the first ten thirteen times. Ian had first run the Ben Nevis race in 1959 where he finished seventeenth in 2:03:03 in his first season as a hill runner. A year later Ian won Goatfell in Arran, set a record when winning the Mamore Hill race at Kinlochleven and ran again in the Ben Nevis race where he was twenty ninth in 2:7:48. Although he won hill races from Goatfell to Newtonmore he never won the Ben Nevis in any of his attempts although he was second in 1966 with Bobby Shields third. He was acknowledged as one of the best in the business.
A typical summer would include a whole range of events – in 1967 for instance he won the club cross country championships at the start of the year, had fastest time in the Hannah Cup, led the team home in the National Championships, finished second in the Balloch to Clydebank in 63:36, was second again at Gourock in the 14 miles in 1:14:47, finished second in the County Track 3 Miles to Colin Martin, ran 52:04 for the ten miles track on progressively deteriorating cinders in the SAAA Championships, ran the 14.5 miles Dunblane Road Race in 1:22:30, tackled the Ben Nevis race (73rd in 2:05 against his pb of 1:47 35 a year earlier), then into the cross country season. He had the fastest club time in the McAndrew Relays and assisted the team to second place in the County relays with second fastest time behind Lachie Stewart and the results of the Edinburgh to Glasgow and Midlands events are already described in other places. One unusual feature of 1967 was the fact that he ran in a special invitation one hour race at Cowal Highland Games where he was placed third with a total distance of 11 miles 600 yards – ie averaging well inside five and a half minutes per mile on a dreadful cinder track. (Incidentally, the race had a proliferation of sponsors one of whom awarded the winner (Lachie Stewart) a case of cigarettes in addition to his race prize!) Helen said recently in a letter that he just loved racing and was never happier when taking part in a competition.
His record in club races is first class. Club Champion in 1965, 1966, 1967, 1968 and 1969, winner of the Hannah Cup for fastest time in the Six Mile Cross Country Handicap in 1965, 1966, 1967 and 1969, Sinclair Trophy for Five Miles Road Championship in 1966 and 1967, Dan McDonald Trophy for the winter Points Contest in 1965, 1966 and 1967 and the Semple Merit Award for an outstanding performance during the winter season in 1967. In the Hannah Cup on one occasion he was handicapped so severely that he was still waiting to start as scratch man when Jim Sweeney who had started first passed on his way into the second of three two mile laps! Jim boasted for years of the time he passed Ian Donald "as if he was standing still." When it came to the prestigious Edinburgh to Glasgow Relay, Ian ran in twelve races on stages one, two, four, five, six and eight. Whatever the club needed him to do he did..
What did we gain from Ian? He broadened our horizons and restored the ambition. Before Ian came, one of the longest serving club members at the time who should have known better said that we should aim for the County Championships because that was the only thing we could win – Ian changed that. In the time from 1969 to 1980 the club won more medals in the West District Cross Country Championships than any other club – that included three first places in an event that we had never won. A lot of that is down to Ian's influence. He also introduced an element of hardness into the attitudes and on training runs which had started to become quite soft. For instance I remember on a training run with Ian, Phil Dolan and Allan Faulds, Allan started to drop back a bit on the return through Drumchapel. I rather naively asked if we should wait for him. Ian's growled reply was to the effect that "Well, he wouldn't wait for us." So we all went a bit harder even although we were suffering a bit ourselves as well. It did not matter that Allan had probably been training at lunch time.
Ian's influence on the young Phil Dolan when he advised him to apply for a training permit for Westerlands in Glasgow where he could train with many of the best in the country should also be remembered. Phil points to this a key factor in his athletics development. His influence on Bobby Shields has already been noted. The basic truth is that no one in the club failed to be impressed with his quiet determination.
He was not interested only in athletics – he was a really good hillwalker and climber and was quickly adopted into the club's hill walking group and the social life that revolved around guys like Pat Younger and Frank Kielty. He is pictured on the left at the top of Ben Nevis. Perhaps more surprisingly he and his wife Helen were keen gardeners and cultivators of Alpine Plants in particular. A member of the Scottish Rock Garden Club he won their prestigious Wilson Medal for Alpines several times and gardeners from all over Scotland would come to see his plants at Old Kilpatrick and were welcomed by Ian and Helen.
Ian was a friend of Walter Ross of Garscube Harriers who almost single handedly founded the Scottish Veteran Harriers Club and was also publisher of the 'Scots Athlete' monthly magazine. Walter gave Ian a signed and bound copy of the magazine for 1946-47 with the inscription: "To my friend, Ian C Donald in grateful appreciation of your enthusiasm for athletics and wishing you personal success which must come on account of your devotion, Yours sincerely, Walter J Ross, Glasgow, 19th January 1962"
Ian gave me this volume as a gift that I still treasure. Incidentally it was the same Walter Ross who made the presentation to John B Hume in Vancouver in 1988. Ian was a real gentleman with never a harsh word about anyone, with friends everywhere. It was not only on the race course that he never gave in though: there is the story of Ian being approached in Queen Street Station in Glasgow by a well dressed individual who had a plausible story about losing his wallet and needing 2/6 for the train home. Ian gave him the money and then saw him leave the station and cross George Square. He then followed the chap into the Ingram pub where he saw him buying a drink. He went right up to him and asked for the money back – and got it! You didn't mess around with Ian but the story does also indicate his preparedness to help anyone who needed it. Most of us would have refused and, if we did not, we wouldn't have been brave enough to go and ask for the cash back.
When it was known that he had leukaemia, we were all upset. For a while, since the early 1970's, we thought it was glandular fever that was his problem. When we discovered the truth we thought it was the end of his running. Not a bit of it. He ran for several more years even while enduring chemo therapy. For instance, in August 1976 he ran in the one off hill race 'The Maidens of Mamore' which covered Binnean Mor and Na Gruagaichean and was eighth in 2:03:44 just ahead of Aberdeen's Mel Edwrads. Naturally the racing was restricted by his illness but I remember running a club cross country championships with Ian and exchanging third and fourth places all the way round. We were having a real ding dong battle. At the start of the third and last lap I asked him if he were intending to run in the Scottish Vets Championship in a couple of weeks time. Was he struggling? Not a bit – he simply asked where and when it was being held and he might go. Not a pause in his breathing or his rhythm. Then it dawned on me – he had a very serious illness and I was training 65+ miles a week and furthermore I was struggling.
He was a real inspiration to the whole club and to some of us on a more personal level.

redpajama_set_name: RedPajamaCommonCrawl


Although we might still have the one or the other postlude, our "Klebergate" seems to have come to an end. As is of common knowledge by now, Kleber's agent Giuseppe Dioguardi made a huge mistake in throwing his client head to head against Palmeiras in the belief that Kleber would either get a substantial salary raise (on top of the US$ 230.000 a month he's currently making) or be in a position to accept a transfer to Flamengo for a bigger pay check; in either case Dioguardi would make a nice little profit for himself. No such luck, as Dioguardi didn't pay enough attention to Kleber's contract, which stipulates not a US$ 4 million but rather a US$ 88 million fine in case of a contract break with Palmeiras.
When Dioguardi perceived he had brought less than a knife to a gunfight, he had Kleber publicly attack Palmeiras' director of football Frizzo and president Tirone. By calling Frizzo a incompetent coward without character, the aim was to create enough animosity for Palmeiras to happily agree to get rid of the troublemaker. Frizzo counter-attacked masterfully, calling Kleber a good boy and affirming that he trusted Kleber – in Frizzo's words a competent and brave gladiator who knows the value of keeping one's word – to honour his contract with Palmeiras.
When Flamengo the other day "officially announced" that Kleber no longer was seen as an option, the curtains were closed and the lights shut down on this sad spectacle. Kleber has since returned to training, mumbling something about "playing as soon as he's fit again", which should be any day soon.
Kleber is on a contract until mid 2015. I wouldn't count on a salary raise this year if I was him, but rather a fine for dodging play (against Santos). If Palmeiras do well this and coming years, i.e. win some titles, then "salary raise" and "Kleber" might get mentioned in the same sentence again.
Summing things up: Dioguardi and Kleber came out as major losers. Frizzo significantly boosted his popularity and strengthened his position for next year's presidential race. And a very large majority of Palmeiras supporters, for whom Kleber was perhaps not an idol but certainly one of the more admired players in the squad, feel cheated. After all, the "Gladiator miniature" was launched only months ago, with Kleber telling us how much he loves Palmeiras and that this is the club where he'll end his career.
One lesson to draw is obvious: people are people and money corrupts. An idol is not cast every day, nor does it take a few years to become one.
Kleber hopefully learnt not to blindly trust people around him. And that what takes years to construct can be destroyed in a foolish (or greedy) moment.
I'll finish off with the words of Verdazzo's Conrado Cacace: we can only hope that Kleber has the intelligence to never again, NEVER AGAIN, kiss the Palmeiras badge. Not Kleber, not anyone. Except for Marcos.
Yeah, Leandro. I think too he should have thought about all he risked loosing (respect, being an idol and all that) before bitching about 380.000 reais being too little and that Flamengo would propel him to above 500.000. I'm glad he was put back in his place. He has a contract. Honour it!
That's some tough love. I'll gaurantee he smooches that badge as soon as he scores, especially if it is a momentous goal.
Rafa, you know what? I think it might take a while. He's proud, this one. I think he'll be a sour grape for quite some time.


text:
Q: Static method cannot be referenced from a non static context - trigger before update failing I understand questions like this have been asked in the past, mostly relating to test classes from what I've seen. I've spent hours trying to find a legitimately applicable question/answer to the problem I'm having, and maybe I'm just a stack exchange rookie but I'm pulling the plug and asking a question of my own.
Getting right to it:
I have a trigger on an object called Product Package (LLC_BI__Product_Package__c) with a corresponding before update handler class to perform an update on the triggering record -- in the future, records hopefully, but it's not yet bulkified. The goal of the handler is to update 5 total values on the triggering record by querying for subtotal values drawn from records of related objects.
Here is the trigger:
trigger CreditMemoExposureTrigger on LLC_BI__Product_Package__c (before update) {
    // trigger handler not yet bulkified
    if (Trigger.New.size() == 1) {
        LLC_BI__Product_Package__c triggeringPackage = Trigger.New[0];
        CreditMemoExposureTriggerHandler.updateProductPackage(triggeringPackage);
    }
}

here is the handler class: (apologies if the formatting is non-standard)
public class CreditMemoExposureTriggerHandler {
    private static Id primaryAccount;
    private static List<LLC_BI__Legal_Entities__c> allRelatedEntityInvolvements;

    // total exposure variables
    private static double TotalCurrentOutstandingDirect;
    private static double TotalCurrentOutstandingIndirect;
    private static double TotalOriginalAmountDirect;
    private static double TotalRequestedAmountDirect;

    // variables used in total exposure variable formulas
    private static double CurrentOutstandingDirect = 0;
    private static double CurrentOutstandingIndirect = 0;
    private static double OriginalAmountDirectAO = 0;
    private static double OriginalAmountDirectDebt = 0;
    private static double OriginalAmountDirectPrincipal = 0;
    private static double OriginalAmountIndirectDebt = 0;
    private static double PrincipalAmountDirectDebt = 0;
    private static double PrincipalAmountIndirectDebt = 0;
    private static double PrincipalBalanceDirect = 0;
    private static double RequestedAmountDirectAO = 0;
    private static double RequestedAmountDirectPrincipal = 0;
    private static double RequestedAmountIndirect = 0;

    // master method invoked by trigger that will call all child methods in the class
    public static void updateProductPackage(LLC_BI__Product_Package__c TriggerNew) {
        LLC_BI__Legal_Entities__c primaryEntityInvolvement = [SELECT Id, LLC_BI__Account__c, LLC_BI__Loan__C
                                                              FROM LLC_BI__Legal_Entities__c
                                                              WHERE LLC_BI__Borrower_Type__c = 'Borrower'
                                                              AND LLC_BI__Product_Package__c = :TriggerNew.Id][0];
        primaryAccount = primaryEntityInvolvement.LLC_BI__Account__c;
        allRelatedEntityInvolvements = [SELECT Id, LLC_BI__Account__c, LLC_BI__Loan__c
                                                                        FROM LLC_BI__Legal_Entities__c
                                                                        WHERE LLC_BI__Borrower_Type__c = 'Borrower'
                                                                        AND LLC_BI__Account__c = :primaryAccount];
        // run all calculations
        processAllLoans();
        processAllDebt();
        recalculateTotals();

        TriggerNew.Total_Current_Outstanding_Direct__c = TotalCurrentOutstandingDirect;
        TriggerNew.Total_Current_Outstanding_Indirect__c = TotalCurrentOutstandingIndirect;
        TriggerNew.Total_Original_Amount_Direct__c = TotalOriginalAmountDirect;
        TriggerNew.Total_Requested_Amount_Direct__c = TotalRequestedAmountDirect;
        TriggerNew.Total_Requested_Amount_Indirect__c = RequestedAmountIndirect;
    }

    // method to add values from retrieved loan records to terms in total equations
    private static void processAllLoans() {
        // retrieve sets of loans
        Set<LLC_BI__Loan__c> directPrincipalBalanceLoans = getDirectPrincipalBalanceLoans();
        Set<LLC_BI__Loan__c> directAmountOutstandingLoans = getDirectAmountOutstandingLoans();
        Set<LLC_BI__Loan__c> indirectLoans = getIndirectLoans();

        // loop through direct principal balance loans
        for (LLC_BI__Loan__c currentLoan : directPrincipalBalanceLoans) {
            PrincipalBalanceDirect += currentLoan.LLC_BI__Principal_Balance__c;
            OriginalAmountDirectPrincipal += currentLoan.WMX_Initial_Amount__c;
            RequestedAmountDirectPrincipal += currentLoan.LLC_BI__Amount__c;
        }

        // loop through direct amount outstanding loans
        for (LLC_BI__Loan__c currentLoan : directAmountOutstandingLoans) {
            CurrentOutstandingDirect += currentLoan.LLC_BI__AmountOutstanding__c;
            OriginalAmountDirectAO += currentLoan.WMX_Initial_Amount__c;
            RequestedAmountDirectAO += currentLoan.LLC_BI__Amount__c;
        }

        // loop through indirect loans
        for (LLC_BI__Loan__c currentLoan : indirectLoans) {
            CurrentOutstandingIndirect += currentLoan.LLC_BI__AmountOutstanding__c;
            RequestedAmountIndirect += currentLoan.LLC_BI__Amount__c;
        }
    }

    // method to add values from retrieved debt records to terms in total equations
    private static void processAllDebt() {
        // retrieve sets of debt
        List<LLC_BI__Debt__c> directDebt = getDirectdebt();
        List<LLC_BI__Debt__c> indirectDebt = getIndirectDebt();

        // loop through direct debt
        for (LLC_BI__Debt__c currentDebt : directDebt) {
            PrincipalAmountDirectDebt += currentDebt.LLC_BI__Principal_Balance__c;
            OriginalAmountDirectDebt += currentDebt.LLC_BI__Original_Amount__c;
        }

        // loop through indirect debt
        for (LLC_BI__Debt__c currentDebt : indirectDebt) {
            PrincipalAmountIndirectDebt += currentDebt.LLC_BI__Principal_Balance__c;
            OriginalAmountIndirectDebt += currentDebt.LLC_BI__Original_Amount__c;
        }
    }

    // method to get all direct principal balance loans
    private static Set<LLC_BI__Loan__c> getDirectPrincipalBalanceLoans() {
        return new Set<LLC_BI__Loan__c> {
            [SELECT Id, LLC_BI__Principal_Balance__c, LLC_BI__Amount__c, WMX_Initial_Amount__c, LLC_BI__Account__c
            FROM LLC_BI__Loan__c
            WHERE LLC_BI__Stage__c != 'Complete'
            AND LLC_BI__Product__c NOT IN ('ACH Debit Exposure', 'RDC Exposure')
            AND LLC_BI__Structure_Hierarchy__c != 'Current Takedown'
            AND LLC_BI__hasRenewal__c = false
            AND (
                LLC_BI__Product__c LIKE '%Term%'
                OR LLC_BI__Product__c IN ('Agriculture', 'Commercial')
            )
            AND Id IN (SELECT LLC_BI__Loan__c
                       FROM LLC_BI__Legal_Entities__c
                       WHERE Id IN :allRelatedEntityInvolvements)]
        };
    }

    // method to get all direct amount outstanding loans
    private static Set<LLC_BI__Loan__c> getDirectAmountOutstandingLoans() {
        return new Set<LLC_BI__Loan__c> {
            [SELECT Id, LLC_BI__AmountOutstanding__c, LLC_BI__Amount__c, WMX_Initial_Amount__c, LLC_BI__Account__c
            FROM LLC_BI__Loan__c
            WHERE LLC_BI__Stage__c != 'Complete'
            AND LLC_BI__Product__c NOT IN ('ACH Debit Exposure', 'RDC Exposure')
            AND LLC_BI__Structure_Hierarchy__c != 'Current Takedown'
            AND LLC_BI__hasRenewal__c = false
            AND (NOT LLC_BI__Product__c LIKE '%Term%')
            AND LLC_BI__Product__c NOT IN ('Agriculture', 'Commercial')
            AND Id IN (SELECT LLC_BI__Loan__c
                       FROM LLC_BI__Legal_Entities__c
                       WHERE Id IN :allRelatedEntityInvolvements)]
        };
    }

    // method to get all indirect loans
    private static Set<LLC_BI__Loan__c> getIndirectLoans() {
        return new Set<LLC_BI__Loan__c> {
            [SELECT Id, LLC_BI__AmountOutstanding__c, LLC_BI__Amount__c, WMX_Initial_Amount__c, LLC_BI__Account__c
            FROM LLC_BI__Loan__c
            WHERE LLC_BI__Stage__c != 'Complete'
            AND LLC_BI__hasRenewal__c = false
            AND LLC_BI__Product__c IN ('ACH Debit Exposure', 'RDC Exposure')
            AND Id IN (SELECT LLC_BI__Loan__c
                       FROM LLC_BI__Legal_Entities__c
                       WHERE Id IN :allRelatedEntityInvolvements)]
        };
    }

    // method to get all direct debt
    private static List<LLC_BI__Debt__c> getDirectDebt() {
        return [SELECT Id, LLC_BI__Original_Amount__c, LLC_BI__Available_Amount__c, LLC_BI__Principal_Balance__c
                FROM LLC_BI__Debt__c
                WHERE LLC_BI__Account__c = :primaryAccount
                AND Excluded_From_Exposure__c = false
                AND LLC_BI__Exposure_Type__c IN ('Direct', 'ACH Credit, Derivative, FX, Overdraft Direct Exposure')];
    }

    // method to get all indirect debt
    private static List<LLC_BI__Debt__c> getIndirectDebt() {
        return [SELECT Id, LLC_BI__Original_Amount__c, LLC_BI__Available_Amount__c, LLC_BI__Principal_Balance__c
                FROM LLC_BI__Debt__c
                WHERE LLC_BI__Account__c = :primaryAccount
                AND Excluded_From_Exposure__c = false
                AND LLC_BI__Exposure_Type__c IN ('Direct', 'RDC Exposure', 'ACH RDC Exposure', 'ACH Credit, Derivative, FX, Overdraft Indirect Exposure')];
    }

    // method to recalculate total exposure levels
    private static void recalculateTotals() {
        TotalCurrentOutstandingDirect = CurrentOutstandingDirect + PrincipalAmountDirectDebt + PrincipalBalanceDirect;
        TotalCurrentOutstandingIndirect = CurrentOutstandingIndirect + PrincipalAmountIndirectDebt;
        TotalOriginalAmountDirect = OriginalAmountDirectAO + OriginalAmountDirectDebt + OriginalAmountDirectPrincipal;
        TotalRequestedAmountDirect = RequestedAmountDirectAO + RequestedAmountDirectPrincipal;
    }
}

any time we attempt to save a trivial update to an LLC_BI__Product_Package__c record to trip the trigger, we get the error "Static method cannot be referenced from a non static context". I have declared every single possible class-level variable and class method as static so I have positively no idea why this would be the case.
Just hoping someone can answer before I break this company laptop and they fire me.

redpajama_set_name: RedPajamaStackExchange


text:
Syria fighting looms over Putin-Erdogan meeting
Syria fighting looms over Putin-Erdogan meeting /node/1608351/middle-east
Turkish-backed Syrian fighters perform maneuvers past tents with posters showing the flags of the Kurdish People's Protection Forces during a military exercise on Syria's northern border with Turkey. (AFP)
https://arab.news/vwv42
Updated 05 January 2020
MENEKSE TOKYAY
The Russian president is sensitive about areas outside Turkey's proposed safe zone
ANKARA: Russian media is reporting that Moscow is unhappy with Turkey for its attacks on Syrian Kurds, ahead of President Vladimir Putin's visit to Ankara on Jan. 8. Turkish troops launched Operation Peace Spring in northern Syria last October. President Recep Tayyip Erdogan said the aim was to "prevent the creation of a terror corridor across the southern border and to bring peace to the area." Turkish armed forces were hoping to establish a safe zone extending 32 km into Syrian territory.
Two weeks after the launch a deal was struck between Turkey and Russia, ending the operation and establishing a deal that laid the ground for joint Turkish-Russian military patrols across areas of the safe zone.
The Turkish attacks, on the position of Syrian Kurds at Tal Tamir where Russia recently set up an observation post, are reportedly seen by Moscow as noncompliance of the joint agreement. Dozens of Russian military police have been deployed recently to Tal Tamir.
Oytun Orhan, coordinator of Syria studies at the Ankara-based think tank ORSAM, said Russia was sensitive about areas outside the Turkish proposed "safe zone."
"Another scenario is that Turkey might have tried to increase its bargaining chip by putting more pressure on Russia before any negotiations during Putin's planned visit, because Russia is still weak in the eastern flank of the Euphrates River while Turkey intends to get more Russian support before any move to Libya," Orhan told Arab News.
Turkey considers the Kurdish People's Protection Units militia (YPG) a terrorist organization and an extension of the outlawed Kurdistan Workers' Party (PKK), which has waged an insurgency against Turkey since 1984. The YPG-led Syrian Democratic Forces (SDF) have been Turkey's main target in its operation.
Turkey might have tried to increase its bargaining chip by putting more pressure on Russia.
Oytun Orhan, Foreign affairs expert
"So far, the YPG shared its authority with (Syrian) regime forces and Russia, however it did not completely withdraw from the region," Orhan added. "Turkey might use its military force to convince Russia to meet its commitments under bilateral deals and break up Kurdish control in the adjacent zones."
Summit on Syria
A four-way summit on Syria is expected to be held in Istanbul in February with the participation of Britain, France, Germany and Turkey.
Sinan Hatahet, an Istanbul-based Syria analyst, said that Russia and Turkey had their own reasons for cooperating in the region.
"Russia sees Turkey's role in containing the opposition. Turkey considers Russia's role as important in containing the YPG and producing an alternative to their forces near Turkey's borders," he told Arab News. "Nevertheless, they don't see eye-to-eye on everything. Both of them gave their own definitions about how the final security arrangement should be in Syria."
According to Hatahet, the latest fighting around Tal Tamir represents the Russian and Turks trying to delimit their red lines and push their zones of influence because the agreements signed have been very broad.
Topics: Kurds Turkey
Turkish intervention risks Syria scenario for Libya, say experts
Quarter-of-a-million Syrian refugees headed to Turkey, Erdogan wants to stop them
Yemen's government vows to mitigate effects of Houthi terrorism designation /node/1794346/middle-east
A military vehicle is stationed on the tarmac of Yemen's Aden airport. Yemen says the Stockholm Agreement has failed to bring peace to the country. (File/AFP)
Saeed Al-Batati
International community urged not to surrender to 'blackmailing and intimidation'
Stockholm Agreement has failed to bring peace, Yemen PM said
AL-MUKALLA: Yemen's prime minister has vowed to address any impact on humanitarian assistance or the remittances of citizens abroad following the US move to designate the Iran-backed Houthis as a terrorist organization.
Maeen Abdul Malik Saeed also urged the international community not to surrender to "Houthi blackmailing" and intimidation.
Saeed defended his government's strong support of the designation during a virtual interview with foreign journalists sponsored by the Sanaa Center for Strategic Studies.
He said that his government had formed a committee to handle any effects on the delivery of humanitarian assistance inside Houthi-controlled areas and the remittances of Yemenis abroad.
"We are determined to prevent any impact of the decision on the Yemenis. We have formed a committee to mitigate effects of the decision," he said.
When the US announced its intention to designate the Houthi movement as a terrorist organization last week, Yemen's government quickly urged the US administration to put the decision in place, predicting it would stop Houthi crimes and their looting of humanitarian assistance, and would smoothe the way for peace.
Referring to the impact of the US designation on peace talks between the Yemeni government and the Houthis, Saeed said that the decision would not undermine peace efforts. He said that the Houthis would be accepted as part of the Yemeni political and social spectrum when they abandoned hard-line ideologies and embraced equality and justice.
The Yemeni government agreed to go to Stockholm for reaching a solution to stop fighting and saving the city. This model has failed.
Maeen Abdul Malik Saeed, Yemen's prime minister
"This is an important pressure card on them and a real definition of them," he said, adding that the Yemenis would not allow the Houthi movement to rule them.
"Yemen would not be ruled by a racist and terrorist group," he said.
Formed under the Riyadh Agreement, Yemen's new government's ministers narrowly escaped death on Dec. 30 when three precision-guided missiles ripped through Aden airport shortly after their plane touched down.
The government accused the Houthis of staging the attack, saying that missile fragments collected from the airport showed that they were similar to missiles that targeted Marib city in the past.
The prime minister said that the Yemeni government had offered many concessions to reach an agreement to end the war. It had agreed to engage in direct talks with the Houthis in Stockholm in 2018 despite the fact that the Yemeni government forces were about to seize control of the Red Sea city of Hodeidah. However, the Stockholm Agreement had failed to bring peace to Yemen, he said.
"The government forces were about to capture the city within five days maximum. The Yemeni government agreed to go to Stockholm for reaching a solution to stop fighting and saving the city. This model has failed," Saeed said.
In Riyadh, Yemen's president Abed Rabbo Mansour Hadi on Friday appointed Ahmed Obeid bin Daghar, a former prime minister and a senior adviser to the president, as president of the Shoura Council.
Hadi also appointed Ahmed Ahmed Al-Mousai as the country's new attorney general.
Fighting continues
Heavy fighting between Yemeni government forces and the Houthis broke out on Sunday for the third consecutive day in contested areas in the districts of Hays and Durihimi in the western province of Hodeidah. Official media said that dozens of Houthi rebels and several government troops were killed in the fighting and loyalists pushed back three assaults by Houthis in Durihimi district.
In neighboring Hays, the Joint Forces media said on Sunday that the Houthis hit government forces with heavy weapons before launching a ground attack in an attempt to seize control of new areas in the district.
The Houthis failed to make any gains and lost dozens of fighters along with several military vehicles that were burnt in the fighting, the same media outlets said. Heavy artillery shelling and land mines planted by the Houthis have killed more than 500 civilians since late 2018, local rights groups said.
Topics: Yemen Houthi
Still hope for Yemen despite violence and famine, says UN envoy
Workshop outlines plans for malaria support in Yemen


Splento provides high quality, on-demand professional photography - processed, edited and delivered to you in 48 hours.
Hiring a professional photographer has never been easier! Splento's team of carefully vetted professional photographers are equally equipped to cover all types of events and at a very fair price. Make a booking in under a minute and our professional photographers can be wherever you need them, in as little as two hours. Splento's community of 1,500 photographers around the globe has served over 7,000 clients and edited 170,000 images.
While consulting for Splento, Matthew built out analytics capabilities and optimized search performance across the site. This included support in building out a powerful long-tailed targeting tactic that led to a huge increase in high intent, highly-segmentable inbound based on customer need and location.


In this training session we will mostly detach from our keyboards and deal with an security incident in a Role Play format. Here we will deal with a realistic simulation of a compromised Identity Provider and will look at various obstacles we come across on all levels (technical, managerial, public relations and legal) of the incident handling process.
Members/Future Members of Security/Admin Teams, Site/NGI/Project/Federation Management, Press-, Legal Contacts, Managers and security personnel of Research Infrastructures, User communities and Virtual Organisations.


text:
Q: Xfinity Modem/Router Handing Out Strange IP Addresses I have an Xfinity (Comcast) provided Modem/Router combo that's been acting strange recently. It's a DPC3941T manufactured by Cisco.
I have the router set on a 255.0.0.0 subnet with DHCP enabled for the addresses 10.0.0.1/24 and Wi-Fi is disabled. I have a Ubiquiti Unifi AP Lite for the Wi-Fi access throughout my home.
But what I have noticed recently is that the router seems to be handing out IP's on a completely different subnet. And all of these other IP's have no similarity other than the 10 at the start. Here is a screencap of the offending devices.
None of the affected devices have restricted access. Speeds are the same as usual and I don't really have a way to determine if they are accessible from other subnets however, chromecasts still work.
Any ideas as to how to fix this? Or should I just let it be since nothing seems to be affected?
Thanks

A: Those addresses are all in the same network if your network mask is 255.0.0.0.
Apparently you are unfamiliar with IPv4 subnetting. An IPv4 address is a 32-bit binary number. The dotted-decimal notation that you see is simply to make it easier for humans to read. To determine the network of an IPv4 address you simply perform a logical AND with the address and mask. If the result is the same among addresses, they are on the same network.
For example, one of the addresses about which you are concerned is 10.5.83.205, but you are not concerned about the following address, 10.0.0.220. The mask for both addresses is 255.0.0.0. If you AND both addresses with the mask, you end up with the same network, so both addresses are on the same network:
10.5.83.205 is 00001010000001010101001111001101
255.0.0.0   is 11111111000000000000000000000000
           AND ================================
               00001010000000000000000000000000 = 10.0.0.0

10.0.0.220  is 00001010000000000000000011011100
255.0.0.0   is 11111111000000000000000000000000
           AND ================================
               00001010000000000000000000000000 = 10.0.0.0


text:
UPEI Women's Basketball 1988-1989
Anyone who saw the UPEI Women's Basketball team play in 1988–89 knew they were watching something special.
Defense, power, scoring, coaching, and a whole lot of heart made the two-time defending AUAA champions virtually unbeatable, and gave them a permanent home in the CIAU Top 10 rankings.
UPEI hosted the AUAA championship that year, and in a nail-biter in front of a packed crowd at Alumni Gym, the Panthers made it three in a row with a victory over the Dalhousie Tigers.
Next stop was the CIAUs at Laurentian University. Ranked sixth, the Panthers knocked off third-seeded Regina to advance to the semi-finals. A win over second-seeded University of Victoria put UPEI into the final against the University of Calgary. The Dinos gave the Panthers a bit more than they could handle, leaving UPEI with the silver medal and one of the best national finishes ever by an AUAA women's team.
Paula Edwards and Stephanie Smith made the AUAA first all-star team that year, and Susan Knickle and Janet Nichols were voted to the second AUAA All-Star team. Other team members were Tracey Bowie, Tobey Jones, Lori Knickle, Stephanie Knickle, Kathy Quinn, and Kelly Shea. Head coach was Dave MacNeill and assistant coach was Karen Rowell.
For being one of the most successful teams ever at UPEI, the 1988–89 UPEI Women's Basketball team, AUAA champs, and CIAU silver medalists will be inducted tonight into the UPEI Sport Hall of Fame.
Plaque presentation by 2000–2001 Inductee Peter Gordon to team captains, Janet Nichols, Susan Knickle-Deighan, and Tracey Bowie, with the rest of the players and coaches of the 1988-89 team present.


LizzyEuphoryX . kiraspirited. LinaTaft. theSkipper.
MarissaFordSquirtDollXXSarai9ExquisiteGreta .brunohotxxxxLustfullANGELxSarai9ExquisiteGreta .LinaTafttatianahot2015SquirtDollXXNaughtyLovDiva .Gerda09AndrewDreamNatyXnaughtyNickyFire .DEXTERPLAYcarlagiralhotNINAxROSEtheSkipper .SquirtDollXXSaphireJonesMingzhuXin0007BondALICE .WandaBoujiniAndrewDreamEleonoresbrunohotxxxx .YesLoveguysatgmlMICHAELYBENRaynaTyler .LizaDiMiHarukyMICHAELYBENBarbieSexyHot .MingzhuXinFlowerBeeNatalyRouseNatyXnaughty .1Sasha1RockyBayBlackDiamond09CnRoseCn .
FlowerBeeWandaBoujiniBarbieSexyHotROGERSSandDILIPS .guysatgmlpowerbottom5000MarissaFordxKarmaLovex .ElaLovasianCOUPLEstarLustfullANGELxlurmix .SweetCuteAnnieCandiSmithROGERSSandDILIPSBlondeTsDirtySEX .AliaMoonXExquisiteGretaKRISTHIAN1AliaMoonX .0007BondALICEMassComWynWynJasonColtsBlackSami .AronCoxCutiePatriciaFluffy69YesLove .CutiePatriciaYolasexiMasterBlueEyesWahdata .fistmyhole771Sasha1asianCOUPLEstarNatalyRouse .SeductiveDorianDaisyLatina23DEXTERPLAYLauraBrooks .carlagiralhotPrivatePassionXRaynaTylerAliaMoonX .


text:
#include "GlobalDef.h"

#include "Rs_Fsm.h"
#include "Rs_Keyless.h"
#include "Rs_Aux.h"
#include "Rs_Option.h"
#include "Rs_ParkingLights.h"
#include "Rs_Valet.h"
#include "Rs_Doorlock.h"
#include "Rs_Behaviour.h"
#include "Rs_Horn.h"
#include "Rs_Sleep.h"
#include "Rs_StarterKill.h"
#include "Rs_Status.h"
#include "Rs_Ignition.h"
#include "Periodic.h"
#include "LED.h"
#include "Alarm.h"
#include "Rs_Menu.h"

#define KEYLESS_UNLOCK_ALL_TIMEOUT		4 // Time in Second to detect unlock all between 2 unlock
#define KEYLESS_REARM_AFTER_DELAY		10// After that time we send a rearm even if already arm

#if defined(INCLUDE_DIAGNOSTICS)
	#include "Diagnostics_Status.h"
#endif

void Rs_Keyless_ManageNotification(void);
Uint8 Rs_Keyless_NotificationCheckZones(void);

static volatile Uint8 notificationDelayed=NO;
static volatile Uint8 notification_Timer=0;
static volatile Uint8 unlockAllTimer=0;
static volatile Uint8 rearm_AfterDelay=0;
static volatile Uint16 oemAlarm_Timer=0;

#define OEM_ALARM_VALIDATION_DELAY_RESET		6000+1 // 10 sec
#define OEM_ALARM_VALIDATION_DELAY_VOID			0 //

static volatile Uint8 doorstatus=KEYLESS_STATUS_NA;
static volatile Uint8 armstatus=KEYLESS_STATUS_NA;
static volatile Uint8 panicState=OFF;

void Rs_Keyless_Init(void)
{
	Periodic_Enable(PERIODIC_OPENZONENOTIFICATION_EVENT, 100);
	unlockAllTimer=0;
}

// Called by main loop
void Rs_Keyless_Execute(void)
{
	static Uint8 lastDoorlockState=KEYLESS_STATUS_NA;

	// To refresh passive notification
	Rs_Keyless_ManageNotification();

	// This periodic is running everytime (sec)
	if(Periodic_GetState(PERIODIC_OPENZONENOTIFICATION_EVENT))
	{
		// Countdown
		if(notification_Timer)
		{
			notification_Timer--;
		}

		if(rearm_AfterDelay)
		{
			rearm_AfterDelay--;
		}
	}

	if(Periodic_GetState(PERIODIC_UNLOCK_ALL_EVENT))
	{
		Rs_Sleep_Reset();

		if(unlockAllTimer)
		{
			unlockAllTimer--;
		}
		else
		{
			Periodic_Disable(PERIODIC_UNLOCK_ALL_EVENT);
		}
	}

	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// This part control only the refresh to the after market remotes!
	////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	// If we need to send notification to remote
	// Send OEM arm/disarm status to after market remote
	if((Rs_Options_GetBitFromMemory(RS_OPTION_ALARM_CONTROL_FROM_OEM_KEYLESS)==ALARM_CONTROL_FROM_OEM_KEYLESS_WITH_NOTIFICATION))
	{
		// At the end of the delay, if the OEM alarm state change we need to notice our remotes
		if(oemAlarm_Timer==1)
		{
			// If doorlock state change
			if(Rs_Keyless_GetDoorlockStatus() != lastDoorlockState)
			{
				if(Rs_Keyless_GetDoorlockStatus()==KEYLESS_STATUS_UNLOCKED)
				{
					// Send notification to remote
					Rs_Behaviour_NotifyRemotesFromOEM(0);
				}
				if(Rs_Keyless_GetDoorlockStatus()==KEYLESS_STATUS_LOCKED)
				{
					// Send notification to remote
					Rs_Behaviour_NotifyRemotesFromOEM(1);
				}
			}
			// void the timer
			oemAlarm_Timer=OEM_ALARM_VALIDATION_DELAY_VOID;
		}
		// OEM_ALARM_VALIDATION_DELAY_VOID
		else if(oemAlarm_Timer==0)
		{
			// keep a backup to avoid to send useless frame is state do lock-unlock-lock  (no change at the end..)
			lastDoorlockState=Rs_Keyless_GetDoorlockStatus();
		}
		// Need to reset sleep check until the update to remotes
		else
		{
			Rs_Sleep_Reset();
		}
	}
}

// Called by Scheduler
void Rs_Keyless_Update(void)
{
	if(oemAlarm_Timer>1)
	{
		oemAlarm_Timer--;
	}
}

// To refresh option
void Rs_Keyless_RefreshOptions(void)
{

}

// This function execute task to do when a keyless action is done
// Source : Uart 0 or 1 (RF or Telematics), Internal : 3
//
void Rs_Keyless_SetEvent(Uint8 source, Uint8 event)
{
	Rs_Sleep_Reset();

	// Panic OFF if 2 panic ON
	if(Rs_Horn_GetPanicState())	// <1us
	{
		// Disarm the after market alarm system
		// We need to check if OEM are enabled or not first and if we got the OEM arm/disarm code
		if((Rs_Options_GetBitFromMemory(RS_OPTION_ALARM_CONTROL_FROM_OEM_KEYLESS)!=ALARM_CONTROL_FROM_OEM_KEYLESS_DISABLE)
		&& ((event == KEYLESS_OEM_DISARM) || (event == KEYLESS_OEM_ARM)))
		{
			Rs_Doorlock_SetEvent(DOORLOCK_PANIC_OFF);
			#if defined(INCLUDE_DIAGNOSTICS)
				DiagStatus_Set(DIAG_STATUS_PANIC, OFF, DIAG_STATUS_NA);
			#endif
			// To void command
			if(event==KEYLESS_PANIC_ON)
			{
				return;
			}
		}
	}

	// Car finder off if anything keyless
	if(Rs_Horn_GetCarfinderState())	// <1us
	{
		Rs_Horn_SendChirp(0);
	}

	switch(event)
	{
		case KEYLESS_LOCK:

			// Min : 28.4us
			// Max : 66.2us
			Rs_Keyless_SendNotification(KEYLESS_LOCK);		// Must be done before Alarm_Arm()/Alarm_Disarm()

			goto Lock;

		case KEYLESS_LOCK_SILENT:
			Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_LOCK);	// Manage Parking lights

			Lock:
			// To have a unlock driver on next unlock
			unlockAllTimer=0;

			Alarm_Arm();	// <1us

			#if defined(INCLUDE_DIAGNOSTICS)
				// 2.6us
				DiagStatus_Set(DIAG_STATUS_AFTERMARKET_LOCK, DIAG_STATUS_TRIGGERED, DIAG_STATUS_DATA);
			#endif

			// Do the arm/lock output
			// 5.8us
			if(((Rs_Options_GetBitFromMemory(RS_OPTION_ANALOG_REARM_TRIGGER)==ANALOG_REARM_TRIGGER_START_SHUTDOWN_LOCK))
			|| ((Rs_Options_GetBitFromMemory(RS_OPTION_ANALOG_REARM_TRIGGER)==ANALOG_REARM_TRIGGER_SHUTDOWN_LOCK)))
			{
				// Rearm after a delay even if already locked
				if(rearm_AfterDelay==0)
				{
					Rs_Doorlock_SetEvent(DOORLOCK_ARM_LOCK);
				}
				// Rearm on first lock only
				else if(Rs_Status_GetState(STATUS_DOORLOCK_STATE))
				{
					Rs_Doorlock_SetEvent(DOORLOCK_LOCK);
				}
				// Arm/lock if ignition is off
				else if(Rs_Ignition_GetVehicleState()==NO)
				{
					Rs_Doorlock_SetEvent(DOORLOCK_ARM_LOCK);
				}
				// Lock only
				else
				{
					Rs_Doorlock_SetEvent(DOORLOCK_LOCK);
				}
			}
			// Do the lock only
			else
			{
				Rs_Doorlock_SetEvent(DOORLOCK_LOCK);
			}

			// Must be refresh after Rs_Doorlock_SetEvent(DOORLOCK_ARM_LOCK);
			Rs_Keyless_SetDoorlockStatus(KEYLESS_STATUS_LOCKED);	// 2.2us
			// Reset Rearm counter
			rearm_AfterDelay=KEYLESS_REARM_AFTER_DELAY;
			// void the timer
			// We void the timer to not send uselessly the refresh to the remote if a lock or unlock is done between the last OEM and the refresh to remote
			oemAlarm_Timer=OEM_ALARM_VALIDATION_DELAY_VOID;
			break;

		case KEYLESS_UNLOCK:
			Rs_Keyless_SendNotification(KEYLESS_UNLOCK);	// Must be done before Alarm_Arm()/Alarm_Disarm()
			goto Unlock;

		case KEYLESS_UNLOCK_SILENT:
			Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_UNLOCK);	// Manage Parking lights

			Unlock:
			Alarm_Disarm();

			// To resync timer
			Periodic_Enable(PERIODIC_UNLOCK_ALL_EVENT, 100);
			// If timer !=0, we have unlock all
			if(unlockAllTimer)
			{
				unlockAllTimer=KEYLESS_UNLOCK_ALL_TIMEOUT;
				Rs_Doorlock_SetEvent(DOORLOCK_UNLOCK_OTHERS);
			}
			// If timer=0, we have unlock driver
			else
			{
				unlockAllTimer=KEYLESS_UNLOCK_ALL_TIMEOUT;
				Rs_Doorlock_SetEvent(DOORLOCK_DISARM_UNLOCK);
			}
			// Must be refresh after Rs_Doorlock_SetEvent(DOORLOCK_ARM_LOCK);
			Rs_Keyless_SetDoorlockStatus(KEYLESS_STATUS_UNLOCKED);

			#if defined(INCLUDE_DIAGNOSTICS)
				DiagStatus_Set(DIAG_STATUS_AFTERMARKET_UNLOCK, DIAG_STATUS_TRIGGERED, DIAG_STATUS_DATA);
			#endif
			// void the timer
			// We void the timer to not send uselessly the refresh to the remote if a lock or unlock is done between the last OEM and the refresh to remote
			oemAlarm_Timer=OEM_ALARM_VALIDATION_DELAY_VOID;

			break;

		case KEYLESS_UNLOCK_ALL:
			Rs_Keyless_SendNotification(KEYLESS_UNLOCK);	// Must be done before Alarm_Arm()/Alarm_Disarm()

		case KEYLESS_UNLOCK_ALL_SILENT:
			Alarm_Disarm();

			#if defined(INCLUDE_DIAGNOSTICS)
				DiagStatus_Set(DIAG_STATUS_AFTERMARKET_UNLOCK, DIAG_STATUS_TRIGGERED, DIAG_STATUS_DATA);
			#endif

			Rs_Keyless_SetDoorlockStatus(KEYLESS_STATUS_UNLOCKED);
			Rs_Doorlock_SetEvent(DOORLOCK_UNLOCK_ALL);
			break;

		case KEYLESS_DISARM:
			Alarm_Disarm();
			Rs_Doorlock_SetEvent(DOORLOCK_DISARM);

			break;

		case KEYLESS_REMOTESTART:
			oemAlarm_Timer=OEM_ALARM_VALIDATION_DELAY_VOID;

			Rs_Horn_ChirpStart();
			Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_START);

			// Start with the source
			if(source==KEYLESS_SOURCE_RF)
			{
				Rs_Fsm_RemoteStart(RS_REMOTESTART_SOURCE_REMOTE);
			}
			else if(source==KEYLESS_SOURCE_TELEMATICS)
			{
				Rs_Fsm_RemoteStart(RS_REMOTESTART_SOURCE_TELEMATICS);
			}
			else
			{
				Rs_Fsm_RemoteStart(RS_REMOTESTART_SOURCE_NA);
			}

			// Must be refresh after Rs_Doorlock_SetEvent(KEYLESS_STATUS_START_STOP);
			Rs_Keyless_SetDoorlockStatus(KEYLESS_STATUS_START_STOP);

			#if defined(INCLUDE_DIAGNOSTICS)
				DiagStatus_Set(DIAG_STATUS_AFTERMARKET_START_STOP, DIAG_STATUS_TRIGGERED, DIAG_STATUS_DATA);
			#endif

			break;

		case KEYLESS_REMOTESTOP:
			oemAlarm_Timer=OEM_ALARM_VALIDATION_DELAY_VOID;

			// Start with the source
			if(source==KEYLESS_SOURCE_RF)
			{
				Rs_Fsm_RemoteStop(RS_REMOTESTOP_SOURCE_REMOTE);
			}
			else if(source==KEYLESS_SOURCE_TELEMATICS)
			{
				Rs_Fsm_RemoteStop(RS_REMOTESTOP_SOURCE_TELEMATICS);
			}
			// Must be refresh after Rs_Doorlock_SetEvent(KEYLESS_STATUS_START_STOP);
			Rs_Keyless_SetDoorlockStatus(KEYLESS_STATUS_START_STOP);

			#if defined(INCLUDE_DIAGNOSTICS)
				DiagStatus_Set(DIAG_STATUS_AFTERMARKET_START_STOP, DIAG_STATUS_TRIGGERED, DIAG_STATUS_DATA);
			#endif

			break;

		case KEYLESS_TRUNK:
			Alarm_Disarm();
			Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_TRUNK);
			Rs_Doorlock_SetEvent(DOORLOCK_TRUNK);

			// refresh chirp status if trunk sequense do disarm or unlock
			if(Rs_Options_GetBitFromMemory(RS_OPTION_TRUNK_SEQUENCE) != TRUNK_SEQUENCE_TRUNK_ONLY)
			{
				// This function will also void the lock chirp on second lock chirp config when we relock door after a trunk sequence
				Rs_Horn_ChirpUnlock();
			}

			#if defined(INCLUDE_DIAGNOSTICS)
				DiagStatus_Set(DIAG_STATUS_AFTERMARKET_TRUNK, DIAG_STATUS_TRIGGERED, DIAG_STATUS_DATA);
			#endif

			break;

		case KEYLESS_PANIC_ON:
			Rs_Doorlock_SetEvent(DOORLOCK_PANIC_ON);
			#if defined(INCLUDE_DIAGNOSTICS)
				DiagStatus_Set(DIAG_STATUS_PANIC, ON, DIAG_STATUS_NA);
			#endif

			break;

		case KEYLESS_PANIC_OFF:
			Rs_Doorlock_SetEvent(DOORLOCK_PANIC_OFF);
			#if defined(INCLUDE_DIAGNOSTICS)
				DiagStatus_Set(DIAG_STATUS_PANIC, OFF, DIAG_STATUS_NA);
			#endif
			break;

		case KEYLESS_AUX1:
			Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_AUX);
			Rs_Aux_Execute(AUX1);

			#if defined(INCLUDE_DIAGNOSTICS)
				DiagStatus_Set(DIAG_STATUS_AFTERMARKET_AUX1, DIAG_STATUS_TRIGGERED, DIAG_STATUS_DATA);
			#endif

			break;

		case KEYLESS_AUX2:
			Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_AUX);
			Rs_Aux_Execute(AUX2);

			#if defined(INCLUDE_DIAGNOSTICS)
				DiagStatus_Set(DIAG_STATUS_AFTERMARKET_AUX2, DIAG_STATUS_TRIGGERED, DIAG_STATUS_DATA);
			#endif

			break;

		case KEYLESS_AUX3:
			Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_AUX);
			Rs_Aux_Execute(AUX3);

			#if defined(INCLUDE_DIAGNOSTICS)
				DiagStatus_Set(DIAG_STATUS_AFTERMARKET_AUX3, DIAG_STATUS_TRIGGERED, DIAG_STATUS_DATA);
			#endif

			break;

		case KEYLESS_AUX4:
			Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_AUX);
			Rs_Aux_Execute(AUX4);

			#if defined(INCLUDE_DIAGNOSTICS)
				DiagStatus_Set(DIAG_STATUS_AFTERMARKET_AUX4, DIAG_STATUS_TRIGGERED, DIAG_STATUS_DATA);
			#endif

			break;

		case KEYLESS_AUX5:
			Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_AUX);
			Rs_Aux_Execute(AUX5);

			#if defined(INCLUDE_DIAGNOSTICS)
				DiagStatus_Set(DIAG_STATUS_AFTERMARKET_AUX5, DIAG_STATUS_TRIGGERED, DIAG_STATUS_DATA);
			#endif

			break;

		// Use to disarm ADS alarm only
		case KEYLESS_OEM_DISARM:

			// Disarm the after market alarm system
			if(Rs_Options_GetBitFromMemory(RS_OPTION_ALARM_CONTROL_FROM_OEM_KEYLESS)!=ALARM_CONTROL_FROM_OEM_KEYLESS_DISABLE)
			{
				oemAlarm_Timer=OEM_ALARM_VALIDATION_DELAY_RESET;		// Keep this before Rs_Keyless_SendNotification() !!!

				Rs_Menu_Set_OEM_Alarm(2);
				// To reset Double lock counter
				Rs_Horn_VoidDoubleLockNotificationCounter();

				Rs_Keyless_SendNotification(KEYLESS_OEM_DISARM);		// Must be done before Alarm_Arm()/Alarm_Disarm()
				Rs_Keyless_SetDoorlockStatus(KEYLESS_STATUS_UNLOCKED);
				#warning "Rs_Keyless: check if we need to refresh the lock state here!!! (Already done in KEYLESS_OEM_UNLOCK)"
				Rs_Status_SetState(STATUS_DOORLOCK_OFF, ON);

				Alarm_Disarm();
				#if defined(INCLUDE_DIAGNOSTICS)
					DiagStatus_Set(DIAG_STATUS_OEM_UNLOCK, DIAG_STATUS_TRIGGERED, DIAG_STATUS_NA);
				#endif

				// After keyless
				Rs_Behaviour_Send_OEM_Disarm();
			}
			break;

		// Use to arm ADS alarm only
		case KEYLESS_OEM_ARM:

			// Arm the after market alarm system
			if(Rs_Options_GetBitFromMemory(RS_OPTION_ALARM_CONTROL_FROM_OEM_KEYLESS)!=ALARM_CONTROL_FROM_OEM_KEYLESS_DISABLE)
			{
				oemAlarm_Timer=OEM_ALARM_VALIDATION_DELAY_RESET;		// Keep this before Rs_Keyless_SendNotification() !!!

				Rs_Menu_Set_OEM_Alarm(1);
				Rs_Keyless_SendNotification(KEYLESS_OEM_ARM);			// Must be done before Alarm_Arm()/Alarm_Disarm()
				Rs_Keyless_SetDoorlockStatus(KEYLESS_STATUS_LOCKED);
				#warning "Rs_Keyless: check if we need to refresh the lock state here!!! (Already done in KEYLESS_OEM_LOCK)"
				Rs_Status_SetState(STATUS_DOORLOCK_ON, ON);

				Alarm_Arm();

				#if defined(INCLUDE_DIAGNOSTICS)
					DiagStatus_Set(DIAG_STATUS_OEM_LOCK, DIAG_STATUS_TRIGGERED, DIAG_STATUS_NA);
				#endif
				// After keyless
				Rs_Behaviour_Send_OEM_Arm();
				// Reset Rearm counter
				rearm_AfterDelay=KEYLESS_REARM_AFTER_DELAY;
			}
			break;

		// Use to trig Lock-lock-lock and Lock-unlock-lock OEM start only
		case KEYLESS_OEM_LOCK:
			Rs_Menu_Set_OEM_Lock(1);
			Rs_Keyless_RefreshFromOEM(KEYLESS_OEM_LOCK);
			// Reset Rearm counter
			rearm_AfterDelay=KEYLESS_REARM_AFTER_DELAY;
			break;

		// Use to trig Lock-lock-lock and Lock-unlock-lock OEM start only
		case KEYLESS_OEM_UNLOCK:
			Rs_Menu_Set_OEM_Lock(2);
			Rs_Keyless_RefreshFromOEM(KEYLESS_OEM_UNLOCK);
			break;
	}
}

// Only if refreshed by keyless
inline void Rs_Keyless_SetDoorlockStatus(Uint8 status)
{
	doorstatus=status;

	if(status==KEYLESS_STATUS_UNLOCKED)
	{
		Rs_StarterKill_SetUnlockStatus();
		Rs_Fsm_SetUnlockReceivedForShutdown();
	}

	// This function allows updating the command received
	// from the remote/OEM keyless for MT reservation and shutdown sequences.
	Rs_Fsm_UpdateFromRemote(status);
}

inline Uint8 Rs_Keyless_GetDoorlockStatus(void)
{
	return doorstatus;
}

inline Uint8 Rs_Keyless_GetPanicStatus(void)
{
	return panicState;
}
/*
inline void Rs_Keyless_SetArmStatus(Uint8 status)
{
	armstatus=status;
}

inline Uint8 Rs_Keyless_GetArmStatus(void)
{
	return armstatus;
}
*/
// Manage the notification when alarm is there
// 	For lock/arm notification
// 	A- If Open zone notification is OFF, we will do the normal notification
// 	B- If Open zone notification is ON (without delay)
//		A- We send open zone notification if at least one zone is open
//		B- We send normal notification if zones are all close
//	C- If Open zone notification is ON (with delay)
//		1- We send normal notification (All case)
//		2- We wait for the delay
//		3- We send open zone notification if at least one zone is open
void Rs_Keyless_SendNotification(Uint8 event)
{
	// Check if lock is request
	if((event==KEYLESS_LOCK) || (event==KEYLESS_OEM_ARM))
	{
		// Show alarm code
		if(Alarm_IsTriggered())	// 1.2us
		{
			// Silent the alarm but stay triggered!
			Rs_Horn_SetAlarm(OFF);
			Rs_ParkingLights_Alarm(OFF);
		}

		// Silent!
		if(Rs_Valet_GetState())
		{
			Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_LOCK);	// Manage Parking lights
		}
		// No parking lights on OEM arm when ignition is OFF
		else if((event==KEYLESS_OEM_ARM))
		{
			Rs_Horn_SirenLockOemNotification();

			// Blink parking lights from OEM arm when ignition is ON
			if(Rs_Ignition_GetVehicleState())
			{
				Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_LOCK);	// Manage Parking lights
			}
			// No parking lights from OEM arm when ignition is OFF
		}
		// Normal notification
		else if(Rs_Options_GetBitFromMemory(RS_OPTION_OPEN_ZONE_NOTIFICATION)==OPEN_ZONE_NOTIFICATION_DISABLE)
		{

			// Normal notification
			Rs_Horn_ChirpLock();												// Manage chirp
			Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_LOCK);	// Manage Parking lights
		}
		// Open zone notification (now)
		else if(Rs_Options_GetBitFromMemory(RS_OPTION_OPEN_ZONE_NOTIFICATION)==OPEN_ZONE_NOTIFICATION_ENABLE)
		{
			// Min : 21us
			// Max : 57us
			// Nothing is open
			if(Rs_Keyless_NotificationCheckZones()==0)
			{
				// Normal notification
				Rs_Horn_ChirpLock();												// Manage chirp
				Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_LOCK);	// Manage Parking lights
			}
			// Open zone detected
			else
			{
				// Normal notification
				Rs_Horn_ChirpOpenZone();												// Manage chirp
				Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_OPENZONE);	// Manage Parking lights
			}
		}
		// Open zone notification with delay
		else
		{
			// Normal notification (will announce the open zone, if it's the case in few seconds)
			Rs_Horn_ChirpLock();												// Manage chirp
			Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_LOCK);	// Manage Parking lights

			// Setup the notification timer with prog. option
			notification_Timer = pgm_read_byte(&rs_Option_OpenZoneNotificationDelay_LUT[Rs_Options_GetBitFromMemory(RS_OPTION_OPEN_ZONE_NOTIFICATION)]);
			notificationDelayed=YES;
		}
	}

	// Check if Unlock is request
	else if((event==KEYLESS_UNLOCK) || (event==KEYLESS_OEM_DISARM))
	{

		// Show alarm code
		if(Alarm_IsTriggered())
		{
			// Show alarm code on parking light if alarm was triggered!
			Rs_Horn_ChirpAlarmTriggered();
			Rs_ParkingLights_BlinkError(BEHAVIOUR_BLINK_PARKING_LIGHTS_ALARM_TRIGGERED, Alarm_GetEventCode(0));
		}
		else
		{
			// Silent!
			if(Rs_Valet_GetState())
			{
				Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_UNLOCK);	// Manage Parking lights
			}
			// No parking lights on OEM arm when ignition is OFF
			else if((event==KEYLESS_OEM_DISARM))
			{
				Rs_Horn_SirenUnlockOemNotification();

				// Blink parking lights from OEM arm when ignition is ON
				if(Rs_Ignition_GetVehicleState())
				{
					Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_UNLOCK);	// Manage Parking lights
				}
				// No parking lights from OEM arm when ignition is OFF
			}
			else
			{
				// Normal notification
				Rs_Horn_ChirpUnlock();													// Manage chirp
				Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_UNLOCK);	// Manage Parking lights
			}
		}
		notificationDelayed=NO;
	}
}

void Rs_Keyless_ManageNotification(void)
{
	// Check delayed notification
	if(notificationDelayed)
	{
		// Let time to manage timer before going in sleep
		Rs_Sleep_Reset();

		// it's time to check zone
		if(notification_Timer==0)
		{
			// Nothing is open
			if(Rs_Keyless_NotificationCheckZones()==0)
			{
				// Normal notification
				Rs_Horn_ChirpLock();												// Manage chirp
				Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_LOCK);	// Manage Parking lights
			}
			else
			{
				// Normal notification
				Rs_Horn_ChirpOpenZone();												// Manage chirp
				Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_OPENZONE);	// Manage Parking lights
			}
			notificationDelayed=NO;
		}
	}
}

// manage only for remote start
// KEYLESS_OEM_LOCK
// KEYLESS_OEM_UNLOCK
void Rs_Keyless_RefreshFromOEM(Uint8 status)
{
	static Uint8 counter=0;
	Uint8 periodic;

	periodic=Periodic_GetState(PERIODIC_OEM_EVENT);
	// Time max between 2 command
	Periodic_Enable(PERIODIC_OEM_EVENT, 200);

	// New remote start sequence
	if(periodic || (counter==0))
	{
		// [Lock]-Unlock-Lock
		// [Lock]-Lock-Lock
		if(status==KEYLESS_OEM_LOCK)
		{
			counter=1;
		}
	}
	// Add the command to the sequence
	else if(counter==1)
	{
		if(Rs_Options_GetBitFromMemory(RS_OPTION_RS_FROM_OEM_KEYLESS_SEQ)==RS_FROM_OEM_KEYLESS_SEQ_LOCK_UNLOCK_LOCK)
		{
		// Lock-[Unlock]-Lock
			if(status==KEYLESS_OEM_UNLOCK)
			{
				counter=2;
			}
			else
			{
				counter=0;
			}
		}
		if(Rs_Options_GetBitFromMemory(RS_OPTION_RS_FROM_OEM_KEYLESS_SEQ)==RS_FROM_OEM_KEYLESS_SEQ_LOCK_LOCK_LOCK)
		{
		// Lock-[Lock]-Lock
			if(status==KEYLESS_OEM_LOCK)
			{
				counter=2;
			}
			else
			{
				counter=0;
			}
		}
	}
	else if(counter==2)
	{
		// Lock-Unlock-[Lock]
		// Lock-Lock-[Lock]
		if(status==KEYLESS_OEM_LOCK)
		{
			// void the timer
			oemAlarm_Timer=OEM_ALARM_VALIDATION_DELAY_VOID;

			// Toggle remote start/stop
			if(Rs_Status_GetState(STATUS_RS_STATE))
			{
				Rs_Fsm_RemoteStop(RS_REMOTESTOP_SOURCE_OEM_REMOTE);
			}
			else
			{
				Rs_Horn_ChirpStart();
				Rs_ParkingLights_BlinkKeyless(BEHAVIOUR_BLINK_PARKING_LIGHTS_START);
				Rs_Menu_Set_OEM_Start();
				Rs_Fsm_RemoteStart(RS_REMOTESTART_SOURCE_OEM_REMOTE);
			}
		}
		counter=0;
	}
}

// Return current zones
//
// ALARM_ZONE_DOOR
// ALARM_ZONE_TRUNK
// ALARM_ZONE_HOOD
Uint8 Rs_Keyless_NotificationCheckZones(void)
{
	Uint8 zones_Opened=0;

	if(Rs_Status_GetState(STATUS_DOOR_IGNORE_STATE)==NO)
	{
		// Check zones (HOOD | TRUNK | DOOR)
		zones_Opened = (Rs_Status_GetState(STATUS_TRUNK_STATE)<<1);
		zones_Opened |= (Rs_Status_GetState(STATUS_HOOD_STATE)<<2);
		zones_Opened |= Rs_Status_GetState(STATUS_DOOR_STATE);
	}

	return zones_Opened;
}

redpajama_set_name: RedPajamaGithub


text:
Modern Notebook
The Florida Orchestra Concert Broadcasts 2022
Florida's Classical Music Station
Evening Masterwork
Evening Masterwork: Wolfgang Amadeus Mozart's Clarinet Concerto in A K. 622 for October 20, 2022
WUSF Public Media - WUSF 89.7 | By Andy Lalino
Mozart completed his only clarinet concerto just two months prior to his death and it has become one of the most enduring works in the solo clarinet repertoire. He composed the piece shortly after the instrument was invented, and it's often considered the first great piece for the relatively young instrument. The Clarinet Concerto by Mozart, our Evening Masterwork tonight at 7 on Classical WSMR 89.1 and 103.9.
Evening Masterwork Evening Masterwork
Andy Lalino
Andy Lalino serves WUSF Public Media as a journalist, video producer/editor, and graphic designer/animator. He's authored pop-culture journalism articles, contributed weekly columns for Tampa Bay nostalgia websites, and published features for Fangoria magazine.
See stories by Andy Lalino
Digital Stream Help


text:
Fixtures/Results
Nadal makes it 12 titles at Roland Garros
Updated / Sunday, 9 Jun 2019 17:33
Rafael Nadal moments after clinching the French Open title once again
Rafael Nadal kept his iron grip on the Coupe des Mousquetaires by beating Dominic Thiem in four sets to win a 12th French Open title.
It was a repeat of last year's final and, although Thiem managed to win a set this time, he was unable to join Robin Soderling and Novak Djokovic as the only men to beat Nadal at Roland Garros, going down 6-3 5-7 6-1 6-1.
Nadal now stands on his own as the most successful singles player, male or female, at a single grand slam having moved clear of the 11 titles won by Margaret Court at the Australian Open.
His 18th slam title overall, meanwhile, means for the first time he has closed to within two of his great rival Roger Federer, whose all-time men's record of 20 titles appears increasingly within reach for either Nadal or Djokovic.
Thiem was trying to do what only Stan Wawrinka has managed by beating Djokovic and Nadal at the same slam, and Wawrinka did not do it back-to-back.
As if he did not have the odds against him enough already, the Austrian was also playing for the fourth day in a row after his epic two-day semi-final win over Djokovic, while Nadal had had a day off either side of a comfortable semi-final win over Roger Federer.
Thiem knows how it feels to beat Nadal on clay having done so in each of the last four seasons, but only in best-of-three-set matches.
The first seven games were a physical war, both men growling and pummelling the ball back across the net with ever increasing vigour.


text:
Cet article présente le guide des épisodes de la troisième saison de la série télévisée américaine .

Distribution de la saison

Acteurs principaux
 Tom Selleck (VF : Jacques Frantz) : Francis « Frank » Reagan
 Donnie Wahlberg (VF : Loïc Houdré) : Daniel « Danny » Reagan
 Bridget Moynahan (VF : Françoise Cadol) : Erin Reagan-Boyle
 Will Estes (VF : Anatole de Bodinat) : Jamison « Jamie » Reagan
 Len Cariou (VF : Thierry Murzeau) : Henry Reagan
 Jennifer Esposito (VF : Malvina Germain) : Jackie Curatola, coéquipière de Danny (épisodes 1 à 7)
 Amy Carlson (VF : Josy Bernard) : Linda Reagan, femme de Danny
 Sami Gayle (VF : Adeline Chetail) : Nicole « Nicky » Reagan-Boyle, fille de Erin Reagan-Boyle récemment divorcée

Acteurs récurrents et invités
 Tony Terraciano (VF : Mathéo Dumond) : Jack Reagan, fils de Danny et Linda Reagan
 Andrew Terraciano (VF : Valentin Cherbuy) : Sean Reagan, fils de Danny et Linda Reagan
 Gregory Jbara (VF : Jean-François Kopf) : Garrett Moore, Chef Adjoint à l'Information
 Nicholas Turturro (VF : Mark Lesser) : Sergent Anthony Rizulli
 Abigail Hawk (VF : Catherine Cipan) : Détective Abigail Baker
 Robert Clohessy (VF : Serge Blumenthal) : Sergent Gormley (10 épisodes)
 David Ramsey (VF : Daniel Lobé) : Maire Carter Poole (5 épisodes)
 Sebastian Sozzi (VF : Philippe Bozo) : Vinny Cruz (13 épisodes)
 Marisa Ramirez (VF : Magali Barney) : Détective Maria Baez (dès l'épisode 17)
 Michael Madsen : Benjamin Walker (épisode 1)
 Peter Hermann (VF : Constantin Pappas) : John « Jack » Boyle (épisodes 3 et 12)
  (VF : Sylvie Jacob) : l'inspecteur Kate Lansing (épisodes 7 à 12)
 Chazz Palminteri : Angelo Gallo (épisode 9)
 Annabella Sciorra :  (épisode 11)
 Nestor Serrano : Capitaine Derek Elwood (épisode 12)
 Megan Boone : Candice (épisodes 13 et 14)
 Ato Essandoh (VF : Christophe Lemoine) : Révérend Potter (épisode 13)
 Mark Moses : Curtis Swint (épisode 13)
 Eric Mabius : Richard Rorke (épisode 16)
  : Santana (épisodes 22 et 23)

Diffusion

 En Belgique, la saison a été diffusée sur RTL-TVI du  au .
 En France, la saison a été diffusée sur M6 du  au .

Épisodes

Épisode 1 : Au nom des miens

Épisode 2 : Au-dessus des lois

Épisode 3 : La Solution des lâches

Épisode 4 : Le Plus Beau Jour de leur vie

Épisode 5 : La Médaille du courage

Épisode 6 :

Épisode 7 : Halloween vaudou

Épisode 8 : La Bonne Éducation

Épisode 9 : Un justicier dans la ville

Épisode 10 : Pères et fils

Épisode 11 : L'Alternative

Épisode 12 : Pris au piège

Épisode 13 : La Déesse et les rats

Épisode 14 : Instinct paternel

Épisode 15 : Terre d'asile

Épisode 16 :

Épisode 17 : Bonnie & Clyde

Épisode 18 : Le Poids des regrets

Épisode 19 : Crise de foi

Épisode 20 : Tous les coups sont permis

Épisode 21 : Le Souffle du diable

Épisode 22 : Le Bout de la ligne ()

Épisode 23 : Le Bout de la ligne ()

Références

 3

redpajama_set_name: RedPajamaWikipedia


I got kicked out of one of those "live action role-playin' games" this weekend.
We pretended to be vampires. They didn't like it when I pretended to turn into a bat.
I don't know what kinda bats they were talkin' about, but the bats I see don't wear no clothes.
8 Poor Earl. He tried.
8 needs a little tightening, but otherwise good.
6 Half the LARPers i know can't wait to get out of their clothes.
6 anything that bugs LARP players works for me.
6 Could use a little tweaking, but I like it.
6 Yeah, Earl is definately one of them role playing guys!
5 Did this come back in an Easter Bunny strip?


text:
Namaste Technologies Provides Update on Strategic Investments
Global	Jul 26, 2019	• 12:22 PM EDT
Namaste Technologies Inc. (TSXV: N) (FRANKFURT: M5BQ) (OTCMKTS: NXTTF) today provided an update on in its investment portfolio including Choklat Inc. and Pineapple Express Delivery Inc..
Choklat, in which Namaste acquired a 49% interest in March of 2019, has now completed and submitted its evidence package to Health Canada. Choklat has seen significant expansion while preparing for the legalization of edibles, with non-infused products now available in over 150 retail outlets across Canada, including an increasing number of Safeway and Sobeys's stores in Western Canada. Choklat is making every effort to ensure that it can smoothly transition its business activities to a new facility nearby, transforming its current space into a state-of-the-art edibles processing facility.
"The submission of an evidence package to Health Canada is a major milestone for Choklat, and what we believe to be one of the first completed applications in the industry," said Meni Morin, Interim CEO of Namaste Technologies. "Regulation changes announced by Health Canada in May require operators to have built a compliant facility before filing for a licence. By making a strategic investment in Choklat, and converting their existing facility, Choklat will be better prepared to meet these changes and go to market timeline. Pending approval from Health Canada, we anticipate production to begin immediately, potentially making Choklat one of the first to have product on the shelves."
"Our team has worked diligently to grow our existing business, and ensure we are ready for potential legalization in October," said Brad Churchil, CEO of Choklat. "Choklat currently has a non-binding agreement for edible products from a Montreal based company totaling over $3 million. Upon approval from Health Canada, we look forward to scaling rapidly to deliver on our commitments, while maintaining a focus on providing the premium product our customers know and love."
Namaste also announces the advancement of funds related to a promissory note for Pineapple Express Delivery Inc. ("Pineapple Express") for a total of $1,200,000 USD. The promissory note is due on March 31, 2020 and bears a 12% interest rate per annum. Under the original agreement dated July 8, 2018 Namaste has the opportunity to convert the loan into equity on August 14, 2019. If the agreement is executed, Namaste would hold a majority position in Pineapple Express.
"Cannabis delivery services provided by Pineapple Express complete our unique end-to-end business proposition and support our focus on the customer experience," said Meni Morim, Interim CEO of Namaste Technologies. "Funding provided to Pineapple Express will allow them to scale and expand their presence, providing a seamless user experience for customers across Canada."
On December 17, 2018, Namaste Technologies entered into a share purchase agreement to acquire common shares in Pineapple Express Delivery and an affiliated entity, representing an additional 34% equity in exchange for such number of common shares of Namaste having an aggregate value of approximately $3.1 million. The transaction closed on March 13, 2019 with Namaste now owning 49% of the issued and outstanding common shares of Pineapple Express.
About Choklat
Choklat Inc. is currently the only bean to bar chocolate maker in Alberta and the largest premium craft chocolate maker in Canada. Where other chocolate companies simply purchase bulk chocolate to make their confections, Choklat imports some of the finest and rarest cocoa beans in the world then roasts and refines them in-house to make the company's own proprietary chocolate which is used in all of their confections. Since opening for the first time in 2008, Choklat has established itself throughout Western Canada as one of the most prominent luxury brands on the market today. Choklat's products are now in over 70 different retailers throughout Western Canada. Choklat has also just expanded regionally into Sobeys and Safeway stores – making it into more than 25 stores in the past two weeks alone. For more information, visit: www.Choklat.com
About Pineapple Express Delivery Inc.
The Pineapple Express Delivery Inc. management team has over 10 years of experience offering same-day, 60-minute delivery services in multiple industries across Canada. Pineapple Express offers a personalized experience for its customers and has established in-depth security and delivery protocols to facilitate same-day delivery of medical and recreational cannabis across the country. Pineapple Express has been providing a same day delivery option to the legal cannabis industry from October 17th, 2018 and has provincial offices set up across Canada. For more information visit: www.pineappleexpressdelivery.com
About Namaste Technologies Inc.
Namaste Technologies powers the ultimate online customer experience for medicinal cannabis and related products. Beginning with NamasteMD.com, the Company's integrated telemedicine application, Namaste connects medical clients with health care practitioners to more readily issue and renew cannabis prescriptions online. Featuring the first Canadian Medical Sales-Only Licence, the Company's own Cannmart.com is your 'everything cannabis store' offering clients a large variety of strains to fill their prescription needs. Namaste's unique artificial intelligence (AI) engine incorporated in its platforms and related Uppy App, completes our ecosystem by identifying the right product and pairing to address specific medical cannabis requirements. Namaste also provides vaporizers and accessories across several platforms operating in several countries. Namaste's global technology addresses local needs in a burgeoning cannabis industry requiring smart solutions. For further information about Namaste, please log onto www.Namastetechnologies.com
Information on the Company and its many products can be accessed through the links below:
NamasteTechnologies.com
NamasteMD.com
Cannmart.com
NamasteVapes.ca
Everyonedoesit.ca
FORWARD-LOOKING INFORMATION – This news release contains "forward-looking information" within the meaning of applicable securities laws. All statements contained herein that are not historical in nature contain forward-looking information. Forward-looking information can be identified by words or phrases such as "may", "expect", "likely", "should", "would", "plan", "anticipate", "intend", "potential", "proposed", "estimate", "believe" or the negative of these terms, or other similar words, expressions and grammatical variations thereof, or statements that certain events or conditions "may" or "will" happen. The forward-looking information contained herein is made as of the date of this press release and is based on assumptions management believed to be reasonable at the time such statements were made, including management's perceptions of future growth, results of operations, operational matters, historical trends, current conditions and expected future developments, as well as other considerations that are believed to be appropriate in the circumstances. While we consider these assumptions to be reasonable based on information currently available to management, there is no assurance that such expectations will prove to be correct. By their nature, forward-looking information is subject to inherent risks and uncertainties that may be general or specific and which give rise to the possibility that expectations, forecasts, predictions, projections or conclusions will not prove to be accurate, that assumptions may not be correct and that objectives, strategic goals and priorities will not be achieved. A variety of factors, including known and unknown risks, many of which are beyond our control, could cause actual results to differ materially from the forward-looking information in this press release. Such factors include, without limitation: risks relating to the Company's ability to execute its business strategy and the benefits realizable therefrom, risks specifically related to the Company's international operations, and risks relating to the market price of the Common Shares. Additional risk factors can also be found in the Company's current MD&A and annual information form, both of which have been filed under the Company's SEDAR profile at www.sedar.com. Readers are cautioned not to put undue reliance on forward-looking information. The Company undertakes no obligation to update or revise any forward-looking information, whether as a result of new information, future events or otherwise, except as required by applicable law. Forward-looking statements contained in this news release are expressly qualified by this cautionary statement.
Neither the TSX Venture Exchange nor its Regulation Services Provider (as that term is defined in the policies of the TSX Venture Exchange) accepts responsibility for the adequacy or accuracy of this release or has in any way approved or disapproved of the contents of this press release.
View original content to download multimedia:http://www.prnewswire.com/news-releases/namaste-technologies-provides-update-on-strategic-investments-300891570.html
SOURCE Namaste Technologies Inc.
View original content to download multimedia: http://www.newswire.ca/en/releases/archive/July2019/26/c5614.html
Incite Capital Markets, Eric Negraeff / Darren Seed, Ph: 604.493.2004; For Meni Morim, Interim CEO, Email: ir@namastetechnologies.comCopyright CNW Group 2019
Source: Canada Newswire (July 26, 2019 – 8:00 AM EDT)
Auxly Announces Repayment of Remaining Unsecured Convertible Debentures and Expiration of Warrants Due January 16, 2020
Canopy Growth Revises Beverage Launch Timeline
PharmaCielo Receives Acceptance from TSX Venture Exchange of Supply Agreement for Export of 2018 Farm Bill Compliant CBD Isolate to United States