text:
Michelin Guide's early release provokes mixed reaction
By Emma Eversham
31-May-2011 - Last updated on 01-Jun-2011 at 10:46 GMT
Related tags: Michelin guide, Zagat survey, Michelin
Michelin's Great Britain & Ireland Guide will now be released in October
Michelin is bringing forward the publication date of its 2012 Great Britain & Ireland Guide by more than three months, provoking a mixed response from the industry.
The guide, due to be launched in the third week of January 2012, will now be released on 6 October 2011.
Michelin said the change to the current January release, in operation since 1974, had been done to bring the British and Irish edition of the guide into line with all other Michelin country and city guides – with the exception of France.
Mixed response
Although the guide will now be able to catch the Christmas market, the change has meant that many restaurants have been forced to return information sheets early to meet the publication date and others are concerned that its usually positive impact on business may be affected.
"If you get a Michelin star in January then you're bound to have a good February and March which is a benefit for it coming out then," said Charles Lakin, head chef at The Marquis in Alkham, Kent and owner of a Rising Star for the past two years. "Hearing results in January is great for business, because it's the quietest part of the year. I don't know what the impact will be if it comes out in October."
However, Laurie Gear, chef and owner of The Artichoke in Old Amersham, Buckinghamshire, said it was a sensible idea to release it at a similar time of the year to other guides, such as The Good Food Guide, Harden's and the AA Restaurant Guide.
"As well as dealing with Michelin stars, Michelin is a business so it makes sense to get in with the Christmas rush. We've worked hard this year and along with everyone else it will be an exciting time. At least we'll all know a bit earlier what the results are," he said.
Swift response
The guide's new editor Rebecca Burr thanked establishments for their 'swift response'. "Although compiled for our readers, this change of publication date has only been made possible by the establishments returning their information sheets to us earlier than normal," she said.
The Michelin Guide Great Britain & Ireland celebrates its centenary this year. The 2011 edition of the Guide, released on 19 January, saw 14 new restaurants gain stars and 26 gain Bib Gourmands.
The previous two years saw results leaked onto the internet several days before the official publication date, forcing Michelin to release the guide earlier than planned.
Related topics: Events & Awards
Michelin Guide 2013: Two stars for L'Enclume, Sketch and Michael Wignall at The Latymer
Good Food Guide editor: 'We're in a golden age of eating out'
The Trainline.com aims to show affordability of Michelin-starred lunch
Second stars for Restaurant Sat Bains and Hand & Flowers in Michelin Guide 2012

redpajama_set_name: RedPajamaCommonCrawl


In this section we will learn how to use <fn:indexOf> Tag of JSTL. This tag returns index of first occurrence of specified sub string in the given string string. This takes string type as arguments and returns int type.
character/string in the <br>specified String.


text:
We Could Totally Buy Grace Kelly's Childhood Home if We Pooled Our Resources
::puts down linty change found in pocket::
By Chelsea Peng
It was where Prince Rainier III proposed and changed her life forever. Then it was overrun by cats. What could this fairytale-turned-nightmarish place possibly be? Grace Kelly's childhood home!
Built by her father in the East Falls neighborhood of Philadelphia, the 4,000 colonial—asking price $1 million—boasts six bedrooms, four baths, and Kelly's height markers on a door frame upstairs. It's also got a bit of a history, aside from the actual-royal-asking-for-a-Hollywood-royal's-hand-in-marriage-there bit: According to Curbed Philadelphia (opens in new tab), the owner who purchased the house in the 1970s lived in "unsanitary conditions," and the home was discovered to be feline-infested in 2013.
(Image credit: Curbed Philly)
But don't worry/act fast—the property's realtor said (opens in new tab) our new the house will be move-in ready by July 5.
Chelsea Peng
Chelsea Peng is a writer and editor who was formerly the assistant editor at MarieClaire.com. She's also worked for The Strategist and Refinery29, and is a graduate of Northwestern University. On her tombstone, she would like a GIF of herself that's better than the one that already exists on the Internet and a free fro-yo machine. Besides frozen dairy products, she's into pirates, carbs, Balzac, and snacking so hard she has to go lie down.
24 Hours With John Legend
The singer, record producer, husband, and entrepreneur reveals how he maintains youthful, glowing skin.
By Deena Campbell
What Is Co-Washing, and How Do You Do It? Experts Weigh In
Skip the shampoo.
Digital Lavender Is About to Be the Biggest Color of the Year
Barbiecore got a "Lavender Haze"-inspired makeover.
Sarah Hyland and Adam Devine Play 'How Well Do You Know Your Co-Star?'
The 'Modern Family' stars reunited for the 'Pitch Perfect' spinoff series.
The 78 Best Celebrity Couple Halloween Costumes of All Time
Honestly, we're impressed.
By Charlotte Chilton
Super Rare Photos of Queen Elizabeth as a Young Woman
From childhood snapshots to portraits as a young princess, beautiful and rare photos of the late Queen Elizabeth as a young woman.
King Charles III and Queen Consort Camilla's Relationship: A Timeline
With the passing of Queen Elizabeth II, Charles has ascended to the throne as king.
Who Is Next in Line for the British Throne, Explained
And yes—Harry and Archie are still in the line of succession.
By Andrea Park
Who Is Alexandria Ocasio-Cortez's Fiancé Riley Roberts?
AOC's husband-to-be is an "easygoing redhead" who lives with her in D.C.
68 Times the Kardashians Posed Fully Nude and Owned It
And we mean fully nude—as in, not a shred of clothing.
By Bianca Rodriguez
Who Is Jonathan Owens, Simone Biles's Fiancé and NFL Player?
"The easiest yes!" Simone wrote about the couple's engagement.


Established roll-forming company in Pierceton, Indiana is seeking a dedicated employee to join their team! Quality Technician on 3rd shift; position is temporary to hire! This is a company that is looking for candidates with a team-oriented mindset and a "can-do" attitude. They have advancement opportunities and offer a true career-path for those who are willing to put in the work!
Assist in maintaining customer drawings and specifications.
Provide all necessary paperwork to shop floor for production.
Provide all necessary measuring equipment and tools to production.
Calibrate all measuring instruments in house and maintain instruments.
Assist in maintenance of the ISO 9001 Program.
Report and assist in answering any questions on customer specifications brought forth by the production employees.
Regularly inspect material being produced.
Aid in evaluation that all quality procedures are being followed and implemented.
Program and Operate CMM as needed.
$13.00+ per hour depending on experience.
Working knowledge of measurement techniques.
Knowledge of ISO 9001 quality system.
Ability to communicate techniques to employees.
Must be able to lift 50lbs occasionally.


The BLS reported that the unemployment rate for Longview fell 0.1 percentage points in February 2019 to 4.1%. For the same month, the metro unemployment rate was 0.3 percentage points higher than the Texas rate. The unemployment rate in Longview peaked in January 2010 at 8.7% and is now 4.6 percentage points lower. From a post peak low of 3.8% in July 2018, the unemployment rate has now grown by 0.3 percentage points. You can also compare Longview unemployment with unemployment in other cities.
The number of people unemployed in Longview peaked in August 2009 at 9,016. There are now 4,933 fewer people unemployed in the metropolitan area. From a recent trough of 3,666 in August 2018, the number of unemployed has now grown by 417. Longview employment and jobs data (including jobs lost/gained in Longview, Texas) is also available.


The EFF remains unrepentant in its stance on veteran journalist Karima Brown, in the wake of condemnation from fellow journalists and the South African National Editors' Forum (Sanef).
Brown seemingly posted an editorial brief in an EFF media WhatsApp group by mistake on Tuesday after the party posted an invitation to an EFF "Breakfast With The Elderly" function, scheduled for Wednesday.Brown responded: "Keep an eye out for this.
Who are these elders. Are they all male and how are they chosen.
Keep watching brief." She later deleted the message.
EFF leader Julius Malema later tweeted a screenshot of the message, which included Brown's cellphone number, saying: "Karima Brown is sending moles to our breakfast with the elders tomorrow, she incidentally sends the message to the @EFFSouthAfrica media WhatsApp group and deleted it immediately.


text:
package io.appform.dropwizard.sharding.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import java.util.Optional;
import java.util.function.Function;

/**
 * Utility functional class for running transactions.
 */
public class Transactions {
    private Transactions() {}

    public static <T, U> Optional<T> executeAndResolve(SessionFactory sessionFactory, Function<U, T> function, U arg) {
        return executeAndResolve(sessionFactory, false, function, arg);
    }

    public static <T, U> Optional<T> executeAndResolve(SessionFactory sessionFactory, boolean readOnly, Function<U, T> function, U arg) {
        T result = execute(sessionFactory, readOnly, function, arg);
        return Optional.ofNullable(result);
    }

    public static <T, U> T execute(SessionFactory sessionFactory, boolean readOnly, Function<U, T> function, U arg) {
        return execute(sessionFactory, readOnly, function, arg, t -> t);
    }

    public static <T, U> T execute(SessionFactory sessionFactory, boolean readOnly, Function<U, T> function, U arg, boolean completeTransaction) {
        return execute(sessionFactory, readOnly, function, arg, t -> t, completeTransaction);
    }

    public static <T, U, V> V execute(SessionFactory sessionFactory, boolean readOnly, Function<U, T> function, U arg, Function<T, V> handler) {
        return execute(sessionFactory, readOnly, function, arg, handler, true);
    }

    public static <T, U, V> V execute(SessionFactory sessionFactory, boolean readOnly, Function<U, T> function, U arg, Function<T, V> handler, boolean completeTransaction) {
        TransactionHandler transactionHandler = new TransactionHandler(sessionFactory, readOnly);
        if(completeTransaction) {
            transactionHandler.beforeStart();
        }
        try {
            T result = function.apply(arg);
            V returnValue = handler.apply(result);
            if(completeTransaction) {
                transactionHandler.afterEnd();
            }
            return returnValue;
        } catch (Exception e) {
            if(completeTransaction) {
                transactionHandler.onError();
            }
            throw e;
        }
    }

    public static <T> T execute(SessionFactory sessionFactory, Function<Session, T> handler) {
        TransactionHandler transactionHandler = new TransactionHandler(sessionFactory, true);
        transactionHandler.beforeStart();
        try {
            T result = handler.apply(transactionHandler.getSession());
            transactionHandler.afterEnd();
            return result;
        } catch (Exception e) {
            transactionHandler.onError();
            throw e;
        }
    }
}

redpajama_set_name: RedPajamaGithub


text:
Volvo's prototype autonomous electric construction vehicle started out as a LEGO Technic set
Rikka Altland | Oct 27 2021 - 2:03 pm PT
Volvo CE is giving us a closer look into its research and development process, showing off an autonomous battery-powered prototype construction vehicle that's currently in the works. Even more interestingly, the in-development Volvo LX03 also originated as part of a collaboration with the LEGO Group, making it the very first Technic set to become an actual machine.
Volvo CE showcases prototype EV inspired by a LEGO set
First appearing as a concept in 2018, Volvo CE is finally showcasing the fruits of its collaboration with the LEGO Group. Originally appearing as a LEGO Technic model that you could actually assemble, the joint effort is seeing an actual version of the construction vehicle. Originally designed to explore the future of construction, reality has now caught up to that forward-thinking mind-set.
Opting the original LEGO Technic set into a real worksite tool, Volvo is co-opting that original design for the current product. That makes the LX03 the very first vehicle that has gone from LEGO model to an actual machine. Well, at least one that wasn't already inspired after some form of real-world release in the first place.
Ditching the name it was given as a building kit (Concept Wheel Loader ZEUX), Volvo CE has now shown off the LX03. The prototype electric construction vehicle sports the same driveline as the L25 Electric, an existing EV in the company's current garage. While there's the same zero-emission, low-noise focus, the newer iteration adopts autonomous functionality as opposed to the more typical controls that place a worker behind the steering wheel. It also arrives with up to eight hours of runtime, depending on just how it's put to work.
As of now, the Volvo LX03 is not commercially available, nor does the company have any plans to release the vehicle. Instead, it hopes to learn from the process and apply the the same unique process to future releases. So aside from the few specs detailed above, there's not too many specs for the Volvo LX03 available.
Electrek's Take
Even if you won't see the Volvo LX03 on a worksite anytime soon, it's pretty interesting to get a glimpse into the company's research and development process. Aside from whether or not an autonomous electric construction machine ends up being a viable product, it's interesting to see what was once an imaginary vehicle from a LEGO set turn into an actual EV.


text:
Home | Roster | Schedule/Results | Statistics | News | Coaches | Archive | Prospective Student-Athletes
Salisbury honored with Team Academic Award
LEXINGTON, Ky. – The Salisbury University volleyball team was recently honored with the American Volleyball Coaches Association Team Academic Award for the 2013 season; the Sea Gulls were one of 126 NCAA Division III teams to earn the award.
The award is given to collegiate and high school volleyball teams that maintained a cumulative team grade-point average of 3.30 during the academic year. The 126 Division III schools marks the most ever to earn the honor.
Along with a successful year in the classroom, the Gulls finished the season with a 29-6 overall record, while advancing to the Capital Athletic Conference championship game and earning an NCAA tournament berth.
To see the full list of AVCA Team Academic Award recipients, click here.


September 1, 2018, Sykenhusinnkjøp (Norway's national hospital procurement: HF) will promote a scheme structured to offer Norway's HIV patients a less expensive course of medicine to treat their affliction.
Norwegian Broadcasting Corporation (NRK) reports that a potential of NOK 65M could be saved by using the cheaper HIV drugs. However, there are critics of the new HIV drug treatment scheme among Norway's health care professionals.
Nurse Ingrid Slørdal of St. Olavs nursing department at Trondheim, who's been working professionally for over 25 years with patients who suffer from HIV, worries that September's Sykenhusinnkjøp HIV medicine scheme will put patients at risk.
Speaking with NRK of HF's proposed September change to HIV medicines, Nurse Slørdal gave her concern of the new HIV drug's possible side-effects upon HIV patients who are already receiving an active course of prescribed treatment.
Nurse Slørdal also notes that HF's new HIV drug requires a different dosage than what patients are currently taking and thus may lead to improper dosing. Further, the new HF HIV drug carries dietary concerns that bring her added consternation.
"With this new HIV medicine, many people need to take more daily tablets, as compared to only taking one pill daily. The new medicines clearly express a number of side-effects and carry an increased risk of dangerous interactions with other medicines," said Slørdal.
Established 2015, Sykenhusinnkjøp (HF) is a public, non-profit GPO owned by the four Norwegian regional health authorities; tasked with medical procurement for the public hospital sector at the national, regional and local level.
Be the first to comment on "New HIV Drug Saves NOK 65M"


Sleepy huns, get your bedtime routine down to a tee – literally – with Hey Peachy's selection of super-cute nightwear. Designing a range of cosy pyjamas printed with sweet slogans, the label's sleep sets are perfect for snuggling up with.
Fabric 1: 70% Cotton, 30% Polyester.


The bathroom is one room of the house that can feel sort of cold and impersonal with all of the hard surfaces and cool colours. For some this just won't do, and if you are left wondering how to choose a bathroom installation in London that shows your feminine side take a look at these tips to help you achieve just that.
Shiny metallic finishes on your hardware and plumbing can give off a cold, industrial feel, making the space look more masculine. To soften the overall effect stay away from those and opt for something a little different, such as a brushed nickel or copper finish. These finishes will minimise the starkness of the space and add a more subtle feminine touch.
To soften the overall feel of your bathroom and add a feminine touch you may want to consider patterned wallpaper for your bathroom installation in London. There are many classic styles that will not only look great but also achieve that femininity you are looking for, such as damask. Take it one step further and choose something with a high-gloss or pearled finish to really amp up the glamour.
White is a classic colour for your bathroom fixtures, and looks great regardless of the other design elements of the space. When planning a bathroom installation in London and trying to keep things more feminine stick with traditional white and try and lean towards fixtures that are rounded and soft in shape and design as opposed to harsher more abrupt lines that may have more of a masculine feel.
Nothing says femininity more than the perfect colour. Choose a palette that reflects the soft and girly look you are going for and consider such shades and colours as pinks, corals, fuchsias and even purples to really capture the feminine side of your design taste. Paint colour is an easy way to make a very definite statement about you and your style.
When trying to capture a feminine feel for your new bathroom space, be sure to include some elegant accents and touches such as a gilded mirror frame, intricate and delicate hardware, or even floral patterned linens and window dressings to let any and all visitors know this is the space of a woman. Feminine touches will go a long way in making the space soft and inviting.
It is possible, with a little planning, to get a bathroom that is elegant, feminine and functional at the same time.


text:
// ========================================
// Copyright (c) 2017 KingSoft, All rights reserved.
// http://www.kingsoft.com
//
// Framwork
//
// Filename: AssetApi.cs
// Date:     2017/06/09
// Author:   xiangjinbao
// Email:    xiangjinbao@kingsoft.com
// ========================================

namespace xsj.framework
{
    /// <summary>
    /// 资源对外接口
    /// </summary>
    public static class AssetApi
    {
        /// <summary>
        /// 创建指定代理对象
        /// </summary>
        /// <param name="url"></param>
        /// <param name="aDelegate"></param>
        /// <param name="auto"></param>
        /// <returns></returns>
        public static AssetDataProxy CreateProxy(string url, AssetEventDelegate aDelegate = null, bool auto = false)
        {
            return new AssetDataProxy(url, aDelegate, auto);
        }

        /// <summary>
        /// 创建自动加载携程对象
        /// </summary>
        /// <param name="url"></param>
        /// <param name="aDelegate"></param>
        /// <returns></returns>
        public static AssetDataProxy CreateAutoProxy(string url, AssetEventDelegate aDelegate = null)
        {
            return CreateProxy(url, aDelegate, true);
        }

        /// <summary>
        /// 创建携程加载代理对象
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static AssetDataProxy CreateYieldProxy(string url)
        {
            return CreateProxy(url, null, true);
        }
    }
}


It's another glorious(ly freezing) meatless Monday, and today I bring you a warm pasta dish to help ward off the chill of this negative degrees late January day. If you haven't picked up on it yet, it would be an enormous stretch to tell you that I enjoy this time of year.
Many of us turn to comfort food when the temps begin to dip below freezing, and while I myself enjoy the occasional calorie-filled cheesy casserole, January typically means New Year's Resolution time. Lucky for you, today's recipe is not only delicious, it is also healthy. I should note that T thinks this is one of the best dishes I've made for him. Love myself some bonus points!
Step One: Rinse kale, tear into pieces, and blanch in a pot of boiling water for 30 seconds. Remove to an ice bath to stop the kale from cooking further. Remove from ice bath, and place on paper towels to soak up any water.
Step Two: Toast pine nuts while kale blanches, and then add kale, parmesan, garlic, pine nuts, salt, and olive oil to a food processor. Pulse until you achieve a rough pesto-like consistency with some texture remaining.
Step Three: Cook pasta, and reserve 1 C pasta water. Remove pasta to a large serving bowl, add pesto and reserved water, and toss to combine. Serve with grated parmesan and toasted pine nuts.
NOTE: *I used curly kale for this recipe, but any type of kale will work as a substitute. I used extra-wide Amish egg noodles, but any kind of pasta will work.
Bring a large pot of salted water to a boil. Plunge kale leaves in water to blanch (approx. 30 seconds), then immediately drain and plunge into ice water to stop the cooking. Drain in colander, then lay on paper towels to extract as much water as possible.
After blanching, place kale pieces in the bowl of a food processor with garlic, parmesan, and all but 2 Tbsp of toasted pine nuts. Add a generous pinch of salt, and pulse briefly to combine and chop. Drizzle in the olive oil, and continue to pulse until you achieve a pesto-like consistency with some texture remaining. You want a rough chop, not a smooth puree. Adjust olive oil for desired consistency - not all kale bunch sizes are created equal!
Meanwhile, cook the pasta to al dente, drain and reserve 1 cup of cooking water. Place pasta in a large serving bowl, and add pesto and cooking water. Toss until noodles are coated with pesto. Serve immediately, and garnish with additional pine nuts and grated parmesan.
Do you have a favorite recipe for homemade pesto?


On December 21st I turned 50. A half a century of living. Some call it a milestone, others call it "over the hill," no wait, that was 40. Some call it just plain old! When my parents turned 50, which I really don't remember, I was a self-absorbed teenager, so it really didn't have a lot of bearing on me. It didn't seem to bother them, or at least they didn't say anything to me about it. So, I guess it must not have been a big deal for them at that time. It's really not a big deal to me now, I'm just thankful for another year at this point!
I think about SO many things on such a deep level this time of year. Maybe I have a bit of the Seasonal Affective Disorder some people talk about, I didn't use to think so but now I'm not sure. I try to keep my mind more focused on spiritual things, especially in the winter, and also try to keep physically active as much as possible.
My Dad died at 51. I knew that was a very young age to pass away and now that I'm hopefully a year away from that, it REALLY seems young! In fact, his death in 1976, was the week after Christmas. This time of year always brings that memory to the surface, or at least it hovers somewhere below the surface in some way, even though it was more than 30 years ago. Naturally, I think about my adoptive Dad more at this time of year than any other. I have to confess, I really don't remember a lot of details about him. I know he was a hard working man and loved his wife and loved me. He was active in church, read his Bible, loved God and loved others. He didn't require a lot of "things" and I don't ever really remember him complaining or raising his voice much at all. My mom is still living. She's 85 and never re-married. I think about her at this time of year a LOT, especially now that she is getting up in years. I love my adoptive parents and I am grateful to God for placing me in their care here on earth.
Now that I'm into my 50's I really don't feel any differently. My friends who are already 50 and beyond say just wait, you'll feel it soon enough! But I have to confess, my thoughts are, "After what I've been through, I'll take anything!" I'm grateful the Lord has allowed me another year on this earth! The older I get the more staying on this earth seems less and less of a priority. I guess you're supposed to feel that way as you age. It's not that I have a death-wish or anything, it's just that through and since my illness, I've come to realize how fragile this life is and hanging on to it, especially as a Believer, isn't something that is that big of a deal in the grand scheme of things. As long as the Lord allows me to live in this foreign land, I'll gladly do it while I seek to serve Him, treasure Christ and hopefully impact the lives of others in some small way.
Since my birthday falls so close to Christmas, I start having this major collision of thoughts about Christmas and life, time on this earth, the future, the past and a host of other things at this time of year. It's a time of retrospection for all of us I know. The passing of another year, the shortest days of the year. Time with friends and family can also cause us to become sentimental or in my case, melancholy and VERY emotional.
This year has been different from past years too. I don't know, I'm in the "Christmas Spirit," whatever that means, but as quickly as it comes and as fun as the build-up to Christmas is, I'm ready to see it go too. I think maybe I'm more excited about the beginning of a New Year and what the Lord has in store. Yes, I'm going to enjoy Christmas and treasure the time with my family, the gifts and being with friends. But in the back of my mind I'm already looking ahead to next year.
There are going to be a lot of new challenges and several pivotal events in 2011. Our oldest will be going to college, our youngest will start driving, we'll have some major financial decisions to make (if you feel led to pray about those it would be greatly appreciated and needed), I'm attempting to launch some new musical and ministry ventures, and I'll be heading toward the 3 year mark of the transplant.
Well, I'll stop. This has kind been a "stream of consciousness" post. Thanks for reading and I pray you and your family have a wonderful Christmas and a Christ-filled New Year!


I\'ve always loved writing, and I always will. Problem is, I\'m never happy with my work, so I\'ll end up leaving it alone for a long time and then just quitting it. BUT!, I will come up with new ideas.
I\'m very fickle, I suppose. Just not when it comes to friends. I\'ll be damned before I backstab anyone.
P.S. As soon as Luna validates me, I\'ll have a Silent Hill 4 one-shot up.


Now almost all smartphone companies are using android O.S. because of its popularity and functionality. Another reason for popularity of Android O.S. is that android smartphones are available in affordable price and user will get millions of apps from Google Play Store for free. Google is continuously working of different versions of Android O.S.
Every time Google tries to give that kind of features that you can't expect from your android phone. As on Google Play Store apps are arranged in category wise.
Today post is related to games so I will discuss about android games in details. There is huge collection of games for android user like racing games, multiplayer games, offline mode games, rpg games, puzzle games, strategy games and many more other games.
In this post I will discuss about android strategy games available on Google Play store in both free and paid versions. These strategy games not only refresh your mind it also helps in increasing your I.Q. level.
Now problem is that how to select top android strategy games from billions of games available on store. If you are looking for best android strategy game then your hunt stop here.
I have already made readymade list for you on android strategy games that will help you to decide which game is best for you to refresh your mind.
Nowadays Clash of Clan is very popular and comes in the category of best android games. Due to 29 million active users this games stands first in android games.
In this game player makes strategy to raise their own army of barbarians, archers, Hog riders, wizards, dragons and other fighters and attacks on other villages and lead their clan to path of victory.
In this game players build their villages and make their village stronger and defend attack of opponent players. Minimum age limit to play this game is 13 years. Here players can make their army strong by combining with other players and make strategy to win against every attack.
This is one of the best strategy games for android users. This app has been installed by more than 100 million users worldwide. In this game we have to make strong strategy to protect our plants from Zombies.
Players can charge their plants with supercharge food and boost up their power that protect them from zombies. In this game for each level player can select plants intelligently and make their own winning strategy.
Play this game once I am sure you will like it.
Boom Beach is another best strategy game in which we have to make strong strategy to fight against evil blackguard. In this game players attack on base of enemy to free enslaved islanders and unlock various secrets of tropical paradise. In this game player combines and create task force and attack on enemy base to protect islanders.
Empires and Allies is best modern-military strategy games by which players can build their own army and prepare for battle to control globe or save world from GRA an evil terrorist organization. Player can design their army with battle-hardened tanks, spider drones, helicopters and many more other weapons.
BattleVoid is real time free sci-fi strategy game in which you are in universe and where 3 other kind of species and unknown threats are close to you and you have to save human colony using own weapons and fleet, and other reinforcement starships. This game has excellent graphics and you can smoothly play this game.
Here is another best strategy game for all android lovers. This app got 4.5 stars rating from other android users on Play Store and available in Paid Version.
This game is based on turn-based strategy game in which your main aim is to rule the world. There are different scenarios by using them you can move from one point to another point and dominate the world.
In this game you have to protect your treasury, civilization, and buildings against attacks.
Have you heard about best strategy game i.e. Anomaly Warzone Earth? Anomaly 2 is sequel of this game with new features. It has two modes i.e. multiplayer and single player mode to play this game.
The story line of this game is that your planet is invaded by alien machines and you have to protect humankind from extinction. In multiplayer mode one player plays as tower defense and other player plays as tower offense. Build your own battle squad and make your own path to victory.
Deadeye is one of the most popular turn-based strategy game. In this game world is taken over by zombies and using your own strategies you have to single boy Jack a curly haired boy single alive human being on earth from these zombies and help him to reach the destination alive.
This game has 100+ levels, 4 different types of zombies, excellent graphics and available on Play Store in paid version.
Star Command is another best paid android strategy game available on Play Store with 4.3 stars rating. In this game you build your own starship, recruit your crew and provide them weapons and protect universe from alien attack.
First Strike 1.3 comes in the category of top 10 strategy games. This app is available in paid version and got several awards of best game. This game is based on nuclear war and you have to select your steps carefully in path of war and peace.
Player can pick their nuclear players and plan their next strategy smartly to recon enemies action by building bigger bombs and other weapons. This game has excellent graphics and I am sure you will enjoy this game.


text:
Q: I need help understanding what Animated.diffClamp(value, min, max) is expected to do While researching  sticky headers, I encountered diffClamp for the first time, I have tried to use the API to understand better what the function does, however comments associated with it in react-native's documentation and articles I found while researching have made it very confusing what behavior to expect. My observations were that the function does keep the value between the min and max, while returning the closest value from either the min or max otherwise. Please, anyone with better understanding should kindly confirm or rebut, thank you.

A: I understand someone may be having the same difficulty I had understanding Animated.diffClamp, hence this follow-up. I learnt that it keeps track of all input values that gets passed into the function, upon every call, it takes the difference between successive inputs and clamps the result between the min and max values. In such a case where it has no previous input value(i.e the first call of the function), it clamps the input value between the min and max and returns the result.

redpajama_set_name: RedPajamaStackExchange


Why Learn with PDS in Hemel's The Snow Centre?
Add some confidence to your skiing with a private ski lesson in Hemel with one of the UK's leading instructors. James Bennett has taught for over ten years in the alps. During the summer he coaches at the local race club and trains aspiring future ski instructors. You can check out his profile here.
Providing the clearest and simplest ways of improving your skiing, with leading teaching techniques and tactics to get the most out of you.
All you need to bring is courage and enthusiasm!
HEADING TO THE ALPES, CONTINUE LEARNING WITH PDS.
We offer lessons in a range of resorts across the Alpes.


text:
AMERICA/VENEZUELA - Religious witnesses of merciful love in a particularly difficult situation
Tuesday, 24 November 2020 orders
Caritas publishes 2020 annual report: Almost 10 million people were supported
At the end of the general assembly: Bishops comment on the "State of the Country"
Violations of the right to information and to the work of journalists denounced by the Archdiocese of Caracas
The first Venezuelan Bishop to die of Covid-19
Lasallian religious killed during an attempted theft
The analysis of the situation of the country in times of the pandemic at the center of the work of the Assembly of Bishops
Caracas (Agenzia Fides) - "A message of faith, hope and solidarity" was sent by the men and women religious of Venezuela, gathered for the Extraordinary Assembly of Conver (Conferencia venezolana de religiosas y religiosos), "to all men and women, beloved children of God, who live in our country, and to all our brothers and sisters in the diaspora". The Superiors and Major Superiors of Orders, Congregations, Institutes of Consecrated Life and Societies of Apostolic Life of Venezuela, Delegations and Commissions, met on November 21, the feast of the Presentation of the Virgin Mary, to reflect on the theme "Merciful love towards our neighbor".
In the message, sent to Fides, the religious recall: "Merciful Love has led us to give our lives in different places in this Land of Grace, in the geographical and existential peripheries, through an apostolate that brings us closer to the world of pain and of suffering, in a generous dedication to all, without distinction of race, creed, social condition or political thought". The religious are therefore witnesses of solidarity towards the great majority of the Venezuelan people, who "suffer the consequences of the bad management of social policies", and among these they mention: hunger, malnutrition, misery and poverty; repression, persecution of dissidents, very low salaries, lack of medicines, rampant inflation, abuse of authority, corruption, severe shortages of petrol, gas, water, electricity, mistreatment inflicted on the elderly ... Added to this are the natural disasters, which especially affected the poorest brothers.
"The current political regime – continue the religious - continues to annihilate individual and social freedoms, wants to do everything and does nothing to solve many problems; patron of everything and ineffective in everything, leading the country to a limitless collapse. Our country falls into the temptation of despair in the face of this painful situation, thinking that God is far away, silent and hidden, but… No, brothers and sisters! He continues to be Emmanuel, the God with us, who acts in the midst of His people and we see him in the awakening of countless gestures of solidarity".
The religious are close to those suffering the consequences of the Covid-19 pandemic. They pray for the dead and grieving families, while thanking doctors and health personnel for their dedication. They therefore reaffirm their commitment to make each community a "field hospital"; to continue proclaiming the Kingdom of God; to go out to meet the most vulnerable; to show the merciful face of Christ in communion with all ecclesial services in the field of health, education and food; to promote cooperation with humanitarian organizations; to do joint work with the laity within the humanitarian mission, in a difficult and contradictory materialistic reality, which poses many challenges; to strengthen pastoral work in the educational field by accompanying the teaching staff in claiming their working rights.
"Even in adversities, the Lord gives us reasons to rejoice, showing us that his Love continues to flow abundantly while listening to our prayers", conclude the religious, recalling the forthcoming beatification of the Doctor of the Poor, the venerable Dr. José Gregorio Hernández, "witness of dedication and service for Venezuelans and, above all, for us consecrated persons. Venezuela is still a blessed land of holiness". (SL) (Agenzia Fides, 24/11/2020)
ASIA/TURKEY - Sister Maria Concetta Mustacciu died of Covid-19: "guardian" of the Church of Tarsus
AMERICA/HAITI - Appeal of the Bishop of Anse-à-Veau/Miragoâne to pray after the kidnapping of a nun


text:
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.codeInsight;

import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
import com.intellij.injected.editor.EditorWindow;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.WriteAction;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.command.undo.UndoManager;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.EditorFactory;
import com.intellij.openapi.editor.LogicalPosition;
import com.intellij.openapi.editor.impl.DocumentImpl;
import com.intellij.openapi.editor.impl.EditorImpl;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.fileEditor.TextEditor;
import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.roots.ContentEntry;
import com.intellij.openapi.roots.LanguageLevelProjectExtension;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiPackage;
import com.intellij.psi.impl.source.PostprocessReformattingAspect;
import com.intellij.psi.search.ProjectScope;
import com.intellij.rt.execution.junit.FileComparisonFailure;
import com.intellij.testFramework.*;
import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl;
import com.intellij.util.ArrayUtil;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.util.*;

public abstract class JavaCodeInsightTestCase extends JavaPsiTestCase {
  protected Editor myEditor;

  protected Editor createEditor(@NotNull VirtualFile file) {
    final FileEditorManager instance = FileEditorManager.getInstance(myProject);

    if (file.getFileType().isBinary()) return null;
    PsiDocumentManager.getInstance(getProject()).commitAllDocuments();
    Editor editor = instance.openTextEditor(new OpenFileDescriptor(myProject, file, 0), false);
    ((EditorImpl)editor).setCaretActive();
    PsiDocumentManager.getInstance(getProject()).commitAllDocuments();
    DaemonCodeAnalyzer.getInstance(getProject()).restart();

    return editor;
  }

  @Override
  protected void tearDown() throws Exception {
    try {
      if (myProject != null) {
        FileEditorManager editorManager = FileEditorManager.getInstance(myProject);
        for (VirtualFile openFile : editorManager.getOpenFiles()) {
          editorManager.closeFile(openFile);
        }
      }
    }
    catch (Throwable e) {
      addSuppressedException(e);
    }
    finally {
      myEditor = null;
      super.tearDown();
    }
  }

  @Override
  protected @NotNull PsiTestData createData() {
    return new CodeInsightTestData();
  }

  protected void configureByFile(String filePath) throws Exception {
    configureByFile(filePath, null);
  }

  /**
   * @param files the first file will be loaded in editor
   */
  protected VirtualFile configureByFiles(@Nullable String projectRoot, String @NotNull ... files) {
    if (files.length == 0) return null;
    final VirtualFile[] vFiles = new VirtualFile[files.length];
    for (int i = 0; i < files.length; i++) {
      vFiles[i] = findVirtualFile(files[i]);
      if (vFiles[i] != null) {
        VfsTestUtil.assertFilePathEndsWithCaseSensitivePath(vFiles[i], files[i]);
      }
    }

    File projectFile = projectRoot == null ? null : new File(getTestDataPath() + projectRoot);

    try {
      return configureByFiles(projectFile, vFiles);
    }
    catch (IOException e) {
      throw new RuntimeException(e);
    }
  }

  protected VirtualFile configureByFile(@NotNull String filePath, @Nullable String projectRoot) throws Exception {
    VirtualFile vFile = findVirtualFile(filePath);
    File projectFile = projectRoot == null ? null : new File(getTestDataPath() + projectRoot);

    return configureByFile(vFile, projectFile);
  }

  protected PsiFile configureByText(@NotNull FileType fileType, @NotNull String text) {
    return configureByText(fileType, text, null);
  }

  protected PsiFile configureByText(final @NotNull FileType fileType, @NotNull String text, @Nullable String _extension) {
    try {
      final String extension = _extension == null ? fileType.getDefaultExtension() : _extension;

      File dir = createTempDirectory();
      final File tempFile = FileUtil.createTempFile(dir, "tempFile", "." + extension, true);
      CodeInsightTestFixtureImpl.associateExtensionTemporarily(fileType, extension, getTestRootDisposable());
      final VirtualFile vFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(tempFile);
      assert vFile != null;
      WriteAction.runAndWait(() -> {
        vFile.setCharset(StandardCharsets.UTF_8);
        VfsUtil.saveText(vFile, text);
      });

      final VirtualFile vdir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(dir);

      PsiTestUtil.addSourceRoot(myModule, vdir);

      configureByExistingFile(vFile);

      assertEquals(fileType, myFile.getVirtualFile().getFileType());
      return myFile;
    }
    catch (IOException e) {
      throw new RuntimeException(e);
    }
  }

  protected void configureByFile(@NotNull VirtualFile vFile) throws IOException {
    configureByFile(vFile, null);
  }

  protected void configureByExistingFile(final @NotNull VirtualFile virtualFile) {
    myFile = null;
    myEditor = null;

    final Editor editor = createEditor(virtualFile);

    final Document document = editor.getDocument();
    final EditorInfo editorInfo = new EditorInfo(document.getText());

    final String newFileText = editorInfo.getNewFileText();
    ApplicationManager.getApplication().runWriteAction(() -> {
      if (!document.getText().equals(newFileText)) {
        document.setText(newFileText);
      }

      PsiFile file = myPsiManager.findFile(virtualFile);
      if (myFile == null) myFile = file;

      if (myEditor == null) myEditor = editor;

      editorInfo.applyToEditor(editor);
    });

    PsiDocumentManager.getInstance(getProject()).commitAllDocuments();
  }

  public VirtualFile doConfigureByFiles(@Nullable File rawProjectRoot, VirtualFile @NotNull ... vFiles) throws IOException {
    return configureByFiles(rawProjectRoot, vFiles);
  }

  protected VirtualFile configureByFiles(@Nullable File rawProjectRoot, VirtualFile @NotNull ... vFiles) throws IOException {
    myFile = null;
    myEditor = null;

    VirtualFile toDir = createVirtualDirectoryForContentFile();

    Map<VirtualFile, EditorInfo> editorInfos = WriteAction.compute(() -> {
      try {
        final ModuleRootManager rootManager = ModuleRootManager.getInstance(myModule);
        final ModifiableRootModel rootModel = rootManager.getModifiableModel();
        if (clearModelBeforeConfiguring()) {
          rootModel.clear();
        }

        // auxiliary files should be copied first
        VirtualFile[] reversed = ArrayUtil.reverseArray(vFiles);
        Map<VirtualFile, EditorInfo> editorInfos1;
        if (rawProjectRoot != null) {
          FileUtil.copyDir(rawProjectRoot, toDir.toNioPath().toFile());
          File projectRoot = rawProjectRoot.getCanonicalFile();
          VirtualFile aNull = Objects.requireNonNull(LocalFileSystem.getInstance().refreshAndFindFileByIoFile(projectRoot));
          editorInfos1 = copyFilesFillingEditorInfos(aNull, toDir, ContainerUtil.map2Array(reversed, String.class, s -> {
            return s.getPath().substring(projectRoot.getPath().length());
          }));

          toDir.refresh(false, true);
        }
        else {
          editorInfos1 = new LinkedHashMap<>();
          for (VirtualFile vFile : reversed) {
            VirtualFile parent = vFile.getParent();
            assert parent.isDirectory() : parent;
            editorInfos1.putAll(copyFilesFillingEditorInfos(parent, toDir, vFile.getName()));
          }
        }

        boolean sourceRootAdded = false;
        if (isAddDirToContentRoot()) {
          final ContentEntry contentEntry = rootModel.addContentEntry(toDir);
          if (isAddDirToSource()) {
            sourceRootAdded = true;
            contentEntry.addSourceFolder(toDir, isAddDirToTests());
          }
        }
        doCommitModel(rootModel);
        if (sourceRootAdded) {
          sourceRootAdded(toDir);
        }

        return editorInfos1;
      }
      catch (IOException e) {
        LOG.error(e);
        return null;
      }
    });

    if (editorInfos != null) {
      openEditorsAndActivateLast(editorInfos);
    }

    return toDir;
  }

  protected @NotNull VirtualFile createVirtualDirectoryForContentFile() {
    return getTempDir().createVirtualDir();
  }

  protected boolean isAddDirToTests() {
    return false;
  }

  protected void doCommitModel(@NotNull ModifiableRootModel rootModel) {
    rootModel.commit();
  }

  protected void sourceRootAdded(final VirtualFile dir) {
  }

  protected @NotNull Map<VirtualFile, EditorInfo> copyFilesFillingEditorInfos(@NotNull String testDataFromDir,
                                                                              @NotNull VirtualFile toDir,
                                                                              String @NotNull ... relativePaths) throws IOException {
    if (!testDataFromDir.startsWith("/")) testDataFromDir = "/" + testDataFromDir;
    return copyFilesFillingEditorInfos(LocalFileSystem.getInstance().refreshAndFindFileByPath(getTestDataPath() + testDataFromDir), toDir, relativePaths);
  }

  protected @NotNull Map<VirtualFile, EditorInfo> copyFilesFillingEditorInfos(@NotNull VirtualFile fromDir,
                                                                              @NotNull VirtualFile toDir,
                                                                              String @NotNull ... relativePaths) throws IOException {
    Map<VirtualFile, EditorInfo> editorInfos = new LinkedHashMap<>();

    List<OutputStream> streamsToClose = new ArrayList<>();

    for (String relativePath : relativePaths) {
      relativePath = StringUtil.trimStart(relativePath, "/");
      final VirtualFile fromFile = fromDir.findFileByRelativePath(relativePath);
      assertNotNull(fromDir.getPath() + "/" + relativePath, fromFile);
      VirtualFile toFile = toDir.findFileByRelativePath(relativePath);
      if (toFile == null) {
        final File file = new File(toDir.getPath(), relativePath);
        FileUtil.createIfDoesntExist(file);
        toFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(file);
        assertNotNull(file.getCanonicalPath(), toFile);
      }
      toFile.putUserData(VfsTestUtil.TEST_DATA_FILE_PATH, FileUtil.toSystemDependentName(fromFile.getPath()));
      editorInfos.put(toFile, copyContent(fromFile, toFile, streamsToClose));
    }

    for(int i = streamsToClose.size() -1; i >= 0 ; --i) {
      streamsToClose.get(i).close();
    }
    return editorInfos;
  }

  private EditorInfo copyContent(@NotNull VirtualFile from, @NotNull VirtualFile to, @NotNull List<? super OutputStream> streamsToClose) throws IOException {
    byte[] content = from.getFileType().isBinary() ? from.contentsToByteArray(): null;
    final String fileText = from.getFileType().isBinary() ? null : StringUtil.convertLineSeparators(VfsUtilCore.loadText(from));

    EditorInfo editorInfo = fileText == null ? null : new EditorInfo(fileText);
    String newFileText = fileText == null ? null : editorInfo.getNewFileText();
    doWrite(newFileText, to, content, streamsToClose);
    return editorInfo;
  }

  protected final void setActiveEditor(@NotNull Editor editor) {
    myEditor = editor;
    myFile = getPsiFile(editor.getDocument());
  }

  protected @NotNull List<Editor> openEditorsAndActivateLast(@NotNull Map<VirtualFile, EditorInfo> editorInfos) {
    final List<Editor> list = openEditors(editorInfos);
    setActiveEditor(list.get(list.size() - 1));
    return list;
  }

  protected final @NotNull List<Editor> openEditors(@NotNull Map<VirtualFile, EditorInfo> editorInfos) {
    return ContainerUtil.map(editorInfos.keySet(), newVFile -> {
      PsiFile file = myPsiManager.findFile(newVFile);
      if (myFile == null) myFile = file;

      Editor editor = createEditor(newVFile);
      if (myEditor == null) myEditor = editor;

      EditorInfo editorInfo = editorInfos.get(newVFile);
      if (editorInfo != null) {
        editorInfo.applyToEditor(editor);
      }
      return editor;
    });
  }

  private void doWrite(final String newFileText,
                       @NotNull VirtualFile newVFile,
                       byte[] content,
                       @NotNull List<? super OutputStream> streamsToClose) throws IOException {
    if (newFileText == null) {
      final OutputStream outputStream = newVFile.getOutputStream(this, -1, -1);
      outputStream.write(content);
      streamsToClose.add(outputStream);
    }
    else {
      setFileText(newVFile, newFileText);
    }
  }

  protected boolean isAddDirToContentRoot() {
    return true;
  }

  protected boolean isAddDirToSource() {
    return true;
  }

  protected VirtualFile configureByFile(@NotNull VirtualFile vFile, File projectRoot) throws IOException {
    return configureByFiles(projectRoot, vFile);
  }

  protected boolean clearModelBeforeConfiguring() {
    return false;
  }

  protected void setupCursorAndSelection(final @NotNull Editor editor) {
    Document document = editor.getDocument();
    EditorTestUtil.CaretAndSelectionState caretState = EditorTestUtil.extractCaretAndSelectionMarkers(document);
    EditorTestUtil.setCaretsAndSelection(editor, caretState);
    PsiDocumentManager.getInstance(myProject).commitAllDocuments();
  }

  @Override
  protected void configure(@NotNull String path, String dataName) throws Exception {
    super.configure(path, dataName);

    myEditor = createEditor(myFile.getVirtualFile());

    CodeInsightTestData data = (CodeInsightTestData) myTestDataBefore;

    LogicalPosition pos = new LogicalPosition(data.getLineNumber() - 1, data.getColumnNumber() - 1);
    myEditor.getCaretModel().moveToLogicalPosition(pos);

    int selectionEnd;
    int selectionStart = selectionEnd = myEditor.getCaretModel().getOffset();

    if (data.getSelectionStartColumnNumber() >= 0) {
      selectionStart = myEditor.logicalPositionToOffset(new LogicalPosition(data.getSelectionEndLineNumber() - 1, data.getSelectionStartColumnNumber() - 1));
      selectionEnd = myEditor.logicalPositionToOffset(new LogicalPosition(data.getSelectionEndLineNumber() - 1, data.getSelectionEndColumnNumber() - 1));
    }

    myEditor.getSelectionModel().setSelection(selectionStart, selectionEnd);
  }

  protected void checkResultByFile(@NotNull String filePath) throws Exception {
    checkResultByFile(filePath, false);
  }

  protected void checkResultByFile(final @NotNull String filePath, final boolean stripTrailingSpaces) throws Exception {
    WriteCommandAction.writeCommandAction(getProject()).run(() -> {
      PostprocessReformattingAspect.getInstance(getProject()).doPostponedFormatting();
      if (stripTrailingSpaces) {
        ((DocumentImpl)myEditor.getDocument()).stripTrailingSpaces(getProject());
      }

      PsiDocumentManager.getInstance(myProject).commitAllDocuments();

      VirtualFile vFile = findVirtualFile(filePath);

      VfsTestUtil.assertFilePathEndsWithCaseSensitivePath(vFile, filePath);
      String expectedText;
      try {
        expectedText = VfsUtilCore.loadText(vFile);
      }
      catch (IOException e) {
        throw new RuntimeException(e);
      }

      expectedText = StringUtil.convertLineSeparators(expectedText);
      Document document = EditorFactory.getInstance().createDocument(expectedText);

      EditorTestUtil.CaretAndSelectionState caretState = EditorTestUtil.extractCaretAndSelectionMarkers(document);

      expectedText = document.getText();
      if (stripTrailingSpaces) {
        Document document1 = EditorFactory.getInstance().createDocument(expectedText);
        ((DocumentImpl)document1).stripTrailingSpaces(getProject());
        expectedText = document1.getText();
      }

      if (myEditor instanceof EditorWindow) {
        myEditor = ((EditorWindow)myEditor).getDelegate();
      }
      myFile = PsiDocumentManager.getInstance(getProject()).getPsiFile(myEditor.getDocument());

      String actualText = StringUtil.convertLineSeparators(myFile.getText());
      if (!Objects.equals(expectedText, actualText)) {
        throw new FileComparisonFailure("Text mismatch in file " + filePath, expectedText, actualText, vFile.getPath());
      }

      EditorTestUtil.verifyCaretAndSelectionState(myEditor, caretState);
    });
  }

  @Override
  protected void checkResult(String dataName) throws Exception {
    PsiDocumentManager.getInstance(myProject).commitAllDocuments();
    super.checkResult(dataName);

    CodeInsightTestData data = (CodeInsightTestData) myTestDataAfter;

    if (data.getColumnNumber() >= 0) {
      assertEquals(dataName + ":caretColumn", data.getColumnNumber(), myEditor.getCaretModel().getLogicalPosition().column + 1);
    }
    if (data.getLineNumber() >= 0) {
      assertEquals(dataName + ":caretLine", data.getLineNumber(), myEditor.getCaretModel().getLogicalPosition().line + 1);
    }

    int selectionStart = myEditor.getSelectionModel().getSelectionStart();
    int selectionEnd = myEditor.getSelectionModel().getSelectionEnd();
    LogicalPosition startPosition = myEditor.offsetToLogicalPosition(selectionStart);
    LogicalPosition endPosition = myEditor.offsetToLogicalPosition(selectionEnd);

    if (data.getSelectionStartColumnNumber() >= 0) {
      assertEquals(dataName + ":selectionStartColumn", data.getSelectionStartColumnNumber(), startPosition.column + 1);
    }
    if (data.getSelectionStartLineNumber() >= 0) {
      assertEquals(dataName + ":selectionStartLine", data.getSelectionStartLineNumber(), startPosition.line + 1);
    }
    if (data.getSelectionEndColumnNumber() >= 0) {
      assertEquals(dataName + ":selectionEndColumn", data.getSelectionEndColumnNumber(), endPosition.column + 1);
    }
    if (data.getSelectionEndLineNumber() >= 0) {
      assertEquals(dataName + ":selectionEndLine", data.getSelectionEndLineNumber(), endPosition.line + 1);
    }
  }

  protected @NotNull VirtualFile findVirtualFile(@NotNull String filePath) {
    String absolutePath = getTestDataPath() + filePath;
    VfsRootAccess.allowRootAccess(getTestRootDisposable(), absolutePath);
    return VfsTestUtil.findFileByCaseSensitivePath(absolutePath);
  }

  protected @NotNull String getTestRoot(){
    return FileUtil.toSystemIndependentName(getTestDataPath());
  }

  public Editor getEditor() {
    return myEditor;
  }

  protected void type(char c) {
    LightPlatformCodeInsightTestCase.type(c, getEditor(),getProject());
  }

  protected void undo() {
    UndoManager undoManager = UndoManager.getInstance(myProject);
    TextEditor textEditor = TextEditorProvider.getInstance().getTextEditor(getEditor());
    undoManager.undo(textEditor);
  }

  protected void caretLeft() {
    caretLeft(getEditor());
  }
  protected void caretLeft(@NotNull Editor editor) {
    LightPlatformCodeInsightTestCase.executeAction(IdeActions.ACTION_EDITOR_MOVE_CARET_LEFT, editor, getProject());
  }
  protected void caretRight() {
    caretRight(getEditor());
  }
  protected void caretRight(@NotNull Editor editor) {
    LightPlatformCodeInsightTestCase.executeAction(IdeActions.ACTION_EDITOR_MOVE_CARET_RIGHT, editor, getProject());
  }
  protected void caretUp() {
    LightPlatformCodeInsightTestCase.executeAction(IdeActions.ACTION_EDITOR_MOVE_CARET_UP, myEditor, getProject());
  }

  protected void deleteLine() {
    LightPlatformCodeInsightTestCase.deleteLine(myEditor, getProject());
  }

  protected void type(@NotNull String s) {
    for (char c : s.toCharArray()) {
      type(c);
    }
  }

  protected void backspace() {
    backspace(getEditor());
  }

  protected void backspace(final @NotNull Editor editor) {
    LightPlatformCodeInsightTestCase.backspace(editor,getProject());
  }

  protected void ctrlW() {
    LightPlatformCodeInsightTestCase.ctrlW(getEditor(),getProject());
  }

  protected void ctrlD() {
    LightPlatformCodeInsightTestCase.ctrlD(getEditor(),getProject());
  }

  protected void delete(final @NotNull Editor editor) {
    LightPlatformCodeInsightTestCase.delete(editor, getProject());
  }

  protected @NotNull PsiClass findClass(final @NotNull String name) {
    final PsiClass aClass = myJavaFacade.findClass(name, ProjectScope.getProjectScope(getProject()));
    assertNotNull("Class " + name + " not found", aClass);
    return aClass;
  }

  protected @NotNull PsiPackage findPackage(final @NotNull String name) {
    final PsiPackage aPackage = myJavaFacade.findPackage(name);
    assertNotNull("Package " + name + " not found", aPackage);
    return aPackage;
  }

  protected void setLanguageLevel(@NotNull LanguageLevel level) {
    LanguageLevelProjectExtension.getInstance(getProject()).setLanguageLevel(level);
  }
}


Why limit yourself? I don't believe creative minds should be put in boxes. Nearly two years ago, I decided that drawing had to be a priority. And those who follow me know I'm posting a lot of art. I'm not just a comic book writer, though I'm identified as such.
As the art above states, I'm doing commissions.
I'll draw whatever you like. Don't hesitate. It'll be my pleasure to draw your favorite character!
THIS IS FOR THE COMIC BOOK LEGACY!


text:
#include <gmock/gmock.h>
#include <gtest/gtest.h>

#include <condition_variable>
#include <mutex>

#include <fizz/crypto/test/TestUtil.h>
#include <fizz/protocol/clock/test/Mocks.h>
#include <fizz/protocol/test/Mocks.h>
#include <fizz/server/Actions.h>
#include <fizz/server/test/Mocks.h>

#include <folly/io/async/SSLContext.h>
#include <folly/io/async/ScopedEventBaseThread.h>
#include <folly/io/async/test/MockAsyncTransport.h>
#include <folly/ssl/Init.h>

#include <quic/client/handshake/ClientTransportParametersExtension.h>
#include <quic/client/state/ClientStateMachine.h>
#include <quic/common/test/TestUtils.h>
#include <quic/fizz/client/handshake/FizzClientHandshake.h>
#include <quic/fizz/client/handshake/FizzClientQuicHandshakeContext.h>
#include <quic/fizz/client/handshake/test/MockQuicPskCache.h>
#include <quic/fizz/handshake/FizzBridge.h>
#include <quic/fizz/handshake/QuicFizzFactory.h>
#include <quic/state/QuicStreamFunctions.h>
#include <quic/state/StateData.h>

using namespace testing;

namespace quic {
namespace test {

class ClientHandshakeTest : public Test, public boost::static_visitor<> {
 public:
  ~ClientHandshakeTest() override = default;

  ClientHandshakeTest() {}

  virtual void setupClientAndServerContext() {
    clientCtx = std::make_shared<fizz::client::FizzClientContext>();
    clientCtx->setClock(std::make_shared<fizz::test::MockClock>());
  }

  QuicVersion getVersion() {
    return QuicVersion::MVFST;
  }

  virtual void connect() {
    handshake->connect(
        hostname,
        std::make_shared<ClientTransportParametersExtension>(
            QuicVersion::MVFST,
            folly::to<uint32_t>(kDefaultConnectionWindowSize),
            folly::to<uint32_t>(kDefaultStreamWindowSize),
            folly::to<uint32_t>(kDefaultStreamWindowSize),
            folly::to<uint32_t>(kDefaultStreamWindowSize),
            folly::to<uint32_t>(kDefaultMaxStreamsBidirectional),
            folly::to<uint32_t>(kDefaultMaxStreamsUnidirectional),
            kDefaultIdleTimeout,
            kDefaultAckDelayExponent,
            kDefaultUDPSendPacketLen,
            kDefaultActiveConnectionIdLimit,
            ConnectionId(std::vector<uint8_t>())));
  }

  void SetUp() override {
    folly::ssl::init();
    dg.reset(new DelayedHolder());
    serverCtx = ::quic::test::createServerCtx();
    serverCtx->setOmitEarlyRecordLayer(true);
    serverCtx->setClock(std::make_shared<fizz::test::MockClock>());
    // Fizz is the name of the identity for our server certificate.
    hostname = "Fizz";
    setupClientAndServerContext();

    verifier = std::make_shared<fizz::test::MockCertificateVerifier>();
    auto handshakeFactory = FizzClientQuicHandshakeContext::Builder()
                                .setFizzClientContext(clientCtx)
                                .setCertificateVerifier(verifier)
                                .setPskCache(getPskCache())
                                .build();
    conn.reset(new QuicClientConnectionState(handshakeFactory));
    conn->readCodec = std::make_unique<QuicReadCodec>(QuicNodeType::Client);

    cryptoState = conn->cryptoState.get();
    handshake = conn->clientHandshakeLayer;
    conn->transportSettings.attemptEarlyData = true;
    std::vector<QuicVersion> supportedVersions = {getVersion()};
    auto serverTransportParameters =
        std::make_shared<ServerTransportParametersExtension>(
            getVersion(),
            folly::to<uint32_t>(kDefaultConnectionWindowSize),
            folly::to<uint32_t>(kDefaultStreamWindowSize),
            folly::to<uint32_t>(kDefaultStreamWindowSize),
            folly::to<uint32_t>(kDefaultStreamWindowSize),
            std::numeric_limits<uint32_t>::max(),
            std::numeric_limits<uint32_t>::max(),
            kDefaultIdleTimeout,
            kDefaultAckDelayExponent,
            kDefaultUDPSendPacketLen,
            generateStatelessResetToken(),
            ConnectionId(std::vector<uint8_t>{0xff, 0xfe, 0xfd, 0xfc}),
            ConnectionId(std::vector<uint8_t>()));
    fizzServer.reset(
        new fizz::server::
            FizzServer<ClientHandshakeTest, fizz::server::ServerStateMachine>(
                serverState, serverReadBuf, readAeadOptions, *this, dg.get()));
    connect();
    processHandshake();
    fizzServer->accept(&evb, serverCtx, serverTransportParameters);
  }

  virtual std::shared_ptr<QuicPskCache> getPskCache() {
    return nullptr;
  }

  void clientServerRound() {
    auto writableBytes = getHandshakeWriteBytes();
    serverReadBuf.append(std::move(writableBytes));
    fizzServer->newTransportData();
    evb.loop();
  }

  void serverClientRound() {
    // Fake that the transport has set the version and initial params.
    conn->version = QuicVersion::MVFST;
    conn->serverInitialParamsSet_ = true;
    evb.loop();
    for (auto& write : serverOutput) {
      for (auto& content : write.contents) {
        auto encryptionLevel =
            getEncryptionLevelFromFizz(content.encryptionLevel);
        handshake->doHandshake(std::move(content.data), encryptionLevel);
      }
    }
    processHandshake();
  }

  void processHandshake() {
    auto oneRttWriteCipherTmp = std::move(conn->oneRttWriteCipher);
    auto oneRttReadCipherTmp = conn->readCodec->getOneRttReadCipher();
    auto zeroRttWriteCipherTmp = std::move(conn->zeroRttWriteCipher);
    auto handshakeWriteCipherTmp = std::move(conn->handshakeWriteCipher);
    auto handshakeReadCipherTmp = conn->readCodec->getHandshakeReadCipher();
    if (oneRttWriteCipherTmp) {
      oneRttWriteCipher = std::move(oneRttWriteCipherTmp);
    }
    if (oneRttReadCipherTmp) {
      oneRttReadCipher = oneRttReadCipherTmp;
    }
    if (zeroRttWriteCipherTmp) {
      zeroRttWriteCipher = std::move(zeroRttWriteCipherTmp);
    }
    if (handshakeWriteCipherTmp) {
      handshakeWriteCipher = std::move(handshakeWriteCipherTmp);
    }
    if (handshakeReadCipherTmp) {
      handshakeReadCipher = handshakeReadCipherTmp;
    }
    auto rejected = handshake->getZeroRttRejected();
    if (rejected) {
      zeroRttRejected = std::move(rejected);
    }
  }

  void expectHandshakeCipher(bool expected) {
    EXPECT_EQ(handshakeReadCipher != nullptr, expected);
    EXPECT_EQ(handshakeWriteCipher != nullptr, expected);
  }

  void expectOneRttCipher(bool expected, bool oneRttOnly = false) {
    if (expected) {
      EXPECT_NE(oneRttReadCipher, nullptr);
      EXPECT_NE(oneRttWriteCipher.get(), nullptr);
    } else {
      EXPECT_EQ(oneRttReadCipher, nullptr);
      EXPECT_EQ(oneRttWriteCipher.get(), nullptr);
    }
    if (!oneRttOnly) {
      EXPECT_EQ(zeroRttWriteCipher.get(), nullptr);
    }
  }

  void expectZeroRttCipher(bool expected, bool expectOneRtt) {
    if (expected) {
      EXPECT_NE(zeroRttWriteCipher.get(), nullptr);
    } else {
      EXPECT_EQ(zeroRttWriteCipher.get(), nullptr);
    }
    expectOneRttCipher(expectOneRtt, true);
  }

  Buf getHandshakeWriteBytes() {
    auto buf = folly::IOBuf::create(0);
    if (!cryptoState->initialStream.writeBuffer.empty()) {
      buf->prependChain(cryptoState->initialStream.writeBuffer.move());
    }
    if (!cryptoState->handshakeStream.writeBuffer.empty()) {
      buf->prependChain(cryptoState->handshakeStream.writeBuffer.move());
    }
    if (!cryptoState->oneRttStream.writeBuffer.empty()) {
      buf->prependChain(cryptoState->oneRttStream.writeBuffer.move());
    }
    return buf;
  }

  void operator()(fizz::DeliverAppData&) {
    // do nothing here.
  }

  void operator()(fizz::WriteToSocket& write) {
    serverOutput.push_back(std::move(write));
  }

  void operator()(fizz::server::ReportEarlyHandshakeSuccess&) {
    earlyHandshakeSuccess = true;
  }

  void operator()(fizz::server::ReportHandshakeSuccess&) {
    handshakeSuccess = true;
  }

  void operator()(fizz::ReportError& error) {
    handshakeError = std::move(error);
  }

  void operator()(fizz::WaitForData&) {
    fizzServer->waitForData();
  }

  void operator()(fizz::server::MutateState& mutator) {
    mutator(serverState);
  }

  void operator()(fizz::server::AttemptVersionFallback&) {}

  void operator()(fizz::SecretAvailable&) {}

  void operator()(fizz::EndOfData&) {}

  class DelayedHolder : public folly::DelayedDestruction {};

  folly::EventBase evb;
  std::unique_ptr<
      QuicClientConnectionState,
      folly::DelayedDestruction::Destructor>
      conn{nullptr};
  ClientHandshake* handshake;
  QuicCryptoState* cryptoState;
  std::string hostname;

  fizz::server::ServerStateMachine machine;
  fizz::server::State serverState;
  std::unique_ptr<fizz::server::FizzServer<
      ClientHandshakeTest,
      fizz::server::ServerStateMachine>>
      fizzServer;
  std::vector<fizz::WriteToSocket> serverOutput;
  bool handshakeSuccess{false};
  bool earlyHandshakeSuccess{false};
  folly::Optional<fizz::ReportError> handshakeError;
  folly::IOBufQueue serverReadBuf{folly::IOBufQueue::cacheChainLength()};
  std::unique_ptr<DelayedHolder, folly::DelayedDestruction::Destructor> dg;
  fizz::Aead::AeadOptions readAeadOptions;

  std::unique_ptr<Aead> handshakeWriteCipher;
  const Aead* handshakeReadCipher = nullptr;
  std::unique_ptr<Aead> oneRttWriteCipher;
  const Aead* oneRttReadCipher = nullptr;
  std::unique_ptr<Aead> zeroRttWriteCipher;

  folly::Optional<bool> zeroRttRejected;

  std::shared_ptr<fizz::test::MockCertificateVerifier> verifier;
  std::shared_ptr<fizz::client::FizzClientContext> clientCtx;
  std::shared_ptr<fizz::server::FizzServerContext> serverCtx;
};

TEST_F(ClientHandshakeTest, TestHandshakeSuccess) {
  EXPECT_CALL(*verifier, verify(_));

  clientServerRound();
  EXPECT_EQ(handshake->getPhase(), ClientHandshake::Phase::Initial);
  expectHandshakeCipher(false);

  serverClientRound();
  expectHandshakeCipher(true);

  EXPECT_FALSE(zeroRttRejected.has_value());

  EXPECT_EQ(handshake->getPhase(), ClientHandshake::Phase::OneRttKeysDerived);
  clientServerRound();

  expectOneRttCipher(true);

  EXPECT_EQ(handshake->getPhase(), ClientHandshake::Phase::OneRttKeysDerived);

  handshake->handshakeConfirmed();
  EXPECT_EQ(handshake->getPhase(), ClientHandshake::Phase::Established);
  EXPECT_FALSE(zeroRttRejected.has_value());
  EXPECT_TRUE(handshakeSuccess);
}

TEST_F(ClientHandshakeTest, TestRetryIntegrityVerification) {
  // Example obtained from Appendix-A.4 of the QUIC-TLS draft v29.

  auto version = static_cast<QuicVersion>(0xff00001d);
  uint8_t initialByte = 0xff;

  std::vector<uint8_t> dcidVec = {};
  ConnectionId dcid(dcidVec);

  std::vector<uint8_t> scidVec = {
      0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5};
  ConnectionId scid(scidVec);

  std::string retryToken = R"(token)";
  LongHeader header(
      LongHeader::Types::Retry, scid, dcid, 0, version, retryToken);

  std::string integrityTag =
      "\xd1\x69\x26\xd8\x1f\x6f\x9c\xa2\x95\x3a\x8a\xa4\x57\x5e\x1e\x49";

  RetryPacket retryPacket(
      std::move(header), folly::IOBuf::copyBuffer(integrityTag), initialByte);

  std::vector<uint8_t> odcidVec = {
      0x83, 0x94, 0xc8, 0xf0, 0x3e, 0x51, 0x57, 0x08};
  ConnectionId odcid(odcidVec);

  EXPECT_TRUE(handshake->verifyRetryIntegrityTag(odcid, retryPacket));
}

TEST_F(ClientHandshakeTest, TestNoErrorAfterAppClose) {
  EXPECT_CALL(*verifier, verify(_));

  clientServerRound();
  serverClientRound();
  clientServerRound();

  fizzServer->appClose();
  evb.loop();

  // RTT 1/2 server -> client
  EXPECT_NO_THROW(serverClientRound());
  expectOneRttCipher(true);
  EXPECT_FALSE(zeroRttRejected.has_value());
  EXPECT_TRUE(handshakeSuccess);
}

TEST_F(ClientHandshakeTest, TestAppBytesInterpretedAsHandshake) {
  EXPECT_CALL(*verifier, verify(_));

  clientServerRound();
  serverClientRound();
  clientServerRound();

  fizz::AppWrite w;
  w.data = folly::IOBuf::copyBuffer("hey");
  fizzServer->appWrite(std::move(w));
  evb.loop();

  // RTT 1/2 server -> client
  serverClientRound();
  expectOneRttCipher(true);
  EXPECT_FALSE(zeroRttRejected.has_value());
  EXPECT_TRUE(handshakeSuccess);
}

class ClientHandshakeCallbackTest : public ClientHandshakeTest {
 public:
  void setupClientAndServerContext() override {
    clientCtx = std::make_shared<fizz::client::FizzClientContext>();
    clientCtx->setSupportedVersions({fizz::ProtocolVersion::tls_1_3});
    serverCtx->setSupportedVersions({fizz::ProtocolVersion::tls_1_3});
    clientCtx->setClock(std::make_shared<fizz::test::MockClock>());
    setupZeroRttOnServerCtx(*serverCtx, psk_);
  }

  void connect() override {
    handshake->connect(
        hostname,
        std::make_shared<ClientTransportParametersExtension>(
            QuicVersion::MVFST,
            folly::to<uint32_t>(kDefaultConnectionWindowSize),
            folly::to<uint32_t>(kDefaultStreamWindowSize),
            folly::to<uint32_t>(kDefaultStreamWindowSize),
            folly::to<uint32_t>(kDefaultStreamWindowSize),
            folly::to<uint32_t>(kDefaultMaxStreamsBidirectional),
            folly::to<uint32_t>(kDefaultMaxStreamsUnidirectional),
            kDefaultIdleTimeout,
            kDefaultAckDelayExponent,
            kDefaultUDPSendPacketLen,
            kDefaultActiveConnectionIdLimit,
            ConnectionId(std::vector<uint8_t>())));
  }

 protected:
  QuicCachedPsk psk_;
};

TEST_F(ClientHandshakeCallbackTest, TestHandshakeSuccess) {
  clientServerRound();
  serverClientRound();
  clientServerRound();

  bool gotEarlyDataParams = false;
  conn->earlyDataAppParamsGetter = [&]() -> Buf {
    gotEarlyDataParams = true;
    return {};
  };

  serverClientRound();
  EXPECT_TRUE(gotEarlyDataParams);
}

class ClientHandshakeHRRTest : public ClientHandshakeTest {
 public:
  ~ClientHandshakeHRRTest() override = default;

  void setupClientAndServerContext() override {
    clientCtx = std::make_shared<fizz::client::FizzClientContext>();
    clientCtx->setSupportedGroups(
        {fizz::NamedGroup::secp256r1, fizz::NamedGroup::x25519});
    clientCtx->setDefaultShares({fizz::NamedGroup::secp256r1});
    clientCtx->setClock(std::make_shared<fizz::test::MockClock>());
    serverCtx = std::make_shared<fizz::server::FizzServerContext>();
    serverCtx->setFactory(std::make_shared<QuicFizzFactory>());
    serverCtx->setSupportedGroups({fizz::NamedGroup::x25519});
    serverCtx->setClock(std::make_shared<fizz::test::MockClock>());
    setupCtxWithTestCert(*serverCtx);
  }
};

TEST_F(ClientHandshakeHRRTest, TestFullHRR) {
  EXPECT_CALL(*verifier, verify(_));

  clientServerRound();
  expectHandshakeCipher(false);

  EXPECT_EQ(handshake->getPhase(), ClientHandshake::Phase::Initial);
  serverClientRound();
  EXPECT_EQ(handshake->getPhase(), ClientHandshake::Phase::Handshake);
  clientServerRound();
  expectOneRttCipher(false);
  EXPECT_EQ(handshake->getPhase(), ClientHandshake::Phase::Handshake);

  serverClientRound();
  expectHandshakeCipher(true);
  EXPECT_EQ(handshake->getPhase(), ClientHandshake::Phase::OneRttKeysDerived);
  clientServerRound();
  expectOneRttCipher(true);
  EXPECT_EQ(handshake->getPhase(), ClientHandshake::Phase::OneRttKeysDerived);
  EXPECT_FALSE(zeroRttRejected.has_value());
  EXPECT_TRUE(handshakeSuccess);
}

TEST_F(ClientHandshakeHRRTest, TestHRROnlyOneRound) {
  EXPECT_CALL(*verifier, verify(_)).Times(0);

  clientServerRound();
  serverClientRound();
  clientServerRound();

  expectOneRttCipher(false);
  EXPECT_FALSE(handshakeSuccess);
}

class ClientHandshakeZeroRttTest : public ClientHandshakeTest {
 public:
  ~ClientHandshakeZeroRttTest() override = default;

  void setupClientAndServerContext() override {
    clientCtx = std::make_shared<fizz::client::FizzClientContext>();
    clientCtx->setSupportedVersions({fizz::ProtocolVersion::tls_1_3});
    clientCtx->setSupportedAlpns({"h1q-fb", "hq"});
    clientCtx->setClock(std::make_shared<fizz::test::MockClock>());
    serverCtx->setSupportedVersions({fizz::ProtocolVersion::tls_1_3});
    serverCtx->setSupportedAlpns({"h1q-fb"});
    serverCtx->setClock(std::make_shared<fizz::test::MockClock>());
    setupCtxWithTestCert(*serverCtx);
    psk = setupZeroRttOnClientCtx(*clientCtx, hostname);
    setupZeroRttServer();
  }

  std::shared_ptr<QuicPskCache> getPskCache() override {
    auto pskCache = std::make_shared<BasicQuicPskCache>();
    pskCache->putPsk(hostname, psk);
    return pskCache;
  }

  void connect() override {
    handshake->connect(
        hostname,
        std::make_shared<ClientTransportParametersExtension>(
            QuicVersion::MVFST,
            folly::to<uint32_t>(kDefaultConnectionWindowSize),
            folly::to<uint32_t>(kDefaultStreamWindowSize),
            folly::to<uint32_t>(kDefaultStreamWindowSize),
            folly::to<uint32_t>(kDefaultStreamWindowSize),
            folly::to<uint32_t>(kDefaultMaxStreamsBidirectional),
            folly::to<uint32_t>(kDefaultMaxStreamsUnidirectional),
            kDefaultIdleTimeout,
            kDefaultAckDelayExponent,
            kDefaultUDPSendPacketLen,
            kDefaultActiveConnectionIdLimit,
            ConnectionId(std::vector<uint8_t>())));
  }

  virtual void setupZeroRttServer() {
    setupZeroRttOnServerCtx(*serverCtx, psk);
  }

  QuicCachedPsk psk;
};

TEST_F(ClientHandshakeZeroRttTest, TestZeroRttSuccess) {
  clientServerRound();
  EXPECT_EQ(handshake->getPhase(), ClientHandshake::Phase::Initial);
  expectZeroRttCipher(true, false);
  expectHandshakeCipher(false);
  serverClientRound();
  expectHandshakeCipher(true);
  EXPECT_EQ(handshake->getPhase(), ClientHandshake::Phase::OneRttKeysDerived);
  EXPECT_TRUE(zeroRttRejected.has_value());
  EXPECT_FALSE(*zeroRttRejected);
  expectZeroRttCipher(true, true);
  clientServerRound();
  handshake->handshakeConfirmed();
  EXPECT_EQ(handshake->getPhase(), ClientHandshake::Phase::Established);
  EXPECT_EQ(handshake->getApplicationProtocol(), "h1q-fb");
}

class ClientHandshakeZeroRttReject : public ClientHandshakeZeroRttTest {
 public:
  ~ClientHandshakeZeroRttReject() override = default;

  void setupZeroRttServer() override {}
};

TEST_F(ClientHandshakeZeroRttReject, TestZeroRttRejection) {
  clientServerRound();
  EXPECT_EQ(handshake->getPhase(), ClientHandshake::Phase::Initial);
  expectZeroRttCipher(true, false);
  expectHandshakeCipher(false);
  serverClientRound();
  expectHandshakeCipher(true);
  EXPECT_EQ(handshake->getPhase(), ClientHandshake::Phase::OneRttKeysDerived);
  EXPECT_TRUE(zeroRttRejected.value_or(false));
  // We will still keep the zero rtt key lying around.
  expectZeroRttCipher(true, true);
  clientServerRound();
  handshake->handshakeConfirmed();
  EXPECT_EQ(handshake->getPhase(), ClientHandshake::Phase::Established);
}

class ClientHandshakeZeroRttRejectFail : public ClientHandshakeZeroRttTest {
 public:
  ~ClientHandshakeZeroRttRejectFail() override = default;

  void setupClientAndServerContext() override {
    // set it up so that the identity will not match.
    hostname = "foobar";
    ClientHandshakeZeroRttTest::setupClientAndServerContext();
  }

  void setupZeroRttServer() override {}
};

TEST_F(ClientHandshakeZeroRttRejectFail, TestZeroRttRejectionParamsDontMatch) {
  clientServerRound();
  EXPECT_EQ(handshake->getPhase(), ClientHandshake::Phase::Initial);
  expectHandshakeCipher(false);
  expectZeroRttCipher(true, false);
  EXPECT_THROW(serverClientRound(), QuicInternalException);
}
} // namespace test
} // namespace quic


As part of a pilot green initiative, Northeast Utilities decided to install a vegetated roof along with a number of green technologies at their corporate headquarters in Berlin, CT. This green roof is Apexs' first roof established from pre-grown sedum mats (similar to sod) giving the roof a "full-grown" appearance immediately following construction. Along with the green roof, Northeast Utilities also installed a white membrane and solar panels as other examples of green initiatives.


text:
Q: How do I render a pug/jade template with React, Node and Webpack? I have a React/Node/Express application, and I am using Webpack to build it.
Currently, the structure of the directory is as such:
node_modules
public
    app
        main.js
        main.map.js
    index.html
src
    client
        components
            Home.js
            Header.js
            Root.js
            User.js
        main.js
    server
        views
            index.html
        index.js
package.json
webpack.config.js

This is my webpack.config.js
var path = require("path");

var DIST_DIR = path.resolve(__dirname, "public");

var SRC_DIR = path.resolve(__dirname, "src");

var config = {
    entry: SRC_DIR + "/client/main.js",
    output: {
        path: DIST_DIR + "/app",
        filename: "main.js",
        publicPath: "/app"
    },
    module:{
        loaders: [
            {
                test: /\.js?/,
                include: SRC_DIR,
                loader: "babel-loader",
                query:{
                    presets:["react", "es2015", "stage-2"]
                }
            }
        ]
    }
};

module.exports = config;

And this is my package.json
{
  "name": "react-webpack",
  "version": "1.0.0",
  "description": "",
  "main": "/src/server/index.js",
  "scripts": {
    "start": "npm run build",
    "build": "webpack -d && xcopy \"src/server/views/index.html\" \"public\" /F /Y && webpack-dev-server --content-base src/ --inline --hot --history-api-fallback",
    "build:prod": "webpack -p && xcopy \"src/server/views/index.html\" \"public/\" /F /Y"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "react": "^15.4.1",
    "react-dom": "^15.4.1",
    "react-router": "^3.0.0"
  },
  "devDependencies": {
    "babel-core": "^6.18.2",
    "babel-loader": "^6.2.8",
    "babel-preset-es2015": "^6.18.0",
    "babel-preset-react": "^6.16.0",
    "babel-preset-stage-2": "^6.18.0",
    "body-parser": "^1.15.2",
    "express": "^4.14.0",
    "jquery": "^3.1.1",
    "lodash": "^4.17.2",
    "morgan": "^1.7.0",
    "pug": "^2.0.0-beta6",
    "webpack": "^1.13.3",
    "webpack-dev-server": "^1.16.2"
  }
}

This works. My index.html is this:
<!DOCTYPE html>

    <meta charset="UTF-8">
    <title>React Basics</title>

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">

When I do npm start, the application builds, and I can go to localhost:8080 and see index.html, with the subcomponents loaded. The script loaded is 'app/main.js' which is the following:
import React from 'react';
import { render } from 'react-dom';
import {Router, Route, browserHistory, IndexRoute} from "react-router";

//import newly created components
import {Root} from "./components/Root";
import {Home} from "./components/Home";
import {User} from "./components/User";

class App extends React.Component {

    render() {
        return (
            <Router history={browserHistory}>
                <Route path={"/"} component={Root}>
                    <IndexRoute component={Home}/>
                    <Route path={"user/:id"} component={User}/>
                    <Route path={"home"} component={Home}/>
                </Route>
                <Route path={"home"} component={Home}/>
            </Router>
        );
    }
}

render(<App />, window.document.getElementById('app'));

What I want to do right now is instead of having the index.html, I want to have an index.pug with exactly the same content as index.html, and serve the pug template from the server file index.js. Can you tell me how I can do that? i tried a few things, but it messed things up too much, so reverted back to original situation.

A: In the root directory:
$ npm install pug --save

server/index.js:
var app = require('express')();
app.set('view engine', 'pug');
app.get('/', function (req, res) {
  res.render('index');
});

server/views/index.pug:
doctype html
html(lang='en')

  head
    meta(charset='UTF-8')
    title React Basics
    //- Latest compiled and minified CSS
    link(rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css' integrity='sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u' crossorigin='anonymous')

  body
    #app
    script(src='/app/main.js')
    //- Everything will be bundled in app/mainjs

A: Watch your babel loader test, in webpack.config.js.
test: /\.js?/,

should be
test: /\.jsx?/,

The ? in your regex means the preceding char was optional. In our case, we want babel to run on *.js and *.jsx.

A: You can use pug-as-jsx : https://github.com/bluewings/pug-as-jsx-loader
You will find steps to do it here : can i use pug (ex-jade) with react framework?
A blog about this : https://medium.com/nishantsblog/pug-templates-for-react-presentation-components-7610967954a


text:
Articles with non-canon elements, 1985, 2015, Books
A Match Made in Space
The front cover of George McFly's first novel...
...and its back cover depicting the author himself.
This article is about the novel. You may be looking for the movie of the same name.
"Oh, honey! It's your first novel."
"He [George] held up the book, which was entitled A Match Made In Space. The art work showed a bedroom with a space alien very reminiscent of Marty's Darth Vader speaking to a young man cowering beneath the covers. The author's name, in large letters, was George McFly. / "Holy cow," Marty said. "You wrote that, Dad?" / George nodded proudly. "My first novel," he said. "I sure hope it sells." / "Of course it'll sell," Lorraine gushed. "After all, it's not like you're a nobody. You've been selling stories ever since college." / "That's right, Dad," Dave added. "You're the one who's always telling us to have confidence and a positive attitude. Where's yours now?" / "You're right," George said. "I'm sure this book is going to do just fine." / Then, turning to Marty, he put a strong hand on his shoulder and said: "And that tape of yours is going to do just fine, too." "
—From Back to the Future by George Gipe (pages 245 and 246)
A Match Made in Space was the first novel by George McFly, which was published by Probert Publishing[1] in 1985. Two of the characters were Garth D'Vade and Raylene.
The story was inspired by a "vision" that woke George from sleep when he was a teenager in 1955, in which he saw an extraterrestrial named Darth Vader who threatened to melt his brain unless he asked Lorraine Baines to the Enchantment Under the Sea dance. He didn't know that the alien he saw was actually his future son Marty, wearing a radiation suit from 1985.
George wrote the novel with the same science fiction aspect that he had grown up on, but his marriage to Lorraine led him to also make the book a love story. The illustration on the front cover depicted a couple brought together by an alien that resembled the one that he saw. The title of the book was derived from the old saying that compatible couples are "a match made in Heaven". A black and white head-and-shoulders photograph of George was on the back cover.
In 2015, Marty noticed that his father's book was made into a movie, sold in a video software store.[2] Jennifer Parker additionally noted that the book was turned into a videobook that sat on a shelf in their home.
According to a story by Michael Klastorin on the front page of the October 22, 2015 issue of USA Today,[3] Hollywood was planning a remake of the movie, to be directed and co-written by Robert Zemeckis, as the original 1989 adaptation — which had featured martial arts elements and country western songs — was considered "a creative misfire as well as a box office bomb". When Klastorin spoke to George about casting ideas for the remake, according to George there was only one man in his mind who could play the alien, and hoped he could convince Zemeckis to cast Christopher Lloyd in the role.
The name of the business A Match Made on Earth in 2015 was possibly inspired by the title of the novel.
Note: The following section is considered non-canon or is disputed in canonicity.
On September 7, 1893, Dr. Emmett Brown traveled in the second DeLorean time machine to October 27, 2017 to find an eighth wedding anniversary gift for his wife Clara; he eventually bought a copy of Lighthouse at the End of the World by Clara's favorite author, Jules Verne, from the Blast from the Past antique/memorabilia store. While in 2017 Hill Valley, Doc passed the Holomax Theater where the movie remake of A Match Made in Space was being shown. The exterior of the building created a giant holographic image of the alien which appeared to reach down to grab Doc, during which he remembered that although the original movie hadn't been great, "the book was really something special".
Non-canon or disputable information ends here.
The front cover of A Match Made in Space has a different illustration in George Gipe's novelization (see second Quote above).
In the novelization, the arrival of the novel at the McFly residence is not in a large cardboard box filled with bubble wrap and containing several copies, as seen on-screen, but is instead described as follows:
" Biff entered a moment later and handed George a hardcover book. / "Oh, Mr. McFly," he said. "This just came in." / "Good," George nodded. "
—(Quote, page 245)
Back to the Future Part II novelization
Back to the Future: The Card Game
Back to the Future (IDW Publishing)
Back to the Future: Hard Time
Back to the Future 18: Stowaway to the Future (Mentioned only)
↑ According to the replica book cover of A Match Made in Space on La La Land Studios' Back to the Future page (see 'External links' below).
↑ Back to the Future Part II novelization, page 30
↑ Special "front page wrap" for real life October 22, 2015 issue of USA Today (see 'External links' below)
A Match Made in Space (movie)
Free printable copy of A Match Made in Space book cover - La La Land Studios
Special "front page wrap" for real life October 22, 2015 issue of USA Today
Retrieved from "https://backtothefuture.fandom.com/wiki/A_Match_Made_in_Space?oldid=55875"
Articles with non-canon elements


My favorite EDC knife because it's classic looking and does everything I need.
First one I owned the clip threads stripped. They just sent me this one. Let's see how it lasts, but love the pen it other wise.


text:
Cenchrus spinifex Cav.
Coastal Sandbur
Linda Ann Vorobik and Annaliese Miller, Illustrators
Michael T. Stieber and J.K. Wipff
Plants annual or perennial but short-lived; tufted. Culms 30-100 cm, geniculate. Sheaths compressed, glabrous or sparsely pilose; ligules 0.5-1.4 mm; blades 3-28 cm long, (1)3-7.2 mm wide, glabrous or sparsely long-pilose adaxially. Panicles 3-5(8.5) cm; fascicles 5.5-10.2 mm long, 2.5-5 mm wide, imbricate, ovoid to globose, glabrous or sparsely to moderately pubescent; outer bristles, when present, mostly flattened; inner bristles 8-40 (rarely more), 2-5.8 mm long, 1-2 mm wide, fused at least 1/2 their length, forming a distinct cupule, the distal portions usually diverging from the cupule at multiple, irregular intervals, sometimes diverging at more or less the same level, ciliate at the base, pubescent, stramineous to mauve or purple, flattened. Spikelets 2-4 per fascicle, 3.5-5.9 mm, glabrous. Lower glumes 1-3.3 mm; upper glumes (2.8)3.5-5 mm, 5-7-veined; lower florets sometimes staminate; lower lemmas 3-5(5.9) mm, 5-7-veined; lower paleas sometimes reduced or absent; anthers 1.3-1.6 mm; upper lemmas 3.5-5(5.8) mm; anthers 0.5-1.2 mm. Caryopses about 2.5 mm long, 1-2 mm wide, ovoid. 2n = 34 (32).
Cenchrus spinifex is common in sandy woods, fields, and waste places throughout the southern United States and southwards into South America. It may be more widespread than shown in the northern portion of the contiguous United States because it has often been confused with C. tribuloides. Cenchrus spinifex differs from C. tribuloidesin its glabrous or less densely pubescent fascicles, narrower inner bristles, and larger number of bristles. It has also been confused with C. longispinus, but differs in having shorter spikelets, fewer bristles overall, wider inner bristles, and outer bristles that are usually flattened rather than usually terete.


text:
Home / Research / Research
Below is a list of research papers, reports and other publications from Ekklesia dating back to 2004. Click on the title for more information on each publication, and a link through to the item itself where available. You might also like to sign up for our award winning weekly research bulletin which will ensure you are kept up-to-date with the very latest research from Ekklesia.
Research papers in the category Equality.
Rethinking religion in an open society
Though the role of religion in society has come back onto the agenda with a vengeance in recent years, the political, spiritual and intellectual resources at our disposal for handling the issues involved seem perilously thin on all sides in...
How forgiveness can transcend violent tragedy
Following the 2 October 2006 shooting that killed five Amish girls and wounded five others in the USA, three investigators (Dr Donald B. Kraybill, Elizabethtown College, Pennsylvania, Dr Steven M. Nolt, Goshen College, Indiana, and Dr David...
Religion and Secularism Network
The Religion and Secularism Network is coordinating a programme of lectures and workshops taking place at the University of Cambridge and elsewhere - aiming to clarify the relationship between the state and religion conceptually...
Re-writing History: the Episcopal Church struggle
In the global intra-Anglican 'wars' about sexuality, biblical interpretation, authority and church polity, The Episcopal Church (TEC) in the USA has been singled out from other Anglican provinces and subjected to harsh criticism and threats of...
When the Saints Go Marching Out: Redefining St George for a new era
This paper proposes that the figure of St George should be reclaimed according to his true, hidden story – as a dissenter against the abuse of power, a contrast to religious crusades, a global figure we share with other nations, someone who...


text:
Q: What tags in HTML5 are acknowledged of being self-closing? Here is the list that I got from complete list of HTML5 self-closing tags
<area />
<base />

<col />
<command />
<embed />

<input />
<keygen />
<link />
<meta />
<param />
<source />
<track />
<wbr />

I am wondering if it is complete, is there any else?

A: The HTML Standard calls these void elements. Here's the current list:

*

*area

*base

*br

*col

*embed

*hr

*img

*input

*keygen

*link

*menuitem

*meta

*param

*source

*track

*wbr
However, based on the context within the HTML document, there may be more "self-closing" elements. To get the list of those, open the HTML Standard and search (Ctrl+F or Cmd+F) for Acknowledge the token's self-closing flag. For example, math and svg can be self-closing. script can be self-closing in an SVG context.

A: They are not self-closing elements. They are void elements.
Void elements must not have end-tags. In HTML5,
 and
 mean the same thing: they are both start tags! It just so happens that no end tag is required for these elements. There is no concept of a self-closing tag in HTML5.
So you might as well write these without the slash, although I personally find it more readable if the slash is present.

A: Seems like your list is complete according to W3C list (but as Quentin point out, HTML5 draft is still subject to change)
Besides, according to various sources the following obsolete or non-standard tags are void:
basefont, bgsound, frame, isindex


Two cookies from Mattie Jane's on Main, wrapped in a kraft paper box with ribbon.
Mattie Jane's offers a variety of flavors each day. Please pick your top 3 flavors you would like and we will make sure your preferred flavors are sent with your order.


text:
<?php

namespace Eyewitness\Eye\Http\Middleware;

use Response;
use Config;

class EnabledLogRoute {

    public function filter($route, $request)
    {
        if (! Config::get('eye::routes_log')) {
            return Response::json(['error' => 'The log route is disabled on the server'], 405)
                           ->setCallback($request->input('callback'));
        }
    }

}