text:
package org.acra.sender;

import static org.acra.ACRA.LOG_TAG;

import java.io.IOException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import org.acra.ACRA;
import org.acra.ACRAConstants;
import org.acra.ReportField;
import org.acra.annotation.ReportsCrashes;
import org.acra.collector.CrashReportData;
import org.acra.util.HttpRequest;

import android.net.Uri;
import android.util.Log;

/**
 *

 * The {@link ReportSender} used by ACRA when {@link ReportsCrashes#formUri()}
 * has been defined in order to post crash data to a custom server-side data
 * collection script. It sends all data in a POST request with parameters named
 * with easy to understand names (basically a string conversion of
 * {@link ReportField} enum values) or based on your own conversion Map from
 * {@link ReportField} values to String.
 *

 *
 *

 * To use specific POST parameter names, you can provide your own report fields
 * mapping scheme:
 *

 *
 *

 * @ReportsCrashes(...)
 * public class myApplication extends Application {
 *
 *     public void onCreate() {
 *         ACRA.init(this);
 *         Map<ReportField, String> mapping = new HashMap<ReportField, String>();
 *         mapping.put(ReportField.APP_VERSION_CODE, "myAppVerCode');
 *         mapping.put(ReportField.APP_VERSION_NAME, "myAppVerName');
 *         //...
 *         mapping.put(ReportField.USER_EMAIL, "userEmail');
 *         // remove any default report sender
 *         ErrorReporter.getInstance().removeAllReportSenders();
 *         // create your own instance with your specific mapping
 *         ErrorReporter.getInstance().addReportSender(new ReportSender("http://my.domain.com/reports/receiver.py", mapping));
 *
 *
 *         super.onCreate();
 *     }
 * }
 *

 *
 * @author Kevin Gaudin
 *
 */
public class HttpPostSender implements ReportSender {

    private final Uri mFormUri;
    private final Map<ReportField, String> mMapping;

    /**
     *

     * Create a new HttpPostSender instance with its destination taken from
     * {@link ACRA#getConfig()} dynamically. Configuration changes to the
     * formUri are applied automatically.
     *

     *
     * @param mapping
     *            If null, POST parameters will be named with
     *            {@link ReportField} values converted to String with
     *            .toString(). If not null, POST parameters will be named with
     *            the result of mapping.get(ReportField.SOME_FIELD);
     */
    public HttpPostSender(Map<ReportField, String> mapping) {
        mFormUri = null;
        mMapping = mapping;
    }

    /**
     *

     * Create a new HttpPostSender instance with a fixed destination provided as
     * a parameter. Configuration changes to the formUri are not applied.
     *

     *
     * @param formUri
     *            The URL of your server-side crash report collection script.
     * @param mapping
     *            If null, POST parameters will be named with
     *            {@link ReportField} values converted to String with
     *            .toString(). If not null, POST parameters will be named with
     *            the result of mapping.get(ReportField.SOME_FIELD);
     */
    public HttpPostSender(String formUri, Map<ReportField, String> mapping) {
        mFormUri = Uri.parse(formUri);
        mMapping = mapping;
    }

    @Override
    public void send(CrashReportData report) throws ReportSenderException {

        try {
            final Map<String, String> finalReport = remap(report);
            final URL reportUrl = mFormUri == null ? new URL(ACRA.getConfig().formUri()) : new URL(mFormUri.toString());
            Log.d(LOG_TAG, "Connect to " + reportUrl.toString());

            final String login = isNull(ACRA.getConfig().formUriBasicAuthLogin()) ? null : ACRA.getConfig()
                    .formUriBasicAuthLogin();
            final String password = isNull(ACRA.getConfig().formUriBasicAuthPassword()) ? null : ACRA.getConfig()
                    .formUriBasicAuthPassword();

            final HttpRequest request = new HttpRequest();
            request.setConnectionTimeOut(ACRA.getConfig().connectionTimeout());
            request.setSocketTimeOut(ACRA.getConfig().socketTimeout());
            request.setMaxNrRetries(ACRA.getConfig().maxNumberOfRequestRetries());
            request.setLogin(login);
            request.setPassword(password);
            request.sendPost(reportUrl, finalReport);

        } catch (IOException e) {
            throw new ReportSenderException("Error while sending report to Http Post Form.", e);
        }
    }

    private static boolean isNull(String aString) {
        return aString == null || ACRAConstants.NULL_VALUE.equals(aString);
    }

    private Map<String, String> remap(Map<ReportField, String> report) {

        ReportField[] fields = ACRA.getConfig().customReportContent();
        if (fields.length == 0) {
            fields = ACRA.DEFAULT_REPORT_FIELDS;
        }

        final Map<String, String> finalReport = new HashMap<String, String>(report.size());
        for (ReportField field : fields) {
            if (mMapping == null || mMapping.get(field) == null) {
                finalReport.put(field.toString(), report.get(field));
            } else {
                finalReport.put(mMapping.get(field), report.get(field));
            }
        }
        return finalReport;
    }
}

redpajama_set_name: RedPajamaGithub


Abba Style Spray 8 oz available now at BeautyStoreDepot.com.
Abba Style Spray is a medium to firm hold, flexible hair spray that performs exactly as promised.
Eco-friendly, it can be reactivated with heat or water. Use it on damp or dry hair for brushable, humidity-resistant hold.
Features Grapefruit and Avocado. Pro Quinoa Complex contains quinoa, barley and soy proteins which rescue damaged hair fibers.
Mist evenly over finished style.


Do personal characteristics of manager affect Smes' Access to Bank Loan?
Do personal characteristics of manager affect Smes' Access to Bank Loan? / Campanella, Francesco; Serino, Luana. - In: INTERNATIONAL JOURNAL OF ECONOMICS, BUSINESS AND FINANCE. - ISSN 2327-8188. - 6:2(2019), pp. 1-14.
Titolo: Do personal characteristics of manager affect Smes' Access to Bank Loan?


text:
Shipwrecks You Can See!
All across the world, treacherous waters have claimed ships of all kinds, including some which have been lost to time and remain shrouded in mystery. However, there remain variety of shipwrecks which can still be seen today, whether in the waters in which they met their fate or via museum artifacts. Learn what destinations are ideal for groups looking to explore these old maritime stories of the past.
THE SHIPWRECK OF PETER IREDALE
Warrington, Oregon Coast
Having ran ashore in 1906, the Peter Iredale is now one of the most accessible shipwrecks on the West Coast. Upon low tide, groups could walk right up to the deteriorating steel wreckage and see up close a large part of the ship, which has sat unmoved on the coast for over 100 years.
GREAT LAKES SHIPWRECK MUSEUM
Paradise, Michigan
Attracting over 75,000 visitors each season, the Great Lakes Shipwreck Museum gives groups an inside look at the various shipwrecks which have occurred on Lake Superior's unrelenting waters through history. This seasonal museum also houses the bell of the famous Edmund Fitzgerald, which is displayed in the museum as a memorial to her lost crew.
TITANIC MUSEUM ATTRACTION
With locations in Pigeon Forge, Tennessee and Branson, Missouri, the Titanic Museum Attraction is the perfect interactive experience for those looking to see more than 400 real artifacts recovered directly from the ill-fated ship and its passengers. Groups could also walk a replica of the Grand Staircase and touch a real iceberg along the way.
SHIPWRECKS AT LAND'S END
Countless ships have met their fate in the San Francisco Bay over the years. Many of the area's shipwrecks have been caused by dense fog, unstable currents, strong tides and rocky shorelines—conditions which still exist and cause difficulty today. Groups could visit Land's End and see three of the over 300 ships which have sank in the area: the Ohioan, Lyman Stewart, and Frank Buck.
Written by Sarah Suydam, Managing Editor for Groups Today.
Photo courtesy of Titanic Museum Attraction.
Annapolis: Awash with September Activities
Celebrating 50 Years of Jazz & Heritage
A Different View

redpajama_set_name: RedPajamaCommonCrawl


A day after he was convicted and sentenced to five year jail term by the Supreme Court,Bollywood star Sanjay Dutt seems to have become a hot potato for the Congress leaders.Many of them may work from behind the scenes to get him out of the woods.
After Samajwadi Party MP and actress Jaya Bacchan intervened,Press Council chief Markandey Katju asked Maharashtra Governor to take appropriate action.
Subsequently, Law Minister Aswini Kumar said "Governor will use his discretionary power when there will be an appeal to him. He has the power to pardon. We should not comment on it." Then,Information and Broadcasting Minister Manish Tewari said the authorities will take cognisance of the matter at the appropriate level.
Amid the hue and cry of the politicians,there was law and its process that Dutt had to follow.As per the same,Dutt had three options.
One,he files a review petition in the Supreme Court.If he ideed did so,the same Bench of the apex court has to hear the case.
In case,the Bench rejects the review petition,Dutt can again file Curative petition in the Supreme Court.The three judge Bench will hear his case and judge the pros and cons and also find if there were any 'defect' in the judgement that was needed to be 'cured',deleted.
At the same time,since the 'crime'is the state subject,Governor of Maharashtra under Article 161 can excercise his power in relation to any person convicted of an offence against any law relating to a matter to which the executive power of his state extends.
But since Dutt was convicted under provisions of Central government's Terroist and Disruptive Act(TADA),which does not fall under the purview of the executive power of the state and as such,the Governor has no authority to pardon him.
"If Dutt approaches him for pardon,Govenor can only forward his submissions to the President who in turn can pardon him.But this will be unprecedented move in the history of Indian judiciary",observed Jharkhand High Court's eminent lawyer Rajiv Kumar Sinha.


2017 Advocacy - Family Child Care, Inc.
The 2017 Legislature made changes to background study requirements for child care to comply with the federal Child Care Development Block Grant. You will find updated frequently asked questions about child care background studies on the DHS website.
Location: Room 3148, DHS-Lafayette Building (444 Lafayette Road, St. Paul, MN 55155).
Parking: Information on parking at 444 Lafayette is available online.
RSVP: Please RSVP by email if attending in person to Becca.Branum@state.mn.us.
FCCI's is championing our "Fix-it Ticket and Exit Interview" Bill. It has been included in the Health and Human Service Omnibus Bill. This is good news and your final opportunity to advocate for its passage into law! FCCI encourages you to be a part of the final 2 weeks of the legislative process. Session ends at midnight on May 22, 2017.
FCCI along with other early education organizations do not support the proposed Universal Pre-K plan. The majority of early education organization and leaders support investing in targeted funding for children at most risk. FCCI encourages sending your own personal letter or using talking points from the sample letter below.
Several bills have been introduced to provide consistency and support to family child care programs this legislative session.
HF 1298 – Will change the negative action appeal process, so that the Administrative Judge's ruling would be final. Currently if a family childcare provider has a negative action against them and chooses to appeal the Administrative Judges ruling is only a recommendation back to DHS.
HF 1299 – Will require that county agencies and childcare providers be informed of licensing changes in a timely manner for counties to apply changes and promote compliance of new changes with childcare providers. The licensing changes must also be posted publicly online.
HF 1300 – Will define the Child Care licensing definition of "annual" modified for the purpose of clarifying "annual training" requirements. "Annual" or "annually" means during a licensing term that begins with the effective date of the license and ends the day before the date the annual license expires; not based on when the training was taken.
HF 1301 – Will Remove posted correction order if reversed from posting at provider's home and from DHS website. If the commissioner reverses or rescinds a violation in a correction order upon reconsideration, the commissioner shall issue an amended correction order and the license holder shall post the amended order. If the correction order is rescinded or reversed in full upon reconsideration, the license holder shall remove the original posted correction order.
HF1306 - Will add that a family child care provider who is also a foster care parent is eligible to receive child care assistance subsidies for a foster child during the hours the provider is providing child care or being paid to provide child care to the foster child.
HF 1311 – Will Requires county licensors to offer providers an exit interview upon completing the licensing inspection before leaving the providers home. Providers will be made aware of correction orders or potential correction orders at this time and offered technical assistance on how to come into compliance. The family child care provider can choose to opt out of the exit interview.
Will also authorize a "fix-it ticket" alternative to a correction order in certain circumstances. The "fix-it" ticket addresses minor issues that can be easily fixed. The violation must not endanger the health, safety, or rights of persons in the program and must be able to be corrected immediately or within 2 business days.
HF1329 - Will prohibit child care correction order quotas that might be placed upon licensing agencies.


Bhubaneswar : ASBM conducted its 11th Convocation in its campus at Chandaka on the 7th of April. Dr. Guru Prasad Mohapatra, IAS, Chairman, Airports Authority of India graced the occasion as the Chief Guest.
In his convocation address, he talked about the challenging role that has to be played by the youths in the face of the rapid changes that the planet is witnessing every day. He stated that India would see a new horizon by 2025 as 100,000 start ups are expected to set up creating a million opportunities for youths. While congratulating the graduating students, he advised them to comprehend the contributions being made by successful business and enterprise to civil society. He motivated the students not only to take responsible actions in shaping the society by providing true value, but also to strive to achieve impact in the long run.
The Chief Guest extolled Prof. (Dr.) Biswajeet Pattanayak, the Founder and Group Director of ASBM for his splendid and gallant endeavor in creating this world-class institution. Admiring the institute for its relentless excellence, he said that ASBM has distinguished itself as a pre-eminent institution for Business Management studies. The institute's hard work and vision has resulted in bringing out many bright students.
Dr. E. Sankara Rao, MD & CEO of IFCI Ltd., who graced the occasion as the Guest of Honour, advised the graduating students to acquire multi skill sets and to welcome the professional world with great vigor and a passionate heart. You minds are empowered to change the course of life, he added.
The Chairman of the Board of Governors of ASBM and chairman of Infinity Group, Shri Ravindra Chamaria, presided over the event. Sharing his words of wisdom, he emphasized the buried significance of challenges in life as they hold tremendous opportunities within themselves. With the quote "No gut no glory", he advised the students to become strong enough to face those challenges. He also encouraged them to stay updated with the latest developments and to utilize the infinite potentialities they have been blessed with.
Prof. (Dr.) Biswajeet Pattanayak, Founder and Director of ASBM, presented the annual report of the institute. While sharing his valuable words with the graduating students, he gave many real life inspirations like Jack Ma and Stephen Hawking to advice them to nurture optimism, confidence, determination and to rise wiser, stronger and with bigger goals. With the live example of brands, he stressed the condition of being 'relevant' in this fast changing scenario.
Ankita Parida, the student of PGDM 2016-18 batch was awarded the Infinity Gold medal as the 'Best Student' in academics and also bagged the Director's Gold Medal (sponsored by State Bank of India) as the best all-rounder student.
The Chairman of P G Council Prof. Udayan Das coordinated the programme. The session was anchored by students Swati Priyambada Nanda and Akankshya Pani, corporate leaders, media, parents, alumni attended the event.
"Ankita Parida, student of PGDM 2016-18 batch, receiving Infinity Gold Medal as best student in academics and Director's Gold Medal (sponsored by SBI) as the best all-rounder."


"We Don't Make The Rules" is a soulful gospel ballad of reflection. The song was composed by Andy Cole and sung and performed by Niki Rymple. It is from Niki's Jazz-R&B album "Waiting to Be Real".
Niki Rymple is blessed with captivating vocals and the heart to express and share messages of inspiration and reflection through her voice. She is from Trinidad & Tobago and is also currently practicing as a medical doctor in a hospital.


NetSuite "out-of-the-box" may not meet all your needs. Our customization and integration services extend NetSuite's functional and technical scope to do more, and do what you need !
Excelym offers a variety of custom apps and integration solutions, all built and optimized specifically for NetSuite. Listed below are some highlights of what you can achieve with us. Not finding what you need below? We can customize a solution with you!
SalesForce : The market leader in Customer Relationship Management (CRM), a marketing tool as well, automates sales and sales force management functions.
Shopify : An eCommerce platform that has everything you need to sell online, on social media, or in person.
Magento : An eCommerce platform built on open source technology which provides online merchants with a flexible shopping cart system, as well as control over the look, content and functionality of their online store.
Concur : SAP Concur is the leading global provider of integrated travel and expense management solutions for businesses of all sizes.
AWS DataPipeline + AWS RedShift: Provides a custom/ flexible data mining & reporting tool via a daily extraction of NetSuite data to a more flexible data manipulation tool and perform what if analysis, etc. Runs on the AWS/ Amazon Web Services cloud infrastructure.
Banking : Within your own NetSuite, be able to transact and manage ACH, Wires, UK BACS, Positive Pay, Lockbox Facility and Daily Banking Reconciliation. (eg. HSBC, etc.).
3PL/ 3rd Party Logistics : Bergen Logistics, XPO Logistics, XPO Last Mile, IntegraCore Supply Chain Management, Item Fulfillment, etc.
EDI/ Electronic Data Interchange needs in general: For example – NetSuite to your vendor's ERP to mange orders and invoicing, and other B2B transactions.
Avalara : A cloud-based software platform that provides an end-to-end suite of sales and other transactional tax compliance solutions.
CyberSource : A complete portfolio of services that simplify and automate payment operations – to process online payments/ credit card processing, streamline fraud management, and simplify payment security.


Diana is the manager of all workforce development initiatives and serves as the principal investigator on all of ATI's workforce-related research. Diana has a bachelor's degree in Education from Morris Harvey College, a master's degree in Vocational, Technical, and Adult Education from Marshall University, and a doctorate in Education from West Virginia University. She currently serves as the Co-Chair of the Transportation Research Board Committee for Education and Training and on the oversight panel for several research projects funded by the National Academies of Science. Additionally, Diana is an executive board member for the Chemical Alliance Zone, the Rotary Club of Charleston, and the Charleston Area Medical Center Foundation. When she is not serving her community, she enjoys playing golf and is proud to announce she can now break 100 on the golf course!


About Us This web site is owned and operated by Alphabet Moulds who are completely dedicated to your total satisfaction. If you have any suggestions or comments or if you need to contact us, please email us using the link on the store page or use the details below.
Delivery Schedule Orders are shipped within 1 to 2 days of receipt. Shipping using the Austrian Post office can take between 3 to 15 working days depending on the destination. Orders shipped via UPS take between 1 and 5 working days.
Back Orders We do not operate a back order system. If the item is out of stock please contact us and we will endeavour to produce stock within 2 working days.
Guarantee We guarantee your satisfaction.All of our products come with a 30 day no quibble guarantee.


Meets every Tuesday from 5:30-7 pm. Knitting Club members receive 10% off orders during club meetings!
Lorca Knitting Club is open to yarn artists of all skill levels. Join us every Tuesday at 5:30 p.m. to work on projects while enjoying food, drink, and good company!
For more information view the event on Facebook or Meetup.


At FND Trust Services, our first priority is service. We want to make sure that, whenever you (or your clients) contact us, you're able to speak to someone, in the language of your choice, who is familiar with your particular situation. We don't shuffle you around to a dozen different departments or require you to leave endless voicemails before you find someone who can help. We are part of the disability community and we know that the last thing anyone needs is a hassle about finances. That's why we try to make our process as easy and quick as possible. When a request for funds from trust is submitted, we'll make a decision within 48 hours – usually, the same day it's submitted. Nearly everyone who works with us is a parent or family member of a person with disabilities or is a person with disabilities themselves. We bring these perspectives to the service of our beneficiaries. We know how we would want to be treated and we try to treat all of beneficiaries in that way.
When our life was turned upside down in our daughter's accident we had no idea where to turn. Everyone had different ideas as to who we should trust with her money. We weren't sure who to trust as all of this was so new and overwhelming to us. But you have handled every aspect of this with dignity and respect for our family. We wouldn't be where we are today without you. Thank you so much.


Root canal therapy is undertaken to relieve pain caused by an infected root and save your natural tooth from extraction.
Previously, if the nerve tissue of a tooth became infected, the whole tooth would have to be extracted, leading to future dental complications down the track. Nowadays, root canal therapy treats the infected tissue of the nerve (also known as the pulp) which can save the tooth from extraction. In order to do this your dentist will drill down through the tooth to the infected part of the roots which will be removed. The area will then be thoroughly cleaned to prevent further infection. Once this is complete a permanent seal in the form of a filling will be required to fill in the gap left by the removal of the pulp. In some rare cases a crown may also be required to restore total strength to your tooth.
Root canal therapy is performed under local anaesthetic to minimise any sensations of pain. Contrary to popular belief, root canal therapy should not cause any more discomfort than a regular filling treatment. The team at Refresh Dental Spa will always ensure that you are comfortable during treatment.
Now you can receive a faster and more optimal root canal filling!
At Refresh Dental Spa we understand that root canal therapy isn't the most thrilling experience, which is why we have obtained the Obtura Max Pack and also the Heated Gutta Percha Condensation System, to ensure your experience is faster and more efficient. At Refresh Dental Spa we are on the forefront of changes and innovations in the dental profession and endeavour to provide our patients with the highest quality of care and service possible and achieve this by ensuring we are current with advancements in technology.
What are symptoms of infected nerve tissue?
How do teeth nerves get infected?
Your nerves can get infected because of a cavity that is untreated. This allows bacteria to travel through the tooth into the innermost part of the structure (your nerves). This will then become infected and cause pain. In order to prevent this from happening it's important that you visit your dentist twice a year. They will be able to identify and treat cavities and dental decay in the early stages so that you don't require extraction.


text:
Home ⇒ Sports ⇒ Wild Card Teams Take the World Series Stage
2014 ALCS: Kansas City Royals vs. Los Angeles Angels of Anaheim
Image Credit: Dinur
Wild Card Teams Take the World Series Stage
Oct 21, 2014 Luke Carlin 727 0 0
Two teams that were not even supposed to be in the playoffs are now at the forefront of postseason baseball. For the Kansas City Royals this is a chance to finally have a shot at the World Series title and for the San Francisco Giants, a chance to have their third world series victory within a span of five years.
For the Royals this is their first World Series appearance since winning the title 29 years ago.
To even be considered for the postseason the Royals had to go into extra innings against the Oakland Athletics to win the elimination wild card game 9-8.
The Royals had it a little easier playing against the Los Angeles Angels of Anaheim. Sweeping the Angels in the division series, winning the series 3-0 and advancing to the league series.
The league series was no different. The Royals again swept the series winning 4-0 over the Baltimore Orioles, this time advancing on to the World Series.
For the San Francisco Giants, this World Series appearance will be their third one in the past five years.
It all started with the elimination wild card game that the Giants won 8-0 over the Pittsburgh Pirates, which advanced them to the Division series against the Washington Nationals.
The division series was a little harder, dropping one game to the Nationals, the Giants still prevailed winning the series 3-1 advancing them onto the league series, and one step closer to the World Series stage.
In the League series the Giants played against the St Louis Cardinals. Again dropping one game and winning the series 4-1. This time advancing them to a shot at the World Series.
Despite both teams hard work and dedication to get to where they are, most people are going with the Kansas City Royals as the favorite to win the World Series.
The reason being is that the Royals have the coveted home field advantage which is key to any series and the four starting pitchers for the Royals have all posted a second-half FIP under 3.75.
The Royals also have an offensive advantage by having a designated hitter all throughout the season, while the Giants do not.
49ers Expected to Trade Alex Smith to Kansas City Chiefs
Phelps Returning To The Pool
Men's Water Polo Steals the #3 NAIA Ranking
Overtime Mistakes End Lions' Season
Harvest Party's New Thrill: Balport Haunted House
About Luke Carlin
I am the one and only Luke Carlin


text:
LNUF Home
Landscape Message
Hort Notes
Garden Clippings
Weed Herbarium
Professional Disease Guide
Nursery BMPs
Association Certification
Invasive Insect Certification
Invasive Plant Certification
Colored Bark Mulch
Q. There has been a lot of controversy about the use of colored wood chip mulches in landscapes. What is the problem with these mulches? Are the dyes used in coloring the wood chips safe?
A. The primary concern with colored landscape mulches is not the dyes used for coloring. Rather, it is about the sources of wood chips and the possibility of contamination with toxic substances.
Most of the wood used for making colored mulch comes from recycled wood, i.e. wood scraps, wood pallets, and wood reclaimed from construction and demolition (C&D) waste. Besides the benefits of recycling waste wood materials, the reason why these wood materials are used for colored mulches is that they are very dry and readily absorb or adsorb coloring agents. With their high moisture content, fresh wood chips do not easily absorb or adsorb the dyes commonly used for coloring. Also, mulch produced from recycled wood is not viewed as attractive as other mulches such as pine bark. This is the most compelling reason for coloring the recycled-wood mulch.
Nevertheless, it has been found that some of the recycled waste wood used for making landscape mulch products is contaminated with various chemicals, such as creosote and CCA (chromated copper arsenate). CCA, of course, is the chemical that was used in the manufacture of pressure-treated wood. With bans on arsenic-based wood preservatives in recent years, this may become less of a problem, though there is still plenty of CCA preserved wood to be found in older decks and fences. Sometimes wood pallets that have been used in the transport of chemical agents can become contaminated by spills of these chemicals. The bottom line is that CCA and other toxic chemicals have been found to be contaminating soil where colored wood chip mulch has been applied. The most egregious source of the contamination appears to CCA treated wood recycled from C&D waste.
The dyes used in coloring wood mulch are primarily of two types: carbon-based dyes and iron oxide based dyes. Iron oxide, the most commonly used dye, is simply a compound of iron and oxygen. As the compound oxidizes, iron is released to the soil but is not considered to be toxic. Iron oxide dyes are often used in the floriculture industry to dye flowers. Dyes that are not absorbed by or adsorbed to the wood would come off with contact, especially if the mulch is wet. There are some carbon-based dyes used on mulch. These carbon-based colorants are similar to those used in ink and cosmetics. At this time, there is no evidence that the dyes used to color wood chip mulch are toxic.
It should not be assumed that all colored mulches are contaminated. However, anyone planning to use colored mulch should become familiar with the supplier and the source of the wood used in making it. If C&D waste wood is used, it should be a red flag that there is a possibility of CCA contaminated mulch.
UMass does not have a lab that tests for possible contaminants in bark mulch. If you still have concerns after contacting the supplier about the source of the wood used, contact a private environmental testing lab in your area. These can be found online or in the Yellow Pages under Laboratories.
Written by: Ron Kujawski
Plant Materials
GreenInfo Mailing List »
Connect with UMass Extension Landscape, Nursery and Urban Forestry Program:


More immersive, more weird, more personal – the future of music marketing is about to get a whole lot more exciting. But, as Music Ally's director Steve Mayall noted, it's not had it's Pokemon Go moment – yet. Steve, in partnership with MOST WANTED: MUSIC, presented a new white paper at the MW:M convention yesterday in Berlin, titled "Smart and Immersive Music Marketing Trends 2018." (code: MWM18).
He explained what the ramifications of Music Ally's research on AI, voice assistants, AR/VR, and immersive environments are likely to be on music marketing with a panel of major-label and live event marketing experts: Lisa Hultengren, Creative Manager, Sony Music Sweden, Josh Saunders, Head of Tech & Creative, Warner Music Group, and Marketing Consultant Emily Scoggins, who formerly oversaw marketing at The O2 in London. (You can watch the whole panel here.
The discussion kicked off with some of today's most ambitious technology before moving onto tomorrow's – including the hitherto-secretive unicorn startup Magic Leap – and cited big-name, big-money examples of modern marketing experiences like Gorrillaz's mixed reality Humanz app and Muse's upcoming mixed-reality "Simulation Theory" world tour.
The panel then moved on to how major shifts in smart technology would impact the way marketers connected with fans, including the onrush of AI and how it will apply to music in the realm of music creation, remix, and fan communication, as well as voice control, including how users choose, discover and select music via smart speakers.
"MOST WANTED: MUSIC is structured to build new connections between technology and the music and creative industry and new knowledge as well. Our idea is to create a space for inspiration outside the box and to effect new ideas and businesses. Music Ally's white paper emphasizes which new ways in marketing are possible – and necessary", Stephan Hengst says, Director of MW:M.
MOST WANTED: MUSIC, now in its fifth year, has become the most important music business event in Berlin and one of the largest conferences for music and creative industry professionals in Germany. It is run by the Berlin Music Commission, the music industry network of Berlin.


text:
import openpyxl
from openpyxl.styles import colors, PatternFill, Font, Alignment, Border, Side
from openpyxl.utils import get_column_letter
from openpyxl.worksheet import Worksheet
from logdatatojson import LJson
import datetime
#################################################
#   Can Custom Contents
#################################################
SHEET1_NAME = "Stability Time Per Section"
SHEET2_NAME = "Completion Percentage"
ALL_SECTION_LIST= [ "Telephony",
                    "Messaging",
                    "Email",
                    "Browser",
                    "Storefront",
                    "PIM",
                    "MultiMedia",
                    "MultiTasking",
                    "MenuNavigation",
                    "WiFi",
                    "VoLTE",
                    "SMSOverIP",
                    "WFC"
                    ]
MAX_SECTION_LIST = []
DEVICE_LIST = []
DEVICENUM = 7
FILENAME="StabilityTest_Report.xlsx"

#################################################
#   FONT
#################################################
ARIAL_10_FONT = Font(name='Arial',size=10)
TAHOMA_8_FONT = Font(name='Tahoma',size=8)
TAHOMA_8_BOLD_FONT = Font(name='Tahoma', size=8, bold = True)

#################################################
#   ALIGNMENT
#################################################
CENTER_CENTER_ALIGNMENT =  Alignment(horizontal='center', vertical='center')
LEFT_CENTER_ALIGNMENT =  Alignment(horizontal='left', vertical='center')
RIGHT_CENTER_ALIGNMENT =  Alignment(horizontal='right', vertical='center')

#################################################
#   FILL: fill color
#################################################
LOOP_BG_COLOR_FILL= PatternFill(fill_type = 'solid', start_color = "00ff99db")
SECTION_BG_COLOR_FILL= PatternFill(fill_type = 'solid', start_color = "00ffff99")
SECTION_AVG_TIME_BG_COLOR_FILL = PatternFill(fill_type = 'solid', start_color = "00ffcc99")
LOOP_TIME_BG_COLOR_FILL = PatternFill(fill_type = 'solid', start_color = "00ccffff")
TITLE_BG_COLOR_FILL = PatternFill(fill_type = 'solid', start_color = "00ccffcc")
SHEET_END_BG_COLOR_FILL = PatternFill(fill_type = 'solid', start_color = "0099ccff")
SUMMARY_BG_COLOR_FILL = PatternFill(fill_type = 'solid', start_color = "00fcf304")

#################################################
#   BORDER
#################################################
TOP_THIN_BORDER = Border(top=Side(border_style='thin',color='00000000'))
BOTTOM_THIN_BORDER = Border(bottom=Side(border_style='thin',color='00000000'))
LEFT_THIN_BORDER = Border(left=Side(border_style='thin',color='00000000'))
RIGHT_THIN_BORDER = Border(right=Side(border_style='thin',color='00000000'))

#################################################
#   SET ROW COLUMN width High, Freeze panes
#################################################
wb = openpyxl.Workbook()
sheet1 = wb.active
sheet1.title = SHEET1_NAME
sheet2 = wb.create_sheet(title=SHEET2_NAME)

sheet1.column_dimensions['A'].width = 20
sheet1.column_dimensions['V'].width = 20
#sheet1.freeze_panes = "A25"

sheet2.column_dimensions['B'].width = 20

sheet1.row_dimensions.height = 11

#################################################
#   Create the Area four side_border
#################################################
def set_area_four_side_border(sheet, area, style = 'medium',color='00000000'):
    top_border = Border(top=Side(border_style=style,color=color))
    bottom_border = Border(bottom=Side(border_style=style,color=color))
    left_border = Border(left=Side(border_style=style,color=color))
    right_border = Border(right=Side(border_style=style,color=color))

    rows=sheet[area]
    if len(rows)==1:
        for cell in rows[0][1:-1]:
            cell.border = top_border + bottom_border
        rows[0][0].border =top_border + bottom_border+left_border
        rows[0][-1].border =top_border + bottom_border+right_border
    else:
        for cell in rows[0][1:-1]:
            cell.border = top_border

        for cell in rows[-1][1:-1]:
            cell.border = bottom_border

        for row in rows[1:-1]:
            row[0].border = left_border
            row[-1].border = right_border

        rows[0][0].border = top_border+left_border
        rows[0][-1].border = top_border+right_border
        rows[-1][0].border = bottom_border +left_border
        rows[-1][-1].border = bottom_border + right_border

def set_area_all_cell_four_side_border(sheet, area, style = 'thin',color='00000000'):
    rows=sheet[area]
    for row in rows:
        for cell in row:
            cell.border=get_area_four_side_border(style=style,color=color)

def set_area_all_cell(sheet, area, style = 'thin',color='00000000',value='0:00:00',font = TAHOMA_8_FONT):
    rows=sheet[area]
    for row in rows:
        for cell in row:
            cell.value = value
            cell.number_format = "[h]:mm:ss"
            cell.font = font
            cell.alignment = RIGHT_CENTER_ALIGNMENT
            cell.border=get_area_four_side_border(style=style,color=color)

def set_area_all_cell_2(sheet, area, style = 'thin',color='00000000',font=TAHOMA_8_FONT):
    rows=sheet[area]
    for row in rows:
        for cell in row:
            cell.font = font
            cell.alignment = RIGHT_CENTER_ALIGNMENT
            cell.border=get_area_four_side_border(style=style,color=color)

def get_area_four_side_border(style = 'thin',color='00000000'):
    top_border = Border(top=Side(border_style=style,color=color))
    bottom_border = Border(bottom=Side(border_style=style,color=color))
    left_border = Border(left=Side(border_style=style,color=color))
    right_border = Border(right=Side(border_style=style,color=color))
    return top_border+bottom_border+left_border+right_border

#################################################
#   Create Rights area
#################################################
def set_Rights_area(sheet):
    RIGHTS_STR = "© 2011 AT&T Intellectual Property. All rights reserved. AT&T, AT&T logo and all other marks contained herein are trademarks of AT&T Intellectual Property and/or AT&T affiliated companies."
    RIGHTS_AREA = "A3:V7"

    sheet.merge_cells(RIGHTS_AREA)
    Rights_cell = sheet[RIGHTS_AREA.split(":")[0]]
    Rights_cell.value = RIGHTS_STR
    Rights_cell.fill = SHEET_END_BG_COLOR_FILL
    Rights_cell.font = ARIAL_10_FONT
    Rights_cell.alignment=CENTER_CENTER_ALIGNMENT

    set_area_four_side_border(sheet,RIGHTS_AREA)
#################################################
#   Create Table Instructions area
#################################################
def set_Table_instructions_area(sheet, info):
    TABLE_INSTRCUCTIONS_BG_COLOR = "00ccffff" #(204,255,255)
    TABLE_INSTRCUCTIONS_AREA = 'B10:N15'

    for row, entry in enumerate(info, start=0):
        sheet.cell(row=10+row, column=2, value=entry).font = ARIAL_10_FONT

    fill = PatternFill(fill_type = 'solid', start_color = TABLE_INSTRCUCTIONS_BG_COLOR)

    for row in sheet[TABLE_INSTRCUCTIONS_AREA]:
        for cell in row:
            cell.fill = fill

    set_area_four_side_border(sheet, TABLE_INSTRCUCTIONS_AREA)

#################################################
#   Create Summary area
#################################################
def set_Loop_time_summary_area():

    for row in sheet1["B19:B21"]:
        row[0].fill = SUMMARY_BG_COLOR_FILL

    for col in xrange(1,DEVICENUM+1):
        title_cell = sheet1.cell(row=19,column=col+2)
        title_cell.fill = SUMMARY_BG_COLOR_FILL

        cell=sheet1.cell(row=20, column=col+2, value="Device"+str(col))
        cell.font=TAHOMA_8_FONT
        cell.alignment=CENTER_CENTER_ALIGNMENT

        value_cell = sheet1.cell(row=21, column=col+2)
        value_cell.number_format = "[h]:mm:ss"
        value_cell.font = TAHOMA_8_BOLD_FONT
        value_cell.alignment = CENTER_CENTER_ALIGNMENT

    end_col_letter = get_column_letter(col+2)

    sheet1.merge_cells("C19:%s19" % end_col_letter)
    #must fisrt merge cell and set border
    set_area_four_side_border(sheet1, "B19:%s21" % end_col_letter, style='thin')

    set_area_all_cell_four_side_border(sheet1, "C20:%s21" % end_col_letter)

    summary_title_cell = sheet1['C19']
    summary_title_cell.value= "Summary - Average Loop Time Per Device"
    summary_title_cell.font = TAHOMA_8_BOLD_FONT
    summary_title_cell.alignment=CENTER_CENTER_ALIGNMENT

    time_cell = sheet1['B21']
    time_cell.value = "Time"
    time_cell.font = TAHOMA_8_BOLD_FONT
    time_cell.alignment=CENTER_CENTER_ALIGNMENT
    time_cell.border = get_area_four_side_border()

    total_avg_cell = sheet1['K19']
    total_avg_cell.value = 'Total Avg'
    total_avg_cell.fill = SUMMARY_BG_COLOR_FILL
    total_avg_cell.font = TAHOMA_8_BOLD_FONT
    total_avg_cell.alignment=CENTER_CENTER_ALIGNMENT
    total_avg_cell.border = get_area_four_side_border()

    total_avg_value_cell =sheet1['K20']
    total_avg_value_cell.value = '=SUM(C21:%s21)/COUNTIF(C21:%s21,">0")' % (end_col_letter, end_col_letter)
    total_avg_value_cell.font = TAHOMA_8_FONT
    total_avg_value_cell.alignment=CENTER_CENTER_ALIGNMENT
    total_avg_value_cell.border = get_area_four_side_border()
    total_avg_value_cell.number_format = "[h]:mm:ss"

def set_Success_rate_summary_area():
    for col,section in enumerate(MAX_SECTION_LIST,start=0):
        title_cell=sheet2.cell(row=19, column=col+3)
        title_cell.fill = SUMMARY_BG_COLOR_FILL

        cell=sheet2.cell(row=20, column=col+3, value=section)
        cell.font=TAHOMA_8_FONT
        cell.alignment=Alignment(wrap_text=True, horizontal='left', vertical='top')
        cell.border = get_area_four_side_border()

        value_cell=sheet2.cell(row=21, column=col+3)
        value_cell.font = TAHOMA_8_FONT
        value_cell.alignment = CENTER_CENTER_ALIGNMENT
        value_cell.border = get_area_four_side_border()

        requirement_cell=sheet2.cell(row=22, column=col+3, value="95%")
        requirement_cell.font = TAHOMA_8_BOLD_FONT
        requirement_cell.alignment = CENTER_CENTER_ALIGNMENT
        requirement_cell.fill = LOOP_BG_COLOR_FILL
        requirement_cell.border = get_area_four_side_border()

    sheet2.merge_cells("C19:%s19" % get_column_letter(col+2))
    #must fisrt merge cell and set border
    set_area_four_side_border(sheet2, "C19:%s19" % get_column_letter(col+3), style='thin')

    summary_title_cell = sheet2['C19']
    summary_title_cell.value= "Summary - Success Rate"
    summary_title_cell.font = TAHOMA_8_BOLD_FONT
    summary_title_cell.alignment=CENTER_CENTER_ALIGNMENT

    sheet2['B19'].fill =  SUMMARY_BG_COLOR_FILL
    sheet2['B19'].border = TOP_THIN_BORDER +LEFT_THIN_BORDER
    sheet2['B20'].fill =  SUMMARY_BG_COLOR_FILL
    sheet2['B20'].border = LEFT_THIN_BORDER

    succ_rate_cell = sheet2['B21']
    succ_rate_cell.fill = SUMMARY_BG_COLOR_FILL
    succ_rate_cell.value = "Success Rate"
    succ_rate_cell.font = TAHOMA_8_BOLD_FONT
    succ_rate_cell.alignment=Alignment(wrap_text=True, horizontal='center', vertical='center')
    succ_rate_cell.border = get_area_four_side_border()

    requ_rate_cell = sheet2['B22']
    requ_rate_cell.value = "Requirement"
    requ_rate_cell.fill = SUMMARY_BG_COLOR_FILL
    requ_rate_cell.font = TAHOMA_8_BOLD_FONT
    requ_rate_cell.alignment=Alignment(wrap_text=True, horizontal='center', vertical='center')
    requ_rate_cell.border = get_area_four_side_border()

#################################################
#   Create Device Test Data Info area
#################################################
def set_Device_test_time_area(devicenum=1, start_row = 27):

    DEVICE_TITLE_ROW = start_row
    LOOP_TITLE_ROW = DEVICE_TITLE_ROW + 1
    SECTION_START_ROW = DEVICE_TITLE_ROW + 2
    AVG_COLUMN = 22

    sheet1.merge_cells("B%s:U%s" % (DEVICE_TITLE_ROW,DEVICE_TITLE_ROW))
    set_area_four_side_border(sheet1, "B%s:U%s" % (DEVICE_TITLE_ROW,DEVICE_TITLE_ROW),style='thin')
    rows = sheet1["B%s:U%s" % (DEVICE_TITLE_ROW,DEVICE_TITLE_ROW)]
    for cell in rows[0]:
        cell.fill = TITLE_BG_COLOR_FILL
    title_cell = sheet1["B%s" % DEVICE_TITLE_ROW]
    title_cell.alignment = CENTER_CENTER_ALIGNMENT
    title_cell.value =  "Device #%s - Loop Number" % devicenum
    title_cell.font = TAHOMA_8_BOLD_FONT

    for index, cell in enumerate(sheet1["B%s:U%s" % (LOOP_TITLE_ROW,LOOP_TITLE_ROW)][0], start=1):
        cell.fill = LOOP_BG_COLOR_FILL
        cell.value = index
        cell.font = TAHOMA_8_BOLD_FONT
        cell.alignment=RIGHT_CENTER_ALIGNMENT
        cell.border = get_area_four_side_border()

    pre_section_avg_title_cell=sheet1["V%s" % LOOP_TITLE_ROW]
    pre_section_avg_title_cell.value = "Average Time"
    pre_section_avg_title_cell.fill = SECTION_AVG_TIME_BG_COLOR_FILL
    pre_section_avg_title_cell.font = TAHOMA_8_BOLD_FONT
    pre_section_avg_title_cell.alignment=CENTER_CENTER_ALIGNMENT
    pre_section_avg_title_cell.border = get_area_four_side_border()

    section_cell = sheet1['A%s' % LOOP_TITLE_ROW]
    section_cell.fill = LOOP_BG_COLOR_FILL
    section_cell.value = 'Section Number'
    section_cell.font = TAHOMA_8_BOLD_FONT
    section_cell.alignment=LEFT_CENTER_ALIGNMENT
    section_cell.border = get_area_four_side_border()

    set_area_all_cell(sheet1 ,"B%s:U" % SECTION_START_ROW +str(SECTION_START_ROW+len(MAX_SECTION_LIST)-1))

    for index, section in enumerate(MAX_SECTION_LIST, start=0):
        curr_row = SECTION_START_ROW + index
        cell = sheet1.cell(row=curr_row, column=1, value=section)
        cell.fill = SECTION_BG_COLOR_FILL
        cell.font = TAHOMA_8_FONT
        cell.alignment=LEFT_CENTER_ALIGNMENT
        cell.border = get_area_four_side_border()

        for section_data in DEVICE_LIST[devicenum-1]:
            if section == section_data[0]:
                for i, module_pre_circle_time in enumerate(section_data[2], start=1):
                    cell_value = datetime.time(*map(int, module_pre_circle_time.split(":")))
                    sheet1.cell(row=curr_row, column=1+i, value=cell_value)

        avg_cell = sheet1.cell(row=curr_row, column=AVG_COLUMN, value='=SUM(B%s:U%s)/COUNTIF(B%s:U%s,">0")' % (curr_row, curr_row, curr_row, curr_row))
        avg_cell.fill = SECTION_AVG_TIME_BG_COLOR_FILL
        avg_cell.font = TAHOMA_8_FONT
        avg_cell.alignment=CENTER_CENTER_ALIGNMENT
        avg_cell.border = get_area_four_side_border()
        avg_cell.number_format = "[h]:mm:ss"

    LOOP_TIME_ROW = SECTION_START_ROW + index + 1
    LOOP_TIME_AREA = "A%s:U%s" % (LOOP_TIME_ROW, LOOP_TIME_ROW)
    for ind, cell in enumerate(sheet1[LOOP_TIME_AREA][0], start=1):
        if ind == 1:
            cell.value = "Totals"
            cell.alignment=LEFT_CENTER_ALIGNMENT
        else:
            col_letter = get_column_letter(ind)
            cell.value = '=SUM(%s%s:%s%s)' % (col_letter, SECTION_START_ROW, col_letter, LOOP_TIME_ROW-1)
            cell.alignment=RIGHT_CENTER_ALIGNMENT
            cell.number_format = "[h]:mm:ss"

        cell.fill = LOOP_TIME_BG_COLOR_FILL
        cell.font = TAHOMA_8_BOLD_FONT
        cell.border = get_area_four_side_border()

    AVG_LOOP_TIME_AREA="V%s" % LOOP_TIME_ROW
    avg_loop_time_cell = sheet1[AVG_LOOP_TIME_AREA]
    avg_loop_time_cell.value = '=SUM(%s)/COUNTIF(%s,">0")' % (LOOP_TIME_AREA, LOOP_TIME_AREA)
    avg_loop_time_cell.font = TAHOMA_8_BOLD_FONT
    avg_loop_time_cell.fill = LOOP_BG_COLOR_FILL
    avg_loop_time_cell.alignment = CENTER_CENTER_ALIGNMENT
    avg_loop_time_cell.border = get_area_four_side_border()
    avg_loop_time_cell.number_format = "[h]:mm:ss"

    return (AVG_LOOP_TIME_AREA,LOOP_TIME_ROW)

def set_Device_test_rate_area(devicenum=1, start_row = 27):
    DEVICE_TITLE_ROW = start_row
    LOOP_TITLE_ROW = DEVICE_TITLE_ROW + 1
    SECTION_START_ROW = DEVICE_TITLE_ROW + 2

    sheet2.merge_cells("D%s:W%s" % (DEVICE_TITLE_ROW,DEVICE_TITLE_ROW))
    set_area_four_side_border(sheet2, "D%s:W%s" % (DEVICE_TITLE_ROW,DEVICE_TITLE_ROW),style='thin')
    rows = sheet2["D%s:W%s" % (DEVICE_TITLE_ROW,DEVICE_TITLE_ROW)]
    for cell in rows[0]:
        cell.fill = TITLE_BG_COLOR_FILL
    title_cell = sheet2["D%s" % DEVICE_TITLE_ROW]
    title_cell.alignment = CENTER_CENTER_ALIGNMENT
    title_cell.value =  "Device #%s - Loop Number" % devicenum
    title_cell.font = TAHOMA_8_BOLD_FONT

    for index, cell in enumerate(sheet2["C%s:W%s" % (LOOP_TITLE_ROW,LOOP_TITLE_ROW)][0], start=0):
        if index == 0:
            cell.value = "Total Attempted for Every Loop"
        else:
            cell.value = "Loop %s Total Successful" % index
        cell.fill = LOOP_BG_COLOR_FILL
        cell.font = TAHOMA_8_BOLD_FONT
        cell.alignment=Alignment(wrap_text=True, horizontal='left', vertical='center')
        cell.border = get_area_four_side_border()

    for i,str in enumerate(["Total Attempted","Total Sucessful", "Success Rate"], start=0):
        ce= sheet2.cell(row=LOOP_TITLE_ROW, column=25+i,value=str)
        if i == 2:
            ce.fill = SECTION_AVG_TIME_BG_COLOR_FILL
        else:
            ce.fill = LOOP_BG_COLOR_FILL
        ce.font = TAHOMA_8_BOLD_FONT
        ce.alignment=Alignment(wrap_text=True, horizontal='left', vertical='center')
        ce.border = get_area_four_side_border()

    section_cell = sheet2['B%s' % LOOP_TITLE_ROW]
    section_cell.fill = LOOP_BG_COLOR_FILL
    section_cell.value = 'Section Number'
    section_cell.font = TAHOMA_8_BOLD_FONT
    section_cell.alignment=LEFT_CENTER_ALIGNMENT
    section_cell.border = get_area_four_side_border()

    for index, section in enumerate(MAX_SECTION_LIST, start=0):
        curr_row = SECTION_START_ROW + index
        cell = sheet2.cell(row=curr_row, column=2, value=section)
        cell.fill = SECTION_BG_COLOR_FILL
        cell.font = TAHOMA_8_FONT
        cell.alignment=LEFT_CENTER_ALIGNMENT
        cell.border = get_area_four_side_border()

        for section_data in DEVICE_LIST[devicenum-1]:
            if section == section_data[0]:
                sheet2.cell(row=curr_row, column=3, value=section_data[1])
                for i, module_pre_circle_sucetimes in enumerate(section_data[3], start=1):
                    sheet2.cell(row=curr_row, column=3+i, value=module_pre_circle_sucetimes)

        t_a_cell = sheet2.cell(row=curr_row, column=25, value='=PRODUCT(C%s,COUNT(D%s:W%s))' % (curr_row, curr_row, curr_row))
        #t_a_cell.fill = SECTION_AVG_TIME_BG_COLOR_FILL
        t_a_cell.font = TAHOMA_8_FONT
        t_a_cell.alignment=CENTER_CENTER_ALIGNMENT
        t_a_cell.border = get_area_four_side_border()

        t_s_cell = sheet2.cell(row=curr_row, column=26, value='=SUM(D%s:W%s)' % (curr_row, curr_row))
        #t_s_cell.fill = SECTION_AVG_TIME_BG_COLOR_FILL
        t_s_cell.font = TAHOMA_8_FONT
        t_s_cell.alignment=CENTER_CENTER_ALIGNMENT
        t_s_cell.border = get_area_four_side_border()

        s_r_cell = sheet2.cell(row=curr_row, column=27, value='=(Z%s/Y%s)*100' % (curr_row, curr_row))
        s_r_cell.fill = SECTION_AVG_TIME_BG_COLOR_FILL
        s_r_cell.font = TAHOMA_8_FONT
        s_r_cell.alignment=CENTER_CENTER_ALIGNMENT
        s_r_cell.border = get_area_four_side_border()

    LOOP_TIME_ROW = SECTION_START_ROW + index + 1
    LOOP_TIME_AREA = "B%s:Z%s" % (LOOP_TIME_ROW, LOOP_TIME_ROW)
    for ind, cell in enumerate(sheet2[LOOP_TIME_AREA][0], start=1):
        if ind == 1:
            cell.value = "Totals"
            cell.alignment=LEFT_CENTER_ALIGNMENT
        else:
            col_letter = get_column_letter(ind+1)
            if col_letter == 'X':
                continue
            cell.value = '=SUM(%s%s:%s%s)' % (col_letter, SECTION_START_ROW, col_letter, LOOP_TIME_ROW-1)
            cell.alignment=RIGHT_CENTER_ALIGNMENT
            #cell.number_format = "[h]:mm:ss"

        cell.fill = LOOP_TIME_BG_COLOR_FILL
        cell.font = TAHOMA_8_BOLD_FONT
        cell.border = get_area_four_side_border()

    AVG_LOOP_TIME_AREA="AA%s" % LOOP_TIME_ROW
    avg_loop_time_cell = sheet2[AVG_LOOP_TIME_AREA]
    avg_loop_time_cell.value = '=(Z%s/Y%s)*100' % (LOOP_TIME_ROW, LOOP_TIME_ROW)
    avg_loop_time_cell.font = TAHOMA_8_BOLD_FONT
    avg_loop_time_cell.fill = SECTION_AVG_TIME_BG_COLOR_FILL
    avg_loop_time_cell.alignment = CENTER_CENTER_ALIGNMENT
    avg_loop_time_cell.border = get_area_four_side_border()

    set_area_all_cell_2(sheet2 ,"C%s:W%s" % (SECTION_START_ROW ,SECTION_START_ROW+len(MAX_SECTION_LIST)-1))

    return (AVG_LOOP_TIME_AREA,LOOP_TIME_ROW)

def test_time_summary(sheet, Devices, start_row):
    for devicenum in xrange(Devices):
        a, start_row = set_Device_test_time_area(devicenum+1, start_row+3)
        sheet["%s21" % get_column_letter(devicenum+3)] = "=%s" % a

    return start_row

def test_rate_summary(sheet, Devices,start_row):
    s_row = start_row
    for devicenum in xrange(Devices):
        a, s_row = set_Device_test_rate_area(devicenum+1, s_row+3)

    l = len(MAX_SECTION_LIST)
    for section in xrange(l):
        b=()
        section_start_row = section + start_row + 5
        for devicenum in xrange(Devices):
            b = b + (section_start_row + (l+5)*devicenum,)
        Z_map = reduce(lambda x,y: x+"+"+y , map(lambda x: "Z"+str(x),b))
        Y_map = reduce(lambda x,y: x+"+"+y , map(lambda x: "Y"+str(x),b))
        sheet["%s21" % get_column_letter(section+3)] = "=SUM(%s)/SUM(%s)*100" % (Z_map, Y_map)

    return s_row

def set_Mutil_Device_test_data_area(sheet, set_handler):
    device_test_data_start_row=24
    evice_test_data_end_row = set_handler(sheet, DEVICENUM, device_test_data_start_row)
    sheet_end_row = evice_test_data_end_row+10
    end_area = "A%s:V%s" % (sheet_end_row,sheet_end_row)
    sheet.merge_cells(end_area)
    set_area_four_side_border(sheet, end_area)
    for cell in sheet[end_area][0]:
        cell.fill = SHEET_END_BG_COLOR_FILL
    sheet[end_area.split(":")[0]].value = 'AT&T Proprietary - (RESTRICTED)\nOnly for use by authorized individuals\nwithin the AT&T companies and not for general distribution'
    sheet[end_area.split(":")[0]].alignment=Alignment(wrap_text=True,horizontal='center', vertical='center')
    sheet[end_area.split(":")[0]].font = ARIAL_10_FONT
    sheet.row_dimensions[sheet_end_row].height = 72

def create_xlsx_file():
    #sheet 1
    SHEET1_TABLE_INSTRCUCTIONS_STR = [
                            "Table Instructions:",
                            "1. OEMs will need to log and record the time taken to execute each stability section for each loop for each device",
                            "2. Leave the columns for loops not executed at 0:00:00",
                            "3. Time is formatted in Hours:Minutes:Seconds",
                            ]

    SHEET2_SHEET1_TABLE_INSTRCUCTIONS_STR = [
                            "Table Instructions:",
                            "1. OEMs will need to fill in the number of events planned to be executed for eack stability test section colmun C (Total Attempted for Every Loop)",
                            "2. OEMs will need to log and record the number of events completed sucessfully for each loop in each section for each device (1-7)",
                            "3. Leave the columns for loops not executed blank",
                            "4. Example for Device #1 is below (numbers in example are not actual counts or even close)",
                            ]

    set_Rights_area(sheet1)
    set_Table_instructions_area(sheet1, SHEET1_TABLE_INSTRCUCTIONS_STR)
    set_Loop_time_summary_area()
    set_Mutil_Device_test_data_area(sheet1, test_time_summary)

    #sheet 2
    set_Rights_area(sheet2)
    set_Table_instructions_area(sheet2, SHEET2_SHEET1_TABLE_INSTRCUCTIONS_STR)
    set_Success_rate_summary_area()
    set_Mutil_Device_test_data_area(sheet2, test_rate_summary)

    wb.save(FILENAME)

def write_data_to_xlsx_file(*jsonfiles):
    global MAX_SECTION_LIST
    global DEVICE_LIST
    global DEVICENUM
    for ind , jsonfile in enumerate(jsonfiles, start=1):
        LJson.JsonLoadFromFile(jsonfile)
        data = LJson.ToJson()
        modu_data = data["ModuleData"]

        DEVICE_LIST.append([])
        section_list = DEVICE_LIST[-1]

        for pre_modu_item in modu_data:
            if pre_modu_item['PerCricleSucessTimes']:
                section_name = "5.1." + str(ALL_SECTION_LIST.index(pre_modu_item['ModuleName']))+'_'+pre_modu_item['ModuleName']
                section_list.append((section_name, pre_modu_item['TotalTimes'], pre_modu_item['PerCricleRunTime'], pre_modu_item['PerCricleSucessTimes']))
                if section_name not in MAX_SECTION_LIST:
                    MAX_SECTION_LIST.append(section_name)
        if len(section_list) <= 0:
            DEVICE_LIST.pop()

    DEVICENUM = len(DEVICE_LIST)

    create_xlsx_file()


text:
package com.ditavision.messengerengine.mmp.request;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

/**
 *
 * @author Dirk Franssen
 */
@XmlRootElement(name = "authentication")
@XmlAccessorType(XmlAccessType.FIELD)
public class MMPAuthentication {
    private String username;
    private String password;

    public MMPAuthentication() {
    }

    public MMPAuthentication(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "MMPAuthentication{" + "username=" + username + ", password=" + password + '}';
    }
}