text:
'Smart engine' shows promise for leaner, greener vehicle, say UMR researchers
Posted by news
An advanced controller is showing "promising results" by learning on-the-fly how to operate an engine cleaner and more efficiently, say researchers at the University of Missouri-Rolla.
Dr. Jagannathan Sarangapani, professor of electrical and computer engineering at UMR, and Dr. Jim Drallmeier, professor of mechanical and aerospace engineering at UMR, and their students have spent the last two years developing the controller, which may one day transform current engines into leaner, greener devices.
The researchers believe the sophisticated controller shows the most promise with exhaust gas recirculation (EGR), a technique used to reduce nitrogen oxide emissions.
Spark-ignition engines need both fuel and air to operate, Drallmeier says. "If, however, I can operate the engine in a situation where I can give it less fuel for the same amount of air or dilute the mixture with inert gases such as EGR, the engine will behave differently," Drallmeier explains. "And that's what we're doing here."
The researchers created a neural network controller that is implemented as a software program. Artificial neural networks are adaptive systems, which "learn" based on the successful connections they make between neurons or nodes. "The neural network observer part of the controller will assess the total air and fuel in a given cylinder in a given time," Sarangapani says. "It then sends that estimate to another neural network, which generates the fuel commands and tells the engine how much fuel to change each cycle."
"This controller observes what an engine cycle is doing, makes measurements in that period of time, reduces that data, and decides how you need to push the engine in the next cycle," Drallmeier explains. "It does all that before the next cycle starts. We're talking about a matter of milliseconds."
Speed is a critical component, Drallmeier says.
Significant theoretical challenges encountered during controller design must be overcome before the controller can be implemented on the hardware, Sarangapani says.
"Very limited information is known to the controller from the engine, and the controller must generate an appropriate fuel command signal per cycle while ensuring overall performance," Sarangapani explains. "The actor-critic neural network learns on-the-fly using reinforcement signals."
Although increasing EGR can reduce nitrogen oxide emissions, it can cause significant cyclic dispersion in heat release.
"Cyclic dispersion is a cycle-to-cycle variability in engine output," Drallmeier says. "A good example of people experiencing cyclic dispersion is when they're sitting in their car at a stop light and they feel their car shaking. The more EGR you can add, the lower your nitrogen oxide emissions. The question is how far can we push it and still keep cyclic dispersion in a reasonable range."
The auto industry depends on catalytic converters to meet the EPA's tight emission requirements. But there are points in an engine operation when catalytic converters don't work, such as during a cold start before the engine gets hot, Drallmeier says.
A smart controller that can reduce cyclic dispersion would open new possibilities to engine efficiency.
"The key is you're opening doors into new modes of engine operation that were not available before through sophisticated controllers," Drallmeier says. "Where future engine designs will go is multimode operation. The only way you're going to get there is through sophisticated controllers."
The National Science Foundation and the Environmental Protection Agency are jointly funding the three year, $515,000 project.
On January 27, 2006. Posted in Research


Next date: Saturday April 29th from 1-3pm!
Do you sometimes find yourself standing there in a room full of art and wondering what all the fuss is about and at the same time being a little afraid to confess that to the person standing next to you, even though that's your friend/partner/spouse, who came to the museum with you in the first place?
Do you think, holy crap, these things are here but I'm not sure what to make of them! (HELP!) Very often reading the little cards pinned to the wall next to the pieces of art don't really help do they?
And so you wander out of the museum, unsure of what to say or do, maybe head to a movie or grab a drink, relieved to be off the hook of CULTURE, hoping to silence that little voice in your head which says this would've been much more fun and interesting if only I wasn't such a dope.
By the way, YOU'RE NOT A DOPE. We could all just use a little help on figuring out how to look at all the stuff in a museum or an art gallery. Seriously.
So- If this sounds like you, you're going to love this class.
I promise that you'll have a good time and you'll realize you can form your own way of making sense of the art that fits rather intuitively with your own experience of life.
Like: how coming into contact with art can allow us to feel moved and connected with the divine.
We'll start to see that art can help us remember what is precious to us, help us establish and cultivate hope, even in very challenging times; deal with our sorrows, and so forth.
To appreciate the art and divinity in every moment, every breath. To see that each moment of seeing and perceiving, listening, touching and tasting is a moment to respond differently, from a place of an expanded sense of our own potential for the adventure that is our one and only life.
If this interests you please sign up now. I highly recommend this for loners, friends, first dates, non-dates, adventurers of all types. Introverts. Extroverts. Non-dualverts. IT specialists. Humans. I really hope to see you there, and please tell your friends and bring them with you.
We're gonna have a blast.
You will need to pay your admission to the museum. Please check coats, backpacks etc. You may bring a pencil, not a pen, into the museum and a sketchbook. You may bring cameras but no flash. Depending on the size of the group, admission price may vary. Once you register and we get closer to the date, I'll send complete details about admission fees and other essentials. You may not bring food or drinks into the museum.
Looking at art can make us feel happier and more connected.
Art helps us remember what we love and may have lost or fear to lose.
Connecting with art helps us feel more hopeful.
In challenging times art can help us deal with inevitable sorrows.
Art can help us feel centered and more peaceful.
Art helps us develop compassionate understanding of self and others.
Materials to bring A note book, blank, lined or squared and a pencil to write/sketch with. No pens allowed in the museum. Admission to the museum paid separately. Members enter free. Museum admission variable based on residency.
What will be provided Supporting handouts, before and/or after class.


20 Prettier Photograph Of Christmas Tree Locations – Through the thousand Shots on the web regarding christmas tree locations, we all selects the most option having best possible quality exclusively for you, and now this photos is actually one of photographs collections within our good-looking graphics gallery concerning 20 Prettier Photograph Of Christmas Tree Locations. I hope you will think it's wonderful.
posted by simply Gnomes at 2016-11-06 22:46:16. To come up with almost all pics in 20 Prettier Photograph Of Christmas Tree Locations pics gallery remember to bear in mind this particular our web URL.


ST. PETERSBURG, Russia -- In a potential direct challenge to the IOC and the Olympics, judo federation chief Marius Vizer plans to organize a global world championships every four years for all international sports federations.
Vizer was elected Friday as president of SportAccord, an umbrella body representing Olympic and non-Olympic sports federations. He defeated International Rugby Board chairman Bernard Lapasset of France 52-37 on the final day of the SportAccord convention in St. Petersburg.
The 56-year-old Vizer, a Romanian-born Hungarian, succeeds former cycling federation president Hein Verbruggen, who led the umbrella organization since 2004.
Vizer won on a platform of transforming SportAccord into a more powerful and lucrative body. The centerpiece of his project is to stage a "United World Championships" every four years for Olympic and non-Olympic sports.
Vizer said he plans to organize the first event in 2017 and hopes all 91 member federations take part.
"The event will be organized in a country and events divided in different cities and different regions according to the infrastructure and different facilities necessary to every sport," Vizer said. "And, of course, in a period convenient for all international federations."
The location of the first championships hasn't been determined.
"I have the intention to establish offices worldwide and one of the countries which is part of this program can also be the first organizer," Vizer said.
Vizer's event would seem to pose a threat to the International Olympic Committee and the Olympic Games. It could also conflict with existing world championships in high-profile sports such as track and field and swimming.
But Vizer, who has been president of the International Judo Federation since 2007, sought to downplay any rivalry with the IOC.
"I don't think they have to be worried because it's a different event with a different background, a different strategy," he said. "And of course we will do everything in partnership, agreement with all international sports organizations."
Vizer said he has not discussed the plans with IOC President Jacques Rogge, who steps down in September after 12 years in the job.
Rogge told reporters that Vizer's proposal goes against the position of the Association of Summer Olympic International Federations, an umbrella body of the 28 sports in the games.
"ASOIF not later than 10 days ago came up with a declaration that the international program is already too congested and that there are too many events," Rogge said. "So this is something that has to be discussed not only between the IOC and SportAccord, but also within SportAccord itself."
Rogge said he expects Vizer to meet with his successor after September's election to discuss collaboration.
Vizer described his proposed championships as a "commercial" venture to support national federations and dispelled the notion it would compete with the Olympics.
"The Olympics are something very different and special," he said. "They are the highest value which we have today in sport."
Vizer said he has been in touch with sponsors and broadcasters about the project but declined to give details.


text:
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include "sf_types.h"
#include "spp_dce2.h"
#include "sf_preproc_info.h"
#include "dce2_memory.h"
#include "dce2_list.h"
#include "dce2_utils.h"
#include "dce2_config.h"
#include "dce2_roptions.h"
#include "dce2_stats.h"
#include "dce2_event.h"
#include "dce2_paf.h"
#include "dce2_smb.h"
#include "snort_dce2.h"
#include "preprocids.h"
#include "profiler.h"
#include "sfrt.h"
#include "sf_snort_packet.h"
#include "sf_dynamic_preprocessor.h"
#include "stream_api.h"
#include <sfPolicy.h>
#include <sfPolicyUserData.h>

/********************************************************************
 * Global variables
 ********************************************************************/
#ifdef PERF_PROFILING
PreprocStats dce2_pstat_main;
PreprocStats dce2_pstat_session;
PreprocStats dce2_pstat_new_session;
PreprocStats dce2_pstat_session_state;
PreprocStats dce2_pstat_detect;
PreprocStats dce2_pstat_log;
PreprocStats dce2_pstat_smb_seg;
PreprocStats dce2_pstat_smb_req;
PreprocStats dce2_pstat_smb_uid;
PreprocStats dce2_pstat_smb_tid;
PreprocStats dce2_pstat_smb_fid;
PreprocStats dce2_pstat_smb_fingerprint;
PreprocStats dce2_pstat_smb_negotiate;
PreprocStats dce2_pstat_co_seg;
PreprocStats dce2_pstat_co_frag;
PreprocStats dce2_pstat_co_reass;
PreprocStats dce2_pstat_co_ctx;
PreprocStats dce2_pstat_cl_acts;
PreprocStats dce2_pstat_cl_frag;
PreprocStats dce2_pstat_cl_reass;
#endif

const int MAJOR_VERSION = 1;
const int MINOR_VERSION = 0;
const int BUILD_VERSION = 3;
const char *PREPROC_NAME = "SF_DCERPC2";

#define DCE2_RegisterPreprocessor DYNAMIC_PREPROC_SETUP

/********************************************************************
 * Macros
 ********************************************************************/
#ifdef PERF_PROFILING
#define DCE2_PSTAT__MAIN         "DceRpcMain"
#define DCE2_PSTAT__SESSION      "DceRpcSession"
#define DCE2_PSTAT__NEW_SESSION  "DceRpcNewSession"
#define DCE2_PSTAT__SSN_STATE    "DceRpcSessionState"
#define DCE2_PSTAT__DETECT       "DceRpcDetect"
#define DCE2_PSTAT__LOG          "DceRpcLog"
#define DCE2_PSTAT__SMB_SEG      "DceRpcSmbSeg"
#define DCE2_PSTAT__SMB_REQ      "DceRpcSmbReq"
#define DCE2_PSTAT__SMB_UID      "DceRpcSmbUid"
#define DCE2_PSTAT__SMB_TID      "DceRpcSmbTid"
#define DCE2_PSTAT__SMB_FID      "DceRpcSmbFid"
#define DCE2_PSTAT__SMB_FP       "DceRpcSmbFingerprint"
#define DCE2_PSTAT__SMB_NEG      "DceRpcSmbNegotiate"
#define DCE2_PSTAT__CO_SEG       "DceRpcCoSeg"
#define DCE2_PSTAT__CO_FRAG      "DceRpcCoFrag"
#define DCE2_PSTAT__CO_REASS     "DceRpcCoReass"
#define DCE2_PSTAT__CO_CTX       "DceRpcCoCtx"
#define DCE2_PSTAT__CL_ACTS      "DceRpcClActs"
#define DCE2_PSTAT__CL_FRAG      "DceRpcClFrag"
#define DCE2_PSTAT__CL_REASS     "DceRpcClReass"
#endif  /* PERF_PROFILING */

/********************************************************************
 * Private function prototypes
 ********************************************************************/
static void DCE2_InitGlobal(char *);
static void DCE2_InitServer(char *);
static void DCE2_CheckConfig(void);
static void DCE2_Main(void *, void *);
static void DCE2_PrintStats(int);
static void DCE2_Reset(int, void *);
static void DCE2_ResetStats(int, void *);
static void DCE2_CleanExit(int, void *);

#ifdef SNORT_RELOAD
static void DCE2_ReloadGlobal(char *);
static void DCE2_ReloadServer(char *);
static int DCE2_ReloadVerify(void);
static void * DCE2_ReloadSwap(void);
static void DCE2_ReloadSwapFree(void *);
#endif

#ifdef ENABLE_PAF
static void DCE2_AddPortsToPaf(DCE2_Config *, tSfPolicyId);
static void DCE2_ScAddPortsToPaf(void *);
#endif

/********************************************************************
 * Function: DCE2_RegisterPreprocessor()
 *
 * Purpose: Registers the DCE/RPC preprocessor with Snort
 *
 * Arguments: None
 *
 * Returns: None
 *
 ********************************************************************/
void DCE2_RegisterPreprocessor(void)
{
#ifndef SNORT_RELOAD
    _dpd.registerPreproc(DCE2_GNAME, DCE2_InitGlobal);
    _dpd.registerPreproc(DCE2_SNAME, DCE2_InitServer);
#else
    _dpd.registerPreproc(DCE2_GNAME, DCE2_InitGlobal, DCE2_ReloadGlobal,
                         DCE2_ReloadSwap, DCE2_ReloadSwapFree);
    _dpd.registerPreproc(DCE2_SNAME, DCE2_InitServer,
                         DCE2_ReloadServer, NULL, NULL);
#endif
}

/*********************************************************************
 * Function: DCE2_InitGlobal()
 *
 * Purpose: Initializes the global DCE/RPC preprocessor config.
 *
 * Arguments: snort.conf argument line for the DCE/RPC preprocessor.
 *
 * Returns: None
 *
 *********************************************************************/
static void DCE2_InitGlobal(char *args)
{
    tSfPolicyId policy_id = _dpd.getParserPolicy();
    DCE2_Config *pDefaultPolicyConfig = NULL;
    DCE2_Config *pCurrentPolicyConfig = NULL;

    if ((_dpd.streamAPI == NULL) || (_dpd.streamAPI->version != STREAM_API_VERSION5))
    {
        DCE2_Die("%s(%d) \"%s\" configuration: "
            "Stream5 must be enabled with TCP and UDP tracking.",
            *_dpd.config_file, *_dpd.config_line, DCE2_GNAME);
    }

    if (dce2_config == NULL)
    {
        dce2_config = sfPolicyConfigCreate();
        if (dce2_config == NULL)
        {
            DCE2_Die("%s(%d) \"%s\" configuration: Could not allocate memory "
                     "configuration.\n",
                     *_dpd.config_file, *_dpd.config_line, DCE2_GNAME);
        }

        DCE2_MemInit();
        DCE2_StatsInit();
        DCE2_EventsInit();

        /* Initialize reassembly packet */
        DCE2_InitRpkts();

        DCE2_SmbInitGlobals();

        _dpd.addPreprocConfCheck(DCE2_CheckConfig);
        _dpd.registerPreprocStats(DCE2_GNAME, DCE2_PrintStats);
        _dpd.addPreprocReset(DCE2_Reset, NULL, PRIORITY_LAST, PP_DCE2);
        _dpd.addPreprocResetStats(DCE2_ResetStats, NULL, PRIORITY_LAST, PP_DCE2);
        _dpd.addPreprocExit(DCE2_CleanExit, NULL, PRIORITY_LAST, PP_DCE2);

#ifdef PERF_PROFILING
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__MAIN, &dce2_pstat_main, 0, _dpd.totalPerfStats);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__SESSION, &dce2_pstat_session, 1, &dce2_pstat_main);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__NEW_SESSION, &dce2_pstat_new_session, 2, &dce2_pstat_session);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__SSN_STATE, &dce2_pstat_session_state, 2, &dce2_pstat_session);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__LOG, &dce2_pstat_log, 1, &dce2_pstat_main);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__DETECT, &dce2_pstat_detect, 1, &dce2_pstat_main);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__SMB_SEG, &dce2_pstat_smb_seg, 1, &dce2_pstat_main);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__SMB_REQ, &dce2_pstat_smb_req, 1, &dce2_pstat_main);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__SMB_UID, &dce2_pstat_smb_uid, 1, &dce2_pstat_main);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__SMB_TID, &dce2_pstat_smb_tid, 1, &dce2_pstat_main);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__SMB_FID, &dce2_pstat_smb_fid, 1, &dce2_pstat_main);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__SMB_FP, &dce2_pstat_smb_fingerprint, 1, &dce2_pstat_main);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__SMB_NEG, &dce2_pstat_smb_negotiate, 1, &dce2_pstat_main);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__CO_SEG, &dce2_pstat_co_seg, 1, &dce2_pstat_main);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__CO_FRAG, &dce2_pstat_co_frag, 1, &dce2_pstat_main);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__CO_REASS, &dce2_pstat_co_reass, 1, &dce2_pstat_main);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__CO_CTX, &dce2_pstat_co_ctx, 1, &dce2_pstat_main);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__CL_ACTS, &dce2_pstat_cl_acts, 1, &dce2_pstat_main);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__CL_FRAG, &dce2_pstat_cl_frag, 1, &dce2_pstat_main);
        _dpd.addPreprocProfileFunc(DCE2_PSTAT__CL_REASS, &dce2_pstat_cl_reass, 1, &dce2_pstat_main);
#endif

#ifdef TARGET_BASED
        dce2_proto_ids.dcerpc = _dpd.findProtocolReference(DCE2_PROTO_REF_STR__DCERPC);
        if (dce2_proto_ids.dcerpc == SFTARGET_UNKNOWN_PROTOCOL)
            dce2_proto_ids.dcerpc = _dpd.addProtocolReference(DCE2_PROTO_REF_STR__DCERPC);

        /* smb and netbios-ssn refer to the same thing */
        dce2_proto_ids.nbss = _dpd.findProtocolReference(DCE2_PROTO_REF_STR__NBSS);
        if (dce2_proto_ids.nbss == SFTARGET_UNKNOWN_PROTOCOL)
            dce2_proto_ids.nbss = _dpd.addProtocolReference(DCE2_PROTO_REF_STR__NBSS);
#endif
    }

    sfPolicyUserPolicySet(dce2_config, policy_id);
    pDefaultPolicyConfig = (DCE2_Config *)sfPolicyUserDataGetDefault(dce2_config);
    pCurrentPolicyConfig = (DCE2_Config *)sfPolicyUserDataGetCurrent(dce2_config);

    if ((policy_id != 0) && (pDefaultPolicyConfig == NULL))
    {
        DCE2_Die("%s(%d) \"%s\" configuration: Must configure default policy "
                 "if other policies are to be configured.\n",
                 *_dpd.config_file, *_dpd.config_line, DCE2_GNAME);
    }

    /* Can only do one global configuration */
    if (pCurrentPolicyConfig != NULL)
    {
        DCE2_Die("%s(%d) \"%s\" configuration: Only one global configuration can be specified.",
                 *_dpd.config_file, *_dpd.config_line, DCE2_GNAME);
    }

    DCE2_RegRuleOptions();

    pCurrentPolicyConfig = (DCE2_Config *)DCE2_Alloc(sizeof(DCE2_Config), DCE2_MEM_TYPE__CONFIG);
    sfPolicyUserDataSetCurrent(dce2_config, pCurrentPolicyConfig);

    /* Parse configuration args */
    DCE2_GlobalConfigure(pCurrentPolicyConfig, args);

    if (policy_id != 0)
        pCurrentPolicyConfig->gconfig->memcap = pDefaultPolicyConfig->gconfig->memcap;

    if ( pCurrentPolicyConfig->gconfig->disabled )
        return;

    /* Register callbacks */
    _dpd.addPreproc(DCE2_Main, PRIORITY_APPLICATION,
        PP_DCE2, PROTO_BIT__TCP | PROTO_BIT__UDP);

#ifdef TARGET_BASED
    _dpd.streamAPI->set_service_filter_status
        (dce2_proto_ids.dcerpc, PORT_MONITOR_SESSION, policy_id, 1);

    _dpd.streamAPI->set_service_filter_status
        (dce2_proto_ids.nbss, PORT_MONITOR_SESSION, policy_id, 1);
#endif
}

/*********************************************************************
 * Function: DCE2_InitServer()
 *
 * Purpose: Initializes a DCE/RPC server configuration
 *
 * Arguments: snort.conf argument line for the DCE/RPC preprocessor.
 *
 * Returns: None
 *
 *********************************************************************/
static void DCE2_InitServer(char *args)
{
    tSfPolicyId policy_id = _dpd.getParserPolicy();
    DCE2_Config *pPolicyConfig = NULL;

    sfPolicyUserPolicySet (dce2_config, policy_id);

    pPolicyConfig = (DCE2_Config *)sfPolicyUserDataGetCurrent(dce2_config);

    if ((pPolicyConfig == NULL) || (pPolicyConfig->gconfig == NULL))
    {
        DCE2_Die("%s(%d) \"%s\" configuration: \"%s\" must be configured "
                 "before \"%s\".", *_dpd.config_file, *_dpd.config_line,
                 DCE2_SNAME, DCE2_GNAME, DCE2_SNAME);
    }

    /* Parse configuration args */
    DCE2_ServerConfigure(pPolicyConfig, args);
}

static int DCE2_CheckConfigPolicy(
        tSfPolicyUserContextId config,
        tSfPolicyId policyId,
        void* pData
        )
{
    DCE2_Config *pPolicyConfig = (DCE2_Config *)pData;
    DCE2_ServerConfig *dconfig;

    if ( pPolicyConfig->gconfig->disabled )
        return 0;

    _dpd.setParserPolicy(policyId);
    // config_file/config_line are not set here
    if (!_dpd.isPreprocEnabled(PP_STREAM5))
    {
        DCE2_Die("Stream5 must be enabled with TCP and UDP tracking.");
    }

    dconfig = pPolicyConfig->dconfig;

    if (dconfig == NULL)
        DCE2_CreateDefaultServerConfig(pPolicyConfig, policyId);

#ifdef TARGET_BASED
    if (!_dpd.isAdaptiveConfigured(policyId, 1))
#endif
    {
        DCE2_ScCheckTransports(pPolicyConfig);
    }

#ifdef ENABLE_PAF
    DCE2_AddPortsToPaf(pPolicyConfig, policyId);
#endif

    /* Register routing table memory */
    if (pPolicyConfig->sconfigs != NULL)
        DCE2_RegMem(sfrt_usage(pPolicyConfig->sconfigs), DCE2_MEM_TYPE__RT);

    return 0;
}

/*********************************************************************
 * Function: DCE2_CheckConfig()
 *
 * Purpose: Verifies the DCE/RPC preprocessor configuration
 *
 * Arguments: None
 *
 * Returns: None
 *
 *********************************************************************/
static void DCE2_CheckConfig(void)
{
    sfPolicyUserDataIterate (dce2_config, DCE2_CheckConfigPolicy);
}

/*********************************************************************
 * Function: DCE2_Main()
 *
 * Purpose: Main entry point for DCE/RPC processing.
 *
 * Arguments:
 *  void * - pointer to packet structure
 *  void * - pointer to context
 *
 * Returns: None
 *
 *********************************************************************/
static void DCE2_Main(void *pkt, void *context)
{
    SFSnortPacket *p = (SFSnortPacket *)pkt;
    PROFILE_VARS;

    DEBUG_WRAP(DCE2_DebugMsg(DCE2_DEBUG__ALL, "%s\n", DCE2_DEBUG__START_MSG));

    sfPolicyUserPolicySet (dce2_config, _dpd.getRuntimePolicy());

#ifdef DEBUG_MSGS
    if (DCE2_SsnFromServer(p))
    {
        DEBUG_WRAP(DCE2_DebugMsg(DCE2_DEBUG__MAIN, "Packet from Server.\n"));
    }
    else
    {
        DEBUG_WRAP(DCE2_DebugMsg(DCE2_DEBUG__MAIN, "Packet from Client.\n"));
    }
#endif

    /* No inspection to do */
    if ((p->payload_size == 0) || (p->payload == NULL))
    {
        DEBUG_WRAP(DCE2_DebugMsg(DCE2_DEBUG__MAIN, "No payload - not inspecting.\n"));
        DEBUG_WRAP(DCE2_DebugMsg(DCE2_DEBUG__ALL, "%s\n", DCE2_DEBUG__END_MSG));
        return;
    }
    else if (p->stream_session_ptr == NULL)
    {
        DEBUG_WRAP(DCE2_DebugMsg(DCE2_DEBUG__MAIN, "No session pointer - not inspecting.\n"));
        DEBUG_WRAP(DCE2_DebugMsg(DCE2_DEBUG__ALL, "%s\n", DCE2_DEBUG__END_MSG));
        return;
    }
    else if (!IsTCP(p) && !IsUDP(p))
    {
        DEBUG_WRAP(DCE2_DebugMsg(DCE2_DEBUG__MAIN, "Not UDP or TCP - not inspecting.\n"));
        DEBUG_WRAP(DCE2_DebugMsg(DCE2_DEBUG__ALL, "%s\n", DCE2_DEBUG__END_MSG));
        return;
    }

    if (IsTCP(p))
    {
        if (DCE2_SsnIsMidstream(p))
        {
            DEBUG_WRAP(DCE2_DebugMsg(DCE2_DEBUG__MAIN, "Midstream - not inspecting.\n"));
            DEBUG_WRAP(DCE2_DebugMsg(DCE2_DEBUG__ALL, "%s\n", DCE2_DEBUG__END_MSG));
            return;
        }
        else if (!DCE2_SsnIsEstablished(p))
        {
            DEBUG_WRAP(DCE2_DebugMsg(DCE2_DEBUG__MAIN, "Not established - not inspecting.\n"));
            DEBUG_WRAP(DCE2_DebugMsg(DCE2_DEBUG__ALL, "%s\n", DCE2_DEBUG__END_MSG));
            return;
        }
    }

    PREPROC_PROFILE_START(dce2_pstat_main);

    if (DCE2_Process(p) == DCE2_RET__INSPECTED)
        DCE2_DisableDetect(p);

    PREPROC_PROFILE_END(dce2_pstat_main);

    DEBUG_WRAP(DCE2_DebugMsg(DCE2_DEBUG__ALL, "%s\n", DCE2_DEBUG__END_MSG));
}

/******************************************************************
 * Function: DCE2_PrintStats()
 *
 * Purpose: Print statistics being kept by the preprocessor.
 *
 * Arguments:
 *  int - whether Snort is exiting or not
 *
 * Returns: None
 *
 ******************************************************************/
static void DCE2_PrintStats(int exiting)
{
    int smb_com;
    int sub_com;

    _dpd.logMsg("dcerpc2 Preprocessor Statistics\n");
    _dpd.logMsg("  Total sessions: "STDu64"\n", dce2_stats.sessions);
    if (dce2_stats.sessions > 0)
    {
        if (dce2_stats.sessions_autodetected > 0)
            _dpd.logMsg("  Total sessions autodetected: "STDu64"\n", dce2_stats.sessions_autodetected);
        if (dce2_stats.sessions_aborted > 0)
            _dpd.logMsg("  Total sessions aborted: "STDu64"\n", dce2_stats.sessions_aborted);
        if (dce2_stats.bad_autodetects > 0)
            _dpd.logMsg("  Bad autodetects: "STDu64"\n", dce2_stats.bad_autodetects);
        if (dce2_stats.events > 0)
            _dpd.logMsg("  Preprocessor events: "STDu64"\n", dce2_stats.events);
#ifdef DEBUG
        {
            unsigned int port;
            int first = 1;

            for (port = 0; port < (sizeof(dce2_stats.autoports) / sizeof(dce2_stats.autoports[0])); port++)
            {
                DCE2_TransType ttype;

                for (ttype = DCE2_TRANS_TYPE__NONE; ttype < DCE2_TRANS_TYPE__MAX; ttype++)
                {
                    if ((dce2_stats.autoports[port][ttype] > 0) && (dce2_trans_strs[ttype] != NULL))
                    {
                        if (first)
                        {
                            _dpd.logMsg("\n");
                            _dpd.logMsg("  Autodetected ports:\n");
                            _dpd.logMsg("  %7s%15s%15s\n", "Port", "Transport", "Total");
                            first = 0;
                        }

                        _dpd.logMsg("  %7u%15s"FMTu64("15")"\n",
                                    port, dce2_trans_strs[ttype], dce2_stats.autoports[port][ttype]);
                    }
                }
            }
        }
#endif

        _dpd.logMsg("\n");
        _dpd.logMsg("  Transports\n");
        if (dce2_stats.smb_sessions > 0)
        {
            _dpd.logMsg("    SMB\n");
            _dpd.logMsg("      Total sessions: "STDu64"\n", dce2_stats.smb_sessions);
            _dpd.logMsg("      Packet stats\n");
            _dpd.logMsg("        Packets: "STDu64"\n", dce2_stats.smb_pkts);
            if (dce2_stats.smb_ignored_bytes > 0)
                _dpd.logMsg("        Ignored bytes: "STDu64"\n", dce2_stats.smb_ignored_bytes);
            if (dce2_stats.smb_nbss_not_message > 0)
                _dpd.logMsg("        Not NBSS Session Message: "STDu64"\n", dce2_stats.smb_nbss_not_message);
            if (dce2_stats.smb_non_ipc_packets > 0)
                _dpd.logMsg("        Not IPC packets (after tree connect): "STDu64"\n", dce2_stats.smb_non_ipc_packets);
            if (dce2_stats.smb_cli_seg_reassembled > 0)
                _dpd.logMsg("        Client TCP reassembled: "STDu64"\n", dce2_stats.smb_cli_seg_reassembled);
            if (dce2_stats.smb_srv_seg_reassembled > 0)
                _dpd.logMsg("        Server TCP reassembled: "STDu64"\n", dce2_stats.smb_srv_seg_reassembled);

            _dpd.logMsg("        Maximum outstanding requests: "STDu64"\n",
                    dce2_stats.smb_max_outstanding_requests);

            // SMB command stats
            _dpd.logMsg("        SMB command requests/responses processed\n");
            for (smb_com = 0; smb_com < SMB_MAX_NUM_COMS; smb_com++)
            {
                SmbAndXCom andx = smb_chain_map[smb_com];

                // Print out the stats for command requests
                if ((dce2_stats.smb_com_stats[SMB_TYPE__REQUEST][smb_com] != 0)
                        || (dce2_stats.smb_com_stats[SMB_TYPE__RESPONSE][smb_com] != 0))
                {
                    _dpd.logMsg("          %s (0x%02X) : "STDu64"/"STDu64"\n",
                            smb_com_strings[smb_com], smb_com,
                            dce2_stats.smb_com_stats[SMB_TYPE__REQUEST][smb_com],
                            dce2_stats.smb_com_stats[SMB_TYPE__RESPONSE][smb_com]);

                    switch (smb_com)
                    {
                        case SMB_COM_TRANSACTION:
                            for (sub_com = 0; sub_com < TRANS_SUBCOM_MAX+1; sub_com++)
                            {
                                if ((dce2_stats.smb_trans_subcom_stats[SMB_TYPE__REQUEST][sub_com] != 0)
                                        || (dce2_stats.smb_trans_subcom_stats[SMB_TYPE__RESPONSE][sub_com] != 0))
                                {
                                    _dpd.logMsg("            %s (0x%04X) : "STDu64"/"STDu64"\n",
                                            (sub_com < TRANS_SUBCOM_MAX)
                                            ? smb_transaction_sub_command_strings[sub_com] : "Unknown",
                                            sub_com,
                                            dce2_stats.smb_trans_subcom_stats[SMB_TYPE__REQUEST][sub_com],
                                            dce2_stats.smb_trans_subcom_stats[SMB_TYPE__RESPONSE][sub_com]);
                                }
                            }
                            break;
                        case SMB_COM_TRANSACTION2:
                            for (sub_com = 0; sub_com < TRANS2_SUBCOM_MAX+1; sub_com++)
                            {
                                if ((dce2_stats.smb_trans2_subcom_stats[SMB_TYPE__REQUEST][sub_com] != 0)
                                        || (dce2_stats.smb_trans2_subcom_stats[SMB_TYPE__RESPONSE][sub_com] != 0))
                                {
                                    _dpd.logMsg("            %s (0x%04X) : "STDu64"/"STDu64"\n",
                                            (sub_com < TRANS2_SUBCOM_MAX)
                                            ? smb_transaction2_sub_command_strings[sub_com] : "Unknown",
                                            sub_com,
                                            dce2_stats.smb_trans2_subcom_stats[SMB_TYPE__REQUEST][sub_com],
                                            dce2_stats.smb_trans2_subcom_stats[SMB_TYPE__RESPONSE][sub_com]);
                                }
                            }
                            break;
                        case SMB_COM_NT_TRANSACT:
                            for (sub_com = 0; sub_com < NT_TRANSACT_SUBCOM_MAX+1; sub_com++)
                            {
                                if ((dce2_stats.smb_nt_transact_subcom_stats[SMB_TYPE__REQUEST][sub_com] != 0)
                                        || (dce2_stats.smb_nt_transact_subcom_stats[SMB_TYPE__RESPONSE][sub_com] != 0))
                                {
                                    _dpd.logMsg("            %s (0x%04X) : "STDu64"/"STDu64"\n",
                                            (sub_com < NT_TRANSACT_SUBCOM_MAX)
                                            ? smb_nt_transact_sub_command_strings[sub_com] : "Unknown",
                                            sub_com,
                                            dce2_stats.smb_nt_transact_subcom_stats[SMB_TYPE__REQUEST][sub_com],
                                            dce2_stats.smb_nt_transact_subcom_stats[SMB_TYPE__RESPONSE][sub_com]);
                                }
                            }
                            break;
                        default:
                            break;
                    }
                }

                // Print out chaining stats for AndX command requests
                if (andx != SMB_ANDX_COM__NONE)
                {
                    int chained_com;

                    for (chained_com = 0; chained_com < SMB_MAX_NUM_COMS; chained_com++)
                    {
                        if ((dce2_stats.smb_chained_stats[SMB_TYPE__REQUEST][andx][chained_com] != 0)
                                || (dce2_stats.smb_chained_stats[SMB_TYPE__RESPONSE][andx][chained_com] != 0))
                        {
                            _dpd.logMsg("            => %s (0x%02X) : "STDu64"/"STDu64"\n",
                                    smb_com_strings[chained_com], chained_com,
                                    dce2_stats.smb_chained_stats[SMB_TYPE__REQUEST][andx][chained_com],
                                    dce2_stats.smb_chained_stats[SMB_TYPE__RESPONSE][andx][chained_com]);
                        }
                    }
                }
            }

#ifdef DEBUG_MSGS
            _dpd.logMsg("      Memory stats (bytes)\n");
            _dpd.logMsg("        Current total: %u\n", dce2_memory.smb_total);
            _dpd.logMsg("        Maximum total: %u\n", dce2_memory.smb_total_max);
            _dpd.logMsg("        Current session data: %u\n", dce2_memory.smb_ssn);
            _dpd.logMsg("        Maximum session data: %u\n", dce2_memory.smb_ssn_max);
            _dpd.logMsg("        Current segmentation buffering: %u\n", dce2_memory.smb_seg);
            _dpd.logMsg("        Maximum segmentation buffering: %u\n", dce2_memory.smb_seg_max);
            _dpd.logMsg("        Current uid tracking: %u\n", dce2_memory.smb_uid);
            _dpd.logMsg("        Maximum uid tracking: %u\n", dce2_memory.smb_uid_max);
            _dpd.logMsg("        Current tid tracking: %u\n", dce2_memory.smb_tid);
            _dpd.logMsg("        Maximum tid tracking: %u\n", dce2_memory.smb_tid_max);
            _dpd.logMsg("        Current fid tracking: %u\n", dce2_memory.smb_fid);
            _dpd.logMsg("        Maximum fid tracking: %u\n", dce2_memory.smb_fid_max);
            _dpd.logMsg("        Current request tracking: %u\n", dce2_memory.smb_req);
            _dpd.logMsg("        Maximum request tracking: %u\n", dce2_memory.smb_req_max);
#endif
        }

        if (dce2_stats.tcp_sessions > 0)
        {
            _dpd.logMsg("    TCP\n");
            _dpd.logMsg("      Total sessions: "STDu64"\n", dce2_stats.tcp_sessions);
            _dpd.logMsg("      Packet stats\n");
            _dpd.logMsg("        Packets: "STDu64"\n", dce2_stats.tcp_pkts);
#ifdef DEBUG_MSGS
            _dpd.logMsg("      Memory stats (bytes)\n");
            _dpd.logMsg("        Current total: %u\n", dce2_memory.tcp_total);
            _dpd.logMsg("        Maximum total: %u\n", dce2_memory.tcp_total_max);
            _dpd.logMsg("        Current session data: %u\n", dce2_memory.tcp_ssn);
            _dpd.logMsg("        Maximum session data: %u\n", dce2_memory.tcp_ssn_max);
#endif
        }

        if (dce2_stats.udp_sessions > 0)
        {
            _dpd.logMsg("    UDP\n");
            _dpd.logMsg("      Total sessions: "STDu64"\n", dce2_stats.udp_sessions);
            _dpd.logMsg("      Packet stats\n");
            _dpd.logMsg("        Packets: "STDu64"\n", dce2_stats.udp_pkts);
#ifdef DEBUG_MSGS
            _dpd.logMsg("      Memory stats (bytes)\n");
            _dpd.logMsg("        Current total: %u\n", dce2_memory.udp_total);
            _dpd.logMsg("        Maximum total: %u\n", dce2_memory.udp_total_max);
            _dpd.logMsg("        Current session data: %u\n", dce2_memory.udp_ssn);
            _dpd.logMsg("        Maximum session data: %u\n", dce2_memory.udp_ssn_max);
#endif
        }

        if ((dce2_stats.http_server_sessions > 0) || (dce2_stats.http_proxy_sessions > 0))
        {
            _dpd.logMsg("    RPC over HTTP\n");
            if (dce2_stats.http_server_sessions > 0)
                _dpd.logMsg("      Total server sessions: "STDu64"\n", dce2_stats.http_server_sessions);
            if (dce2_stats.http_proxy_sessions > 0)
                _dpd.logMsg("      Total proxy sessions: "STDu64"\n", dce2_stats.http_proxy_sessions);
            _dpd.logMsg("      Packet stats\n");
            if (dce2_stats.http_server_sessions > 0)
                _dpd.logMsg("        Server packets: "STDu64"\n", dce2_stats.http_server_pkts);
            if (dce2_stats.http_proxy_sessions > 0)
                _dpd.logMsg("        Proxy packets: "STDu64"\n", dce2_stats.http_proxy_pkts);
#ifdef DEBUG_MSGS
            _dpd.logMsg("      Memory stats (bytes)\n");
            _dpd.logMsg("        Current total: %u\n", dce2_memory.http_total);
            _dpd.logMsg("        Maximum total: %u\n", dce2_memory.http_total_max);
            _dpd.logMsg("        Current session data: %u\n", dce2_memory.http_ssn);
            _dpd.logMsg("        Maximum session data: %u\n", dce2_memory.http_ssn_max);
#endif
        }

        if ((dce2_stats.co_pdus > 0) || (dce2_stats.cl_pkts > 0))
        {
            _dpd.logMsg("\n");
            _dpd.logMsg("  DCE/RPC\n");
            if (dce2_stats.co_pdus > 0)
            {
                _dpd.logMsg("    Connection oriented\n");
                _dpd.logMsg("      Packet stats\n");
                _dpd.logMsg("        PDUs: "STDu64"\n", dce2_stats.co_pdus);
                if ((dce2_stats.co_bind > 0) || (dce2_stats.co_bind_ack > 0))
                {
                    _dpd.logMsg("          Bind: "STDu64"\n", dce2_stats.co_bind);
                    _dpd.logMsg("          Bind Ack: "STDu64"\n", dce2_stats.co_bind_ack);
                }
                if ((dce2_stats.co_alter_ctx > 0) || (dce2_stats.co_alter_ctx_resp > 0))
                {
                    _dpd.logMsg("          Alter context: "STDu64"\n", dce2_stats.co_alter_ctx);
                    _dpd.logMsg("          Alter context response: "STDu64"\n", dce2_stats.co_alter_ctx_resp);
                }
                if (dce2_stats.co_bind_nack > 0)
                    _dpd.logMsg("          Bind Nack: "STDu64"\n", dce2_stats.co_bind_nack);
                if ((dce2_stats.co_request > 0) || (dce2_stats.co_response > 0))
                {
                    _dpd.logMsg("          Request: "STDu64"\n", dce2_stats.co_request);
                    _dpd.logMsg("          Response: "STDu64"\n", dce2_stats.co_response);
                }
                if (dce2_stats.co_fault > 0)
                    _dpd.logMsg("          Fault: "STDu64"\n", dce2_stats.co_fault);
                if (dce2_stats.co_reject > 0)
                    _dpd.logMsg("          Reject: "STDu64"\n", dce2_stats.co_reject);
                if (dce2_stats.co_auth3 > 0)
                    _dpd.logMsg("          Auth3: "STDu64"\n", dce2_stats.co_auth3);
                if (dce2_stats.co_shutdown > 0)
                    _dpd.logMsg("          Shutdown: "STDu64"\n", dce2_stats.co_shutdown);
                if (dce2_stats.co_cancel > 0)
                    _dpd.logMsg("          Cancel: "STDu64"\n", dce2_stats.co_cancel);
                if (dce2_stats.co_orphaned > 0)
                    _dpd.logMsg("          Orphaned: "STDu64"\n", dce2_stats.co_orphaned);
                if (dce2_stats.co_ms_pdu > 0)
                    _dpd.logMsg("          Microsoft Request To Send RPC over HTTP: "STDu64"\n", dce2_stats.co_ms_pdu);
                if (dce2_stats.co_other_req > 0)
                    _dpd.logMsg("          Other request type: "STDu64"\n", dce2_stats.co_other_req);
                if (dce2_stats.co_other_resp > 0)
                    _dpd.logMsg("          Other response type: "STDu64"\n", dce2_stats.co_other_resp);
                _dpd.logMsg("        Request fragments: "STDu64"\n", dce2_stats.co_req_fragments);
                if (dce2_stats.co_req_fragments > 0)
                {
                    _dpd.logMsg("          Min fragment size: "STDu64"\n", dce2_stats.co_cli_min_frag_size);
                    _dpd.logMsg("          Max fragment size: "STDu64"\n", dce2_stats.co_cli_max_frag_size);
                    _dpd.logMsg("          Frag reassembled: "STDu64"\n", dce2_stats.co_cli_frag_reassembled);
                }
                _dpd.logMsg("        Response fragments: "STDu64"\n", dce2_stats.co_resp_fragments);
                if (dce2_stats.co_resp_fragments > 0)
                {
                    _dpd.logMsg("          Min fragment size: "STDu64"\n", dce2_stats.co_srv_min_frag_size);
                    _dpd.logMsg("          Max fragment size: "STDu64"\n", dce2_stats.co_srv_max_frag_size);
                    _dpd.logMsg("          Frag reassembled: "STDu64"\n", dce2_stats.co_srv_frag_reassembled);
                }
                _dpd.logMsg("        Client PDU segmented reassembled: "STDu64"\n",
                        dce2_stats.co_cli_seg_reassembled);
                _dpd.logMsg("        Server PDU segmented reassembled: "STDu64"\n",
                        dce2_stats.co_srv_seg_reassembled);
#ifdef DEBUG_MSGS
                _dpd.logMsg("      Memory stats (bytes)\n");
                _dpd.logMsg("        Current segmentation buffering: %u\n", dce2_memory.co_seg);
                _dpd.logMsg("        Maximum segmentation buffering: %u\n", dce2_memory.co_seg_max);
                _dpd.logMsg("        Current fragment tracker: %u\n", dce2_memory.co_frag);
                _dpd.logMsg("        Maximum fragment tracker: %u\n", dce2_memory.co_frag_max);
                _dpd.logMsg("        Current context tracking: %u\n", dce2_memory.co_ctx);
                _dpd.logMsg("        Maximum context tracking: %u\n", dce2_memory.co_ctx_max);
#endif
            }

            if (dce2_stats.cl_pkts > 0)
            {
                _dpd.logMsg("    Connectionless\n");
                _dpd.logMsg("      Packet stats\n");
                _dpd.logMsg("        Packets: "STDu64"\n", dce2_stats.cl_pkts);
                if ((dce2_stats.cl_request > 0) || (dce2_stats.cl_response > 0))
                {
                    _dpd.logMsg("        Request: "STDu64"\n", dce2_stats.cl_request);
                    _dpd.logMsg("        Response: "STDu64"\n", dce2_stats.cl_response);
                }
                if (dce2_stats.cl_ack > 0)
                    _dpd.logMsg("        Ack: "STDu64"\n", dce2_stats.cl_ack);
                if (dce2_stats.cl_cancel > 0)
                    _dpd.logMsg("        Cancel: "STDu64"\n", dce2_stats.cl_cancel);
                if (dce2_stats.cl_cli_fack > 0)
                    _dpd.logMsg("        Client Fack: "STDu64"\n", dce2_stats.cl_cli_fack);
                if (dce2_stats.cl_ping > 0)
                    _dpd.logMsg("        Ping: "STDu64"\n", dce2_stats.cl_ping);
                if (dce2_stats.cl_reject > 0)
                    _dpd.logMsg("        Reject: "STDu64"\n", dce2_stats.cl_reject);
                if (dce2_stats.cl_cancel_ack > 0)
                    _dpd.logMsg("        Cancel Ack: "STDu64"\n", dce2_stats.cl_cancel_ack);
                if (dce2_stats.cl_srv_fack > 0)
                    _dpd.logMsg("        Server Fack: "STDu64"\n", dce2_stats.cl_srv_fack);
                if (dce2_stats.cl_fault > 0)
                    _dpd.logMsg("        Fault: "STDu64"\n", dce2_stats.cl_fault);
                if (dce2_stats.cl_nocall > 0)
                    _dpd.logMsg("        NoCall: "STDu64"\n", dce2_stats.cl_nocall);
                if (dce2_stats.cl_working > 0)
                    _dpd.logMsg("        Working: "STDu64"\n", dce2_stats.cl_working);
                if (dce2_stats.cl_other_req > 0)
                    _dpd.logMsg("        Other request type: "STDu64"\n", dce2_stats.cl_other_req);
                if (dce2_stats.cl_other_resp > 0)
                    _dpd.logMsg("        Other response type: "STDu64"\n", dce2_stats.cl_other_resp);
                _dpd.logMsg("        Fragments: "STDu64"\n", dce2_stats.cl_fragments);
                _dpd.logMsg("        Max fragment size: "STDu64"\n", dce2_stats.cl_max_frag_size);
                _dpd.logMsg("        Reassembled: "STDu64"\n", dce2_stats.cl_frag_reassembled);
                if (dce2_stats.cl_max_seqnum > 0)
                    _dpd.logMsg("        Max seq num: "STDu64"\n", dce2_stats.cl_max_seqnum);
#ifdef DEBUG_MSGS
                _dpd.logMsg("      Memory stats (bytes)\n");
                _dpd.logMsg("        Current activity tracker: %u\n", dce2_memory.cl_act);
                _dpd.logMsg("        Maximum activity tracker: %u\n", dce2_memory.cl_act_max);
                _dpd.logMsg("        Current fragment tracker: %u\n", dce2_memory.cl_frag);
                _dpd.logMsg("        Maximum fragment tracker: %u\n", dce2_memory.cl_frag_max);
#endif
            }
        }
    }

    /* Have to free it here because CleanExit is called before stats functions
     * (so anything flushed by stream can go through and count towards stats) */
    if (exiting)
        DCE2_StatsFree();

#ifdef DEBUG_MSGS
    _dpd.logMsg("\n");
    _dpd.logMsg("  Memory stats (bytes)\n");
    _dpd.logMsg("    Current total: %u\n", dce2_memory.total);
    _dpd.logMsg("    Maximum total: %u\n", dce2_memory.total_max);
    _dpd.logMsg("    Current runtime total: %u\n", dce2_memory.rtotal);
    _dpd.logMsg("    Maximum runtime total: %u\n", dce2_memory.rtotal_max);
    _dpd.logMsg("    Current config total: %u\n", dce2_memory.config);
    _dpd.logMsg("    Maximum config total: %u\n", dce2_memory.config_max);
    _dpd.logMsg("    Current rule options total: %u\n", dce2_memory.roptions);
    _dpd.logMsg("    Maximum rule options total: %u\n", dce2_memory.roptions_max);
    _dpd.logMsg("    Current routing table total: %u\n", dce2_memory.rt);
    _dpd.logMsg("    Maximum routing table total: %u\n", dce2_memory.rt_max);
    _dpd.logMsg("    Current initialization total: %u\n", dce2_memory.init);
    _dpd.logMsg("    Maximum initialization total: %u\n", dce2_memory.init_max);
#endif
}

/******************************************************************
 * Function: DCE2_Reset()
 *
 * Purpose: Reset the preprocessor to a post configuration state.
 *
 * Arguments:
 *  int - signal that caused the reset
 *  void * - pointer to data
 *
 * Returns: None
 *
 ******************************************************************/
static void DCE2_Reset(int signal, void *data)
{
    if (!DCE2_CStackIsEmpty(dce2_pkt_stack))
    {
        DCE2_Log(DCE2_LOG_TYPE__ERROR,
                 "%s(%d) Packet stack is not empty when it should be.",
                 __FILE__, __LINE__);

        DCE2_CStackEmpty(dce2_pkt_stack);
    }
}

/******************************************************************
 * Function: DCE2_ResetStats()
 *
 * Purpose: Reset any statistics being kept by the preprocessor.
 *
 * Arguments:
 *  int - signal that caused function to be called
 *  void * - pointer to data
 *
 * Returns: None
 *
 ******************************************************************/
static void DCE2_ResetStats(int signal, void *data)
{
    DCE2_StatsInit();
}

/******************************************************************
 * Function: DCE2_CleanExit()
 *
 * Purpose: Do any cleanup necessary when Snort exits.
 *
 * Arguments:
 *  int - signal that caused Snort to exit
 *  void * - pointer to data
 *
 * Returns: None
 *
 ******************************************************************/
static void DCE2_CleanExit(int signal, void *data)
{
    DCE2_FreeConfigs(dce2_config);
    dce2_config = NULL;

    DCE2_FreeGlobals();
}

#ifdef SNORT_RELOAD
/*********************************************************************
 * Function: DCE2_ReloadGlobal()
 *
 * Purpose: Creates a new global DCE/RPC preprocessor config.
 *
 * Arguments: snort.conf argument line for the DCE/RPC preprocessor.
 *
 * Returns: None
 *
 *********************************************************************/
static void DCE2_ReloadGlobal(char *args)
{
    tSfPolicyId policy_id = _dpd.getParserPolicy();
    DCE2_Config *pDefaultPolicyConfig = NULL;
    DCE2_Config *pCurrentPolicyConfig = NULL;

    if ((_dpd.streamAPI == NULL) || (_dpd.streamAPI->version != STREAM_API_VERSION5))
    {
        DCE2_Die("%s(%d) \"%s\" configuration: "
            "Stream5 must be enabled with TCP and UDP tracking.",
            *_dpd.config_file, *_dpd.config_line, DCE2_GNAME);
    }

    if (dce2_swap_config == NULL)
    {
        //create a context
        dce2_swap_config = sfPolicyConfigCreate();

        if (dce2_swap_config == NULL)
        {
            DCE2_Die("%s(%d) \"%s\" configuration: Could not allocate memory "
                     "configuration.\n",
                     *_dpd.config_file, *_dpd.config_line, DCE2_GNAME);
        }
        _dpd.addPreprocReloadVerify(DCE2_ReloadVerify);
    }

    sfPolicyUserPolicySet(dce2_swap_config, policy_id);
    pDefaultPolicyConfig = (DCE2_Config *)sfPolicyUserDataGetDefault(dce2_swap_config);
    pCurrentPolicyConfig = (DCE2_Config *)sfPolicyUserDataGetCurrent(dce2_swap_config);

    if ((policy_id != 0) && (pDefaultPolicyConfig == NULL))
    {
        DCE2_Die("%s(%d) \"%s\" configuration: Must configure default policy "
                 "if other policies are to be configured.\n",
                 *_dpd.config_file, *_dpd.config_line, DCE2_GNAME);
    }

    /* Can only do one global configuration */
    if (pCurrentPolicyConfig != NULL)
    {
        DCE2_Die("%s(%d) \"%s\" configuration: Only one global configuration can be specified.",
                 *_dpd.config_file, *_dpd.config_line, DCE2_GNAME);
    }

    DCE2_RegRuleOptions();

    pCurrentPolicyConfig = (DCE2_Config *)DCE2_Alloc(sizeof(DCE2_Config),
        DCE2_MEM_TYPE__CONFIG);

    sfPolicyUserDataSetCurrent(dce2_swap_config, pCurrentPolicyConfig);

    /* Parse configuration args */
    DCE2_GlobalConfigure(pCurrentPolicyConfig, args);

    if ( pCurrentPolicyConfig->gconfig->disabled )
        return;

    _dpd.addPreproc(DCE2_Main, PRIORITY_APPLICATION, PP_DCE2,
        PROTO_BIT__TCP | PROTO_BIT__UDP);

#ifdef TARGET_BASED
    _dpd.streamAPI->set_service_filter_status
        (dce2_proto_ids.dcerpc, PORT_MONITOR_SESSION, policy_id, 1);

    _dpd.streamAPI->set_service_filter_status
        (dce2_proto_ids.nbss, PORT_MONITOR_SESSION, policy_id, 1);
#endif

    if (policy_id != 0)
        pCurrentPolicyConfig->gconfig->memcap = pDefaultPolicyConfig->gconfig->memcap;
}

/*********************************************************************
 * Function: DCE2_ReloadServer()
 *
 * Purpose: Creates a new DCE/RPC server configuration
 *
 * Arguments: snort.conf argument line for the DCE/RPC preprocessor.
 *
 * Returns: None
 *
 *********************************************************************/
static void DCE2_ReloadServer(char *args)
{
    tSfPolicyId policy_id = _dpd.getParserPolicy();
    DCE2_Config *pPolicyConfig = NULL;

    sfPolicyUserPolicySet (dce2_swap_config, policy_id);

    pPolicyConfig = (DCE2_Config *)sfPolicyUserDataGetCurrent(dce2_swap_config);

    if ((pPolicyConfig == NULL) || (pPolicyConfig->gconfig == NULL))
    {
        DCE2_Die("%s(%d) \"%s\" configuration: \"%s\" must be configured "
                 "before \"%s\".", *_dpd.config_file, *_dpd.config_line,
                 DCE2_SNAME, DCE2_GNAME, DCE2_SNAME);
    }

    /* Parse configuration args */
    DCE2_ServerConfigure(pPolicyConfig, args);
}

static int DCE2_ReloadVerifyPolicy(
        tSfPolicyUserContextId config,
        tSfPolicyId policyId,
        void* pData
        )
{
    DCE2_Config *swap_config = (DCE2_Config *)pData;
    DCE2_Config *current_config = (DCE2_Config *)sfPolicyUserDataGet(dce2_config, policyId);
    DCE2_ServerConfig *dconfig;

    //do any housekeeping before freeing DCE2_Config

    if ( swap_config == NULL || swap_config->gconfig->disabled )
        return 0;

    if (!_dpd.isPreprocEnabled(PP_STREAM5))
    {
        DCE2_Die("%s(%d) \"%s\" configuration: "
            "Stream5 must be enabled with TCP and UDP tracking.",
            *_dpd.config_file, *_dpd.config_line, DCE2_GNAME);
    }

    dconfig = swap_config->dconfig;

    if (dconfig == NULL)
        DCE2_CreateDefaultServerConfig(swap_config, policyId);

#ifdef TARGET_BASED
    if (!_dpd.isAdaptiveConfigured(policyId, 1))
#endif
    {
        DCE2_ScCheckTransports(swap_config);
    }

#ifdef ENABLE_PAF
    DCE2_AddPortsToPaf(swap_config, policyId);
#endif

    /* Register routing table memory */
    if (swap_config->sconfigs != NULL)
        DCE2_RegMem(sfrt_usage(swap_config->sconfigs), DCE2_MEM_TYPE__RT);

    if (current_config == NULL)
        return 0;

    if (swap_config->gconfig->memcap != current_config->gconfig->memcap)
    {
        _dpd.errMsg("dcerpc2 reload:  Changing the memcap requires a restart.\n");
        DCE2_FreeConfigs(dce2_swap_config);
        dce2_swap_config = NULL;
        return -1;
    }

    return 0;
}
/*********************************************************************
 * Function: DCE2_ReloadVerify()
 *
 * Purpose: Verifies a reloaded DCE/RPC preprocessor configuration
 *
 * Arguments: None
 *
 * Returns:
 *  int
 *      -1 if changed configuration value requires a restart
 *       0 if configuration is ok
 *
 *********************************************************************/
static int DCE2_ReloadVerify(void)
{
    if ((dce2_swap_config == NULL) || (dce2_config == NULL))
        return 0;

    if (sfPolicyUserDataIterate(dce2_swap_config, DCE2_ReloadVerifyPolicy) != 0)
        return -1;

    return 0;
}

static int DCE2_ReloadSwapPolicy(
        tSfPolicyUserContextId config,
        tSfPolicyId policyId,
        void* pData
        )
{
    DCE2_Config *pPolicyConfig = (DCE2_Config *)pData;

    //do any housekeeping before freeing config
    if (pPolicyConfig->ref_count == 0)
    {
        sfPolicyUserDataClear (config, policyId);
        DCE2_FreeConfig(pPolicyConfig);
    }
    return 0;
}

/*********************************************************************
 * Function: DCE2_ReloadSwap()
 *
 * Purpose: Swaps a new config for the old one.
 *
 * Arguments: None
 *
 * Returns: None
 *
 *********************************************************************/
static void * DCE2_ReloadSwap(void)
{
    tSfPolicyUserContextId old_config = dce2_config;

    if (dce2_swap_config == NULL)
        return NULL;

    dce2_config = dce2_swap_config;
    dce2_swap_config = NULL;

    sfPolicyUserDataIterate (old_config, DCE2_ReloadSwapPolicy);

    if (sfPolicyUserPolicyGetActive(old_config) == 0)
        return (void *)old_config;

    return NULL;
}

static void DCE2_ReloadSwapFree(void *data)
{
    if (data == NULL)
        return;

    DCE2_FreeConfigs((tSfPolicyUserContextId)data);
}
#endif

#ifdef ENABLE_PAF

// Used for iterate function below since we can't pass it
static tSfPolicyId dce2_paf_tmp_policy_id = 0;

/*********************************************************************
 * Function: DCE2_AddPortsToPaf()
 *
 * Add detect and autodetect ports to stream5 paf
 *
 * Arguments:
 *  DCE2_Config *
 *      Pointer to configuration structure.
 *
 * Returns: None
 *
 *********************************************************************/
static void DCE2_AddPortsToPaf(DCE2_Config *config, tSfPolicyId policy_id)
{
    if (config == NULL)
        return;

    dce2_paf_tmp_policy_id = policy_id;

    DCE2_ScAddPortsToPaf(config->dconfig);

    if (config->sconfigs != NULL)
        sfrt_iterate(config->sconfigs, DCE2_ScAddPortsToPaf);

    dce2_paf_tmp_policy_id = 0;
}

static void DCE2_ScAddPortsToPaf(void *data)
{
    DCE2_ServerConfig *sc = (DCE2_ServerConfig *)data;
    unsigned int port;
    tSfPolicyId policy_id = dce2_paf_tmp_policy_id;

    if (data == NULL)
        return;

    for (port = 0; port < DCE2_PORTS__MAX; port++)
    {
        if (DCE2_IsPortSet(sc->smb_ports, (uint16_t)port))
        {
            DCE2_PafRegister((uint16_t)port, policy_id, DCE2_TRANS_TYPE__SMB);
        }

        if (DCE2_IsPortSet(sc->auto_smb_ports, (uint16_t)port))
        {
            DCE2_PafRegister((uint16_t)port, policy_id, DCE2_TRANS_TYPE__SMB);
        }

        if (DCE2_IsPortSet(sc->tcp_ports, (uint16_t)port))
        {
            DCE2_PafRegister((uint16_t)port, policy_id, DCE2_TRANS_TYPE__TCP);
        }

        if (DCE2_IsPortSet(sc->auto_tcp_ports, (uint16_t)port))
        {
            DCE2_PafRegister((uint16_t)port, policy_id, DCE2_TRANS_TYPE__TCP);
        }

#if 0
        if (DCE2_IsPortSet(sc->http_proxy_ports, (uint16_t)port))
        {
            /* TODO Implement PAF registration and callback. */
        }

        if (DCE2_IsPortSet(sc->http_server_ports, (uint16_t)port))
        {
            /* TODO Implement PAF registration and callback. */
        }
#endif
    }
}
#endif

redpajama_set_name: RedPajamaGithub


Abstract: Five different magnetic phase transitions have been identified and characterized in stoichiometric Nd 2 NiO 4 by means of magnetic-susceptibility and isothermal-magnetization measurements. A collinear antiferromagnetic ordering of Ni 2 + magnetic moments exists between T N 1 ≊320 K and T c 1 ≊130 K where an orthorhombic-to-tetragonal structural phase transition occurs. In this temperature range, Nd 3 + ions follow a simple paramagnetic Curie-Weiss-like behavior, while a weak ferromagnetic component appears below 130 K. An internal magnetic field on the Nd 3 + ions develops with this structural phase transition. Two additional transitions are observed at T c 2 ≊68 K and T c 3 ≊45 K which are characterized by a sudden increase of the weak ferromagnetic component. Finally, a peak of the differential susceptibility at T N 2 ≊11 K marks a long-range antiferromagnetic ordering of the Nd 3 + ions. The internal magnetic field acting on the Nd ions was evaluated to be 5.2 T in the 20 K– T c 2 temperature range.
It is part of: Physical Review B, 1991, vol. 43, núm. 13, p. 10451-10454.


Early last week, one of the most distinguished mathematics prizes in the world was awarded to a woman for the first time in history. The Abel Prize for mathematics was awarded to Karen Uhlenbeck, a mathematics and emeritus professor at the University of Texas at Austin.
She is a pioneer in a field known as geometric analysis and gauge theory. Her work has lead to techniques currently used by mathematicians around the world.
Uhlenbeck is no stranger to being awarded in her field.
In 1983, she received a MacArthur fellowship that came with a $204,000 prize. In 1990, she became the second woman to give a plenary talk at the International Congress of Mathematicians. Each Congress has 10 to 20 plenary talks, but the last woman to give one did so in 1932. Uhlenbeck believes the plenary talk was "almost more unnerving" than being the first woman to win an Abel. She has also co-founded a program called "Women and Mathematics at Princeton," mentoring women in science and math.
The mathematics field doesn't have its own Nobel Prize, and the highest awards were the Fields Medals for those accomplished mathematicians 40 or younger. These were only released in small batches, however, and there is currently only one woman who has received that award.
Uhlenbeck began publishing major papers in her 30s, a time when she could be recognized with a Fields Medal but her ideas took time to spread into their own field of mathematics.
The Abel is named after Norwegian mathematician, Niels Hendrik Abel, and has been awarded annually since 2003, its most notable winner to date being John F. Nash Jr., whose life story was portrayed in the 2001 movie A Beautiful Mind.
Uhlenbeck stresses the challenges of being one of the first women in her field and the pressures of having to be a role model.
Women currently receive about 43.1% of mathematics degrees at the undergraduate level, similar to the computer sciences, engineering, and physical sciences. Women also only hold about 29% of the science and engineering workforce and the disparity is even larger for minority women.
It's clear that there is a long way to go for women in STEM, but Karen Uhlenbeck's victory is one step closer to women's recognition in the workplace.


text:
Серге́й Алексе́евич Купцо́в (; 27 сентября 1948, Кривой Рог — 12 сентября 2014) — советский футболист и тренер.

Биография
Сергей Купцов родился в Дзержинском районе Кривого Рога. Его отец — Алексей Гаврилович Купцов был горняком, прошедшим путь от рабочего до главного инженера и начальника проходки. Его трудовой путь был отмечен тремя почётными знаками «Шахтёрская слава». Мать Надежда Илларионовна была домохозяйкой. Футболом начал заниматься в группе подготовки «Кривбасса». Первый тренер — Владимир Андреевич Ткаченко. Через несколько лет Сергей Купцов был приглашён в юношескую команду, где его партнёрами были Валерий Яремченко, Вячеслав Дудник и Виктор Алексанов.

Клубная карьера
В 1966 году Купцов дебютировал в первой команде «Кривбасса». В своём первом сезоне восемнадцатилетний футболист сыграл 8 матчей, выходя в основном на замену. В следующем году стал полноправным игроком основного состава. Первый гол за команду забил 16 июня 1968 года в ворота северодонецкого «Химика».

В 1969 году Купцов был приглашён в клуб высшей лиги донецкий «Шахтёр». Был зачислен в дублирующий состав команды. Дубль горняков на тот момент был действующим серебряным призёром турнира дублёров. В первый же год в дубле Сергею Купцову удалось помочь «Шахтёру» впервые стать победителем первенства СССР среди дублирующих составов команд высшей лиги. Личный вклад футболиста в это достижение был отмечен спортивным званием кандидата в мастера спорта СССР. В высшей лиге дебютировал в том же году на выезде против «Пахтакора». Через несколько дней в Одессе, в матче с дублем «Черноморца», Купцов получил разрыв крестообразной связки коленного сустава. Сергей перенёс операцию, после чего более года восстанавливался.

В 1971 году вернулся в «Кривбасс», но в чемпионском сезоне не сыграл ни одного матча. После этого был призван в армию. В 1975 году вновь вернулся в криворожскую команду. В этом сезоне «Кривбасс» вновь занял первое место в украинской зоне второй лиги, а Купцов сыграл 5 матчей. Весной 1976 года на предсезонных сборах в Ялте у него «выскочил» мениск и, после очередной операции, футболист завершил игровую карьеру.

Тренерская карьера
В 1985 году был приглашён обратно в «Кривбасс» на должность начальника команды, которую занимал по 1991 год. В этот период в команде дебютировал его старший сын Андрей. Во втором круге сезона 1987 года некоторое время работал главным тренером команды.

Вне футбола
Два сына Сергея Купцова — Андрей и Алексей впоследствии стали профессиональными футболистами.

Примечания

Литература

Ссылки

Футболисты СССР
Футбольные тренеры СССР
Игроки ФК «Кривбасс»
Игроки ФК «Шахтёр» Донецк
Игроки ФК ЦСКА Киев
Тренеры ФК «Кривбасс»

redpajama_set_name: RedPajamaWikipedia


text:
Q: How to read multiple requests via MySqlReader C# I have problem , read only first record and must be 5 record from db. Help me to solve this proble . I have 3 request in 1 command , i think that it work not normal for me .
Screenshot of records in DB

Result

    var model = new List<WorkPeriod1>();
        MySqlCommand cmd2 = new MySqlCommand("SELECT DISTINCT target_date FROM work_period w, aspnetusers u WHERE u.Id=w.id_manager AND u.UserType=0 AND u.Id_num<>0 AND u.IsActive = TRUE AND w.target_date >= DATE_SUB('2018-04-21',INTERVAL 7 DAY);" +
            "SELECT  w.start ,w.finish, WEEKDAY(w.target_date) dayssa FROM aspnetusers u , work_period w WHERE u.Id=w.id_manager AND u.UserType=0 AND u.Id_num<>0 AND u.IsActive = TRUE AND target_date >= DATE_SUB('2018-04-21',INTERVAL 7 DAY);" +
            "SELECT DISTINCT u.ContactName ,w.description FROM aspnetusers u , work_period w WHERE u.Id=w.id_manager AND u.UserType=0 AND u.Id_num<>0 AND u.IsActive = TRUE AND w.target_date >= DATE_SUB('2018-04-21',INTERVAL 7 DAY);", conn);

        conn.Open();
        using (conn)
        {

            MySqlDataReader reader = cmd2.ExecuteReader();
            while (reader.HasRows)
            //for (int i = 0; i < reader.FieldCount; i++)
            {
                var workperiod = new WorkPeriod1();
                if (reader.Read())
                {
                    workperiod.Rtarget_date = reader.GetDateTime(0);
                }

                reader.NextResult();
                if (reader.Read())
                {
                    workperiod.RStart = Convert.ToDateTime(reader.GetString(0));
                    workperiod.RFinish = Convert.ToDateTime(reader.GetString(1));
                    workperiod.DWA = Convert.ToInt32(reader.GetInt32(2));

                }
                reader.NextResult();
                if (reader.Read())
                {
                    workperiod.RDescr = reader.GetString(1);
                    workperiod.RContactName = reader.GetString(0);
                }
                reader.NextResult();
                model.Add(workperiod);
            }

            reader.Close();

A: Use while instead of if:
if (reader.HasRows)
{
   while (reader.Read())
   {
      .........

redpajama_set_name: RedPajamaStackExchange


Please do not order without first speaking with your publishing services associate.
Our designers can create and format professional tables to be inserted into your manuscript as needed.
Timing and cost dependent on quantity and complexity.
To learn more, please call 1-800-AUTHORS (288-4677) for additional information.


"This young lady grabs you with her lyrics and keeps you there with her sound—a mixture of folk, country and blues. If this project is any indication of what we can expect from Ms. Carlson, the folks in Nashville had better sit up and take notice." – Alathea Johnson, Moozikoo.com Staff.
From cross-country rides as kids stuffed in the back of a 70's sedan to college singing tours with friends, Nicole and Tiffany began singing together with their family's traveling ensemble wearing hand made, matching outfits that their mother sewed. They continued to create harmony together through their growing up years and into young adulthood. The youngest two of three daughters, both have pursued singing and songwriting on their own in various ways and venues over the last decade, give or take a few years. No longer sporting matching attire, they now come back together to create a blended sound once again. Described best as acoustic folk, Nicole and Tiffany form soothing harmonies and simplistically arranged stringed instruments using guitar, violin, and mandolin. Though happy to perform cover tunes, they love sharing their original songs, whether written together or apart. Both are still embarking on solo artistry but are excited about this adventure as a duo.


RMI Bee Project, Creating Habitat for Native Pollinators | Resource Management Inc.
RMI is abuzz with activity! This year we've started our very own Bee Project to help bees, and other native pollinators, whose numbers are suffering due in part to loss of habitat. Our goal is to establish and grow wildflower meadows as bee foraging habitat beginning with a meadow at our office in Holderness, NH.
RMI based the siting of our bee meadow on research from the University of New Hampshire Cooperative Extension, the Northern New England Pollinator Working Group and the Xerces Society. Many bees native to New England nest on the edge of fields in the ground, dead trees or hollow stems of plants. The distance these bees can travel to feed is largely determined by their body size – the smallest bees can fly about 50 feet, others can fly miles to find flowers. To create a bee meadow you need an open area with one or more forested edges protected from pesticides/pesticide drift. Our native bees can use all the habitat they can get so the bigger the bee meadow the better. However, budget, space and management constraints must be taken into consideration. Bees respond faster to smaller dense plantings of wildflowers than large sparse plantings. The bee meadows must also be mowed annually to allow the wildflowers to thrive. Because of this RMI is placing our bee meadow close to the treeline on our property in a long continuous strip that will allow the bees to travel the furthest distance.
Before seeding a wildflower meadow, you must first smother any existing vegetation. Two common smothering methods are solarization and/or the application of herbicides. Solarization uses greenhouse plastic film placed on the ground to "bake" the soil. However greenhouse plastic can cost upwards of fifty cents a square foot and the solarization method requires an entire summer season to take effect. For those wishing to establish a larger bee meadow, the cost and labor associated with the solarization method can be prohibitive. Similarly, many people interested in establishing a wildflower meadow do not wish to use herbicides on their property. RMI is using a new smothering technique in the creation of our meadow applying our NutraSoil manufactured topsoil to smother our lawn. Using NutraSoil is a cost-effective and less labor-intensive option that avoids the need for herbicide!
RMI is collaborating with municipalities, conservation districts, and other local partners in NH, VT and MA to establish their own bee meadows. Want to participate in RMI's Bee Project? Give us a buzz!


Industrial conglomerate Honeywell said on Friday that China is currently the single largest contributor to its global growth and it was committed to expanding business in the country.
The US firm's over $2.4 billion business in China has been clocking double-digit growth rates this year and accounted for over 20 percent of its annual growth, according to Shane Tedjarati, president of Honeywell Global High Growth Regions.
Tedjarati, who was part of US President Donald Trump's business delegation to China, said the company was also confident that the deepening bilateral trade cooperation between China and the US would be beneficial for both countries.
Honeywell's high-growth regions consistently drive more than 70 percent of the company's growth and China has the biggest chunk of that, he said, adding that China is already the company's second largest market since 2013 and has been its focus for more than a decade.
Honeywell signed two agreements with Chinese companies Oriental Energy and Spring Airlines in Beijing during US President Donald Trump's state visit to China this week.
China's Spring Airlines selected Honeywell's suite of advanced cockpit technologies and industry-leading auxiliary power units for its future fleet of Airbus A320neo aircraft, while Honeywell UOP, a strategic business unit of Honeywell's performance materials and technologies division, has also signed a memorandum of understanding with Oriental Energy on the adoption of UOP's C3 Oleflex units in Oriental Energy's five new propane dehydrogenation (PDH) projects to help convert propane into propylene.
Tedjarati said the agreements, another significant milestone in the relationship that Honeywell has had with China since first establishing itself here in 1935, will advance cooperation in China's oil and gas and aviation industries.
"The deals in energy during Trump's visit are mostly long-term ones, which will create jobs, ease the trade deficit and boost bilateral economic cooperation to a new level," said Han Xiaoping, chief information officer of China Energy Net Consulting.
"We are committed to being the Chinese competitor, and to providing worldclass products and solutions to the Chinese marketplace," said Tedjarati.
The Chinese aerospace market has been a industry focus for a long time,especially when the first domestic commercial aircrsft took off in this May, hundreds of projects to back up the development of China commercial air cause have been established. Such huge market is waiting to be fed up. In this case, Commercial Aero Engine Shanghai International Forum 2017 is coming soon which will be held from 5th to 6th December. By that tme, the practioners from the entire manufacture chain of china aero engine and OEM will discuss the future of China Aerospace industry trends and release the the sign of potential new market.


text:
Q: I couldn't connect my private repository with the cPanel via SSH I have generated public/private key, then copied it to deploy keys in the GitHub repository settings, but I got this error message:
Permission denied (publickey).
Is this because I am using shared hosting, from Godaddy although I have access to git, ssh, and terminal in the cPanel?
I want this because I want to upload using git cleverly instead of manual uploading using Filezilla..


Gaia Technologies PLC is one of the UK's leading providers of ICT computing and cyber security services for companies and organisations all over the UK.
Gaia Technologies PLC is Cyber Essentials Plus certified and a Cyber Security Service Provider (CSSP) offering certification for both the IAMSE and Cyber Essential Certification schemes for companies within the United Kingdom.
Gaia Technologies PLC is itself, certified to IASME Gold as well as holding IS ISO/IEC 27001 certification, the only auditable international standard that defines the requirements for a secure Information Security Management System (ISMS).
Gaia's Managed Service Provision (MSP) and Managed Security Service Provision (MSSP) services ensures that our highly qualified and experienced IT engineers are continually and actively engaged in undertaking maintenance, precautionary and security activity for our clients, both on site and remotely. Gaia provides complete reassurance that our client's systems are always secure, fully maintained, updated and business ready.
o Malware and Phishing prevention.
o Risk Assessment and Management.
Gaia works with numerous cyber security software partners and are able to provide, install, configure and maintain a range of cyber security packages that will ensure that your ICT environment is secure from known risks.


Since 1989, this interesting a capella festival has been a symbol of Corsica's unique cultural heritage and national rebirth. The town of Calvi brings together locals and visitors to listen to beautiful polyphonic, unaccompanied singing. This event is one of the most notable musical festivals on the island.


I am sure many of you are familiar with Tea Collection. We have always dreamed of trying their fabulous children's clothing line but never had the opportunity until now. My kids live in hand-me-downs, and while I am thankful they have something to wear, the style of the clothes is often outdated or something I would not usually consider buying. We make do with what we have, but Tea pretty much epitomizes the ideal clothing I would outfit my kids in if I could. It is comfortable, it's modern and stylish, and it is very high quality. Not only that, but it reflects the geographic literacy that I am teaching my kids from an early age, I want them to know about and to travel to various countries. Tea clothing is inspired by various cultures, the world offers generous inspiration everywhere you go. I am ecstatic about the pieces we received for review, they are everything I expected and more. Bonus, we're doing a giveaway too for a $100 Gift Certificate, come back July 17th during the Back 2 School Hop to enter!
The first piece above is the Kasato Stripe Dress from the special 10 Anniversary collection that debuted in Destination: Brazil in Spring 2009. It retails for $45, if I had to buy it I probably would wait for a discount (fearing it would be sold out by then) or a sale (like the 10% off you get when you sign up for their newsletter). I love anything with a nautical flavor that is perfect for the beach and lazy days of summer. We haven't made it to the beach this year yet (I know! It's mid July!), but I know she will be wearing this when we do! Baby E is 3.5 year old, I got the size 4, I think it may even be long enough to wear as a dress next year since she is tiny, or at the least as a tunic.
I am really in love with the Tidepool Trapeze Dress in Acai that she is dancing in above. It's also on sale and a steal at $19.50! I decided to get it in size 5 so that she can wear it this year and probably for another two summers! Tiny as she is, it will fit as a tunic after that. The bohemian look suits her and it has instantly become one of her favorites, I had a hard time convincing her that it isn't suitable for riding her bike. A perfect color for a blue eyed girl like Baby E. This style also comes in many other prints like the Kupu Kupu, Moon Orchid, and Waves Batik. It is beautifully tailored and easy to wear, carefree and perfect to slip on in the hot days of summer. I love this print, the detail is gorgeous!
Last but not least, I got something for my little man, Baby T. At the rate he is growing - wearing size 12 months at 8 months, I decided to size up for him and got the 12 - 18 months modern Roll Up Safari Shirt in Limeburst. Guess what? It fits my tiny 3 year old! It also looks very good on her, doesn't it? I think it is very gender neutral, but Baby T will be sporting it this fall. Surprisingly he has more clothes than his sister (oh yes, he has 6 older boy cousins with lots of hand-me-downs). I love how soft the safari shirt is, just like all the other pieces.
Picking something on the Tea website is torturous I tell you! I spent about two hours just trying to decide what to get because all the pieces are awesome, the selection is amazing, and as I have been following them for years I also know each new collection is even better than the last. There is always something new at Tea, new kids clothing inspired by countries around the world!
I love that they have frequent sales and a great selection of quality clothes to choose from!
I love tea collection clothes! the style and durability!
They have the cutest tees for boys!
I like the free t-shirt looks like a grown up style and the material is great.
My friend's little girl is always wearing Tea Collection dresses, I think they are adorable!
Looks like you found some goodies. I haven't shopped their before but I'm checking out those dresses.
I really love that the clothes are cute but still comfy for kids!
I love the striped dress above. They also have really great little boys clothes.
I love Tea's clothes! We have several dresses and love them all! I bought the Tidepool Trapeze dress too and bought it a size bigger so dd can wear it next year too! LOL I LOVE the colors!
I love how vibrant all of the colors are--they don't just limit to pinks for girls and blues for boys.
I just love the clothes they are so cute and very reasonable. It is hard to find cute boys clothes, and Tea has adorable boys clothes.
I love all of their patterns. So unique!


Photo Credit: Capital City Founders Andrew Abrams and Gail Becker with Adam Pascal (center). Photo by Kat Steinnon Photography.
Before Andrew Abrams and Gail Becker launched Capital City Theatre in 2014, the dynamic duo led Find Your Light, a summer musical theater intensive to help bridge the gap between high school, college and a budding performance career.
While this program is still offered today, Abrams and Becker wanted to expand their offerings to include year round courses and workshops that not only focus on singing, acting and dancing, but behind the scenes skills as well. So, they launched the Capital City Theatre Conservatory in 2018.
Along with teaching some of the courses themselves, Abrams and Becker have brought on highly sought after instructors including Broadway stars Adam Pascal, Kaitlin Hopkins and Andrew Keenan-Bolger, plus Jeff Award winning choreographer Tammy Mader. The conservatory classes are also open to adults ready to jump-start their musical theater careers later in life. Capital City Theatre has had students up to 40 years old enroll in Find Your Light.
Participants from CCT's Find Your Light performance intensive. Photo via capitalcitytheatre.org.
This dedication to Madison talent is what inspired Abrams and Becker to start Capital City Theatre in the first place. The company opened with a bang with Violet in 2015, employing both Broadway veterans and emerging local performers.
Capital City Theatre's 2019 season includes Leonard Bernstein's On the Town, in collaboration with Madison Ballet, May 30 – June 2 and Carrie: The Musical, the first conservatory production, Aug. 9 – 11. Only students who have completed the Find Your Light program can audition for the conservatory production.
Based on Jerome Robbins' ballet Fancy Free, which Bernstein also composed, On the Town is an energetic wartime musical set in 1944 about three sailors on 24-hour leave in New York City. Capital City Theatre first held auditions for the show in Madison and then traveled to New York City and Chicago.
During the New York City auditions, Abrams and Becker found Michael Hartung, a Madison native now based in the Big Apple. Hartung will play Chip, one of the three sailors. His impressive credits include understudying the role of Barnaby in Hello Dolly!, featuring Bette Midler on Broadway, and portraying a Lost Boy in NBC's Peter Pan Live.
"We want to have a professional musical theatre company that offers what we do for local people, or people of other regions, and especially people who are from Madison and want to come home," Becker says.
Capital City Theatre's debut production "Violet" in 2015. Photo by Chris Giese.
As conservatory instructors, Abrams explains that it is important for him and Becker to continue progressing in their own creative endeavors. Becker will portray Madame Dilly in On the Town while Abrams music directs.
One of Abrams artistic adventures, composing But I'm A Cheerleader: The Musical, took him as far as London in February. The production, with book and lyrics by Bill Augustin, was selected for MTFestUK, an inaugural showcase of new musicals.
Based on the 2000 Lionsgate cult film, But I'm a Cheerleader tells the story of high school cheerleader Megan, whose life isn't as perfect as it seems. When her friends and family suspect she is a lesbian, they send her to a rehabilitation camp to "set her straight." Carrie Hope Fletcher, who starred as Veronica Sawyer in London's premiere of Heathers the Musical, led a powerhouse West End cast, selling out But I'm a Cheerleader in minutes.
Carrie Hope Fletcher performing in "But I'm a Cheerleader: The Musical," which Abrams composed. Photo courtesy of Capital City Theatre.
Similar to But I'm a Cheerleader, Capital City Theatre's August conservatory show Carrie: The Musical was based off a cult film (first inspired by Stephen King's novel). Title character Carrie White is bullied relentlessly at school and sheltered at home by her domineering mother, but soon realizes she has telekinesis powers that can change everything.
"On the Town," in collaboration with Madison Ballet, runs May 30 – June 2 at Overture Center's Capitol Theater. For tickets, visit overture.org or call the box office at (608) 258-4141. "Carrie: The Musical" runs Aug. 9 – 11 at Madison Area Technical College's Mitby Theater. For tickets for "Carrie" or to learn more about conservatory classes, visit capitalcitytheatre.org.


text:
Arbitration and Conciliation Act, 1996, Section 11(6)-- Appointment of third arbitrator - Respondent recognized that petitioner No.1 is operator on behalf of all contractors, namely, Reliance, Niko and BP - Petitioner No.1 is acting on behalf of all three contractors - Notice was served by RIL in capacity of operator - Dispute between parties clearly..........
Arbitration and Conciliation Act, 1996, Section 11(6)-- Appointment of a foreign national as third and presiding arbitrator - Apprehension of lack of knowledge of Indian Laws - Held, parties have already appointed one retired CJI each - Apprehension speculative...........
Arbitration and Conciliation Act, 1996, Section 11(6)-- Appointment of third arbitrator - Held, merely because, seat of arbitration is in India, applicable law is Indian Law; it does not become incumbent on Court to appoint third arbitrator, who is an Indian national...........
Arbitration and Conciliation Act, 1996, Section 11, Production Sharing Contract, Article 33.6- - Appointment of third arbitrator - No agreement between parties to chose third arbitrator from India only - Held, S.11(9) specifically empowers CJI to appoint an arbitrator of a nationality other than nationality of parties involved in litigation - Merely because two arbitrators nominated by..........
Arbitration and Conciliation Act, 1996- - Interpretation of statute - Held, S.11 uses similar phraseology as Art.11, UNCITRAL Model Law - Same can be used as legitimate aid to interpret S.11, including S.11(6)...........
Arbitration and Conciliation Act, 1996, Section 11(6)-- Appointment of third arbitrator - Held, when CJI exercises his jurisdiction u/s.11(6) he is to be guided by provisions contained in the Act of 1996 and generally accepted practices in other international jurisdictions - CJI would also be anxious to ensure that no doubts are cast on neutrality,..........
KERALA HIGH COURT
Arbitration and Conciliation Act, 1996, Section 20-- Place of arbitration - (i) Parties are free to agree on the place of arbitration notwithstanding the fact that no part of cause of action has arisen within its jurisdiction; (ii) Place of arbitration can also be determined by the Arbitrator in the absence of any agreement between the parties in..........
Arbitration and Conciliation Act, 1996, Section 31(7)-- Arbitration - Interest - Agreement between parties that no interest shall be payable - Arbitral Tribunal cannot award interest between the date when the cause of action arose to the date of award...........
Arbitration and Conciliation Act, 1996, Section 8-- Eviction proceedings - Reference to arbitration - Permissibility - Held, Rent Controller are statutory authorities set up for purpose of adjudicating landlord-tenant disputes - Jurisdiction of these adjudicators cannot be by passed by an arbitration intervention through provisions of Arbitration..........
Arbitration and Conciliation Act, 1996, Section 34, 4, 16(2)-- Arbitration award - Jurisdiction - Objection with regard to competence/jurisdiction of Arbitral Tribunal not raised before Arbitrator - Objection to jurisdiction deemed to be waived - Cannot be raised for the first time in Court...........

redpajama_set_name: RedPajamaCommonCrawl


Mark Dapin is the author of the novels King of the Cross, winner of the Ned Kelly Award for Best First Fiction and Spirit House, long listed for the Miles Franklin Literary Award and shortlisted for the Age Book of the Year and the Royal Society for Literature's Ondaatje Prize. His work of military history, The Nashos' War, has been widely acclaimed. He is a PhD candidate at the Australian Defence Force Academy.
The Children Act by Ian McEwan. I love everything by Ian McEwan apart from Sweet Tooth.
Balmain Library, but I also love the National Library in Canberra and State Library Victoria.
Some critics appeared to believe that R&R was a piece of social realism. In fact, corpses do not come out of the ground, go into a bar and have a drink, as occurs in the first chapter of my novel. Oddly enough, I was aware of that while I was writing it.
My editor, Judith Whelan, once told me I could do anything. Whenever I doubt myself I think back to those words.
What inspired you to write R&R?
The research for my military history book, The Nashos' War. However, that does not mean that R&R is anything more than a piece of imaginative fiction.
Want to know more about R&R?
John 'Nashville' Grant is an American military policeman in the R & R town of Vung Tau, tucked safely behind the front lines of the Vietnam War. Nashville knows how everything works: the army, the enemy, bars, secrets, men and women. He's keeping the peace by keeping his head down and making the most of it.


Rock House Sliders, an international fast-casual restaurant, will open its first Los Angeles location on Thursday, July 12. The brainchild of three friends in search of a good burger in their home country of Kuwait, the new West Hollywood eatery hopes to bring high-quality ingredients to signature sliders that come in Angus beef and chicken varieties.
Located right on Sunset Boulevard in the long vacant Luca on Sunset space near Crescent Heights, the new restaurant should be a boon for the neighborhood, especially given its address in a major residential complex with limited dining options beyond neighboring restaurants EVO Kitchen and Flavor of India. The menu boasts eight sliders, six sides, beverages that include mini shakes, and charcoal-activated black ice cream for dessert.
The small, two ounce patties come topped with things like house-made sauce, cheddar cheese, pickles, relish, shredded lettuce, shaved onion, and tomato on the Original Rocker, and spicy sauce, pepper jack cheese, pickles, and frizzled onions on the spicy chicken. Sliders are priced at $3.89 each, and sides range from $2.49 to $3.89 for the messy fries.
This won't be the only LA location of the slider spot, with the team hoping to continue their expansion to Downtown and Santa Monica later this year. Rock House Sliders West Hollywood will open Sunday to Thursday from 11 a.m. to 11 p.m. and Friday and Saturday from 11 a.m. to midnight.
"An International Slider Chain Slings Mini Burgers This Thursday in West Hollywood." Eater LA – All. https://la.eater.com/2018/7/11/17555756/rock-house-sliders-west-hollywood-open.


Despite some negative press related to the OutGames in terms of two hate-crimes being committed, the overall feeling here is definitely one of acceptance and tolerance, along with a slightly edgy feel when one stays out past midnight meeting some of the locals at the gay bars spread throughout the old part of the city. And can these Danes party! At 4 am, they are still going strong, and during the warmer summer months when the sun can rise before 4 am, it can be quite a scene as one leaves a club in the wee hours of the early morning with full sun and crazy revelers roaming the streets.
On the business side of life, the conference overall was a success. It was a bit tough at times, in that our business group was mixed with a wide variety of conference attendees who had come for the various educational/workshop tracks including a variety of GLBT human rights topics. But we all decided to make the best of it, and this mix allowed us to meet folks we normally wouldn't have met under a purely business setting.
The week began with an opening reception at City Hall, where everyone had a chance to reconnect after not seeing each other for perhaps over a year or so. The reception was also mixed, so we mingled among some new faces from the very beginning. After connecting, a few of us headed out to the local nightlife, which seemed to be primarily focused on Oscar's, a trendy gay corner bar that had hundreds of guys spilling out on the street outside of the bar every night of the week. Oscar's became the de facto meeting point for everyone to start in their after-hours revelry, and night after night we ran into old faces, along with a few new.
On Tuesday, many of us attended the IGLTA Reception held at the Hotel 27, a really cool hotel just one block from Oscar's in the center of the old city. By the time Wednesday came around, we were all enjoying the final night's reception hosted by the CGLCC (Copenhagen Gay & Lesbian Chamber of Commerce - www.copenhagen-gay-life.dk) and IGLCC (www.iglcc.org) at Goldsmith Mads Heindorf (www.madsheindorf.dk).
The conference workshops, by the way, were quite varied... I moderated a marketing panel with Ian Johnson of Out Now Consulting (outnowconsulting.com), Tom Roth of Community Marketing (www.communitymarketinginc.com) and Andreas Citak of IBM, which went quite well. I also attended a workshop held right after ours, focused on some of the new social features being developed into the ILGA website (www.ilga.org), which sounded very exciting.
So overall it made for a great but short trip to Copenhagen. It seems from here everyone is either on their way to Stockholm for Stockholm Pride this upcoming weekend, or Amsterdam for their over-the-top Gay Pride festival coming up this same weekend. I wish I could go, but alas eventually we all have to return home at some point!
Below are some links to photos from this trip. Enjoy!


text:
Role of the Plant Protection Directorate
Plant Protection Directorate at a Glance
History of the Premises
Facilities Management and Maintenance Unit
ShadeHouse
Plastic and Screen Houses
Underground Water Reservoirs
Research and Policy Unit
Seed and Other Propogation Unit
Seed and Other Propogation Material
Plant Variety Rights
Seed Testing
Propagation and Planting Material
Surveillance and Enforcement
Surveillance and Enforcement Unit
The role of the surveillance and Inspectorate unit
Imports from Third Countries
Movement from the EU
Protected Zone Status
Border Inspection Post
Obligatory EU Surveys
Laboratory Services Unit
Diagnostic Laboratories
Soil and Irrigation Water Laboratory
Services- Soil and Water Testing
Seed Laboratory
Forms, Applications and Guidelines
Acts and Legal Notices
Pest of Plants
Surveillance Methods
Seeds and Other Propagation Methods
Facilities at the Premises
Main Commodities Inspected
Plant Protection Board
General Presentations
Seminar Plant Genetic Resources
Press Notices
Registered Advisors
Complaint / Feedback
> Main > PlantProtection > Acts & Legal Notices
Acts & Legal Notices
PLANT QUARANTINE ACT, 2001 Maltese version, English version
Chapter 433 of the Laws of Malta
Enacted by: Act XVIII of 2001
Amended by: Act III of 2004, L.N. 426 of 2007, Act V of 2011
Plant Quarantine (Harmful Organisms) Regulations
Subsidiary Legislation 433.03
Enacted by: L.N. 97 of 2004
Amended by: L.N. 477 of 2004, L.N. 478 of 2004, L.N. 480 of 2004, L.N. 42 of 2005, L.N. 55 of 2005, L.N. 307 of 2005, L.N. 308 of 2005, L.N. 361 of 2005, L.N. 245 of 2006, L.N. 359 of 2007, L.N. 270 of 2008, L.N. 33 of 2009, L.N. 100 of 2009, L.N. 77 of 2010, L.N. 119 of 2010,L.N. 19 of 2011, L.N. 99 of 2012, L.N. 293 of 2012, L.N. 426 of 2012, L.N. 162 of 2014, L.N. 334 of 2014, L.N 293 of 2015, L.N. 354 of 2017, L.N. 27 of 2018; L.N. 232 of 2019
Control of Potato Wart Disease Regulations
Enacted by: L.N. 121 of 2004
Control of San Josè Scale Regulations
Control of Carnation Leaf Rollers Regulations
Control of Ralstonia Solanacearum (Smith) Yabuuchi et al Regulations
Amended by: L.N. 33 of 2007, L.N. 42 of 2007
Fruit Trees Propagation Material Regulations
Amended by: L.N. 270 of 2011, L.N. 73 of 2017, L.N. 74 of 2017, L.N. 165 of 2017
Forest Reproductive Material Regulations
Amended by: L.N. 17 of 2011, L.N. 454 of 2013
Propagation Material of Ornamental Plants Regulations
Vegetable Propagation and Planting Material Regulations
Amended by: L.N. 88 of 2007, L.N. 45 of 2009, L.N. 453 of 2013, L.N. 115 of 2014
Control of Potato Ring Rot Regulations
Amended by: L.N. 90 of 2007
Propagation Material of Vines Regulations
Amended by: L.N. 310 of 2006
Control of Potato Cyst Nematodes Regulations
Plant Quarantine (National Certification Scheme) Regulations
Examination of Varieties of Agricultural Plant Species Regulations
Amended by: L.N. 323 of 2007, L.N. 76 of 2010, L.N. 18 of 2011, L.N. 52 of 2012, L.N. 271 of 2012, L.N. 320 of 2013, L.N. 202 of 2014, L.N. 375 of 2015. L.N. 255 of 2016, L.N. 129 of 2017 , L.N. 311 of 2018; L.N. 231 of 2019
Examination of Varieties of Vegetable Species Regulations
Amended by: L.N. 322 of 2007, L.N. 271 of 2008, L.N. 78 of 2010, L.N. 20 of 2011, L.N. 321 of 2013, L.N. 201 of 2014, L.N. 376 of 2015, L.N. 254 of 2016, L.N. 128 of 2017 , L.N. 312 of 2018; L.N. 230 of 2019
Control of the Red Palm Weevil Regulations
Seeds of Agricultural Landraces and Varieties Regulations
Tuta Absoluta (Control) Regulations
Seeds of Vegetable Landraces and Varieties Regulations
Enacted by: L.N. 22 of 2011, L.N. 114 of 2014
Fodder Plants Seed Preservation Mixtures Regulations
Control of Xylella fastidiosa (Wells et al.) Regulations
Enacted by: L.N. 98 of 2019
Seeds of Agricultural Plants and Vegetables Regulations
Enacted by: L.N. 2 of 2018
Amended by: L.N. 5 of 2019


Microsoft gets support from the W3C for its approach to implementing a do-not-track solution for Web surfing.
The World Wide Web Consortium (W3C) has given Microsoft's proposal for a standard protecting consumer privacy the seal of approval. Acceptance by W3C -- the governing body responsible for HTML5 -- is a significant hurdle for Microsoft as it works to give users more control over their own online privacy and the tools necessary to block unwanted Web tracking.
Dean Hachamovitch, Corporate Vice President, Internet Explorer, acknowledges that online privacy is a high priority for consumers and governments around the world. Microsoft recently introduced Tracking Protection with the release candidate (RC) for Internet Explorer 9 (IE9) -- which allows users to opt-out of online tracking, and block the content that does the tracking.
A post on Microsoft's IEBlog recognizes the value of the HTTP header approach for notifying compliant sites of a user's preferences, but adds, "Enabling consumers merely to express their intent to not be tracked is just not sufficient. It's a subset of what effective tracking protection should do. IE9's Tracking Protection also enables consumers to block the content that does the tracking."
The approach seems to combine the tracking lists approach originally developed by Microsoft with some variation of the HTTP header do-not-track solution proposed by Mozilla and embraced by the FTC -- which originated the push for a universal do-not-track solution in the first place.
Ashkan Soltani, a researcher and consultant focused on privacy, security, and behavioral economics, commented, "I think it's a great move and demonstrates recognition by Microsoft that for this to work, you want both technology and policy to work in tandem."


Ask the ClosetMaid cube to answer your life and style questions. Two inventive tab modes allow you to switch between answers that respond to yes, no, and maybe questions of what you should wear today (or perhaps, how your closet looks!).