text:
//
//  DMOAuthSession.h
//  Dailymotion SDK iOS
//
//  Created by Olivier Poitrey on 10/06/12.
//  Copyright (c) 2012 Dailymotion. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <Security/Security.h>

/**
 * A (storable) OAuth session.
 */
@interface DMOAuthSession : NSObject

@property (nonatomic, copy) NSString *accessToken;
@property (nonatomic, strong) NSDate *expires;
@property (nonatomic, copy) NSString *refreshToken;
@property (nonatomic, readonly) NSString *scope;

/**
 * Instanciate a session object with session info dictionary coming from auth server.
 *
 * @param sessionInfo A dictionary returned by the token server with all the session information.
 */
+ (DMOAuthSession *)sessionWithSessionInfo:(NSDictionary *)sessionInfo;

@end

@interface DMOAuthSession (Keychain)

/**
 * Load a session from a given keychain identifier
 *
 * @param keychainIdentifier The keychain identifier to read the session from
 *
 * @return The session if present, nil otherwise
 */
+ (DMOAuthSession *)sessionFromKeychainIdentifier:(NSString *)keychainIdentifier;

/**
 * Save the session in the keychain at the given identifier
 *
 * @param keychainIdentifier The keychain identifier to store the session with
 */
- (BOOL)storeInKeychainWithIdentifier:(NSString *)keychainIdentifier;

/**
 * Clear the session from the keychain
 *
 * @param keychainIdentifier The keychain identifier to clear the session from
 */
- (BOOL)clearFromKeychainWithIdentifier:(NSString *)keychainIdentifier;

@end

redpajama_set_name: RedPajamaGithub


Below is an excerpt from an article first written today and published by PAULA AVEN GLADYCH. She writes for a benefits newsletter I find to be quite useful. It concerns the ability of most Americans to retire and it paints quite a bleak picture for those prospects. Let me know what you think by commenting at the bottom.
Seventy-five percent of small business owners polled in a recent survey said they agree that most American workers are financially unprepared for retirement, but only one in five small businesses offer their employees a 401(k) or other employee self-funded retirement plan.
The Nationwide Financial/Harris Poll of 501 small business owners also found that only 11 percent of respondents plan to add an employee-sponsored 401(k) plan within the next two years. Sixty-nine percent say their business is too small and more than half say it is too expensive.
Thirty-seven percent of the business owners surveyed, who have at least six employees, said they are under pressure from employees to offer a retirement plan, and 78 percent said that having a retirement plan is effective in attracting qualified employees.
The SAVE Act encourages small businesses to pool together to offer Multiple Small Employer Plans that are less expensive than single employer plans and simplify an employer's administrative requirements. The bill, which was introduced in the house by Ron Kind, D-Wisconsin, and David Reichert, R-Washington, would allow small employers to reduce costs by pooling their resources under a single plan with easier administrative requirements.
Seventy-one percent of those surveyed said that when selecting an employee self-funded retirement savings plan it is important that the plan have flexibility to match or not match employee contributions and 62 percent said it was important that multiple employers be able to group together to pool resources and reduce administrative costs.
"The SAVE Act is an important step toward improving the lives of American workers who don't have access to an employer-based retirement plan," said Arvia.


Specially designed for high torque. Click on the name or image to find out more..
Accommodates parallel, angular, and axial misalignments.Click on the image/name to find out more..
Possesses high Power to Weight ratio and many such features. Click on the image/name to find out more..
Specially designed for Back Pull out Pumps.Click on the image/name to find out more..
The basic "US" coupling with "Snap-Wrap" type Elastomer and removable collar. Click on the image/name to find out more..
Specially designed for machines requiring space for maintenance. Click on the image/name to find out more..
Easy Fixing and Removal, interchangeable. Click on the image/name to find out more..
Specially designed for Engine Applications. Click on the image/name to find out more..
Provides greater miss-aligning tolerance. Click on the image/name to find out more..
High Torque capacity, Compact size, low weight. Click on the image/name to find out more..
Low Cost, high torque range. Click on the image/name to find out more..
Specially designed for Engine Applications, easy Assembly. Click on the image/name to find out more..
Easy assembling and dismantling. Click on the image/name to find out more..
Possesses highest miss-alignment tolerance. Click on the image/name to find out more..


text:
Sepsis Alliance
Clinical Community
NSDTI
Donate Button – Arrow
Sepsis Basics
What Is Sepsis
Testing for Sepsis
Post-Sepsis Syndrome
Sepsis and…
Patients & Family
Diagnosed with Sepsis
Sepsis Survivors
Faces of Sepsis™
Speaking to Patients
Sepsis Training Modules
Sepsis Alliance Institute
Sepsis Information Guides
Posters and Infographics
Sepsis Voices: Advocacy
The National Sepsis Data Trust Initiative
Share Your Sepsis Story
Educate Your Community
Share PSAs
Erin's Campaign For Kids
Global Sepsis Alliance
It's About TIME™
Share your StorySupport UsGet Resources
2020 Sepsis Hero: Kathy Madlem
"In the first 5 years as part of that program, we dropped our sepsis mortality by more than 50%"
Kathy Madlem, BSN, RN, a nurse at Santa Clara Valley Medical Center (SCVMC) in San Jose, CA, has been named one of Sepsis Alliance's 2020 Sepsis Heroes. Sepsis Alliance was pleased to invite Kathy into the circle of Sepsis Heroes, which honors people who go above and beyond in aiding with sepsis identification, recognition, and treatment, among the public and within healthcare facilities.
Kathy took the position as Sepsis Quality Improvement Coordinator at SCVMC after working for 13 years in critical care, where she saw many patients with sepsis and septic shock. "It was the most common diagnosis we had," she said. "I started to hear that there was something you could look for and intervene earlier, preventing people from going into septic shock. I thought that was astounding and wanted to do as much as I could." Kathy is now in charge of program development and is responsible for educating staff, creating the EHR sepsis tools and reports, the hospital policy and nurse-driven protocol, performing CMS Sep-1 chart abstractions and reporting, collection and dissemination of performance data, leading the unit-based RN sepsis champions, and organizing an annual sepsis conference in San Jose during Sepsis Awareness Month.
There were quality improvement coordinators for strokes, heart failure, and others, but none for sepsis. "I looked at other quality improvement coordinators and nurse coordinators and picked what I liked out of all of them, and their existing programs, and I developed my own."
Kathy led the effort for SCVMC to become a TJC Sepsis Certified Center, which was achieved in September, 2018. She is also a member of the Santa Clara County Sepsis Collaborative, a network of sepsis program leaders from hospitals located in Santa Clara County. In addition to all that, Kathy is also on the Sepsis Alliance Clinical Community Advisory Committee, helping healthcare professionals learn more about sepsis care.
Initially, the hospital participated in a 5-year waiver program that allowed Kathy to participate in various sepsis educational opportunities, including subject matter experts. "In the first 5 years as part of that program, we dropped our sepsis mortality by more than 50%," Kathy said. The system has bought more hospitals within the last year, so the sepsis programs are migrating to those facilities too. "In theory, no matter what hospital someone goes to, they should have the same standard of care," she added.
When Kathy heard the news of the Sepsis Heroes award, she was shocked and overwhelmed, she said. "I've been putting in almost 80-hour weeks [because of the pandemic and the mobile testing], and I'm just so tired. It was an amazing phone call to receive."
When Kathy isn't at work, she spends time with her husband and her five, 4-legged friends, including 2 Clydesdale horses, which she loves to ride.
Kathy and her fellow Sepsis Heroes will be honored during the 9th Annual Sepsis Heroes gala on September 17, 2020.
To learn more, click here
Stay InformedJoin our Newsletter
Funding and Sponsorship Policy
Copyright ©2022 Sepsis Alliance. All rights reserved.
Sepsis Alliance is a tax-exempt organization under Sections 501(c)(3) of the Internal Revenue Code. Contributions are deductible for computing income estate taxes.
Sepsis Alliance tax ID 38-3110993.

redpajama_set_name: RedPajamaCommonCrawl


The following is an incomplete list of things I am pretty sure I take for granted. Maybe you can identify with some. What do you take for granted?
There is an inexhaustible list of things one could potentially take for granted. Here I've only listed a few. Realizing all I've taken for granted instills a deep gratitude for my circumstances.
I probably pass by strangers all the time who may not have some of even these simple things, and here I don't even think about what treasures I have before me.
What do you take for granted? Is there something you're particularly grateful for today?
"Light bulb!" Comes to mind hehe also from Despicable Me. I would not want to do without light or electricity, but especially not without light!
Yes 🙂 Haha "light bulb". I like Gru's accent.
Your right. We all take so many things for granted that we shouldn't. I take my family for granted a lot. It's only when I read something like this that I realise and I know that I should realise more. I am grateful for them. I know a lot of people have no one.
I'm grateful for the internet. Many see it as a monster, but I just could not live without it now. Well maybe I could, but boy, that would mean so much more work.


The injuries to the Pens are downright depressing. However, as true fans, we owe it to the team to stand beside them thru thick and thin….right?
We're giving you a PENGO card. Anytime a Penguin player scores a goal, gets an assist, or goes to the sin bin, put an X thru his number. I know what you're saying…"What about Geno?" He'll likely score a goal, get an assist and go to the sin bin all in the same period. You only get to X out a number once….the sin bin is a free space to make up for Malkin. We have also added an additional free space. That way, if Chris Kunitz scores you'll still get points when the goal is called back. …you're welcomed!
#47 is Simon Despres. You might remember him from all the articles you read over the summer touting him as the next defensive superstar. He showed up at training camp slow, out of shape and over rated. He was banished to WBS to lose some weight, gain some speed and live up to his potential. It took 2 broken bones to get him back to the NHL but he's back.
#41 is Robert Bortuzzo. He had to stop using the GPS in his car after he made so many trips to WBS that the programed voice started to mock him. Poor Bortuzzo, he's become so disrespected that his Wikipedia page hasn't even been updated since his 2011 concussion.
#38 is Zach Sill. He is listed as Canadian but was born in the United Kingdom and educated at the University of Maine. He won't last long, you may not want to spend too much time learning his number.
#59 is Jayson Megna. He also could drive to WBS with his eyes closed. I don't know why the Pens don't just keep him up…after all, he has the coolest nick names.
Now you're up to date on the new guys on the Penguin's bench. Grab a beer and a Samich and enjoy the game.


text:
Photo by Timo Ohler, courtesy of the artist and Sprüth Magers.Barbara Kruger, Untitled (Forever), 2017, digital print on vinyl wallpaper and floor covering, dimensions variable, Amorepacific Museum of Art (APMA), Seoul, installation view, Sprüth Magers, Berlin, 2017–18.
11 art exhibitions in L.A. to look forward to in 2022
Including ones that feature a major fashion designer, a local muralist and overlooked filmmakers.
Michael Juliano
Wednesday December 15 2021
We were elated just to be able to step foot inside of a museum again this year. With exhibition calendars back in full swing, we're even more excited to have months of notable art shows to look forward to in 2022. The return of a major art fair, the next show from L.A.'s newest museum and a couple of fascinating historical collections: These are the 11 L.A. art exhibitions that we're already making plans to visit in 2022.
Psst: You can see nearly all of our picks below without having to pay for admission if you brush up on L.A.'s free museum days first.
The return of Yayoi Kusama's Infinity Mirrored Room
The Broad, reopens January 5
Alright, this isn't really a new exhibition, but it does mark the long-awaited return of easily L.A.'s most popular installation—with a few notable upgrades. Starting January 5, Yayoi Kusama's Infinity Mirrored Room—The Souls of Millions of Light Years Away will reopen at the Broad after a nearly two-year absence, and you'll now be able to book an advance reservation to see it and spend a few extra seconds inside.
The Huntington, Jan 15–May 2
Dive into literary maps, both figurative in the case of a typescript draft of James Joyce's Ulysses and literal with J.R.R. Tolkien's map of Middle Earth, in this collection exhibition from the Huntington Library. Among the 70 items on display, other imaginary maps include Lewis Carroll's 1876 edition of The Hunting of the Snark, Robert Louis Stevenson's maps from Treasure Island and Kidnapped and Octavia E. Butler's maps from notes for Parable of the Talents.
Courtesy of the artistUlysses Jenkins, Without Your Interpretation rehearsal documentation, 1984. Color print. 3 1/2 × 5 in. (8.9 × 12.7 cm).
"Ulysses Jenkins: Without Your Interpretation"
Hammer Museum, Feb 6–May 15
The Hammer stages the first major retrospective of the L.A. video and performance artist Ulysses Jenkins, who's been interrogating history through the lens of race and gender for over half a century.
"Poussin and the Dance"
Getty Center, Feb 15–May 8
The Getty pairs the influential 17-century French painter Nicolas Poussin's portrayals of nymphs and satyrs with contemporary dance films by L.A. choreographers.
Frieze Los Angeles
Beverly Hills, Feb 18–20
After having to take last year off, the New York export lands in L.A. for its third art fair, featuring works from about 100 international galleries. But this time around, Frieze is leaving behind the surreal setting of the Paramount backlot and decamping to a space next to the Beverly Hilton, as well as a sculpture park by the Beverly Hills sign.
"Barbara Kruger: Thinking of You. I Mean Me. I Mean You."
LACMA, Mar 20–July 17
Her works are in just about every contemporary collection in town and her bold Futura captions have been endlessly ripped off. But LACMA is putting together a proper retrospective of the influential artist: The videos, large-scale vinyl wraps and audio soundscapes on display in this campus-wide presentation span four decades.
"For Race and Country: Buffalo Soldiers in California"
California African American Museum, Apr 13–Oct 30
This historical inclusion unpacks the romanticism behind Buffalo Soldiers, regiments of Black soldiers who served on the Western frontier in the late 19th century. Through artifacts, audio interviews, photographs, uniforms and newspapers, CAAM will explore how both their personal and in-uniform lives shaped California during a time of government-sanctioned racial segregation—and confronts their role in war and violence against indigenous populations.
© Museum Associates/LACMALeft: Alexander McQueen (Lee Alexander McQueen), Alexander McQueen, Woman's Ensemble (Dress and Leggings), Spring/Summer 2010, Los Angeles County Museum of Art, Gift from the Collection of Regina J. Drucker. Right: Manuel Cipriano Gomes Mafra, Urn, circa 1865-1887, Los Angeles County Museum of Art, Gift of Barbara Barbara and Marty Frenkel.
"Lee Alexander McQueen: Mind, Mythos, Muse"
LACMA, Apr 24–Oct 9
Conceptually challenging yet red carpet-approved, the late Alexander McQueen's designs were technically exquisite. Here, LACMA looks to the myriad inspirations behind the dressmaking with a display of McQueen garments alongside inspirational artwork from the museum's own collection.
"Garrett Bradley: American Rhapsody" + "Judith F. Baca: The World Wall" + "Tala Madani"
The Geffen Contemporary at MOCA; Sept 10, 2022–Feb 20, 2023
Following the finale of its Pipilotti Rist retrospective, MOCA will unveil a trio of worthwhile exhibitions next fall at its Little Tokyo space. Garrett Bradley's first solo museum exhibition will assemble recent single and multi-channel films that call out systemic racism and America's social problems. All nine massive panels of local Chicana muralist Judy Baca's years-long global project will be on display in a cathedral-like installation. And cultural fears will be put to paint in the first North American survey of Iranian-born artist Tala Madani.
"Regeneration: Black Cinema 1898–1971"
Academy Museum of Motion Pictures, 2022
To follow its retrospective of beloved animator Hayao Miyazaki, the L.A. museum will focus on nearly an entire century of a considerably more overlooked story in cinema. A collaboration with Washington, D.C.'s National Museum of African American History and Culture, "Regeneration" dives into the works of Black filmmakers from the birth of the motion picture industry through the Civil Rights era. Set to debut in the second half of 2022, the research-driven exhibition counts filmmakers Ava DuVernay and Charles Burnett among its advisers.
"'I'll Have What She's Having': The Jewish Deli"
Skirball Cultural Center, 2022
Stacks of pastrami on rye, simmering bowls of matzo ball soup, crunchy pickles and, in the case of When Harry Met Sally…, a particularly orgasmic turkey sandwich: Jewish deli staples have ingrained themselves in both American menus and pop culture. The Skirball mounts this exhibition of neon signs, menus, ads and packaging to tell a story of the 20th-century Jewish experience in American through the lens of the deli (including some L.A. faves).
Bonus: Three of 2021's best art exhibitions
Though these three excellent exhibitions all debuted in 2021, they extend far enough into 2022 that we couldn't pass up spotlighting them in this list. The Obama portraits will have left by the beginning of the year, but the vibrant and vital "Black American Portraits" is still on display at LACMA into April. The Academy Museum's magical Hayao Miyazaki retrospective wraps up in early June, as does MOCA's mesmerizing Pipilotti Rist retrospective—our pick for this past year's best art exhibition.
Editor, Time Out Los Angeles
facebooktwitterinstagramspotify


text:
News Sports High Schools Life Business Obituaries eNewspaper Legals
East Lansing grad Brandon Johns Jr. to finish college basketball career in Atlantic 10
Brian Calloway
Lansing State Journal
Former East Lansing basketball star Brandon Johns Jr. will be finishing his college career in the Atlantic 10.
Johns announced Wednesday night plans to conclude his career at VCU. His decision came two weeks after entering his name into the transfer portal.
"I can't thank the University of Michigan enough for the best four years someone could ask for," Johns wrote in an Instagram post revealing his decision. "The relationships and experiences I have had the opportunity to be a part of will never be forgotten. The next chapter awaits."
Johns joins a VCU program that finished 22-10 this season and appeared in the NIT.
The 6-foot-8 Johns appeared in 117 games and started 25 during his four years at Michigan. He averaged 3.8 points, 2.3 rebounds and shot 46.4% from the field. Johns averaged 3.2 points and 2.0 rebounds this winter while playing in 31 games and starting nine for the Wolverines, who reached the NCAA tournament Sweet 16.
Johns was rated a top 100 recruit in the 2018 class after a strong career at East Lansing. He was the Associated Press Class A player of the year as a senior and was the state's Mr. Basketball runner-up.
More:Former East Lansing star Aaliyah Nye leaves Illinois to continue basketball career in SEC
Contact Brian Calloway at bcalloway@lsj.com. Follow him on Twitter @brian_calloway.


Image above: Irene Carvajal, "Quilt"
The Work in Progress Collective, in their inaugural group show, will be presenting work around the theme Entangled. The show includes the work of four Bay area artists and their meditations on what it means to be a part of, submerged in, and dominated by a complex system of connections.
Winnie van der Rijn, "She Puppet"
Ashleigh Norman, "Ham and Cheese"
The work explores ideas of entanglement in relationship with self, others, religion, society, possessions, technology, production and ideas. The art takes form as paintings, sculpture and installation.
The Work In Progress Collective: Irene Carvajal, Sarah Ammons, Ashleigh Norman & Winnie van der Rijn. In a world that needs art but does not support the artist, these artists are working to create a community to support, critique, collaborate, inspire and coach each other in their group and individual artistic pursuits.


text:
Energiglas er et moderne vinduesglas, som er langt bedre til at holde på varmen end traditionelt glas.

Beskrivelse
Energiglasset er belagt med et ganske tyndt lag metalfilm,  som lader energien i solens stråler passere ind i huset, så rummet får indstrålet solenergi, når solen skinner, som omdannes til termisk energi / varme , når rummenes og tings overflader rammes – på samme måde som med almindeligt glas – men samtidig holder energiglasset på den termiske varme, ved at den langbølgede varmeudstråling fra boligen , som normalt går tabt via husets vinduer, i stedet reflekteres tilbage til rummet. Energiruden kan reducere varmetabet væsentligt.

Energiglas skal helst monteres som det inderste af to eller tre lag glas, og så den tynde metalbelægning på glasset vender udad. Det vil sige, at i indvendige forsatsvinduer skal der være energiglas i den indvendige ,  koblede vinduer skal have energiglas i den indvendige koblede ramme, og i termoruder skal det inderste glas være energiglas.

Henvisninger
 Energiruder - hvor energiglas indgår som en del af konstruktionen.
 Glas - generel artikel.

Eksterne referencer
 Center for Bygningsbevaring definerer energiglas

Vinduer

redpajama_set_name: RedPajamaWikipedia


Our client was looking for a way to optimise legal spend. They know the difference between the truly value-adding legal insight and the work that just needs to get done. So do we.
We agreed a long-term, sole supply relationship with the client – instead of 100 firms, the client only needed one. We could both invest, in the knowledge that we were committed to the long term.
We split the workload between the business-critical, strategic work and the operational work that implemented that strategy.
they instruct us, and they know they can trust us to do great work for them on every matter, big or small.
Over the thousands of matters we have worked on, we have built up a huge knowledge base, helping us identify and automate common tasks.
Not only does this make the hourless model possible, it also allows us to assess business performance and drive continuous improvement. We meet with the client regularly to monitor the account and share the insights we've gleaned from the data we collect.
Killing the billable hour has proved more successful than any of us expected. The client has saved even more money than initially projected, and the quality of outcome has improved. It's letting them shift their focus: from the everyday work that really needs to get done, to the valueadding work they really want to do.
It seems this is catching on. The same hourless model is being applied across a wide range of transactions and disputes.
It is reimagining the lawyer and adviser relationship.
Our constant investment in developing innovative ways of working and the technologies to support them is paying off for any client with a desire to change the model for the better, for good.


text:
package com.planet_ink.coffee_mud.Commands;
import com.planet_ink.coffee_mud.core.interfaces.*;
import com.planet_ink.coffee_mud.core.*;
import com.planet_ink.coffee_mud.core.collections.*;
import com.planet_ink.coffee_mud.core.database.DBConnection;
import com.planet_ink.coffee_mud.core.database.DBConnector;
import com.planet_ink.coffee_mud.core.database.DBInterface;
import com.planet_ink.coffee_mud.core.exceptions.CMException;
import com.planet_ink.coffee_mud.Abilities.interfaces.*;
import com.planet_ink.coffee_mud.Areas.interfaces.*;
import com.planet_ink.coffee_mud.Behaviors.interfaces.*;
import com.planet_ink.coffee_mud.CharClasses.interfaces.*;
import com.planet_ink.coffee_mud.Commands.interfaces.*;
import com.planet_ink.coffee_mud.Common.interfaces.*;
import com.planet_ink.coffee_mud.Exits.interfaces.*;
import com.planet_ink.coffee_mud.Items.interfaces.*;
import com.planet_ink.coffee_mud.Libraries.interfaces.MaskingLibrary;
import com.planet_ink.coffee_mud.Locales.interfaces.*;
import com.planet_ink.coffee_mud.MOBS.interfaces.*;
import com.planet_ink.coffee_mud.Races.interfaces.*;

import java.util.*;

public class Merge extends StdCommand
{
	public Merge()
	{
	}

	private final String[] access=I(new String[]{"MERGE"});
	@Override
	public String[] getAccessWords()
	{
		return access;
	}

	public static String getStat(final Environmental E, final String stat)
	{
		if((stat!=null)
		&&(stat.length()>0)
		&&(stat.equalsIgnoreCase("REJUV"))
		&&(E instanceof Physical))
		{
			if(((Physical)E).basePhyStats().rejuv()==PhyStats.NO_REJUV)
				return "0";
			return ""+((Physical)E).basePhyStats().rejuv();
		}
		return ((Physical)E).getStat(stat);
	}

	public static void setStat(final Environmental E, final String stat, final String value)
	{
		if((stat!=null)
		&&(stat.length()>0)
		&&(stat.equalsIgnoreCase("REJUV"))
		&&(E instanceof Physical))
			((Physical)E).basePhyStats().setRejuv(CMath.s_int(value));
		else
			E.setStat(stat,value);
	}

	public static void mergedebugtell(final MOB mob, final String msg)
	{
		if(mob!=null)
			mob.tell(msg);
		Log.sysOut("MERGE",msg);
	}

	protected static boolean tryMerge(final MOB mob,
									  final Room room,
									  final Environmental E,
									  final List<?> things,
									  final List<String> changes,
									  final List<String> onfields,
									  final List<String> ignore,
									  final boolean noisy)
	{
		boolean didAnything=false;
		final List<String> efields=new Vector<String>();
		List<String> allMyFields=new Vector<String>();
		final String[] EFIELDS=E.getStatCodes();
		for(int i=0;i<EFIELDS.length;i++)
		{
			if(!efields.contains(EFIELDS[i]))
				efields.add(EFIELDS[i]);
		}
		efields.add("REJUV");
		allMyFields=new XVector<String>(efields);
		for(int v=0;v<ignore.size();v++)
		{
			if(efields.contains(ignore.get(v)))
				efields.remove(ignore.get(v));
		}
		for(int v=0;v<changes.size();v++)
		{
			if(efields.contains(changes.get(v)))
				efields.remove(changes.get(v));
		}
		if(noisy)
			mergedebugtell(mob,"AllMy-"+CMParms.toListString(allMyFields));
		if(noisy)
			mergedebugtell(mob,"efields-"+CMParms.toListString(efields));
		for(int t=0;t<things.size();t++)
		{
			final Environmental E2=(Environmental)things.get(t);
			if(noisy)
				mergedebugtell(mob,E.name()+"/"+E2.name()+"/"+CMClass.classID(E)+"/"+CMClass.classID(E2));
			if(CMClass.classID(E).equals(CMClass.classID(E2)))
			{
				Vector<String> fieldsToCheck=null;
				if(onfields.size()>0)
				{
					fieldsToCheck=new Vector<String>();
					for(int v=0;v<onfields.size();v++)
					{
						if(efields.contains(onfields.get(v)))
							fieldsToCheck.add(onfields.get(v));
					}
				}
				else
					fieldsToCheck=new XVector<String>(efields);

				boolean checkedOut=fieldsToCheck.size()>0;
				if(noisy)
					mergedebugtell(mob,"fieldsToCheck-"+CMParms.toListString(fieldsToCheck));
				if(checkedOut)
				for(int i=0;i<fieldsToCheck.size();i++)
				{
					final String field=fieldsToCheck.get(i);
					if(noisy)
						mergedebugtell(mob,field+"/"+getStat(E,field)+"/"+getStat(E2,field)+"/"+getStat(E,field).equals(getStat(E2,field)));
					if(!getStat(E,field).equals(getStat(E2,field)))
					{
						checkedOut = false;
						break;
					}
				}
				if(checkedOut)
				{
					List<String> fieldsToChange=null;
					if(changes.size()==0)
						fieldsToChange=new XVector<String>(allMyFields);
					else
					{
						fieldsToChange=new Vector<String>();
						for(int v=0;v<changes.size();v++)
						{
							if(allMyFields.contains(changes.get(v)))
								fieldsToChange.add(changes.get(v));
						}
					}
					if(noisy)
						mergedebugtell(mob,"fieldsToChange-"+CMParms.toListString(fieldsToChange));
					for(int i=0;i<fieldsToChange.size();i++)
					{
						final String field=fieldsToChange.get(i);
						if(noisy)
							mergedebugtell(mob,E.name()+" wants to change "+field+" value "+getStat(E,field)+" to "+getStat(E2,field)+"/"+(!getStat(E,field).equals(getStat(E2,field))));
						if(!getStat(E,field).equals(getStat(E2,field)))
						{
							setStat(E,field,getStat(E2,field));
							Log.sysOut("Merge","The "+CMStrings.capitalizeAndLower(field)+" field on "+E.Name()+" in "+room.roomID()+" was changed to "+getStat(E2,field)+".");
							didAnything=true;
						}
					}
				}
			}
		}
		if(didAnything)
		{
			if(E instanceof Physical)
				((Physical)E).recoverPhyStats();
			if(E instanceof MOB)
			{
				((MOB)E).recoverCharStats();
				((MOB)E).recoverMaxState();
			}
			E.text();
		}
		return didAnything;
	}

	public void sortEnumeratedList(final Enumeration<? extends Environmental> e, final List<String> allKnownFields, final StringBuffer allFieldsMsg)
	{
		for(;e.hasMoreElements();)
		{
			final Environmental E=e.nextElement();
			final String[] fields=E.getStatCodes();
			for(int x=0;x<fields.length;x++)
			{
				if(!allKnownFields.contains(fields[x]))
				{
					allKnownFields.add(fields[x]);
					allFieldsMsg.append(fields[x]+" ");
				}
			}
		}
	}

	@Override
	public boolean execute(final MOB mob, final List<String> commands, final int metaFlags)
		throws java.io.IOException
	{
		final boolean noisy=CMSecurity.isDebugging(CMSecurity.DbgFlag.MERGE);
		Vector<Places> placesToDo=new Vector<Places>();
		commands.remove(0);
		if(commands.size()==0)
		{
			mob.tell(L("Merge what? Try DATABASE or a filename"));
			return false;
		}
		if(mob.isMonster())
		{
			mob.tell(L("No can do."));
			return false;
		}
		if((commands.size()>0)&&
			commands.get(0).equalsIgnoreCase("noprompt"))
			commands.remove(0);

		if((commands.size()>0)&&
			commands.get(0).equalsIgnoreCase("?"))
		{
			final StringBuffer allFieldsMsg=new StringBuffer("");
			final Vector<String> allKnownFields=new Vector<String>();
			sortEnumeratedList(CMClass.mobTypes(),allKnownFields,allFieldsMsg);
			sortEnumeratedList(CMClass.basicItems(),allKnownFields,allFieldsMsg);
			sortEnumeratedList(CMClass.weapons(),allKnownFields,allFieldsMsg);
			sortEnumeratedList(CMClass.armor(),allKnownFields,allFieldsMsg);
			sortEnumeratedList(CMClass.clanItems(),allKnownFields,allFieldsMsg);
			sortEnumeratedList(CMClass.miscMagic(),allKnownFields,allFieldsMsg);
			sortEnumeratedList(CMClass.tech(),allKnownFields,allFieldsMsg);
			mob.tell(L("Valid field names are @x1",allFieldsMsg.toString()));
			return false;
		}
		String scope="WORLD";
		if((commands.size()>0)
		&&commands.get(0).equalsIgnoreCase("room"))
		{
			if(!CMSecurity.isAllowed(mob,mob.location(),CMSecurity.SecFlag.MERGE))
			{
				mob.tell(L("You are not allowed to do that here."));
				return false;
			}
			commands.remove(0);
			placesToDo.add(mob.location());
			scope="ROOM";
		}
		if((commands.size()>0)&&
			commands.get(0).equalsIgnoreCase("area"))
		{
			if(!CMSecurity.isAllowed(mob,mob.location(),CMSecurity.SecFlag.MERGE))
			{
				mob.tell(L("You are not allowed to do that here."));
				return false;
			}
			commands.remove(0);
			placesToDo.add(mob.location().getArea());
			scope="AREA";
		}
		if((commands.size()>0)&&
			commands.get(0).equalsIgnoreCase("world"))
		{
			if(!CMSecurity.isAllowedEverywhere(mob,CMSecurity.SecFlag.MERGE))
			{
				mob.tell(L("You are not allowed to do that."));
				return false;
			}
			commands.remove(0);
			placesToDo=new Vector<Places>();
			scope="WORLD";
		}
		if(commands.size()==0)
		{
			mob.tell(L("Merge what? DATABASE or filename"));
			return false;
		}
		String firstWord=commands.get(0);
		if(firstWord.equalsIgnoreCase("DATABASE"))
		{
			commands.remove(0);
			if(commands.size()==0)
			{
				mob.tell(L("Merge parameters missing: DBCLASS, DBSERVICE, DBUSER, DBPASS"));
				return false;
			}
			firstWord=commands.get(0);
			return doArchonDBCompare(mob, scope, firstWord, commands);
		}
		final String filename=commands.get(commands.size()-1);
		commands.remove(filename);
		final StringBuffer buf=new CMFile(filename,mob,CMFile.FLAG_LOGERRORS).text();
		if((buf==null)||(buf.length()==0))
		{
			mob.tell(L("File not found at: '@x1'!",filename));
			return false;
		}

		final List<String> changes=new Vector<String>();
		final List<String> onfields=new Vector<String>();
		final List<String> ignore=new Vector<String>();
		List<String> use=null;
		final List<String> allKnownFields=new Vector<String>();
		final List<Physical> things=new Vector<Physical>();
		boolean aremobs=false;
		if((buf.length()>20)&&(buf.substring(0,20).indexOf("<MOBS>")>=0))
		{
			if(mob.session()!=null)
				mob.session().rawPrint(L("Unpacking mobs from file: '@x1'...",filename));
			List<MOB> mobs=new Vector<MOB>();
			final String error=CMLib.coffeeMaker().addMOBsFromXML(buf.toString(),mobs,mob.session());
			things.addAll(mobs);
			mobs.clear();
			mobs=null;
			if(mob.session()!=null)
				mob.session().rawPrintln("!");
			if(error.length()>0)
			{
				mob.tell(L("An error occurred on merge: @x1",error));
				mob.tell(L("Please correct the problem and try the import again."));
				return false;
			}
			aremobs=true;
		}
		else
		if((buf.length()>20)&&(buf.substring(0,20).indexOf("<ITEMS>")>=0))
		{
			if(mob.session()!=null)
				mob.session().rawPrint(L("Unpacking items from file: '@x1'...",filename));
			List<Item> items=new Vector<Item>();
			final String error=CMLib.coffeeMaker().addItemsFromXML(buf.toString(),items,mob.session());
			things.addAll(items);
			items.clear();
			items=null;
			if(mob.session()!=null)
				mob.session().rawPrintln("!");
			if(error.length()>0)
			{
				mob.tell(L("An error occurred on merge: @x1",error));
				mob.tell(L("Please correct the problem and try the import again."));
				return false;
			}
		}
		else
		{
			mob.tell(L("Files of this type are not yet supported by MERGE.  You must merge an ITEMS or MOBS file at this time."));
			return false;
		}
		if(things.size()==0)
		{
			mob.tell(L("Nothing was found in the file to merge!"));
			return false;
		}
		final StringBuffer allFieldsMsg=new StringBuffer("");
		if(aremobs)
			sortEnumeratedList(CMClass.mobTypes(),allKnownFields,allFieldsMsg);
		else
		{
			sortEnumeratedList(CMClass.basicItems(),allKnownFields,allFieldsMsg);
			sortEnumeratedList(CMClass.weapons(),allKnownFields,allFieldsMsg);
			sortEnumeratedList(CMClass.armor(),allKnownFields,allFieldsMsg);
			sortEnumeratedList(CMClass.clanItems(),allKnownFields,allFieldsMsg);
			sortEnumeratedList(CMClass.miscMagic(),allKnownFields,allFieldsMsg);
			sortEnumeratedList(CMClass.tech(),allKnownFields,allFieldsMsg);
		}

		allKnownFields.add("REJUV");
		allFieldsMsg.append(L("REJUV "));

		for(int i=0;i<commands.size();i++)
		{
			String str=commands.get(i).toUpperCase();
			if(str.startsWith("CHANGE="))
			{
				use=changes;
				str=str.substring(7).trim();
			}
			if(str.startsWith("ON="))
			{
				use=onfields;
				str=str.substring(3).trim();
			}
			if(str.startsWith("IGNORE="))
			{
				use=ignore;
				str=str.substring(7).trim();
			}
			int x=str.indexOf(',');
			while(x>=0)
			{
				final String s=str.substring(0,x).trim();
				if(s.length()>0)
				{
					if(use==null)
					{
						mob.tell(L("'@x1' is an unknown parameter!",str));
						return false;
					}
					if(allKnownFields.contains(s))
						use.add(s);
					else
					{
						mob.tell(L("'@x1' is an unknown field name.  Valid fields include: @x2",s,allFieldsMsg.toString()));
						return false;
					}
				}
				str=str.substring(x+1).trim();
				x=str.indexOf(',');
			}
			if(str.length()>0)
			{
				if(use==null)
				{
					mob.tell(L("'@x1' is an unknown parameter!",str));
					return false;
				}
				if(allKnownFields.contains(str))
					use.add(str);
				else
				{
					mob.tell(L("'@x1' is an unknown field name.  Valid fields include: @x2",str,allFieldsMsg.toString()));
					return false;
				}
			}
		}
		if((onfields.size()==0)&&(ignore.size()==0)&&(changes.size()==0))
		{
			mob.tell(L("You must specify either an ON, CHANGES, or IGNORE parameter for valid matches to be made."));
			return false;
		}
		if(placesToDo.size()==0)
		for(final Enumeration<Area> a=CMLib.map().areas();a.hasMoreElements();)
		{
			final Area A=a.nextElement();
			if(A.getCompleteMap().hasMoreElements()
			&&CMSecurity.isAllowed(mob,(A.getCompleteMap().nextElement()),CMSecurity.SecFlag.MERGE))
				placesToDo.add(A);
		}
		if(placesToDo.size()==0)
		{
			mob.tell(L("There are no rooms to merge into!"));
			return false;
		}
		for(int i=placesToDo.size()-1;i>=0;i--)
		{
			if(placesToDo.get(i) instanceof Area)
			{
				final Area A=(Area)placesToDo.get(i);
				placesToDo.removeElement(A);
				for(final Enumeration<Room> r=A.getCompleteMap();r.hasMoreElements();)
				{
					final Room R=r.nextElement();
					if(CMSecurity.isAllowed(mob,R,CMSecurity.SecFlag.MERGE))
						placesToDo.add(R);
				}
			}
			else
			if(placesToDo.get(i) instanceof Room)
			{
				if(mob.session()!=null)
					mob.session().rawPrint(".");
			}
			else
				return false;
		}
		// now do the merge...
		if(mob.session()!=null)
			mob.session().rawPrint(L("Merging and saving..."));
		if(noisy)
			mergedebugtell(mob,"Rooms to do: "+placesToDo.size());
		if(noisy)
			mergedebugtell(mob,"Things loaded: "+things.size());
		if(noisy)
			mergedebugtell(mob,"On fields="+CMParms.toListString(onfields));
		if(noisy)
			mergedebugtell(mob,"Ignore fields="+CMParms.toListString(ignore));
		if(noisy)
			mergedebugtell(mob,"Change fields="+CMParms.toListString(changes));
		Log.sysOut("Merge",mob.Name()+" merge '"+filename+"'.");
		for(int r=0;r<placesToDo.size();r++)
		{
			Room R=(Room)placesToDo.get(r);
			if(!CMSecurity.isAllowed(mob,R,CMSecurity.SecFlag.MERGE))
				continue;
			if(R.roomID().length()==0)
				continue;
			synchronized(CMClass.getSync("SYNC"+R.roomID()))
			{
				R=CMLib.map().getRoom(R);
				final Area.State oldFlags=R.getArea().getAreaState();
				R.getArea().setAreaState(Area.State.FROZEN);
				CMLib.map().resetRoom(R);
				boolean savemobs=false;
				boolean saveitems=false;
				if(aremobs)
				{
					for(int m=0;m<R.numInhabitants();m++)
					{
						final MOB M=R.fetchInhabitant(m);
						if((M!=null)&&(M.isSavable()))
							if(tryMerge(mob,R,M,things,changes,onfields,ignore,noisy))
								savemobs=true;
					}
				}
				else
				{
					for(int i=0;i<R.numItems();i++)
					{
						final Item I=R.getItem(i);
						if((I!=null)&&(tryMerge(mob,R,I,things,changes,onfields,ignore,noisy)))
							saveitems=true;
					}
					for(int m=0;m<R.numInhabitants();m++)
					{
						final MOB M=R.fetchInhabitant(m);
						if((M!=null)&&(M.isSavable()))
						{
							for(int i=0;i<M.numItems();i++)
							{
								final Item I=M.getItem(i);
								if((I!=null)&&(tryMerge(mob,R,I,things,changes,onfields,ignore,noisy)))
									savemobs=true;
							}
							final ShopKeeper SK=CMLib.coffeeShops().getShopKeeper(M);
							if(SK!=null)
							{
								for(final Iterator<Environmental> i=SK.getShop().getStoreInventory();i.hasNext();)
								{
									final Environmental E=i.next();
									if(E instanceof Item)
									{
										final Item I=(Item)E;
										if(tryMerge(mob,R,I,things,changes,onfields,ignore,noisy))
											savemobs=true;
									}
								}
							}
						}
					}
				}
				if(saveitems)
					CMLib.database().DBUpdateItems(R);
				if(savemobs)
					CMLib.database().DBUpdateMOBs(R);
				if(mob.session()!=null)
					mob.session().rawPrint(".");
				R.getArea().setAreaState(oldFlags);
			}
		}

		if(mob.session()!=null)
			mob.session().safeRawPrintln(L("!\n\rDone!"));
		Area A=null;
		for(int i=0;i<placesToDo.size();i++)
		{
			A=((Room)placesToDo.get(i)).getArea();
			if((A!=null)&&(A.getAreaState()!=Area.State.ACTIVE))
				A.setAreaState(Area.State.ACTIVE);
		}
		return false;
	}

	private static final SHashtable<String,CMClass.CMObjectType> OBJECT_TYPES=new SHashtable<String,CMClass.CMObjectType>(new Object[][]{
			{"MOBS",CMClass.CMObjectType.MOB},
			{"ROOMS",CMClass.CMObjectType.LOCALE},
			{"ITEMS",CMClass.CMObjectType.ITEM},
			{"WEAPON",CMClass.CMObjectType.WEAPON},
			{"ARMOR",CMClass.CMObjectType.ARMOR},
	});

	private boolean amMergingType(final CMClass.CMObjectType doType, final Environmental E)
	{
		if(doType==null)
			return true;
		switch(doType)
		{
		case LOCALE:
			return true;
		case MOB:
			return E instanceof MOB;
		case ITEM:
			return E instanceof Item;
		case WEAPON:
			return E instanceof Weapon;
		case ARMOR:
			return E instanceof Armor;
		default:
			return false;
		}
	}

	private boolean amMerging(final CMClass.CMObjectType doType, final MaskingLibrary.CompiledZMask mask, final Environmental E)
	{
		if(amMergingType(doType,E))
		{
			if(mask==null)
				return true;
			return CMLib.masking().maskCheck(mask, E, true);
		}
		return false;
	}

	public boolean dbMerge(final MOB mob, final String name, final Modifiable dbM, final Modifiable M, final Set<String> ignores) throws java.io.IOException, CMException
	{
		if((M instanceof Physical) && (dbM instanceof Physical))
		{
			final Physical PM=(Physical)M;
			final Physical dbPM=(Physical)dbM;
			if(CMLib.flags().isCataloged(PM))
			{
				mob.tell(L("^H**Warning: Changes will remove this object from the catalog."));
				PM.basePhyStats().setDisposition(CMath.unsetb(PM.basePhyStats().disposition(),PhyStats.IS_CATALOGED));
			}
			if(CMLib.flags().isCataloged(dbPM))
				dbPM.basePhyStats().setDisposition(CMath.unsetb(dbPM.basePhyStats().disposition(),PhyStats.IS_CATALOGED));
			PM.image();
			dbPM.image();
		}

		final String[] statCodes = dbM.getStatCodes();
		int showFlag=-1;
		if(CMProps.getIntVar(CMProps.Int.EDITORTYPE)>0)
			showFlag=-999;
		boolean ok=false;
		boolean didSomething=false;
		while(!ok)
		{
			int showNumber=0;
			mob.tell(name);
			for(int i=0;i<statCodes.length;i++)
			{
				final String statCode = M.getStatCodes()[i];
				if(ignores.contains(statCode)||((M instanceof MOB)&&statCode.equalsIgnoreCase("INVENTORY")))
					continue;
				final String promptStr = CMStrings.capitalizeAndLower(M.getStatCodes()[i]);
				final String dbVal = dbM.getStat(statCode);
				final String loVal = M.getStat(statCode);
				if(dbVal.equals(loVal))
					continue;
				++showNumber;
				if((showFlag>0)&&(showFlag!=showNumber))
					continue;
				mob.tell(L("^H@x1. @x2\n\rValue: ^W'@x3'\n\r^HDBVal: ^N'@x4'",""+showNumber,promptStr,loVal,dbVal));
				if((showFlag!=showNumber)&&(showFlag>-999))
					continue;
				final String res=mob.session().choose(L("D)atabase Value, E)dit Value, or N)o Change, or Q)uit All: "),L("DENQ"), L("N"));
				if(res.trim().equalsIgnoreCase("N"))
					continue;
				if(res.trim().equalsIgnoreCase("Q"))
					throw new CMException("Cancelled by user.");
				didSomething=true;
				if(res.trim().equalsIgnoreCase("D"))
				{
					M.setStat(statCode,dbVal);
					continue;
				}
				M.setStat(statCode,CMLib.genEd().prompt(mob,M.getStat(statCode),++showNumber,showFlag,promptStr));
			}
			if(showNumber==0)
				return didSomething;
			if(showFlag<-900)
			{
				ok=true;
				break;
			}
			if(showFlag>0)
			{
				showFlag=-1;
				continue;
			}
			showFlag=CMath.s_int(mob.session().prompt(L("Edit which? "),""));
			if(showFlag<=0)
			{
				showFlag=-1;
				ok=true;
			}
		}
		return didSomething;
	}

	public boolean doArchonDBCompare(final MOB mob, final String scope, final String firstWord, final List<String> commands) throws java.io.IOException
	{
		CMClass.CMObjectType doType = OBJECT_TYPES.get(firstWord.toUpperCase());
		if(doType==null)
			doType = OBJECT_TYPES.get(firstWord.toUpperCase()+"S");
		if(doType!=null)
			commands.remove(0);
		else
			doType=CMClass.CMObjectType.LOCALE;

		final String theRest = CMParms.combineQuoted(commands, 0);
		DBConnector dbConnector=null;
		final String dbClass=CMParms.getParmStr(theRest,"DBCLASS","");
		final String dbService=CMParms.getParmStr(theRest,"DBSERVICE","");
		final String dbUser=CMParms.getParmStr(theRest,"DBUSER","");
		final String dbPass=CMParms.getParmStr(theRest,"DBPASS","");
		final Map<String,String> dbParms=CMParms.parseEQParms(CMParms.getParmStr(theRest, "DBPARMS",""),CMParms.spaceDelimiter,false);
		final int dbConns=CMParms.getParmInt(theRest,"DBCONNECTIONS",3);
		final int dbPingIntMins=CMParms.getParmInt(theRest,"DBPINGINTERVALMINS",30);
		final boolean dbReuse=CMParms.getParmBool(theRest,"DBREUSE",true);
		final boolean dbTransact=CMParms.getParmBool(theRest,"DBTRANSACT", false);
		final String ignore=CMParms.getParmStr(theRest,"IGNORE","");
		final String maskStr=CMParms.getParmStr(theRest,"MASK","");
		final Set<String> ignores=new SHashSet<String>(CMParms.parseCommas(ignore.toUpperCase(),true));
		final MaskingLibrary.CompiledZMask mask=CMLib.masking().maskCompile(maskStr);
		if(dbClass.length()==0)
		{
			mob.tell(L("This command requires DBCLASS= to be set."));
			return false;
		}
		if(dbService.length()==0)
		{
			mob.tell(L("This command requires DBSERVICE= to be set."));
			return false;
		}
		if(dbUser.length()==0)
		{
			mob.tell(L("This command requires DBUSER= to be set."));
			return false;
		}
		if(dbPass.length()==0)
		{
			mob.tell(L("This command requires DBPASS= to be set."));
			return false;
		}

		dbConnector=new DBConnector(dbClass,dbService,dbUser,dbPass,dbParms,dbConns,dbPingIntMins,dbReuse,dbTransact,false,false);
		dbConnector.reconnect();
		final DBInterface dbInterface = new DBInterface(dbConnector,null);

		final DBConnection DBTEST=dbConnector.DBFetch();
		if(DBTEST!=null)
			dbConnector.DBDone(DBTEST);
		mob.tell(L("Loading database rooms..."));
		final List<Room> rooms = new LinkedList<Room>();
		if((!dbConnector.amIOk())||(!dbInterface.isConnected()))
		{
			mob.tell(L("Failed to connect to database."));
			return false;
		}
		if(scope.equalsIgnoreCase("AREA"))
			rooms.addAll(Arrays.asList(dbInterface.DBReadRoomObjects(mob.location().getArea().Name(), false)));
		else
		if(scope.equalsIgnoreCase("ROOM"))
		{
			final Room R=dbInterface.DBReadRoomObject(mob.location().roomID(), false);
			if(R!=null)
				rooms.add(R);
		}
		else
		for(final Enumeration<Area> e=CMLib.map().areas();e.hasMoreElements();)
			rooms.addAll(Arrays.asList(dbInterface.DBReadRoomObjects(e.nextElement().Name(), false)));
		if(rooms.size()==0)
		{
			mob.tell(L("No rooms found."));
			return false;
		}
		for(final Room R : rooms)
			dbInterface.DBReadContent(R.roomID(),R,false);
		mob.tell(L("Data loaded, starting scan."));
		final Comparator<MOB> convM=new Comparator<MOB>()
		{
			@Override
			public int compare(final MOB arg0, final MOB arg1)
			{
				final int x=arg0.ID().compareTo(arg1.ID());
				return(x!=0)?x:arg0.Name().compareTo(arg1.Name());
			}
		};
		final Comparator<Item> convI=new Comparator<Item>()
		{
			@Override
			public int compare(final Item arg0, final Item arg1)
			{
				final int x=arg0.ID().compareTo(arg1.ID());
				return(x!=0)?x:arg0.Name().compareTo(arg1.Name());
			}
		};
		try
		{
		for(final Room dbR : rooms)
		{
			Room R=CMLib.map().getRoom(dbR.roomID());
			if(R==null)
			{
				if(doType==CMClass.CMObjectType.LOCALE)
					Log.sysOut("Merge",dbR.roomID()+" not in database");
				// import, including exits!
				continue;
			}
			synchronized(CMClass.getSync("SYNC"+dbR.roomID()))
			{
				final Area.State oldFlags=R.getArea().getAreaState();
				R.getArea().setAreaState(Area.State.FROZEN);

				boolean updateMobs=false;
				boolean updateItems=false;
				final boolean updateRoom=false;
				R=CMLib.map().getRoom(R);
				CMLib.map().resetRoom(R);
				final List<MOB> mobSetL=new Vector<MOB>();
				for(final Enumeration<MOB> e=dbR.inhabitants();e.hasMoreElements();)
					mobSetL.add(e.nextElement());
				final MOB[] mobSet=mobSetL.toArray(new MOB[0]);
				Arrays.sort(mobSet, convM);
				String lastName="";
				int ct=1;
				final HashSet<MOB> doneM=new HashSet<MOB>();
				for(final MOB dbM : mobSet)
				{
					if(!lastName.equals(dbM.Name()))
						ct=1;
					else
						ct++;
					final String rName=dbM.Name()+"."+ct;
					MOB M=null;
					int ctr=ct;
					for(final Enumeration<MOB> m = R.inhabitants();m.hasMoreElements();)
					{
						final MOB M1=m.nextElement();
						if(M1.Name().equalsIgnoreCase(dbM.Name())&&((--ctr)<=0))
						{
							M=M1;
							break;
						}
					}
					if(M==null)
					{
						if(amMerging(doType,mask,dbM)&&(!ignore.contains("MISSING")))
						{
							if(mob.session().confirm(L("MOB: @x1.@x2 not in local room.\n\rWould you like to add it (y/N)?",dbR.roomID(),rName), L("N")))
							{
								M=(MOB)dbM.copyOf();
								M.bringToLife(R, true);
								doneM.add(M);
								updateMobs=true;
								Log.sysOut("Merge",mob.Name()+" added mob "+dbR.roomID()+"."+rName);
							}
						}
					}
					else
					{
						doneM.add(M);
						if(amMerging(doType,mask,dbM))
						{
							if(!dbM.sameAs(M))
							{
								final MOB oldM=(MOB)M.copyOf();
								if((dbMerge(mob,"^MMOB "+dbR.roomID()+"."+rName+"^N",dbM,M, ignores))
								&&(!oldM.sameAs(M)))
								{
									Log.sysOut("Merge",mob.Name()+" modified mob "+dbR.roomID()+"."+rName);
									updateMobs=true;
								}
							}
						}
						final STreeSet<Item> itemSetL=new STreeSet<Item>(convI);
						for(final Enumeration<Item> e=dbM.items();e.hasMoreElements();)
							itemSetL.add(e.nextElement());
						final Item[] itemSet=itemSetL.toArray(new Item[0]);
						Arrays.sort(itemSet, convI);
						String lastIName="";
						int ict=1;
						final HashSet<Item> doneI=new HashSet<Item>();
						for(final Item dbI : itemSet)
						{
							if(!lastIName.equals(dbI.Name()))
								ict=1;
							else
								ict++;
							final String rIName=dbI.Name()+"."+ict;
							Item I=null;
							ctr=ict;
							for(final Enumeration<Item> i = M.items();i.hasMoreElements();)
							{
								final Item I1=i.nextElement();
								if(I1.Name().equalsIgnoreCase(dbI.Name())&&((--ctr)<=0))
								{
									I=I1;
									break;
								}
							}
							if(I==null)
							{
								if(amMerging(doType,mask,dbI)&&(!ignore.contains("MISSING")))
								{
									if(mob.session().confirm(L("Item: @x1.@x2.@x3 not in local room.\n\rWould you like to add it (y/N)?",dbR.roomID(),dbM.Name(),rIName), L("N")))
									{
										I=(Item)dbI.copyOf();
										M.addItem(I);
										doneI.add(I);
										final Item cI=(dbI.container()==null)?null:M.findItem(dbI.container().Name());
										if(cI instanceof Container)
											I.setContainer((Container)cI);
										updateMobs=true;
										Log.sysOut("Merge",mob.Name()+" added item "+dbR.roomID()+"."+dbM.Name()+"."+rIName);
									}
								}
							}
							else
							if(amMerging(doType,mask,dbI))
							{
								doneI.add(I);
								if(!dbI.sameAs(I))
								{
									final Item oldI=(Item)I.copyOf();
									if((dbMerge(mob,"^IITEM ^M"+dbR.roomID()+"."+dbM.Name()+"."+rIName+"^N",dbI,I, ignores))
									&&(!oldI.sameAs(I)))
									{
										Log.sysOut("Merge",mob.Name()+" modified item "+dbR.roomID()+"."+dbM.Name()+"."+rIName);
										updateMobs=true;
									}
								}
							}
							lastIName=dbI.Name();
						}
						for(final Enumeration<Item> i=M.items();i.hasMoreElements();)
						{
							final Item I=i.nextElement();
							if(amMerging(doType,mask,I)&&(!doneI.contains(I))&&(!ignore.contains("EXTRA")))
							{
								if(mob.session().confirm(L("Item: @x1.@x2.@x3 not in database.\n\rWould you like to delete it (y/N)?",R.roomID(),M.Name(),I.Name()), L("N")))
								{
									M.delItem(I);
									updateMobs=true;
									Log.sysOut("Merge",mob.Name()+" deleted item "+R.roomID()+"."+M.Name()+"."+I.Name());
								}
							}
						}
					}
					lastName=dbM.Name();
				}
				for(final Enumeration<MOB> r=R.inhabitants();r.hasMoreElements();)
				{
					final MOB M=r.nextElement();
					if(amMerging(doType,mask,M)&&(!doneM.contains(M))&&(M.isMonster())&&(!ignore.contains("EXTRA")))
					{
						if(mob.session().confirm(L("MOB: @x1.@x2 not in database.\n\rWould you like to delete it (y/N)?",R.roomID(),M.Name()), L("N")))
						{
							R.delInhabitant(M);
							updateMobs=true;
							Log.sysOut("Merge",mob.Name()+" deleted mob "+R.roomID()+"."+M.Name());
						}
					}
				}

				final STreeSet<Item> itemSetL=new STreeSet<Item>(convI);
				for(final Enumeration<Item> e=dbR.items();e.hasMoreElements();)
					itemSetL.add(e.nextElement());
				final Item[] itemSet=itemSetL.toArray(new Item[0]);
				Arrays.sort(itemSet, convI);
				lastName="";
				ct=1;
				final HashSet<Item> doneI=new HashSet<Item>();
				for(final Item dbI : itemSet)
				{
					if(!lastName.equals(dbI.Name()))
						ct=1;
					else
						ct++;
					final String rName=dbI.Name()+"."+ct;
					Item I=null;
					int ctr=ct;
					for(final Enumeration<Item> i = R.items();i.hasMoreElements();)
					{
						final Item I1=i.nextElement();
						if(I1.Name().equalsIgnoreCase(dbI.Name())&&((--ctr)<=0))
						{
							I=I1;
							break;
						}
					}
					if(I==null)
					{
						if(amMerging(doType,mask,dbI)&&(!ignore.contains("MISSING")))
						{
							if(mob.session().confirm(L("Item: @x1.@x2 not in local room.\n\rWould you like to add it (y/N)?",dbR.roomID(),rName), L("N")))
							{
								I=(Item)dbI.copyOf();
								R.addItem(I);
								doneI.add(I);
								final Item cI=(dbI.container()==null)?null:R.findItem(dbI.container().Name());
								if(cI instanceof Container)
									I.setContainer((Container)cI);
								updateItems=true;
								Log.sysOut("Merge",mob.Name()+" added item "+dbR.roomID()+"."+rName);
							}
						}
					}
					else
					if(amMerging(doType,mask,dbI))
					{
						doneI.add(I);
						if(!dbI.sameAs(I))
						{
							final Item oldI=(Item)I.copyOf();
							if((dbMerge(mob,"^IITEM "+dbR.roomID()+"."+rName+"^N",dbI,I, ignores))
							&&(!oldI.sameAs(I)))
							{
								Log.sysOut("Merge",mob.Name()+" modified item "+dbR.roomID()+"."+rName);
								updateItems=true;
							}
						}
					}
					lastName=dbI.Name();
				}
				for(final Enumeration<Item> i=R.items();i.hasMoreElements();)
				{
					final Item I=i.nextElement();
					if(amMerging(doType,mask,I)&&(!doneI.contains(I))&&(!ignore.contains("EXTRA")))
					{
						if(mob.session().confirm(L("Item: @x1.@x2 not in database.\n\rWould you like to delete it (y/N)?",R.roomID(),I.Name()), L("N")))
						{
							R.delItem(I);
							updateItems=true;
							Log.sysOut("Merge",mob.Name()+" deleted item "+R.roomID()+"."+I.Name());
						}
					}
				}
				if(updateRoom)
					CMLib.database().DBUpdateRoom(R);
				if(updateItems)
					CMLib.database().DBUpdateItems(R);
				if(updateMobs)
					CMLib.database().DBUpdateMOBs(R);
				CMLib.map().resetRoom(R);
				R.getArea().setAreaState(oldFlags);
			}
			dbR.destroy();
		}
		mob.tell(L("Done"));
		}
		catch(final CMException cme)
		{
			mob.tell(L("Cancelled."));
		}
		dbInterface.shutdown();
		return true;
	}

	@Override
	public boolean canBeOrdered()
	{
		return true;
	}

	@Override
	public boolean securityCheck(final MOB mob)
	{
		return CMSecurity.isAllowedAnywhere(mob,CMSecurity.SecFlag.MERGE);
	}

}


text:
US again signals support for Pakistan to counter TTP threat more broadly
WASHINGTON – The United States again signaled support to help Pakistan counter a resurgence of TTP violence in the South Asian country.
In a press briefing, US State Department Spokesperson Ned Price said they are fully aware of the hostage situation at a counterterrorism center in Khyber Pakhtunkhwa city.
Revealing Washington is closely following reports that terrorists seized control of a counterterrorism center in Bannu, Ned Price said we offered unconditional support to Islamabad in its battle against the terror groups including TTP, saying curbing terrorism was a shared goal of both sides.
In response to a question, he said we stand ready to assist, whether with this unfolding situation or other situations. Mr. Price also offered his deepest sympathies to those injured, urging militants to cease all acts of violence, release the hostages and end the seizure of the CTD center in northwestern Pakistan.
Besides extending support against resurgent terror threats, the US also offered to assist Pakistan, and India in resolving their differences, saying Washington would like to continue valuable partnerships with key global partners.
The US sees the significance of keeping these valuable partnerships with both friends, adding that they had a relationship in which we can be friends with both.
The US holds partnerships with Islamabad and New Delhi and that makes us not want to see soaring tensions between the two sides, he added, stressing constructive dialogue amid escalation of tensions.


This year's ROCKHARZ Open Air is taking place from July 3rd to July 6th, 2019, in 06493 Ballenstedt / Harz Mountains on the airport in Asmusstedt (www.flugplatz-ballenstedt.de). The area is located on the bottom of the Harz Mountains with a view on the famous Brocken and is big enough for a great party but also well-arranged enough for a cozy atmosphere. On arrival, please follow the signs for the airfield on site.
You can park next to your tents!
The final "Running Order" will be available soon under "Running Order" in the menu.
You can arrive on Wednesday from 8 am; or alternatively even on Tuesday, from 2 pm.
Please note: Arriving on Tuesday will be charged with an additional fee of 10, – Euro per person.
On Tuesday, the beer garden opens for you at 6 pm.
The campsite is located close to the actual festival area.
You can enter the camp ground between 2 pm and 10 pm on Tuesday. Arriving on Tuesday will be charged with an additional fee of 10, – Euro per person.
The camp ground will open on 8 am on Wednesday.
The infield's doors will be opened about 3:30 pm on Wednesday. On Sunday, the ground must be left at the latest at 1 pm.
The airfield is well-signposted and you can find a description how to get there on our homepage. Parking next to your tent is allowed as long as the weather is good; otherwise we got designated parking lots.
Please proceed according to the directions of our personal.
Larger bags and larger backpacks with multiple pockets aren't allowed on the infield. However, you can bring the following: belly bags, belt bags, ladies' handbags, camera bags of accredited photographers and single-walled or thin shopping bags such as jute bags and gym bags, that means those that are easy to check.
Traditional backpacks, laptop bags, padded shoulder bags with multiple pockets and sports bags are definitely forbidden. Same goes, of course, for suitcases, trunks, overseas containers, moving boxes, in-pocket cargo planes, container ships and trains.
Again this year, the largest beer garden in Saxony-Anhalt welcomes you with over 1,000 seats and the lovely Mutantenstadl on our ROCKHARZ-Alm.
Photo cameras are basically allowed for private purposes. HOWEVER: all cameras with interchangeable lenses are considered professional cameras and are strictly forbideen. Video cameras and tape recording devices, MD recording devices and all other audiovisual recording devices are forbidden, as well!
If we detect photographers without official accreditation (with professional equipment or for commercial purposes), we are going to delete recorded material, no matter if this material is only fotos. Filming (including digital cameras or mobile phones) is strictly forbidden as well. We reserve the right to delete or confiscate the storage medium. Additionally, one has to be prepared for a compensation claim on behalf of the artists. Offenses can be prosecuted in retrospect. Do not upload any recorded material of any band online.
PLEASE pay attention to this. We know that it is very compelling to keep memories of your time at a festival, yet we are not that much into having to face any visitor with any consequences of that kind.
There will be enough free space for everyone to find his/her own little campsite. Cars can be parked next to your tents. Camping without attendance to the festival is not allowed. Camping is free for all ticket owners. Owners of a ticket for just one day are not allowed to camp.
If you feel massively disturbed or threatened by other visitors, turn to the campsite security!
Some possibilities for buying food or breakfast can be found on the campsite, too.
Drinking horns are allowed, of course!
Camping and driving on the campsite is at your own risk.
Children up to the age of 12 (don't forget the passport) get free access to the festival with a legal guardian. Please equip your children with ear protection. We reserve the right to ban children and their legal guardian from the festival if the children aren't protected well enough.
A rock formation, next to our area, is part of the legendary Devil's Wall. You can take a walk up there to enjoy the nice view, but please do not get rid of any rubbish up there. Respect the conservation area.
Driving on the festival area or the campsite is only permitted for cars with a maximum permitted mass of 3.5 tons. Trailers (caravans) are allowed, provided that the tractor also has not more than a maximum mass of 3.5t vehicle weight. ONLY WAKING PACE FOR ALL VEHICLES!
Please leave trucks over 3.5t, Unimogs and similar vehicles at home!
Caravans (no self-built stuff!) that have more than 3.5t can be allowed, but are placed separately and may not be moved during the festival.
Generally, we ask you to move vehicles only for arrival and departure; please discuss exceptions in individual or emergency cases with the law enforcement service.
Dry ice is classified as a dangerous object and is strictly forbidden on the campsite as well as on the festival area.
Access to the festival area is only possible with a valid ticket or intact festival wristband. The festival wristband will be exchanged separately upon presentation of the valid ticket. After leaving the festival ground, visitors are only allowed to re-enter if they wear an intact and closed festival wristband around their wrists. Unlocked festival wristbands lose their validity.
When entering the festival ground, security checks can be carried out by our security staff. They are instructed to conduct a body and pocket scan on every visitor, especially when entering the festival area.
We reserve the right to refuse the entry for a visitor for important cause. Such a reason exists in particular if forbidden objects are carried along, the visitor is obviously heavily intoxicated, the visitor is obviously under the influence of drugs or the visitor has an obviously discriminatory attitude. In the case of a violation of the protection of minors, we can refuse admission as well.
…for caravans and trailers are only available at the declared spots (if they aren't available at the shop, they are sold out already). Private aggregates are allowed only when they got a whisper-quiet operation of maximum 60 db. Please do not disturb your neighbors with annoying aggregate noises.
We reserve the right to ban individual aggregates if they are disturbing other visitors.
must not be taken of during the festival.
Open fires are forbidden on the entire site! Allowed are commercial gas cookers with gas cartridges (please also note the pont "gas bottles"), solid fuel camping stoves (so-called ESBIT stoves) as well as charcoal grills, if they are used exclusively for food preparation. Due to some serious accidents, some with critically injured victims, we explicitly ask you to be careful, reasonable and proper when handling fuel and when lighting charcoal grills! Alcohol is NOT a barbecue aid! We recommend the use of non-liquid firelighters. Paraffin lamps, fire bowls, firewood and torches are prohibited!
Our rescue team is operating again. Please contact the meeting- and info-tents if you are hurt or have some sickness. At a well-accessible place, there will be a sanitary and security station that you can contact at any given problems and at any time.
Of course, all other members of our team are about to take care of your issues as well.
We take care of your comforts. Food and drinks can be found all over the area. Brought along drinks (only for private consumption and without any kind of glass) are allowed on the campsite but not on the infield. Attention: Glass is NOT allowed anywhere!
You can bring an originally sealed tetra pack with a soft drink to the infield.
Apart from that, there are free drinking water points on the festival ground and on the campsite.
as well as other dangerous objects of any kind.
If unauthorized objects are found during checks, they may have to be stored by the visitors outside of the whole festival area or moved to another area. If the visitor disclams his ownership of the forbidden objects, they will be disposed directly at the entrance to the ares.
In case of detected illegal objects, the security will immediately secure it and can hold the visitor temporarily while informing the police acc. § 127 StPO.
We urgently ask you to keep your camping space clean and tidy as well as leaving it that way when you depart. Garbage bags can be acquired for a small deposit, everybody who brings back the full garbage bags will receive not only their deposit but also a very special present.
On returning a filled garbage bag and departing from a tidied camping site, you will receive an A1 poster of the festival site shot on the festival Thursday.
Our camping grounds crew will see to it that these rules are obeyed and in extreme cases will make photographs of offending areas. So if any of you intend to bring furniture and leave it, you will have to expect us pressing charges and fining you. We sincerely ask you to use the provided rubbish bins and not just throw your trash anywhere; with this you are actively helping us prevent any kind of trouble. Thank you for this!
Compressed gas or LPG cylinders, which are used with an additional pressure reducer, are not permitted on our camping site, unless they are installed in a caravan / motorhome with appropriate protection, valid gas test certificate and TÜV. This is valid for any gas, so also for carbon dioxide, oxygen, helium, etc., and also for the operation of beverage dispensers!
We will not only check thoroughly during entrances but also send our employees to check the grounds. Please accept this and help us by not bringing anything that could break and produce dangerous shards.
We would like to point out that the ROCKHARZ OPEN AIR, especially the area in front of our stages, has a special volume and there is a risk of possible damage to health, especially hearing damage. We ensure that the visitors will not be harmed by sound levels of the individual concerts due to suitable technical equipment. We shall only be liable for hearing and health damage if we or our vicarious agents are guilty of intent or negligence, or if a duty of care is culpably not fulfilled. Barriers in the area of the stages and the loudspeaker boxes must be observed.
We recommend, besides of the mentioned points, to have a suitable ear protection like earplugs while you are close to the speakers and in front of the stages. Furthermore, we recommend to choose a place which is respective for your own listening habits. Staying close to the speakers and in front of the stages is at your own risk.
As an alternative to our campsite, there are hotels and bed and breakfasts located next to the airfield. For visitors who had a long journey or those who want to stay some time after the festival, those hotels are an attractive possibility.
The house right is exercised by us as an organizer as well as our security staff. The instructions must be followed.
It is for visitors forbidden to carry prohibited items, to exercise physical force against other visitors, the organizer's staff or other third parties, to throw objects on stage or other visitors, to urinate outside the toilets, to damage, paint or spray building structures, walls, objects, etc., to trade commercially without the explicit permission from the organizers.
You can find all kinds of merchandise at the infield.
You can find many dealers on our festival area offering a wide range of CDs, clothes, jewelry, accessoires etc.
Owners of a festival ticket are allowed to park next to their tents and campsites. Parking is included in the ticket price. Visitors for just one day can use special parking lots outside of the area. Camping on those parking lots is not allowed. Of course, nobody's going to get angry if you decide to sleep in your car after a hard night. Don't drink & drive!
Persons with disabilities (B and H) can get a free ticket for one companion at the ticket office. A separate campsite with toilet is located at the VIP Camping. We would like to point out that our festival area is nonetheless impassable.
Taking pictures on the festival ground with a small picture camera and mobile phones for the private use is permitted (please have a look at the point "cameras"). Please be aware of the privacy rights of third parties.
The production of sound and film recordings of any kind and their publication online or offline without permission of the organizers is strictly prohibited.
Program changes can occur at the festival at any time. If this happens, we are going to find a appropriate replacement. Claims in case of the cancellation of an individual band or artist, even headliners, don't exist. If any changes happen, we will inform you on our homepage: www.rockharz-festival.com immediately.
The event takes place during all kinds of weather. However, we reserve the right to cancel or temporarily interrupt the event in case of a weather-related risk for visitors. In the case of cancellation of the event due to force majeure or due to official order or court decision, there is no claim for reimbursement of the entrance fee or for compensation, unless we can be proven intent or gross negligence.
Who doesn't own a tent or isn't in the mood to carry it along and build it up, is at the right place at mein-zelt-steht-schon. You can not only rent a tent and all the attachments, but also get it built up. Thus you can arrive at ROCKHARZ, move in and start the party!
You are able to rent a toilet. Just visit our shop. If you can't find them in our shop, they are sold out.
The running order will be published about 4-6 weeks prior to the festival on our homepage.
Rockharz is a very peaceful festival and we do hope that the ladies and gentlemen of our security team won't be overworked.
Each member of our security is carrying an identification number (2-3 digits) on their work clothes. Should you be dissatisfied with any information, the way of working, the courtesy or the friendliness of individual security members, you can contact the security management via the information desk with this number to solve any difficulties in the world.
Signing Sessions will take place at the metal.de booth. We will publish the "running order" for the signing times in the festival program. Please check the times at the metal.de booth as well.
A showercamp is located next to the campsite. Showering will be possible for a tiny value.
Is not possible because of the short ways. Busses for our visitors are going to drive to Ballenstedt and further to special conditions.
A shower camp is located next to the campsite. Showering will be possible for a tiny value.
Beer, soft drinks, barbecue stuff, snacks, sweets, hygiene articles and much more are available in the supermarket.
There will be no time overlaps at any time. You are able to see any band you like.
We got a huge amount of toulets and pissoirs all over the area. Those toilets are going to be cleaned every day and the use is of course for free.
Flush-toilets can be used for a small value. You'll find them next to the shower-area.
We also have toilets for wheelchairusers. Flush-toilets on the concert area are for free.
It is forbidden, to trade with articles of all kinds.
The closest train station is located in Quedlinburg. Busses are driving directly between the train station and Assmusstedt at day time. For more exact connections, please check www.die-bahn.de.
The visitor consents irrevocably to the gratuitous use of his portraits and / or his voice in photographs, live broadcasts, broadcasts and / or recordings of image and / or sound recordings made by the organizer or its agents or other third parties in connection with the event and their subsequent use in all current or future media.
Weapons are completely prohibited on all of the grounds! We never had to deal with violence at the ROCKHARZ before and we don't intend to change this now, so we will not be letting visitors enter if they are ready to use violence as well as remove any visitors who show aggressive behavior without offering any kind of refund.
We will, of course, provide you with woven wristbands, you will be allowed onto the camping grounds with your unvoidedticket. You will receive your wristband when you first reach the festival ground at the wristband booth, please do not throw away your ticket after receiving your festival wristband.
Of course we respect the youth protection! Above all, that means: no alcohol for children and teenagers younger than 18. Please do not try to cheat any members of our team with fake-IDs. Doing so means losing your bracelet and thus leaving the festival immediately.
Police as well as child protection services will be there to check the adherence of youth protection.
Children and adolescents up to the age of 12 may only enter the infield (the actual festival area) and the camping area with a parent or legal guardian. Educational orders are not accepted. An educational person within the meaning of § 1 Abs. 1 Nr. 4 Jugendschutzgesetz is any person who is over 18 years old, as far as he or she permanently or temporarily performs educational tasks due to an agreement with the actual guardians or as far as a child or a young person as part of their education or youth welfare.
Children and adolescents from the age of 13 to 15 years are allowed to enter the infield and the campsite with the personal guardian or the educational officer. Children and adolescents under the age of 16 must leave the venue at 22:00.
Young people between the ages of 16 and 17 are only allowed to enter the infield from 24:00 onwards without the persons entitled to custody or the education officer. Without any accountable person, they have to leave the event area (infield and camping site) until midnight.
If this person is under 30, only the custody of ONE person should be transferred to them. If the person is over 30, this rule is dropped. This is to avoid that an 18-year-old takes over the responsibility for his 25 minor friends. Persons entitled to custody should be aware that only THEY are responsible for the behavior of their charges.
You can find a template for the transfer of child custody here.
All faked documents will be reported to the police.


The International Olympic Committee (IOC) announced Tuesday the appointment of Pernilla Wiberg, IOC member and IOC Athletes' Commission member, as the chairman of a seven-member Evaluation Commission to assess the projects put forward for the 1st Winter Youth Olympic Games (YOG) in 2012.
The four Candidate Cities shortlisted are Harbin, Innsbruck, Austria, Kuopio and Lillehammer.
As part of the candidature procedure the Candidate Cities will present their bids to the Evaluation Commission in September through a one-hour video conference call, which will be in two parts – a 15-20 minute verbal presentation by the city to present its bid, followed by a question and answer period.
The Evaluation Commission will submit a report to the IOC Executive Board and on the basis of the report the board will decide which shortlisted city will be selected to be submitted to a postal vote by all IOC members.
The host city for the 1st Winter Youth Olympic Games will take place in December 2008.


Arel Moodie hosts The Art of Likability podcast, which is listened to in over 135 countries. He is a contributor to Forbes and Huffington Post and has given a TEDx talk on likability. He built a million dollar business before his 30th birthday and was named to Inc. Magazine's 30 Under 30 list.