text:
Home Gaming Blizzard announces Gamescom 2018 schedule
Blizzard announces Gamescom 2018 schedule
Blizzard has announced its schedule for Gamescom 2018, which includes an hour-long opening ceremony and several untitled events for its games lineup on the first day of the show, including a mystery "guest event."
Here is the full schedule:
10:30 a.m. to 11:30 a.m. – Opening and Quiz (Main Stage)
11:30 a.m. to 12:00 p.m. – Overwatch Event (Main Stage)
12:00 p.m. to 12:45 p.m. – World of Warcraft Event(Main Stage)
12:45 p.m. to 1:15 p.m. – Quiz (Main Stage)
1:15 p.m. to 2:00 p.m. – StarCraft Event (Main Stage)
2:00 p.m. to 2:30 p.m. – Quiz (Main Stage)
2:30 p.m. to 3:30 p.m. – Heroes of the Storm Event (Main Stage)
3:45 p.m. to 4:45 p.m. – Diablo Event (Main Stage)
5:00 p.m. to 5:30 p.m. – Guest Event (Main Stage)
6:00 p.m. to 7:00 p.m. – Video Games Live Concert (Main Stage)
7:00 p.m. to 7:15 p.m. – Closing and Recap (Main Stage)
10:30 a.m. to 11:00 a.m. – Opening (Main Stage)
11:00 a.m. to 11:45 a.m. – Starcraft: Commander Co-op (Main Stage) – Starcraft II developer Kevin Dong demonstrates the new co-op commander with YouTubers Lowko and Winter.
11:45 a.m. to 12:00 p.m. – Quiz (Main Stage) – Prove your knowledge of Blizzard games for the chance to win prizes.
12:00 p.m. to 12:45 p.m. – Heroes of the Storm: Live Drawing with Carbot (Main Stage) – Carbot Animations is back this year, drawing characters from Heroes of the Storm live on stage.
12:45 p.m. to 1:00 p.m. – Quiz (Main Stage) – Prove your knowledge of Blizzard games for the chance to win prizes.
1:00 p.m. to 2:00 p.m. – Overwatch: Lucioball Challenge (Main Stage) – German Overwatch World Cup team members play Lucioball live on stage against members of the Gamescom audience.
2:00 p.m. to 2:15 p.m. – Quiz (Main Stage) – Prove your knowledge of Blizzard games for the chance to win prizes.
2:15 p.m. to 3:00 p.m. – World of Warcraft: Battle for Azeroth: Island Expeditions Showcase (Main Stage) – Top German guilds Aversion and Set Sail For Fail compete live on stage in Island Expeditions.
3:30 p.m. to 5:00 p.m. – Blizzard Dance Contest (Main Stage) – Perform dances from your favorite Blizzard characters for the chance to win awesome prizes.
5:00 p.m. to 5:30 p.m. – Guest: Bungie Presents Destiny 2: Forsaken (Main Stage)
6:00 p.m. to 7:00 p.m. – Vide Games Live Concert (Main Stage) – Enjoy an epic concert packed with music from Blizzard's games with the Video Games Live orchestra.
7:00 p.m. to 7:15 p.m. – Closing (Main Stage)
11:00 a.m. to 12:00 p.m. – Overwatch: German Voice Actors Panel (Main Stage) – Hear from your favorite Overwatch characters as their German voice actors perform on stage.
12:00 p.m. to 12:15 p.m. – Quiz (Main Stage) – Prove your knowledge of Blizzard games for the chance to win prizes.
12:15 p.m. to 1:00 p.m. – Hearthstone: Puzzle Time! (Main Stage) – Teams of Gamescom audience members race to complete challenges in Hearthstone's new Puzzle Lab.
1:15 p.m. to 2:15 p.m. – Diablo: Live Drawing with Chris Amaral (Main Stage) – Blizzard artist Chris Amaral creates some evil artwork before your eyes.
2:45 p.m. to 3:45 p.m. – Heroes of the Storm: Escape from Braxis (Main Stage) – Streamers MFPallytime and chu8 team up with Heroes of the Storm developer Matthew Cooper and two members of the audience in this Heroic Brawl.
6:15 p.m. to 7:00 p.m. – World of Warcraft: Battle for Azeroth: Cosplay Showcase (Main Stage) – World of Warcraft cosplayers show off creations inspired by the latest expansion.
11:00 a.m. to 12:00 p.m. – Diablo: Live Drawing with Chris Amaral (Main Stage) – Blizzard artist Chris Amaral creates some evil artwork before your eyes.
3:00 p.m. to 4:15 p.m. – StarCraft: One vs. Many – YouTubers Lowko and Winter take on Gamescom audience members in one-versus-three battles live on stage.
5:00 p.m. to 7:00 p.m. – Blizzard Cosplay Contest – Top cosplayers from Europe compete for amazing prizes, including a ticket to BlizzCon.
Thanks, BlizzPlanet and ResetEra.
Previous PostThe Legend of Heroes: Trails of Cold Steel IV details three more returning Trails series characters Next PostA Hat in Time "special announcement" set for August 20


text:
Get Ready for Transcendent Season 2: 5 Things to Know About the Ladies of AsiaSF
BY NICOLE SANDS•@NICOLESANDS901 UPDATED OCTOBER 5, 2016 AT 6:19PM EDT The ladies of Transcendent aren't afraid to go there. Fuse's hit docu-series – documenting the struggles and triumphs of the trans women of color who work at San Francisco's world-famous…
By Andrea James | October 5, 2016 | Film and media news, Transcendent |
Transcendent stars relish Pride spotlight
Published 06/16/2016 by David-Elijah Nahmod The stars of Transcendent are taking a turn in the spotlight these days. Season 2 of their Fuse TV show started a couple weeks ago, and the women will be celebrity grand marshals at the…
By Andrea James | June 16, 2016 | Film and media news, Transcendent |
Video: Reality TV Show 'Transcendent' Drops Season 2 Trailer
BY JACK MORSE IN NEWS ON JUN 9, 2016 4:30 PM Season two of Transcendent, the reality TV show that highlights the trans performers of AsiaSF, premiered last night on Fuse. Just like with the trailer for season one, the…
By Andrea James | June 9, 2016 | Film and media news, Transcendent |
Transcendent Star: My Bathroom Choices Are My Business
BY BIONKA JUNE 08 2016 5:17 AM EDT The thought of a national debate about which bathroom I can use never really occurred to me — especially when it runs parallel to presidential debates in an election year. I must…
'Transcendent' Cast Is Louder and Prouder Than Ever Before in Season 2 Trailer
AsiaSF dancers kick off season two on 'Transcendent'
By Leslie Katz on June 1, 2016 Taking their moments in the spotlight is nothing new for the transgender women who perform at AsiaSF. Season two of their reality show "Transcendent" begins at 11:30 p.m. June 8 on the cable…
Transcendent S02E01 now available on Fuse TV app
Early viewing alert! Download the Fuse Tv app & watch Season 2, Episode 1 of #Transcendent today, and catch up on all episodes of Season 1. Transcendent Season 2 premieres June 8. iOS (Apple) https://itunes.apple.com/us/app/fuse-tv/id967013714?mt=8 Android (Google Play) https://play.google.com/store/apps/details?id=com.fuse.fusetv&hl=en
By Andrea James | May 26, 2016 | Film and media news, Stuff to check out, Transcendent |
Exclusive: Get a Sneak Peek of Transcendent Season 2
By SAM SWANTEK MAY 25, 2016 – 7:19 PM One of Fuse's top achievements, the series delivers an up-close and personal glimpse into the very human triumphs and tribulations of trans women. Season two promises to be stronger, louder and prouder than…
By Andrea James | May 25, 2016 | Film and media news, Transcendent |
Hosting Transcendent panel at DragCon 8 May!
Join me at RuPaul's DragCon at noon on May 8 at the Los Angeles Convention Center for a lively panel about the hit Fuse TV series Transcendent! Bambiana, Bionka, Nya, Xristina, and Asia SF founder Larry Hashbarger will be discussing some unanswered…
By Andrea James | May 3, 2016 | Events and Appearances, Film and media news, Stuff to check out, Transcendent |
Fuse Renews Three Original Series
12/01/2015 Leading out of BIG FREEDIA on Wednesday nights, TRANSCENDENT – the best new series premiere among Adults 18-34 in network history – was also renewed, picked up for a second season to premiere in 2016. It was the second highest-rated first season of any original series ever on Fuse among…
By Andrea James | December 1, 2015 | Film and media news, Transcendent |

redpajama_set_name: RedPajamaCommonCrawl


baby gripe water gripe water 4 fl oz.
baby gripe water bundle gripe water baby.
baby gripe water burping babies for generations by gripe water every kid in the would have seen.
baby gripe water new bliss gripe water original baby teething no gluten liquid supplement.
baby gripe water baby grip water.
baby gripe water gripe baby water.
baby gripe water choice gripe water regular ml.
baby gripe water alcohol free gripe water.
baby gripe water gripe water ml.
baby gripe water gentle care gripe water help baby relieve gas colic discomfort upset stomach sleepless teething.
baby gripe water gripe water.
baby gripe water homemade gripe water.
baby gripe water best safe gripe water for infants newborns babies in review buy online.
baby gripe water bliss gripe water liquid 4 ounce bottles.


PA-0115 (05-08) CAR INSURANCE POLICY This policy is a binding legal contract between YOU and US. YOU and any person seeking coverage under this policy.
The UK's reliance on imported goods means. One issue that has been resolved is that of hire car insurance. It was confirme.
very brief briefing and overview on the budget," but had "concerns" about the reliance on sports betting. He also questioned the assumption that Congress will save the state $28.5 million by reauthori.
The vector, volume, velocity, variety, and ubiquity of data are disrupting traditional tools and methods of national security.
Currently, electric cars are covered by the same motor insurance policies. Adds Rakesh Jain, ED and CEO, Reliance General Insurance: "Since the battery and electricity supply unit is the key compon.
Noting that the next wave of global growth will be driven not only by policy but also by technology. though police came to.
T&C apply. Insurance is the subject matter of solicitation. Reliance General Insurance Company Limited. The advertisement contains only an indication of cover offered.
$400 is hardly enough to purchase a flight from the East to West Coast if a family member suddenly falls ill, to pay for a we.
The proposal includes an exemption from value-based reimbursement policy known as MACRA for practices with relatively. Within the landscape of regulatory changes, government reimbursement, insuranc.
Reserve Bank of India's Monetary Policy Committee raised repo rate by 25 basis points. Shares of most of Anil Ambani promo.
The "New Democrats" and the Clintons were then mirrored by "New Labour" and the Blairs, adapting the policies of the center-l.
These systems are not all equal, however, and the Insurance. car dealer and won't be for quite some time. We aren't there yet." Cars.com's Editorial department is your source for automotive news an.
Reliance. Car sales fell. TVS Motor Co. sales rose 18 percent to 3.21 lakh units. Hero MotoCorp Ltd.'s sales grew 9 percent to 6.79 lakh units. Here's how Indian automakers fared in July. 8. How St.
Finance and insurance gross. we lowered our reliance on the used vehicle wholesale markets as our wholesale unit sales volume declined 26%. Our new internal auction process, more aggressive interna.
T&C apply. Insurance is the subject matter of solicitation. Reliance General Insurance Company Limited. The advertisement contains only.


The council owns land and buildings across the borough that could be used to provide more housing where these are surplus to requirements and has embarked on a programme of developing these sites itself. This will ensure new high quality homes are delivered to meet local housing need.
The uplift in land values generated by development will be captured for the benefit of the council so that it can be used to provide more new homes and help address the budget pressures faced by the authority.
Work was completed on Ansell Court (previously known as Moreton Close) in February 2019. Development provides 53 self-contained one and two bedroom apartments offering independent living for older residents. Additional care and support will be available if required. You can view a time-lapse video of the construction on Ansell Court on The Barnet Group's YouTube channel here.
Many more schemes are due for completion in 2019, so visit the Opendoor Homes website for the latest.


Last year, medical tests revealed that a rare genetic cardiomyopathy is slowly but surely mutating, expanding, and gradually weakening my heart. Though there are no outward symptoms yet, my heart pumps only four-fifths of what it should, and my future health feels less certain. At age 44, the more I thought about my mortality, the more I thought about my desire to live more fully. Recently, I completed a yearlong class called "A Year to Live" at the New York Zen Center for Contemplative Care. We discussed loss and fear, imagined having a terminal diagnosis, created wills and advance directives……….


text:
Q: Remove the backslash "\" present only at the end of each columns in a Spark dataframe? I have a spark dataframe. I need to remove the backslash "\" only at the end of each column from the dataframe.
I have tried the following code but it replaces all the "\" from the dataframe.
val df2 = df.columns.foldLeft(df)((df, c) => df.withColumn(c, regexp_replace(col(c), "\\\\", "")))

But I need to remove backslash which is present at the end of each column.
sample input row:
349272|SET\CURVE\|SHE\HE|MBHG\
Expected output row:
349272|SET\CURVE|SHE\HE|MBHG
Thanks in advance.

redpajama_set_name: RedPajamaStackExchange


text:
About U-News
UNews Staff
MenuHome News	-On-Campus -Around Town -Student Life Sports	-Basketball -Golf -Tennis -Soccer -Softball -Volleyball A&E	-Events -Reviews	--Movies & Film --Music --Restaurants --Theater Opinion Multi-Media	-Podcasts -Video About U-News	-UNews Staff -Get involved -PDF Archive Advertise
Home / News / UMKC officials investigating alleged sexual assault
UMKC officials investigating alleged sexual assault
By Zachary Linhares on November 13, 2017
UMKC officials are investigating an alleged sexual assault that took place off campus Friday. Interim Chancellor and Provost Barbra Bichelmeyer released a statement Monday morning regarding the alleged assault.
"Over the weekend, we received reports of alleged sexual assault committed by UMKC students at an off-campus party on Friday evening," said Bichelmeyer in a letter to the UMKC community.
School officials say reports like this are taken seriously and have reached out to the persons involved in the incident. Details involving the alleged sexual assault were not released.
"Please know UMKC puts the highest priority on the health and safety of our students, faculty, staff and members of our community," Bichelmeyer wrote.
Bichelmeyer also said the alleged sexual assault generated substantial social media traffic.
UMKC school officials advise anyone with additional information to contact UMKC Title IX coordinator Mikah K. Thompson at 816-235-6910 or thompsonmikah@umkc.edu, or call the UMKC Police Department at 816-235-6910.
Related ItemsFront Pagehealthsafetysexual assaultUMKC
Circles: Album Review
2020 Oscar Nominations: A joke
Expanding Health and Wellness Services, on-campus childcare among SGA's top priorities for 2020
Letters to the editor, whether submitted electronically or by mail, should be 350 words or less and must include writer's phone number for verification. Unsigned letters will not be published. Letters may be edited for clarity or space. If you wish to send a Letter to the Editor, please do so here.
For inaccuracies in the paper or concerns about the paper, please contact the Editor-in-Chief
The University News is published on Tuesdays by students of the University of Missouri-Kansas City.
4,000 free copies are distributed to the University, Plaza, Westport, Brookside, Midtown and Downtown areas. The University News has served the UMKC community since 1933.
Opinions expressed are not necessarily those of the University or staff.
We are located at 5327 Holmes St., Kansas City, MO 64110.
U-News is an equal opportunity employer.
Subscriptions are available for the cost of postage, $25 a year.
The first copy of the University News is free. Additional copies may be purchased for $1 each, payable at the University News office in advance. No person may, without prior written permission of the University News, take more than one copy of each week's issue.
Copyright © 2014 University News, University of Missouri - Kansas City


text:
Snjagovo kan syfta på:

Bulgarien

 Snjagovo (distrikt i Bulgarien, Burgas), Obsjtina Ruen,
 Snjagovo (distrikt i Bulgarien, Dobritj), Obsjtina General-Tosjevo,

redpajama_set_name: RedPajamaWikipedia


Is the ABH FRC validated?
The ABH FRC was validated in a Northern California Kaiser Permanente database of over 94,000 women14 and with a cohort of men over 5800 men15.
On what data is this model based?
The American Bone Health Fracture Risk Calculator (ABH FRC) uses several easily ascertained risk factors plus bone mineral density (BMD) to calculate 10-year absolute fracture risk. The model begins by assigning the average fracture rate based on the patient's age. These population rates come from a publication that used US hospital discharge data for 2006.1 The model calculates differences between the individual and the reference population in several clinical risk factors including bone mineral density (BMD). Each risk factor's relative risk is used to modify the expected fracture rate. The risk factors and relative risks are closely aligned to those used in FRAX™ 2.
Why use a 10 year risk model?
Excellent risk-assessment models 3,4 exist for other diseases and have been translated into computer software that calculates absolute risk of an "event" from multiple variables. These models include the one widely used to predict 5- and 10-year risks for breast cancer 3 and the National Cholesterol Education Program's model for predicting 10-year risk of coronary heart disease.4 Both models have been used in developing best practice guidelines, are widely recommended to guide treatment decisions, and are well accepted by health care providers. Cost-effectiveness analyses 5 and treatment recommendations based on these analyses 6 have now been published for osteoporosis drugs.
Are there other web-based fracture risk models?
The World Health Organization FRAX™ model essentially replaces all previous web-based models because it has been extensively validated in populations around the world.
How does the current ABH FRC model differ from the WHO FRAX™ model?
The ABH FRC model and FRAX™ model use the same input variables, the same base fracture rates, and the same relative risks (multipliers).2 Both can be applied to men and 4 different ethnicities. Both produce results of the 10-year risk of hip and any one of 4 fractures (hip, wrist, humerus, clinically identified spine). One major difference is that the ABH FRC provides a graphic display of risk, comparing it to the expected risk, and categorizes it as low, moderate, or high. This is beneficial as a shared decision-making tool for patients and their health care providers.
A second difference is the FRAX™ model incorporates mortality into their algorythm, meaning that as a person ages in FRAX, their risk of fracture goes down.
Users of these models should get very similar but not identical results.
Don't the types of fracture change with age?
The ABH FRC and FRAX™ models provide 10-year absolute fracture risk for a hip fracture and for any one of 4 fractures (hip, spine, humerus, or wrist). The mix of fractures changes with age: at 45-49 years, hip fractures constitute only 7% but increase to 50% at 75 years.7 In contrast, the proportion of wrist fractures decreases with age, from 60% among the younger group to 26% among the older.
Why weren't other fractures included?
Why aren't other clinical risk factors included?
Won't the WHO FRAX™ model replace the ABH FRC model?
The WHO model is the standard in the field and has been incorporated into BMD reporting. In the ABH FRC, we have tried, as much as possible, to use the rates and relative risks that appear in the WHO model.2 The ABH FRC adds graphic display and categorization of risk—that should be helpful in discussing prevention and treatment strategies and risks and benefits of treatment.
How should this model help patients make decisions?
Models could promote awareness of the need for treatment among overlooked women in their 60s who have a number of risk factors but no clinically apparent osteoporosis (i.e. T-score not <-2.5). Fracture models appear to have the greatest value in solving the common clinical conundrum of low bone density (osteopenia) in healthy, early postmenopausal women. Giving a patient her absolute risk and discussing risk reduction expected from treatment in an easily understandable context enriches the quality and accuracy of information both health care providers and patients use for making decisions.
Can the model be used for men? For different ethnicities?
Both the ABH FRC and FRAX™ can be used for men and for 4 different ethnicities (Caucasian, Hispanic, Black, Asian). Simply select gender and race/ethnicity in the input fields.
What if the patient is being treated for osteoporosis?
This model is based on fracture rates in untreated women and does not account for the effects of being on an osteoporosis treatment. Estimates of the fracture risk reduction from regular long-term bisphosphonate therapy are in the order of 25-35%. 5,6,10 Leslie et. al. 11, on the basis of a large population study, concluded that "the FRAX tool can be used to predict fracture probability in women currently or previously treated for osteoporosis". In that study, bisphosphonate use did not substantially change the categorization of women in the population to low, medium, or high risk.
What about falls and frailty?
This ABH FRC does not capture the additional risks of falls and frailty because there are not studies that provide a relative risk for fractures based on these variables.
Why were these thresholds (low, moderate, high) chosen?
Ettinger B, Black DM, Dawson-Hughes B, et al. Updated fracture incidence rates for the US version of FRAX. Osteoporos Int 21:25-33, 2010.
Benichou J. A computer program for estimating individualized probabilities of breast cancer. Comput Biomed Res 1993; 26:373-82.
Expert Panel on Detection, Evaluation, and Treatment of High Blood Cholesterol in Adults. Executive Summary of the third report of the National Cholesterol Education Program (NCEP) Expert Panel on Detection, Evaluation, and Treatment of High Blood Cholesterol in Adults (Adult Treatment Panel III). JAMA 2001; 285:2486-97.
Tosteson ANA, Melton II LJ, Dawson-Hughes B, Baim S, Favus MJ, Khosla S, Lindsay RL. Cost-effective osteoporosis treatment thresholds: the United States perspective. Osteoporos Int 2008; 19:437-47.
Dawson-Hughes B, Tosteson ANA, Melton III LJ, Baim S, Favus ML, Khosla S, Lindsay RL. Implications of absolute fracture risk assessment for osteoporosis practice guidelines in the USA. Osteoporos Int 2008; 19:449-58.
Ettinger B, Hillier TA, Pressman AR, Che M, Hanley DA. Simple computer model for calculating 5-year osteoporotic fracture risk in postmenopausal women. J Women's Health 2005; 14:159-171.
Seeley DG, Browner WS, Nevitt MC, Genant HK, Scott JC, Cummings SR. Which fractures are associated with low appendicular bone mass in elderly women? Study of Osteoporotic Fractures Research Group. Ann Intern Med 1991; 115:837-42.
Ray NF, Chan JK, Thamer M, Melton LJ 3rd. Medical expenditures for the treatment of osteoporotic fractures in the United States in 1995: report from the National Osteoporosis Foundation. J Bone Miner Res 1997; 12:24-35.
Kanis JA, Borgstrom F, Zethraeus N, Johnell O, Oden A, Jonsson B. Intervention thresholds for osteoporosis in the UK. Bone 2005; 36: 22-32.
Siminoski K, Leslie WD, Frame H, et al. Recommendations for bone mineral density reporting in Canada. Can Assoc Radiol J 2005; 56:178-88.
Hux JE, Naylor CD. Communicating the benefits of chronic preventive therapy: does the format of efficacy data determine patients' acceptance of treatment? Med Decis Making 1995; 15:152-7.
Lo J, Pressman A. Fracture Risk Tool Validation in an Integrated Healthcare Delivery System. AJMC 3/2011.


text:
extern SLONG SNIPE_on;			// TRUE => Snipe mode is active
extern SLONG SNIPE_cam_x;
extern SLONG SNIPE_cam_y;
extern SLONG SNIPE_cam_z;
extern SLONG SNIPE_cam_yaw;		// 16-bit fixed
extern SLONG SNIPE_cam_pitch;	// 16-bit fixed
extern SLONG SNIPE_cam_lens;	// 16-bit fixed

//
// Turns on/off snipe mode.
//

void SNIPE_mode_on (SLONG x, SLONG y, SLONG z, SLONG initial_yaw);	// yaw from 0 - 2047
void SNIPE_mode_off(void);

//
// Changes the sniping direction.
//

#define SNIPE_TURN_LEFT  (1 << 0)
#define SNIPE_TURN_RIGHT (1 << 1)
#define SNIPE_TURN_UP    (1 << 2)
#define SNIPE_TURN_DOWN  (1 << 3)

void SNIPE_turn(SLONG turn);

//
// Processes the snipe-view
//

void SNIPE_process(void);

//
// Shoots someone from the sniper view.
//

void SNIPE_shoot(void);

#endif

redpajama_set_name: RedPajamaGithub


Select which info to show in admin dashboard widget.
Select how many top countries to show.
Save customer's acquisition source (i.e. HTTP referer) for orders. This will add "Booster: Acquisition Source" meta box to each order's edit page.
so this will tell us the link used to enter the site. We're hoping to capture this link when they checkout using this module.
Please add an option to NOT save the Customer IP address. Only the refferer url, to comply with GDPR.


text:
module ConstructorCms
  class Engine < ::Rails::Engine
    engine_name "constructor-cms"
    isolate_namespace ConstructorCms
  end
end


text:
Chang-rae Lee in conversation with Deborah Treisman
April 9, 2014 Audio
Recorded: Wed, Apr 9, 2014
at Eat, Drink & Be Literary at BAMcafe
Moderated by Deborah Treisman
Presented by the National Book Foundation and Brooklyn Academy of Music
" …not just a graceful writer but a deft and original thinker about the vagaries of assimilation."—The New York Times Book Review
Chang-rae Lee is the author of Native Speaker, which won the Hemingway Foundation/PEN Award for first fiction, A Gesture Life, Aloft, and The Surrendered, which was shortlisted for the Pulitzer Prize. Lee teaches writing at Princeton University.
<< Previous Video
Jeffrey Eugenides in discussion with Ben Greenman
Next Video >>
Daniel Alarcón in conversation with Deborah Treisman
Back to Media Library
to our monthly newsletter for updates on our programs, the National Book Awards and more
NBAwards Lifetime Achievement Award Audio
Ursula K. Le Guin accepts a lifetime achievement award from National Book Foundation
Sarah M. Broom accepts the 2019 National Book Award for Nonfiction for The Yellow House
Salman Rushdie in discussion with Deborah Treisman
Recorded: Wed, Jan 29, 2014 at… More >
Share your love of reading and support great literature in America with a gift to the National Book Foundation
Get Involved and Donate >


With the Horizon FM solution you can ensure that reactive activities are resolved satisfactorily, that preventative activities occur on time and are not duplicated and that your asset inspections ensure that conditions assessments are recorded, acted upon and budgeted for.
The integrated mobile application allows field service engineers to create and update their work activities via smartphone or tablet for real time data updates.
Within Horizon, planned and preventative maintenance cycles are controlled through a series of scheduled procedures. Each procedure identifies the necessary tasks and provides a simple workflow to aid in their completion. It enables any required maintenance work to be recorded and scheduled.
Our FM mobile app allows field service activities such as inspections, asset repairs and equipment services to be managed by smart phone or tablet. self-service portals that can be used by tenants, customers and internal employees to log and manage reactive maintenance requests.
If you would like to know how our Horizon Facilities Management software can help you, please get in touch today.


text:
Sharrieff Shah: Wiki, Bio, Age, Footballer, Career, Net Worth, Wife
January 7, 2023 by Muskan Agarwal
Sharrieff Shah: Wiki, Bio, Age, Footballer, Career, Net Worth, Wife, Jailed, Accused, Profession, Achievement, Education, Hometown, Birthday, Birthplace, Sex, Nationality, Ethnicity, Salary, Real Housewives, and all other details: Sharrieff Shah is a very popular, distinguished and famous professional football player. Over the years, he has gained fans from all around the world. He is also a media personality, a public figure, and also a football coach. Although he is retired, he is still under a lot of attention from the media. His wife, Jen Shah is the fame for the show "The Real Housewives of Salt Lake City".
Sharrief has also been one of the most respected and well-known lawyers and a coach at the University of Utah. Shah has been in the practice of his career for more than thirty years now, which is really commendable. Furthermore, Shah is also known to advocate for black individuals and the African – Americans of society. He has also done a lot of services to enhance football for the new generation.
Sharrieff Shah Early Life, Family, and Education
Shah's Early Football Career
Sharrieff Shah's Legal Career
Sharrieff Shah Wife and Children
Rachel Information Table
Social Media Account
Some Lesser Known Facts About Sharrieff Shah
FAQs About Sharrieff Shah
Sharrieff Sha Sr. was born on January 29, 1971, in Los Angeles, California, United States. We don't have much information about his parents, how old they are, or what they do for a living. Our team was also unable to find out whether he had any siblings or whether he was the single child of his parents while growing up. There's no doubt that Shah earned a name and fame after his commendable career, but he has always kept his family life private. During interviews, even, he confessed, that his family and his parents are the closest things to him and he would like it if it stayed that way.
Since Shah was a little boy, he always had an interest in football. He would watch football games and matches on the television for hours on end. And eventually, as he grew up, he got a football for himself. Soon, he started to practice and understand the game of football and started enjoying it the most. His interest grew and expanded.
Shah's father was also a very respectable and well-known man in society. He always wanted Shah to follow his dreams and passion. When Sharrieff was younger, his father enrolled him in a local school so that Shah can complete his high school graduation. Shah was always a good kid in class and even better in his academics. Later, after finishing high school, he enrolled himself at the University of Utah. a local school so that Shah can complete his high school graduation. From there, he graduated with degrees of both Bachelor of Science and a Master of Science.
We have already established that Shah loved to play football. Hence, when he got the opportunity to play football in college, he went out and grabbed it. From the year 1990 to 1993, Shah earned a lot of appreciation when he was with the Utes. All four years, in college, he used to serve in a strong safety position. However, very unfortunately, he sustained a neck injury after playing three games in his senior year. The doctor advised a better treatment and asked Shah to terminate his playing career. Shah had already gained a lot of fame in his sophomore and junior years already.
Over his playing career, He made 13 tackles, which helped in Utah's victory over Oregon State in 1991, After this game, he earned the title of WAC Player of the Week. Furthermore, he was also awarded the Sports Illustrated National Defensive Player of the Week. Shah's performance in the game versus OSU still ranks in the top five in four different categories. In Utah's single-game record book, Shah has a great name, including tackles for loss, forced fumbles, sacks, and total lost yards.
Because of Sharrieff's neck injury, he had to end his playing career. So, after graduating from college, Shah maintained his studies and decided to go and become a lawyer. After years of studying and giving bar exams, he finally received his Juris Doctor from Utah. He was then a professional lawyer. Soon after, he started his legal practice for the next twelve years to come in that state.
Then, he began his legal career as a business litigator. After working for almost two years as a business litigator, he started as a trial attorney. Shah used to take up cases that focused on serious car accidents and medical negligence. He supervised and trained a lot of NFL players because he was a certified agent. After trying his hands on so many fields, Shah then went on to work as a sideline reporter for Utah's leading radio station.
Sharrieff Shah married Jen Shah, his college sweetheart in the year 1994. The exact details of their marriage, however, remain unknown. Our team, although, found out that the couple met each other when they were in college. Jen and Shah both used to attend the same university and since then they have been in love with each other.
After their marriage, later, the couple announced Jen's pregnancy. They now have two children together. The name of their kids and their age remains unknown. However, in a very sad recent news, it is revealed that Shah's wife, Jen, has been arrested and has to serve 6.5 years in jail for committing the crime of wire fraud.
Here is the full Wiki Bio of Sharrieff Shah his Age, Footballer, Career, Net Worth, Wife, Jailed, Accused, Profession, Achievement, Education, Hometown, Birthday, Birthplace, Sex, Nationality, Ethnicity, Salary, and Real Housewives show.
Name Sharrieff Shah
Profession Football Player, Coach, Lawyer
Height (approx.) N/A
Weight (approx.) N/A
Figure Measurements NA
Eye Colour Brown
Date of Birth January 29, 1971
Age (as of 2022) Age 51
Birth Place Los Angeles, California USA
Zodiac sign/Sun sign N/A
Hometown Los Angeles, California USA
College/University University of Utah
Educational Qualification Juris Doctor
Religion N/A
Ethnicity Black
Caste N/A
Address Los Angeles, California USA
Hobbies/Interests Football
Affairs/Boyfriends/Girlfriends N/A
Parents NA
Siblings NA
Husband/Wife/Spouse Jen Shah
Net Worth $ 10 Million
He is a very dedicated father and an understanding husband.
After his legal career, he was hired to be a coach on the football team.
Sharrieff's son is also a football player.
Shah worked as a lawyer for more than 12 years.
a) Who is Sharrieff Shah?
A) Sharrieff Shah is a former football player, lawyer, and coach.
b) How old is he?
A) He is 51 years old.
c) Is he married?
A) Yes, to Jen Shah.
d) Does he have children?
A) Yes, 2 boys.
Also, Read – Rachel Stuhlmann and everything you need to know!
Subscribe to Wikibiography to know the latest updates about Shrrieff Shah!


text:
TransUnion LLC v. Ramirez: A Pyrrhic Victory for Class Action Defendants?
On June 25, 2021, a divided Supreme Court issued an important decision regarding Article III standing in TransUnion LLC v. Ramirez, 141 S.Ct. 2190 (2021). In TransUnion, a 5-4 Court found that 6,332 members of an 8,185-member plaintiff class did not suffer a "concrete injury" from TransUnion's violation of the Fair Credit Reporting Act (FCRA) by including erroneous information on the plaintiffs' credit reports.
The Court reasoned that, although TransUnion technically violated the FCRA through its inaccurate reporting, thus giving rise to a statutory cause of action, it did not actually harm over 75% of the class because it did not send their credit reports to any third parties. Thus, the Court held that those class members whose credit reports remained within TransUnion lacked standing under Article III of the Constitution to sue TransUnion in federal court. As the dissent warned, however, the Court's holding applies to federal courts only, meaning that class action defendants may find themselves defending more class actions attempting to vindicate federal statutory rights in state court.
A look at TransUnion, including its underpinnings, and a recent North Carolina analogue, helps tell this story.
Precursor to TransUnion
Writing for the majority (Chief Justice Roberts and Justices Alito, Gorsuch, Kavanaugh, and Barrett), Justice Kavanaugh leaned heavily on the Court's most recent Article III standing case, Spokeo, Inc. v. Robins, 136 S. Ct. 1540 (2016). In Spokeo, the Court (Chief Justice Roberts and Justices Kennedy, Thomas, Breyer, Alito, and Kagan in the majority) recounted the three-part test for Article III standing: (1) an injury-in-fact, (2) fairly traceable to the challenged conduct, and (3) likely to be redressed by a favorable judgment.
To establish an injury-in-fact, a plaintiff had to demonstrate "an invasion of a legally protected interest" that is "concrete and particularized" and "actual or imminent, not conjectural or hypothetical." Spokeo, 136 S. Ct. at 1548. The Court explained that a plaintiff does not automatically satisfy the injury-in-fact requirement whenever Congress codifies a cause of action. In other words, a plaintiff cannot "allege a bare procedural violation, divorced from any concrete harm, and satisfy the injury-in-fact requirement of Article III." Id. at 1549. By way of example, the Court reasoned that "[i]t is difficult to imagine how the dissemination of an incorrect zip code [on a consumer's credit report], without more, could work any concrete harm." Id. at 1550.
On remand, the Ninth Circuit held that Robins had established a concrete injury for purposes of Article III standing because the inaccurate credit reporting had caused him "real harm" to his employment prospects at a time when he was unemployed. See Robins v. Spokeo, Inc., 867 F.3d 1108 (9th Cir. 2017). Spokeo appealed again, and the Supreme Court denied the petition for writ of certiorari. This led to circuit splits about how to interpret and apply Spokeo, thus paving the way for TransUnion a few years later.
The TransUnion Case
Sergio Ramirez was the named plaintiff on behalf of a plaintiff class that sued TransUnion in the U.S. District Court for the Northern District of California alleging various FCRA violations. Principally, Ramirez alleged that TransUnion incorrectly reported that he and others were on a federal government watchlist of "specially designated nationals" who are national security threats to the United States, with whom it is generally unlawful to conduct business.
Ramirez learned that he was on the government watchlist when a car salesman told Ramirez that he could not sell him a car because his TransUnion credit report contained a government alert that his name was on a "terrorist list." Ramirez then asked TransUnion for a copy of his credit report, and it mailed him a copy that did not include the government watchlist alert, and then it subsequently mailed him a letter that included the alert but did not include a copy of TransUnion's summary of rights, which the FCRA required. Ramirez sued TransUnion and was able to certify a class of 8,185 U.S. citizens who received a TransUnion mailing during a certain timeframe that was similar to the second mailing TransUnion sent Ramirez.
In the district court, Ramirez and TransUnion stipulated that TransUnion incorrectly included the government watchlist alert on all 8,185 class members but distributed reports to third parties for only 1,853 class members. TransUnion then moved to decertify the class because, under Spokeo, a plaintiff cannot establish injury-in-fact by alleging "a bare procedural violation, divorced from any concrete harm…." TransUnion, 141 S.Ct. at 2213 (quoting Spokeo, 578 U.S. at 341).
TransUnion argued that 6,332 individuals—over 75% of the class—had alleged no concrete harm and thus had no standing to assert their claims. The district court denied TransUnion's motion, and the jury awarded the class over $60 million, including punitive damages. The Ninth Circuit affirmed but reduced the jury's verdict to about $40 million. See Ramirez v. TransUnion LLC, 951 F.3d 1008 (9th Cir. 2020).
The Supreme Court reversed, reasoning that the 6,332 class members whose credit reports were not sent to any third parties did not suffer a concrete injury and thus lacked standing under Article III to bring their claims in federal court. The Court applied its reasoning in Spokeo—specifically that a plaintiff's injury be "concrete" (i.e., "real and not abstract") and that "Article III standing requires a concrete injury even in the context of a statutory violation." Spokeo, 578 U.S. at 341 (emphasis added).
In further deference to Spokeo, the Court quoted a recent Sixth Circuit case citing Spokeo for the fundamental point that even though "Congress may 'elevate' harms that 'exist' in the real world before Congress recognized them to actionable legal status, it may not simply enact an injury into existence, using its lawmaking power to transform something that is not remotely harmful into something that is." Ramirez, 141 S.Ct. at 2205 (quoting Hagy v. Demers & Adams, 882 F.3d 616, 622 (6th Cir. 2018)).
And Justice Kavanaugh, with a nod to his newest colleague, Justice Barrett, put a finer point on it and quoted a recent Seventh Circuit opinion for the proposition that "Article III grants federal courts the power to redress harms that defendants cause plaintiffs, not a freewheeling power to hold defendants accountable for legal infractions." Id. (quoting Casillas v. Madison Avenue Assocs., Inc., 926 F.3d 329, 333 (7th Cir. 2019)).
The Court concluded that "[e]very class member must have Article III standing in order to recover individual damages" and that "'Article III does not give federal courts the power to order relief to any uninjured plaintiff, class action or not.'" Id. at 2208 (quoting Tyson Foods, Inc. v. Bouaphakeo, 577 U.S. 442, 466 (2016)).
Interestingly, the Court did not address the question of "whether every class member must demonstrate standing before a court certifies a class." Id., n.4 (emphasis added). This means that absence of concrete injury alone will not preclude class certification. As a policy matter, why courts would allow certification of a class of plaintiffs not wholly made up of members who have standing to sue in federal court is unclear. As a practical matter, however, plaintiffs' lawyers still may attempt to certify a class in federal court in attempt to increase settlement pressure on defendants who would prefer to end the litigation. Nevertheless, after TransUnion, defendants likely will be emboldened to proceed at least through a complete standing analysis to get the size of the class—and thus any total potential damages award—significantly pared back.
The TransUnion Dissent
Justices Thomas, Breyer, Sotomayor, and Kagan dissented, finding it "remarkable in both its novelty and effects" that the majority, in requiring a concrete injury in addition to a statutory right, had "relieved the legislature of its power to create and define rights." Id. at 2221. Perhaps most importantly for future class action trends, the dissent warned that the Court's opinion would result in more class actions being filed in state courts rather than federal courts. Id. at 2224, n.9. Writing for the dissent, Justice Thomas wrote: "Today's decision might actually by a pyrrhic victory for TransUnion. The Court does not prohibit Congress from creating statutory rights for consumer; it simply holds that federal courts lack jurisdiction to hear some of these cases." Id. In referring to class actions involving plaintiffs that have not demonstrated concrete injury, Justice Thomas concluded: "By declaring that federal courts lack jurisdiction, the Court has thus ensured that state courts will exercise exclusive jurisdiction over these sorts of class actions." Id.
The Implications on State Class Action Practice
Historically, many class action plaintiffs have brought their claims in federal court, or defendants have removed to federal court in attempt to litigate in front of a judiciary they perceived to be generally more sympathetic to corporate interests than a state court judge or jury might be. But in Spokeo, the Supreme Court started to pull the rug out from under plaintiffs attempting to stand in federal court based on a defendant's mere procedural violations. In absence of concrete injury, plaintiffs were now precluded from suing in federal court.
Five years later, the Supreme Court in TransUnion pulled the Article III standing rug completely out from under plaintiffs who have alleged a statutory violation only. Going forward, class action defendants in federal court should emphasize that every member of a certified class must establish Article III standing, as described above, to be able to recover individual damages. The most logical result of this—as Justice Thomas pointed out in his dissent—is that class action plaintiffs alleging a federal statutory violation likely will at least attempt to turn to state courts to pursue their claims.
Many states allow standing in cases where federal courts would preclude it. North Carolina is one such state, as evidenced by a recent case decided by the Supreme Court of North Carolina.
In Committee to Elect Dan Forest v. Employees Political Action Committee, 376 N.C. 558 (N.C. 2021), the Supreme Court of North Carolina held that plaintiffs need not show an injury in fact when a statute affords a right to sue. The Court found that the North Carolina Constitution does not limit the state courts' jurisdiction the same way Article III of the U.S. Constitution limits federal courts, including the requirement that a plaintiff show an "injury in fact."
The Court ultimately upheld standing to sue based on the technical statutory violation at issue there, irrespective of actual injury or damages. The case appears to be at odds with TransUnion, though how broadly North Carolina courts will apply Dan Forest's holding remains to be seen.
What's Next for Class Action Defense in North Carolina?
Going forward, we expect that courts in states like North Carolina that have more lenient standing principles likely will find themselves adjudicating more class actions filed under federal statutes.
Defendants may be tempted to remove these class actions to federal court. But they should think carefully before doing so, as a handful of recent federal court decisions have remanded such class actions to state court, with at least one court awarding attorney fees for such maneuver. See, e.g., Mocek v. Allsaints USA Ltd., 2016 WL 7116590, at *3 (Dec. 7, 2016) (remanding to state court due to lack of subject matter jurisdiction but awarding more than $58,000 in attorney fees because defendant "tried to have it both ways by asserting, then immediately disavowing, federal jurisdiction").
Defendants might, instead, consider seeking dismissal based on state law standing principles, including statutory standing, which focuses on the merits of the claim, including whether proof of actual injury is required, and results in dismissal with prejudice, rather than remand or dismissal without prejudice in the case of removal based on Article III standing.
September 13, 2021 Scott Hazelgrove
Posted in Standing
Appellate Issues
Ascertainability
CAFA
Class Action Basics
Class Action Settlements
Daubert and Admissibility at Class Certification
Issue Classes
Other Collective Action Mechanisms
Pick-Off Exception
Categories Select One... Appellate Issues Ascertainability CAFA Case Updates Class Action Basics Class Action Settlements Daubert and Admissibility at Class Certification Issue Classes Other Collective Action Mechanisms Pick-Off Exception Standing
Jonathan A. Berkelhammer
Andrew Parks Carter
Eric Cunningham
Christopher Flurry
Joseph D. Hammond
Barrett Johnson
Michelle A. Liguori
Kyle A. Medin
Madeleine M. Pfefferle
Jeffrey Steven McConnell Warren
Marcus Allen Shields
Jaclyn C. Sitjar
About Our Class Action Practice


With the name Lena Liu comes images of softly romantic flower gardens and the silken beauty of butterfly wings. Using rainbow-hued watercolors meticulously hand-painted on delicate silk, Lena Liu's softly muted masterpieces have earned her top honors in the field of limited-edition art. Now, Bradford Exchange Checks® exclusively showcases some of Lena Liu's most highly acclaimed butterfly and flower art on this beautiful butterfly check design collection. Each personal check captures the gossamer-winged grace of butterflies, as lush floral blooms provide a dreamy backdrop for the butterflies' airy dance.
"Lena Liu's Enchanted Wings" personal flower and butterfly check designs are available from Bradford Exchange Checks®, and are expertly re-created with premium-quality check printing. If you ever dreamed of prolonging the perfect loveliness of a summer butterfly flower garden, carry these exclusive Lena Liu artistic butterfly checks with you. Cherish the delicate splendor of nature at its most precious. Order your "Lena Liu's Enchanted Wings" personal flower and butterfly check designs now!


text:
Păsăreni (în maghiară: Backamadaras) este o comună în județul Mureș, Transilvania, România, formată din satele Bolintineni, Gălățeni și Păsăreni (reședința).

Demografie

Conform recensământului efectuat în 2011, populația comunei Păsăreni se ridică la  locuitori, în scădere față de recensământul anterior din 2002, când se înregistraseră  de locuitori. Majoritatea locuitorilor sunt maghiari (79,99%). Principalele minorități sunt cele de romi (11,15%) și români (5,32%). Pentru 3,49% din populație, apartenența etnică nu este cunoscută.
Din punct de vedere confesional, majoritatea locuitorilor sunt reformați (61,23%), dar există și minorități de unitarieni (15,01%), ortodocși (6,36%), adventiști de ziua a șaptea (5,94%), romano-catolici (5%) și martori ai lui Iehova (1,15%). Pentru 4,12% din populație, nu este cunoscută apartenența confesională.

Politică și administrație
Comuna Păsăreni este administrată de un primar și un consiliu local compus din 11 consilieri. Primarul, , de la , este în funcție din . Începând cu alegerile locale din 2020, consiliul local are următoarea componență pe partide politice:

Vezi și
 Biserica unitariană din Gălățeni
 Biserica reformată din Păsăreni
 Biserica romano-catolică din Păsăreni

Note

Imagini

Păsăreni


This page with number 1 shows for Edilson Botelho Nogueira. So, you can see here. If you want to see another types for Edilson Botelho Nogueira, please, use the links from above. If you see a lot of songs on this page 1 and see many links of pages, but can't find necessary song, you can choose another page. Using of songs from this page, such as you will be able to learn how to play Edilson Botelho Nogueira music. It's not very difficult even if you are not a musician. Just take and play your favorite music!


text:
use crate::{
    buffer::{BufferAccess, BufferContents, BufferUsage, TypedBufferAccess},
    command_buffer::{
        allocator::CommandBufferAllocator,
        synced::{Command, Resource, SyncCommandBufferBuilder, SyncCommandBufferBuilderError},
        sys::UnsafeCommandBufferBuilder,
        AutoCommandBufferBuilder, ResourceInCommand, ResourceUseRef,
    },
    device::{DeviceOwned, QueueFlags},
    format::{ClearColorValue, ClearDepthStencilValue, Format, FormatFeatures},
    image::{ImageAccess, ImageAspects, ImageLayout, ImageSubresourceRange, ImageUsage},
    sync::{AccessFlags, PipelineMemoryAccess, PipelineStages},
    DeviceSize, RequirementNotMet, RequiresOneOf, SafeDeref, Version, VulkanObject,
};
use smallvec::{smallvec, SmallVec};
use std::{
    error::Error,
    fmt::{Display, Error as FmtError, Formatter},
    mem::size_of_val,
    sync::Arc,
};

/// # Commands to fill resources with new data.
impl<L, A> AutoCommandBufferBuilder<L, A>
where
    A: CommandBufferAllocator,
{
    /// Clears a color image with a specific value.
    pub fn clear_color_image(
        &mut self,
        clear_info: ClearColorImageInfo,
    ) -> Result<&mut Self, ClearError> {
        self.validate_clear_color_image(&clear_info)?;

        unsafe {
            self.inner.clear_color_image(clear_info)?;
        }

        Ok(self)
    }

    fn validate_clear_color_image(
        &self,
        clear_info: &ClearColorImageInfo,
    ) -> Result<(), ClearError> {
        let device = self.device();

        // VUID-vkCmdClearColorImage-renderpass
        if self.render_pass_state.is_some() {
            return Err(ClearError::ForbiddenInsideRenderPass);
        }

        let queue_family_properties = self.queue_family_properties();

        // VUID-vkCmdClearColorImage-commandBuffer-cmdpool
        if !queue_family_properties
            .queue_flags
            .intersects(QueueFlags::GRAPHICS | QueueFlags::COMPUTE)
        {
            return Err(ClearError::NotSupportedByQueueFamily);
        }

        let &ClearColorImageInfo {
            ref image,
            image_layout,
            clear_value: _,
            ref regions,
            _ne: _,
        } = clear_info;

        // VUID-vkCmdClearColorImage-imageLayout-parameter
        image_layout.validate_device(device)?;

        // VUID-vkCmdClearColorImage-commonparent
        assert_eq!(device, image.device());

        // VUID-vkCmdClearColorImage-image-00002
        if !image.usage().intersects(ImageUsage::TRANSFER_DST) {
            return Err(ClearError::MissingUsage {
                usage: "transfer_dst",
            });
        }

        if device.api_version() >= Version::V1_1 || device.enabled_extensions().khr_maintenance1 {
            // VUID-vkCmdClearColorImage-image-01993
            if !image
                .format_features()
                .intersects(FormatFeatures::TRANSFER_DST)
            {
                return Err(ClearError::MissingFormatFeature {
                    format_feature: "transfer_dst",
                });
            }
        }

        let image_aspects = image.format().aspects();

        // VUID-vkCmdClearColorImage-image-00007
        if image_aspects.intersects(ImageAspects::DEPTH | ImageAspects::STENCIL) {
            return Err(ClearError::FormatNotSupported {
                format: image.format(),
            });
        }

        // VUID-vkCmdClearColorImage-image-00007
        if image.format().compression().is_some() {
            return Err(ClearError::FormatNotSupported {
                format: image.format(),
            });
        }

        // VUID-vkCmdClearColorImage-image-01545
        if image.format().ycbcr_chroma_sampling().is_some() {
            return Err(ClearError::FormatNotSupported {
                format: image.format(),
            });
        }

        // VUID-vkCmdClearColorImage-imageLayout-01394
        if !matches!(
            image_layout,
            ImageLayout::TransferDstOptimal | ImageLayout::General
        ) {
            return Err(ClearError::ImageLayoutInvalid { image_layout });
        }

        for (region_index, subresource_range) in regions.iter().enumerate() {
            // VUID-VkImageSubresourceRange-aspectMask-parameter
            subresource_range.aspects.validate_device(device)?;

            // VUID-VkImageSubresourceRange-aspectMask-requiredbitmask
            assert!(!subresource_range.aspects.is_empty());

            // VUID-vkCmdClearColorImage-aspectMask-02498
            if !image_aspects.contains(subresource_range.aspects) {
                return Err(ClearError::AspectsNotAllowed {
                    region_index,
                    aspects: subresource_range.aspects,
                    allowed_aspects: image_aspects,
                });
            }

            // VUID-VkImageSubresourceRange-levelCount-01720
            assert!(!subresource_range.mip_levels.is_empty());

            // VUID-vkCmdClearColorImage-baseMipLevel-01470
            // VUID-vkCmdClearColorImage-pRanges-01692
            if subresource_range.mip_levels.end > image.mip_levels() {
                return Err(ClearError::MipLevelsOutOfRange {
                    region_index,
                    mip_levels_range_end: subresource_range.mip_levels.end,
                    image_mip_levels: image.dimensions().array_layers(),
                });
            }

            // VUID-VkImageSubresourceRange-layerCount-01721
            assert!(!subresource_range.array_layers.is_empty());

            // VUID-vkCmdClearDepthStencilImage-baseArrayLayer-01476
            // VUID-vkCmdClearDepthStencilImage-pRanges-01695
            if subresource_range.array_layers.end > image.dimensions().array_layers() {
                return Err(ClearError::ArrayLayersOutOfRange {
                    region_index,
                    array_layers_range_end: subresource_range.array_layers.end,
                    image_array_layers: image.dimensions().array_layers(),
                });
            }
        }

        Ok(())
    }

    /// Clears a depth/stencil image with a specific value.
    pub fn clear_depth_stencil_image(
        &mut self,
        clear_info: ClearDepthStencilImageInfo,
    ) -> Result<&mut Self, ClearError> {
        self.validate_clear_depth_stencil_image(&clear_info)?;

        unsafe {
            self.inner.clear_depth_stencil_image(clear_info)?;
        }

        Ok(self)
    }

    fn validate_clear_depth_stencil_image(
        &self,
        clear_info: &ClearDepthStencilImageInfo,
    ) -> Result<(), ClearError> {
        let device = self.device();

        // VUID-vkCmdClearDepthStencilImage-renderpass
        if self.render_pass_state.is_some() {
            return Err(ClearError::ForbiddenInsideRenderPass);
        }

        let queue_family_properties = self.queue_family_properties();

        // VUID-vkCmdClearDepthStencilImage-commandBuffer-cmdpool
        if !queue_family_properties
            .queue_flags
            .intersects(QueueFlags::GRAPHICS)
        {
            return Err(ClearError::NotSupportedByQueueFamily);
        }

        let &ClearDepthStencilImageInfo {
            ref image,
            image_layout,
            clear_value,
            ref regions,
            _ne: _,
        } = clear_info;

        // VUID-vkCmdClearDepthStencilImage-imageLayout-parameter
        image_layout.validate_device(device)?;

        // VUID-vkCmdClearDepthStencilImage-commonparent
        assert_eq!(device, image.device());

        if device.api_version() >= Version::V1_1 || device.enabled_extensions().khr_maintenance1 {
            // VUID-vkCmdClearDepthStencilImage-image-01994
            if !image
                .format_features()
                .intersects(FormatFeatures::TRANSFER_DST)
            {
                return Err(ClearError::MissingFormatFeature {
                    format_feature: "transfer_dst",
                });
            }
        }

        let image_aspects = image.format().aspects();

        // VUID-vkCmdClearDepthStencilImage-image-00014
        if !image_aspects.intersects(ImageAspects::DEPTH | ImageAspects::STENCIL) {
            return Err(ClearError::FormatNotSupported {
                format: image.format(),
            });
        }

        // VUID-vkCmdClearDepthStencilImage-imageLayout-00012
        if !matches!(
            image_layout,
            ImageLayout::TransferDstOptimal | ImageLayout::General
        ) {
            return Err(ClearError::ImageLayoutInvalid { image_layout });
        }

        // VUID-VkClearDepthStencilValue-depth-00022
        if !device.enabled_extensions().ext_depth_range_unrestricted
            && !(0.0..=1.0).contains(&clear_value.depth)
        {
            return Err(ClearError::RequirementNotMet {
                required_for: "`clear_info.clear_value.depth` is not between `0.0` and `1.0` \
                    inclusive",
                requires_one_of: RequiresOneOf {
                    device_extensions: &["ext_depth_range_unrestricted"],
                    ..Default::default()
                },
            });
        }

        let mut image_aspects_used = ImageAspects::empty();

        for (region_index, subresource_range) in regions.iter().enumerate() {
            // VUID-VkImageSubresourceRange-aspectMask-parameter
            subresource_range.aspects.validate_device(device)?;

            // VUID-VkImageSubresourceRange-aspectMask-requiredbitmask
            assert!(!subresource_range.aspects.is_empty());

            // VUID-vkCmdClearDepthStencilImage-aspectMask-02824
            // VUID-vkCmdClearDepthStencilImage-image-02825
            // VUID-vkCmdClearDepthStencilImage-image-02826
            if !image_aspects.contains(subresource_range.aspects) {
                return Err(ClearError::AspectsNotAllowed {
                    region_index,
                    aspects: subresource_range.aspects,
                    allowed_aspects: image_aspects,
                });
            }

            image_aspects_used |= subresource_range.aspects;

            // VUID-VkImageSubresourceRange-levelCount-01720
            assert!(!subresource_range.mip_levels.is_empty());

            // VUID-vkCmdClearDepthStencilImage-baseMipLevel-01474
            // VUID-vkCmdClearDepthStencilImage-pRanges-01694
            if subresource_range.mip_levels.end > image.mip_levels() {
                return Err(ClearError::MipLevelsOutOfRange {
                    region_index,
                    mip_levels_range_end: subresource_range.mip_levels.end,
                    image_mip_levels: image.dimensions().array_layers(),
                });
            }

            // VUID-VkImageSubresourceRange-layerCount-01721
            assert!(!subresource_range.array_layers.is_empty());

            // VUID-vkCmdClearDepthStencilImage-baseArrayLayer-01476
            // VUID-vkCmdClearDepthStencilImage-pRanges-01695
            if subresource_range.array_layers.end > image.dimensions().array_layers() {
                return Err(ClearError::ArrayLayersOutOfRange {
                    region_index,
                    array_layers_range_end: subresource_range.array_layers.end,
                    image_array_layers: image.dimensions().array_layers(),
                });
            }
        }

        // VUID-vkCmdClearDepthStencilImage-pRanges-02658
        // VUID-vkCmdClearDepthStencilImage-pRanges-02659
        if image_aspects_used.intersects(ImageAspects::STENCIL)
            && !image.stencil_usage().intersects(ImageUsage::TRANSFER_DST)
        {
            return Err(ClearError::MissingUsage {
                usage: "transfer_dst",
            });
        }

        // VUID-vkCmdClearDepthStencilImage-pRanges-02660
        if !(image_aspects_used - ImageAspects::STENCIL).is_empty()
            && !image.usage().intersects(ImageUsage::TRANSFER_DST)
        {
            return Err(ClearError::MissingUsage {
                usage: "transfer_dst",
            });
        }

        Ok(())
    }

    /// Fills a region of a buffer with repeated copies of a value.
    ///
    /// This function is similar to the `memset` function in C. The `data` parameter is a number
    /// that will be repeatedly written through the entire buffer.
    ///
    /// # Panics
    ///
    /// - Panics if `dst_buffer` was not created from the same device as `self`.
    pub fn fill_buffer(
        &mut self,
        fill_buffer_info: FillBufferInfo,
    ) -> Result<&mut Self, ClearError> {
        self.validate_fill_buffer(&fill_buffer_info)?;

        unsafe {
            self.inner.fill_buffer(fill_buffer_info)?;
        }

        Ok(self)
    }

    fn validate_fill_buffer(&self, fill_buffer_info: &FillBufferInfo) -> Result<(), ClearError> {
        let device = self.device();

        // VUID-vkCmdFillBuffer-renderpass
        if self.render_pass_state.is_some() {
            return Err(ClearError::ForbiddenInsideRenderPass);
        }

        let queue_family_properties = self.queue_family_properties();

        if device.api_version() >= Version::V1_1 || device.enabled_extensions().khr_maintenance1 {
            // VUID-vkCmdFillBuffer-commandBuffer-cmdpool
            if !queue_family_properties
                .queue_flags
                .intersects(QueueFlags::TRANSFER | QueueFlags::GRAPHICS | QueueFlags::COMPUTE)
            {
                return Err(ClearError::NotSupportedByQueueFamily);
            }
        } else {
            // VUID-vkCmdFillBuffer-commandBuffer-00030
            if !queue_family_properties
                .queue_flags
                .intersects(QueueFlags::GRAPHICS | QueueFlags::COMPUTE)
            {
                return Err(ClearError::NotSupportedByQueueFamily);
            }
        }

        let &FillBufferInfo {
            data: _,
            ref dst_buffer,
            dst_offset,
            size,
            _ne: _,
        } = fill_buffer_info;

        let dst_buffer_inner = dst_buffer.inner();

        // VUID-vkCmdFillBuffer-commonparent
        assert_eq!(device, dst_buffer.device());

        // VUID-vkCmdFillBuffer-size-00026
        assert!(size != 0);

        // VUID-vkCmdFillBuffer-dstBuffer-00029
        if !dst_buffer.usage().intersects(BufferUsage::TRANSFER_DST) {
            return Err(ClearError::MissingUsage {
                usage: "transfer_dst",
            });
        }

        // VUID-vkCmdFillBuffer-dstOffset-00024
        // VUID-vkCmdFillBuffer-size-00027
        if dst_offset + size > dst_buffer.size() {
            return Err(ClearError::RegionOutOfBufferBounds {
                region_index: 0,
                offset_range_end: dst_offset + size,
                buffer_size: dst_buffer.size(),
            });
        }

        // VUID-vkCmdFillBuffer-dstOffset-00025
        if (dst_buffer_inner.offset + dst_offset) % 4 != 0 {
            return Err(ClearError::OffsetNotAlignedForBuffer {
                region_index: 0,
                offset: dst_buffer_inner.offset + dst_offset,
                required_alignment: 4,
            });
        }

        // VUID-vkCmdFillBuffer-size-00028
        if size % 4 != 0 {
            return Err(ClearError::SizeNotAlignedForBuffer {
                region_index: 0,
                size,
                required_alignment: 4,
            });
        }

        Ok(())
    }

    /// Writes data to a region of a buffer.
    ///
    /// # Panics
    ///
    /// - Panics if `dst_buffer` was not created from the same device as `self`.
    pub fn update_buffer<B, D, Dd>(
        &mut self,
        data: Dd,
        dst_buffer: Arc<B>,
        dst_offset: DeviceSize,
    ) -> Result<&mut Self, ClearError>
    where
        B: TypedBufferAccess<Content = D> + 'static,
        D: BufferContents + ?Sized,
        Dd: SafeDeref<Target = D> + Send + Sync + 'static,
    {
        self.validate_update_buffer(data.deref(), &dst_buffer, dst_offset)?;

        unsafe {
            self.inner.update_buffer(data, dst_buffer, dst_offset)?;
        }

        Ok(self)
    }

    fn validate_update_buffer<D>(
        &self,
        data: &D,
        dst_buffer: &dyn BufferAccess,
        dst_offset: DeviceSize,
    ) -> Result<(), ClearError>
    where
        D: ?Sized,
    {
        let device = self.device();

        // VUID-vkCmdUpdateBuffer-renderpass
        if self.render_pass_state.is_some() {
            return Err(ClearError::ForbiddenInsideRenderPass);
        }

        let queue_family_properties = self.queue_family_properties();

        // VUID-vkCmdUpdateBuffer-commandBuffer-cmdpool
        if !queue_family_properties
            .queue_flags
            .intersects(QueueFlags::TRANSFER | QueueFlags::GRAPHICS | QueueFlags::COMPUTE)
        {
            return Err(ClearError::NotSupportedByQueueFamily);
        }

        let dst_buffer_inner = dst_buffer.inner();

        // VUID-vkCmdUpdateBuffer-commonparent
        assert_eq!(device, dst_buffer.device());

        // VUID-vkCmdUpdateBuffer-dataSize-arraylength
        assert!(size_of_val(data) != 0);

        // VUID-vkCmdUpdateBuffer-dstBuffer-00034
        if !dst_buffer.usage().intersects(BufferUsage::TRANSFER_DST) {
            return Err(ClearError::MissingUsage {
                usage: "transfer_dst",
            });
        }

        // VUID-vkCmdUpdateBuffer-dstOffset-00032
        // VUID-vkCmdUpdateBuffer-dataSize-00033
        if dst_offset + size_of_val(data) as DeviceSize > dst_buffer.size() {
            return Err(ClearError::RegionOutOfBufferBounds {
                region_index: 0,
                offset_range_end: dst_offset + size_of_val(data) as DeviceSize,
                buffer_size: dst_buffer.size(),
            });
        }

        // VUID-vkCmdUpdateBuffer-dstOffset-00036
        if (dst_buffer_inner.offset + dst_offset) % 4 != 0 {
            return Err(ClearError::OffsetNotAlignedForBuffer {
                region_index: 0,
                offset: dst_buffer_inner.offset + dst_offset,
                required_alignment: 4,
            });
        }

        // VUID-vkCmdUpdateBuffer-dataSize-00037
        if size_of_val(data) > 65536 {
            return Err(ClearError::DataTooLarge {
                size: size_of_val(data) as DeviceSize,
                max: 65536,
            });
        }

        // VUID-vkCmdUpdateBuffer-dataSize-00038
        if size_of_val(data) % 4 != 0 {
            return Err(ClearError::SizeNotAlignedForBuffer {
                region_index: 0,
                size: size_of_val(data) as DeviceSize,
                required_alignment: 4,
            });
        }

        Ok(())
    }
}

impl SyncCommandBufferBuilder {
    /// Calls `vkCmdClearColorImage` on the builder.
    ///
    /// Does nothing if the list of regions is empty, as it would be a no-op and isn't a valid
    /// usage of the command anyway.
    #[inline]
    pub unsafe fn clear_color_image(
        &mut self,
        clear_info: ClearColorImageInfo,
    ) -> Result<(), SyncCommandBufferBuilderError> {
        struct Cmd {
            clear_info: ClearColorImageInfo,
        }

        impl Command for Cmd {
            fn name(&self) -> &'static str {
                "clear_color_image"
            }

            unsafe fn send(&self, out: &mut UnsafeCommandBufferBuilder) {
                out.clear_color_image(&self.clear_info);
            }
        }

        let &ClearColorImageInfo {
            ref image,
            image_layout,
            clear_value: _,
            ref regions,
            _ne: _,
        } = &clear_info;

        let command_index = self.commands.len();
        let command_name = "clear_color_image";
        let resources: SmallVec<[_; 8]> = regions
            .iter()
            .cloned()
            .flat_map(|subresource_range| {
                [(
                    ResourceUseRef {
                        command_index,
                        command_name,
                        resource_in_command: ResourceInCommand::Destination,
                        secondary_use_ref: None,
                    },
                    Resource::Image {
                        image: image.clone(),
                        subresource_range,
                        memory: PipelineMemoryAccess {
                            stages: PipelineStages::ALL_TRANSFER,
                            access: AccessFlags::TRANSFER_WRITE,
                            exclusive: true,
                        },
                        start_layout: image_layout,
                        end_layout: image_layout,
                    },
                )]
            })
            .collect();

        for resource in &resources {
            self.check_resource_conflicts(resource)?;
        }

        self.commands.push(Box::new(Cmd { clear_info }));

        for resource in resources {
            self.add_resource(resource);
        }

        Ok(())
    }

    /// Calls `vkCmdClearDepthStencilImage` on the builder.
    ///
    /// Does nothing if the list of regions is empty, as it would be a no-op and isn't a valid
    /// usage of the command anyway.
    #[inline]
    pub unsafe fn clear_depth_stencil_image(
        &mut self,
        clear_info: ClearDepthStencilImageInfo,
    ) -> Result<(), SyncCommandBufferBuilderError> {
        struct Cmd {
            clear_info: ClearDepthStencilImageInfo,
        }

        impl Command for Cmd {
            fn name(&self) -> &'static str {
                "clear_depth_stencil_image"
            }

            unsafe fn send(&self, out: &mut UnsafeCommandBufferBuilder) {
                out.clear_depth_stencil_image(&self.clear_info);
            }
        }

        let &ClearDepthStencilImageInfo {
            ref image,
            image_layout,
            clear_value: _,
            ref regions,
            _ne: _,
        } = &clear_info;

        let command_index = self.commands.len();
        let command_name = "clear_depth_stencil_image";
        let resources: SmallVec<[_; 8]> = regions
            .iter()
            .cloned()
            .flat_map(|subresource_range| {
                [(
                    ResourceUseRef {
                        command_index,
                        command_name,
                        resource_in_command: ResourceInCommand::Destination,
                        secondary_use_ref: None,
                    },
                    Resource::Image {
                        image: image.clone(),
                        subresource_range,
                        memory: PipelineMemoryAccess {
                            stages: PipelineStages::ALL_TRANSFER,
                            access: AccessFlags::TRANSFER_WRITE,
                            exclusive: true,
                        },
                        start_layout: image_layout,
                        end_layout: image_layout,
                    },
                )]
            })
            .collect();

        for resource in &resources {
            self.check_resource_conflicts(resource)?;
        }

        self.commands.push(Box::new(Cmd { clear_info }));

        for resource in resources {
            self.add_resource(resource);
        }

        Ok(())
    }

    /// Calls `vkCmdFillBuffer` on the builder.
    #[inline]
    pub unsafe fn fill_buffer(
        &mut self,
        fill_buffer_info: FillBufferInfo,
    ) -> Result<(), SyncCommandBufferBuilderError> {
        struct Cmd {
            fill_buffer_info: FillBufferInfo,
        }

        impl Command for Cmd {
            fn name(&self) -> &'static str {
                "fill_buffer"
            }

            unsafe fn send(&self, out: &mut UnsafeCommandBufferBuilder) {
                out.fill_buffer(&self.fill_buffer_info);
            }
        }

        let &FillBufferInfo {
            data: _,
            ref dst_buffer,
            dst_offset,
            size,
            _ne: _,
        } = &fill_buffer_info;

        let command_index = self.commands.len();
        let command_name = "fill_buffer";
        let resources = [(
            ResourceUseRef {
                command_index,
                command_name,
                resource_in_command: ResourceInCommand::Destination,
                secondary_use_ref: None,
            },
            Resource::Buffer {
                buffer: dst_buffer.clone(),
                range: dst_offset..dst_offset + size,
                memory: PipelineMemoryAccess {
                    stages: PipelineStages::ALL_TRANSFER,
                    access: AccessFlags::TRANSFER_WRITE,
                    exclusive: true,
                },
            },
        )];

        for resource in &resources {
            self.check_resource_conflicts(resource)?;
        }

        self.commands.push(Box::new(Cmd { fill_buffer_info }));

        for resource in resources {
            self.add_resource(resource);
        }

        Ok(())
    }

    /// Calls `vkCmdUpdateBuffer` on the builder.
    pub unsafe fn update_buffer<D, Dd>(
        &mut self,
        data: Dd,
        dst_buffer: Arc<dyn BufferAccess>,
        dst_offset: DeviceSize,
    ) -> Result<(), SyncCommandBufferBuilderError>
    where
        D: BufferContents + ?Sized,
        Dd: SafeDeref<Target = D> + Send + Sync + 'static,
    {
        struct Cmd<Dd> {
            data: Dd,
            dst_buffer: Arc<dyn BufferAccess>,
            dst_offset: DeviceSize,
        }

        impl<D, Dd> Command for Cmd<Dd>
        where
            D: BufferContents + ?Sized,
            Dd: SafeDeref<Target = D> + Send + Sync + 'static,
        {
            fn name(&self) -> &'static str {
                "update_buffer"
            }

            unsafe fn send(&self, out: &mut UnsafeCommandBufferBuilder) {
                out.update_buffer(self.data.deref(), self.dst_buffer.as_ref(), self.dst_offset);
            }
        }

        let command_index = self.commands.len();
        let command_name = "update_buffer";
        let resources = [(
            ResourceUseRef {
                command_index,
                command_name,
                resource_in_command: ResourceInCommand::Destination,
                secondary_use_ref: None,
            },
            Resource::Buffer {
                buffer: dst_buffer.clone(),
                range: dst_offset..dst_offset + size_of_val(data.deref()) as DeviceSize,
                memory: PipelineMemoryAccess {
                    stages: PipelineStages::ALL_TRANSFER,
                    access: AccessFlags::TRANSFER_WRITE,
                    exclusive: true,
                },
            },
        )];

        for resource in &resources {
            self.check_resource_conflicts(resource)?;
        }

        self.commands.push(Box::new(Cmd {
            data,
            dst_buffer,
            dst_offset,
        }));

        for resource in resources {
            self.add_resource(resource);
        }

        Ok(())
    }
}

impl UnsafeCommandBufferBuilder {
    /// Calls `vkCmdClearColorImage` on the builder.
    ///
    /// Does nothing if the list of regions is empty, as it would be a no-op and isn't a valid
    /// usage of the command anyway.
    #[inline]
    pub unsafe fn clear_color_image(&mut self, clear_info: &ClearColorImageInfo) {
        let &ClearColorImageInfo {
            ref image,
            image_layout,
            clear_value,
            ref regions,
            _ne: _,
        } = clear_info;

        if regions.is_empty() {
            return;
        }

        let clear_value = clear_value.into();
        let ranges: SmallVec<[_; 8]> = regions
            .iter()
            .cloned()
            .map(ash::vk::ImageSubresourceRange::from)
            .collect();

        let fns = self.device.fns();
        (fns.v1_0.cmd_clear_color_image)(
            self.handle,
            image.inner().image.handle(),
            image_layout.into(),
            &clear_value,
            ranges.len() as u32,
            ranges.as_ptr(),
        );
    }

    /// Calls `vkCmdClearDepthStencilImage` on the builder.
    ///
    /// Does nothing if the list of regions is empty, as it would be a no-op and isn't a valid
    /// usage of the command anyway.
    #[inline]
    pub unsafe fn clear_depth_stencil_image(&mut self, clear_info: &ClearDepthStencilImageInfo) {
        let &ClearDepthStencilImageInfo {
            ref image,
            image_layout,
            clear_value,
            ref regions,
            _ne: _,
        } = clear_info;

        if regions.is_empty() {
            return;
        }

        let clear_value = clear_value.into();
        let ranges: SmallVec<[_; 8]> = regions
            .iter()
            .cloned()
            .map(ash::vk::ImageSubresourceRange::from)
            .collect();

        let fns = self.device.fns();
        (fns.v1_0.cmd_clear_depth_stencil_image)(
            self.handle,
            image.inner().image.handle(),
            image_layout.into(),
            &clear_value,
            ranges.len() as u32,
            ranges.as_ptr(),
        );
    }

    /// Calls `vkCmdFillBuffer` on the builder.
    #[inline]
    pub unsafe fn fill_buffer(&mut self, fill_buffer_info: &FillBufferInfo) {
        let &FillBufferInfo {
            data,
            ref dst_buffer,
            dst_offset,
            size,
            _ne: _,
        } = fill_buffer_info;

        let dst_buffer_inner = dst_buffer.inner();

        let fns = self.device.fns();
        (fns.v1_0.cmd_fill_buffer)(
            self.handle,
            dst_buffer_inner.buffer.handle(),
            dst_offset,
            size,
            data,
        );
    }

    /// Calls `vkCmdUpdateBuffer` on the builder.
    pub unsafe fn update_buffer<D>(
        &mut self,
        data: &D,
        dst_buffer: &dyn BufferAccess,
        dst_offset: DeviceSize,
    ) where
        D: BufferContents + ?Sized,
    {
        let dst_buffer_inner = dst_buffer.inner();

        let fns = self.device.fns();
        (fns.v1_0.cmd_update_buffer)(
            self.handle,
            dst_buffer_inner.buffer.handle(),
            dst_buffer_inner.offset + dst_offset,
            size_of_val(data) as DeviceSize,
            data.as_bytes().as_ptr() as *const _,
        );
    }
}

/// Parameters to clear a color image.
#[derive(Clone, Debug)]
pub struct ClearColorImageInfo {
    /// The image to clear.
    ///
    /// There is no default value.
    pub image: Arc<dyn ImageAccess>,

    /// The layout used for `image` during the clear operation.
    ///
    /// The following layouts are allowed:
    /// - [`ImageLayout::TransferDstOptimal`]
    /// - [`ImageLayout::General`]
    ///
    /// The default value is [`ImageLayout::TransferDstOptimal`].
    pub image_layout: ImageLayout,

    /// The color value to clear the image to.
    ///
    /// The default value is `ClearColorValue::Float([0.0; 4])`.
    pub clear_value: ClearColorValue,

    /// The subresource ranges of `image` to clear.
    ///
    /// The default value is a single region, covering the whole image.
    pub regions: SmallVec<[ImageSubresourceRange; 1]>,

    pub _ne: crate::NonExhaustive,
}

impl ClearColorImageInfo {
    /// Returns a `ClearColorImageInfo` with the specified `image`.
    #[inline]
    pub fn image(image: Arc<dyn ImageAccess>) -> Self {
        let range = image.subresource_range();

        Self {
            image,
            image_layout: ImageLayout::TransferDstOptimal,
            clear_value: ClearColorValue::Float([0.0; 4]),
            regions: smallvec![range],
            _ne: crate::NonExhaustive(()),
        }
    }
}

/// Parameters to clear a depth/stencil image.
#[derive(Clone, Debug)]
pub struct ClearDepthStencilImageInfo {
    /// The image to clear.
    ///
    /// There is no default value.
    pub image: Arc<dyn ImageAccess>,

    /// The layout used for `image` during the clear operation.
    ///
    /// The following layouts are allowed:
    /// - [`ImageLayout::TransferDstOptimal`]
    /// - [`ImageLayout::General`]
    ///
    /// The default value is [`ImageLayout::TransferDstOptimal`].
    pub image_layout: ImageLayout,

    /// The depth/stencil values to clear the image to.
    ///
    /// The default value is zero for both.
    pub clear_value: ClearDepthStencilValue,

    /// The subresource ranges of `image` to clear.
    ///
    /// The default value is a single region, covering the whole image.
    pub regions: SmallVec<[ImageSubresourceRange; 1]>,

    pub _ne: crate::NonExhaustive,
}

impl ClearDepthStencilImageInfo {
    /// Returns a `ClearDepthStencilImageInfo` with the specified `image`.
    #[inline]
    pub fn image(image: Arc<dyn ImageAccess>) -> Self {
        let range = image.subresource_range();

        Self {
            image,
            image_layout: ImageLayout::TransferDstOptimal,
            clear_value: ClearDepthStencilValue::default(),
            regions: smallvec![range],
            _ne: crate::NonExhaustive(()),
        }
    }
}

/// Parameters to fill a region of a buffer with repeated copies of a value.
#[derive(Clone, Debug)]
pub struct FillBufferInfo {
    /// The data to fill with.
    ///
    /// The default value is `0`.
    pub data: u32,

    /// The buffer to fill.
    ///
    /// There is no default value.
    pub dst_buffer: Arc<dyn BufferAccess>,

    /// The offset in bytes from the start of `dst_buffer` that filling will start from.
    ///
    /// This must be a multiple of 4.
    ///
    /// The default value is `0`.
    pub dst_offset: DeviceSize,

    /// The number of bytes to fill.
    ///
    /// This must be a multiple of 4.
    ///
    /// The default value is the size of `dst_buffer`,
    /// rounded down to the nearest multiple of 4.
    pub size: DeviceSize,

    pub _ne: crate::NonExhaustive,
}

impl FillBufferInfo {
    /// Returns a `FillBufferInfo` with the specified `dst_buffer`.
    #[inline]
    pub fn dst_buffer(dst_buffer: Arc<dyn BufferAccess>) -> Self {
        let size = dst_buffer.size() & !3;

        Self {
            data: 0,
            dst_buffer,
            dst_offset: 0,
            size,
            _ne: crate::NonExhaustive(()),
        }
    }
}

/// Error that can happen when recording a clear command.
#[derive(Clone, Debug)]
pub enum ClearError {
    SyncCommandBufferBuilderError(SyncCommandBufferBuilderError),

    RequirementNotMet {
        required_for: &'static str,
        requires_one_of: RequiresOneOf,
    },

    /// Operation forbidden inside of a render pass.
    ForbiddenInsideRenderPass,

    /// The queue family doesn't allow this operation.
    NotSupportedByQueueFamily,

    /// The end of the range of accessed array layers of the subresource range of a region is
    /// greater than the number of array layers in the image.
    ArrayLayersOutOfRange {
        region_index: usize,
        array_layers_range_end: u32,
        image_array_layers: u32,
    },

    /// The aspects of the subresource range of a region contain aspects that are not present
    /// in the image, or that are not allowed.
    AspectsNotAllowed {
        region_index: usize,
        aspects: ImageAspects,
        allowed_aspects: ImageAspects,
    },

    /// The provided data has a size larger than the maximum allowed.
    DataTooLarge {
        size: DeviceSize,
        max: DeviceSize,
    },

    /// The format of an image is not supported for this operation.
    FormatNotSupported {
        format: Format,
    },

    /// A specified image layout is not valid for this operation.
    ImageLayoutInvalid {
        image_layout: ImageLayout,
    },

    /// The end of the range of accessed mip levels of the subresource range of a region is greater
    /// than the number of mip levels in the image.
    MipLevelsOutOfRange {
        region_index: usize,
        mip_levels_range_end: u32,
        image_mip_levels: u32,
    },

    /// An image does not have a required format feature.
    MissingFormatFeature {
        format_feature: &'static str,
    },

    /// A resource did not have a required usage enabled.
    MissingUsage {
        usage: &'static str,
    },

    /// The buffer offset of a region is not a multiple of the required buffer alignment.
    OffsetNotAlignedForBuffer {
        region_index: usize,
        offset: DeviceSize,
        required_alignment: DeviceSize,
    },

    /// The end of the range of accessed byte offsets of a region is greater than the size of the
    /// buffer.
    RegionOutOfBufferBounds {
        region_index: usize,
        offset_range_end: DeviceSize,
        buffer_size: DeviceSize,
    },

    /// The buffer size of a region is not a multiple of the required buffer alignment.
    SizeNotAlignedForBuffer {
        region_index: usize,
        size: DeviceSize,
        required_alignment: DeviceSize,
    },
}

impl Error for ClearError {
    fn source(&self) -> Option<&(dyn Error + 'static)> {
        match self {
            Self::SyncCommandBufferBuilderError(err) => Some(err),
            _ => None,
        }
    }
}

impl Display for ClearError {
    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), FmtError> {
        match self {
            Self::SyncCommandBufferBuilderError(_) => write!(f, "a SyncCommandBufferBuilderError"),
            Self::RequirementNotMet {
                required_for,
                requires_one_of,
            } => write!(
                f,
                "a requirement was not met for: {}; requires one of: {}",
                required_for, requires_one_of,
            ),
            Self::ForbiddenInsideRenderPass => {
                write!(f, "operation forbidden inside of a render pass")
            }
            Self::NotSupportedByQueueFamily => {
                write!(f, "the queue family doesn't allow this operation")
            }
            Self::ArrayLayersOutOfRange {
                region_index,
                array_layers_range_end,
                image_array_layers,
            } => write!(
                f,
                "the end of the range of accessed array layers ({}) of the subresource range of \
                region {} is greater than the number of array layers in the image ({})",
                array_layers_range_end, region_index, image_array_layers,
            ),
            Self::AspectsNotAllowed {
                region_index,
                aspects,
                allowed_aspects,
            } => write!(
                f,
                "the aspects ({:?}) of the subresource range of region {} contain aspects that \
                are not present in the image, or that are not allowed ({:?})",
                aspects, region_index, allowed_aspects,
            ),
            Self::DataTooLarge { size, max } => write!(
                f,
                "the provided data has a size ({}) greater than the maximum allowed ({})",
                size, max,
            ),
            Self::FormatNotSupported { format } => write!(
                f,
                "the format of the image ({:?}) is not supported for this operation",
                format,
            ),
            Self::ImageLayoutInvalid { image_layout } => write!(
                f,
                "the specified image layout {:?} is not valid for this operation",
                image_layout,
            ),
            Self::MipLevelsOutOfRange {
                region_index,
                mip_levels_range_end,
                image_mip_levels,
            } => write!(
                f,
                "the end of the range of accessed mip levels ({}) of the subresource range of \
                region {} is not less than the number of mip levels in the image ({})",
                mip_levels_range_end, region_index, image_mip_levels,
            ),
            Self::MissingFormatFeature { format_feature } => write!(
                f,
                "the image does not have the required format feature {}",
                format_feature,
            ),
            Self::MissingUsage { usage } => write!(
                f,
                "the resource did not have the required usage {} enabled",
                usage,
            ),
            Self::OffsetNotAlignedForBuffer {
                region_index,
                offset,
                required_alignment,
            } => write!(
                f,
                "the buffer offset ({}) of region {} is not a multiple of the required \
                buffer alignment ({})",
                offset, region_index, required_alignment,
            ),
            Self::RegionOutOfBufferBounds {
                region_index,
                offset_range_end,
                buffer_size,
            } => write!(
                f,
                "the end of the range of accessed byte offsets ({}) of region {} is greater \
                than the size of the buffer ({})",
                offset_range_end, region_index, buffer_size,
            ),
            Self::SizeNotAlignedForBuffer {
                region_index,
                size,
                required_alignment,
            } => write!(
                f,
                "the buffer size ({}) of region {} is not a multiple of the required buffer \
                alignment ({})",
                size, region_index, required_alignment,
            ),
        }
    }
}

impl From<SyncCommandBufferBuilderError> for ClearError {
    fn from(err: SyncCommandBufferBuilderError) -> Self {
        Self::SyncCommandBufferBuilderError(err)
    }
}

impl From<RequirementNotMet> for ClearError {
    fn from(err: RequirementNotMet) -> Self {
        Self::RequirementNotMet {
            required_for: err.required_for,
            requires_one_of: err.requires_one_of,
        }
    }
}