Hello Team,
I am beginner to Apache Flink and developing Flink Java Application where I
have requirement to consume events form kafkaSource and do some processing then
Sink to MongoDb and from same MongoDB source/Fetch the same collection and
display in console fetch data, how can I create this flow, as I can source and
sink but when I call env.execute it start the flink job and stuck with the last
one, like I need this flow should work on arrival of each event, need help
please suggest me some solution code example is :public class
CarStreams_SinkSource implements Serializable {
public static final String SECURITY_PROTOCOL_PROPERTY = "SASL_SSL";
public static final String SECURITY_MECHANISM_PROPERTY = "PLAIN";
public static final String SECURITY_JAAS_CONFIG_PROPERTY =
"org.apache.kafka.common.security.plain.PlainLoginModule required
username=\"$ConnectionString\"
password=\"Endpoint=sb://a-test-eventhub-eastus.servicebus.windows.net/;SharedAccessKeyName=L-PP;SharedAccessKey=Cre+rthtrh55rgegagg+6rtgrt+dgrdg/RY=\";";
public static final String CONSUMER_TIMEOUT_PROPERTY = "300000";
private static final String CAR_EVENT_AA_SCHEDULE = "car-event-schedule";
private static final String BOOTSTRAP_SERVERS =
"a-test-eventhub-eastus.servicebus.windows.net:9093"; private static final
boolean LOCAL_TESTING = false;
public CarEventProcessor carEventProcessor;
private final String CAR_COLLECTION_NAME ="A_CarSinkSourceTest";
ObjectMapper mapper = new ObjectMapper();
private static final String URI =
"mongodb+srv://car:[email protected]/?authSource=admin&retryWrites=true&w=majority";
private static final String MONGO_DATABASE = "pp-car"; public
CarStreams_SinkSource() {
carEventProcessor = new CarEventProcessor();
} public static void main(String[] args) {
CarStreams_SinkSource carStreams = new CarStreams_SinkSource();
carStreams.initStreams();
} public void initStreams() {
mapper.configure(MapperFeature.INFER_PROPERTY_MUTATORS, false);
mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES,
true);
try {
System.setProperty("org.apache.flink.java.opts", "--add-opens
java.base/java.lang=ALL-UNNAMED");
StreamExecutionEnvironment env =
StreamExecutionEnvironment.getExecutionEnvironment();
env.setRuntimeMode(RuntimeExecutionMode.AUTOMATIC);
env.setParallelism(1);
env.enableCheckpointing(5000); // setting the checkpoint
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
env.getCheckpointConfig().setExternalizedCheckpointCleanup(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
DataStream<String> rawCarEventStream;
KafkaSource<String> aaOhTestEventhubCarEastus = KafkaSource.<String>builder()
.setBootstrapServers(BOOTSTRAP_SERVERS)
.setTopics(CAR_EVENT_AA_SCHEDULE, CAR_EVENT_AA_TIME,
CAR_EVENT_AA_AIRCRAFT, CAR_EVENT_AA_MISC,
CAR_EVENT_AA_DEPARTURE_ARRIVAL,
CAR_EVENT_AA_LOAD, CAR_EVENT_AA_FUEL)
.setGroupId("pp")
.setStartingOffsets(OffsetsInitializer.earliest())
.setProperty(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG,
SECURITY_PROTOCOL_PROPERTY)
.setProperty(SaslConfigs.SASL_MECHANISM,
SECURITY_MECHANISM_PROPERTY)
.setProperty(SaslConfigs.SASL_JAAS_CONFIG,
SECURITY_JAAS_CONFIG_PROPERTY)
.setProperty(ConsumerConfig.REQUEST_TIMEOUT_MS_CONFIG,
CONSUMER_TIMEOUT_PROPERTY)
.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
StringDeserializer.class.getName())
.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
StringDeserializer.class.getName())
.setValueOnlyDeserializer(new SimpleStringSchema())
.build();
rawCarEventStream = env.fromSource(aaOhTestEventhubCarEastus,
WatermarkStrategy.noWatermarks(),
"aa-oh-test-eventhub-car")
.name("carProcessor-rawCarEventStream");
DataStream<CarRawEvent> carRawEventStream =
rawCarEventStream.map((MapFunction<String, CarRawEvent>) value -> {
CarRawEvent carRawEvent = mapper.readValue(value,
CarRawEvent.class);
createCarKey(carRawEvent);
return carRawEvent;
}).name("car-rawEvent-map").keyBy(CarRawEvent::getCarKey);
processCarEvents(carRawEventStream, env);
} catch (Exception e) {
log.error("Failed with exception " + e);
e.printStackTrace();
}
log.info("Exit CarStreams::processCarRawEvents");
}
void processCarEvents(DataStream<CarRawEvent> carRawEventStream,
StreamExecutionEnvironment env) throws Exception {
DataStream<Car> carStream =
carEventProcessor.processCarEvents(carRawEventStream).keyBy(Car::getCarKey);
carStream.sinkTo(sinkToMongoDB(CAR_COLLECTION_NAME,
Car.class)).name("car-mongoSink");
env.execute("CarProcessor Job");
List<Car> cars = getCarFromMongoDB();
System.out.println("cars=>"+cars.size());
env.execute("CarProcessor Job");
}
public List<com.flink.datamodel.Car> getCarFromMongoDB() throws Exception {
List<com.flink.datamodel.Car> carList = new ArrayList<>();
MongoSource<String> source = createMongoSource(CAR_COLLECTION_NAME);
StreamExecutionEnvironment env =
StreamExecutionEnvironment.getExecutionEnvironment();
env.setRuntimeMode(RuntimeExecutionMode.AUTOMATIC);
env.setParallelism(1);
env.getCheckpointConfig().setCheckpointingMode(CheckpointingMode.EXACTLY_ONCE);
env.getCheckpointConfig().setExternalizedCheckpointCleanup(CheckpointConfig.ExternalizedCheckpointCleanup.RETAIN_ON_CANCELLATION);
env.getConfig().setRestartStrategy(RestartStrategies.fixedDelayRestart(3,
org.apache.flink.api.common.time.Time.seconds(10)));
DataStream<String> carDataStream = env.fromSource(source,
WatermarkStrategy.noWatermarks(), "MongoDB-car-source");
carDataStream.print("after fetch:");
DataStream<com.flink.datamodel.Car> carStream =
carDataStream.map((MapFunction<String, com.flink.datamodel.Car>) value -> {
com.flink.datamodel.Car filteredcar = mapper.readValue(value,
com.flink.datamodel.Car.class);
return filteredcar;
}).name("getCarFromMongoDB-filtered-map").keyBy(com.flink.datamodel.Car::getCarKey);
env.execute("Read from MongoDB-getCarFromMongoDB");
Iterator<Car> myOutput = DataStreamUtils.collect(carStream);
while (myOutput.hasNext())
carList.add(myOutput.next());
return carList;
}
public MongoSource<String> createMongoSource(String collectionName){
MongoSource<String> source = MongoSource.<String>builder()
.setUri(URI)
.setDatabase(MONGO_DATABASE)
.setCollection(collectionName)
.setNoCursorTimeout(true)
.setPartitionStrategy(PartitionStrategy.SAMPLE)
.setPartitionSize(MemorySize.ofMebiBytes(64))
.setSamplesPerPartition(10)
.setDeserializationSchema(new
MongoDeserializationSchema<String>() {
@Override
public String deserialize(BsonDocument document) {
return document.toJson();
}
@Override
public TypeInformation<String> getProducedType() {
return BasicTypeInfo.STRING_TYPE_INFO;
}
})
.build();
return source;
}
}
Any help would be appreciated.
Thanks and regards,
ANITA KUMARI | Software Engineer Sr | Insight
t. 480-366-7025 | c. 913.272.9568 | [email protected] |
insight.com
-----Original Message-----
From: Kumari, Anita
Sent: Monday, October 9, 2023 8:47 AM
To:
user-sc.1696859006.jobhkhjcpbkgdkojonii-Anita.Kumari=insight....@flink.apache.org
Subject: RE: confirm subscribe to [email protected]
Yes add me to the list.
Thanks and regards,
ANITA KUMARI | Software Engineer Sr | Insight t. 480-366-7025 | c.
913.272.9568 | [email protected] | insight.com
-----Original Message-----
From: [email protected] <[email protected]>
Sent: Monday, October 9, 2023 8:43 AM
To: Kumari, Anita <[email protected]>
Subject: confirm subscribe to [email protected]
External Message - Please be cautious when opening links or attachments in email
Hi! This is the ezmlm program. I'm managing the [email protected] mailing
list.
To confirm that you would like
[email protected]
added to the user mailing list, please send a short reply to this address:
user-sc.1696859006.jobhkhjcpbkgdkojonii-Anita.Kumari=insight....@flink.apache.org
Usually, this happens when you just hit the "reply" button.
If this does not work, simply copy the address and paste it into the "To:"
field of a new message.
This confirmation serves two purposes. First, it verifies that I am able to get
mail through to you. Second, it protects you in case someone forges a
subscription request in your name.
Please note that ALL Apache dev- and user- mailing lists are publicly archived.
Do familiarize yourself with Apache's public archive policy at
http://www.apache.org/foundation/public-archives.html
prior to subscribing and posting messages to [email protected].
If you're not sure whether or not the policy applies to this mailing list,
assume it does unless the list name contains the word "private" in it.
Some mail programs are broken and cannot handle long addresses. If you cannot
reply to this request, instead send a message to
<[email protected]> and put the entire address listed above into
the "Subject:" line.
--- Administrative commands for the user list ---
I can handle administrative requests automatically. Please do not send them to
the list address! Instead, send your message to the correct command address:
To subscribe to the list, send a message to:
<[email protected]>
To remove your address from the list, send a message to:
<[email protected]>
Send mail to the following for info and FAQ for this list:
<[email protected]>
<[email protected]>
Similar addresses exist for the digest list:
<[email protected]>
<[email protected]>
To get messages 123 through 145 (a maximum of 100 per request), mail:
<[email protected]>
To get an index with subject and author for messages 123-456 , mail:
<[email protected]>
They are always returned as sets of 100, max 2000 per request, so you'll
actually get 100-499.
To receive all messages with the same subject as message 12345, send a short
message to:
<[email protected]>
The messages should contain one line or word of text to avoid being treated as
sp@m, but I will ignore their content.
Only the ADDRESS you send to is important.
You can start a subscription for an alternate address, for example
"[email protected]", just add a hyphen and your address (with '=' instead of
'@') after the command word:
<[email protected]>
To stop subscription for this address, mail:
<[email protected]>
In both cases, I'll send a confirmation message to that address. When you
receive it, simply reply to it to complete your subscription.
If despite following these instructions, you do not get the desired results,
please contact my owner at [email protected]. Please be patient, my
owner is a lot slower than I am ;-)
--- Enclosed is a copy of the request I received.
Return-Path: <[email protected]>
Received: (qmail 529643 invoked by uid 116); 9 Oct 2023 13:43:26 -0000
Received: from spamproc1-he-de.apache.org (HELO spamproc1-he-de.apache.org)
(116.203.196.100) by apache.org (qpsmtpd/0.94) with ESMTP; Mon, 09 Oct 2023
13:43:26 +0000
Authentication-Results: apache.org; auth=none
Received: from localhost (localhost [127.0.0.1])
by spamproc1-he-de.apache.org (ASF Mail Server at
spamproc1-he-de.apache.org) with ESMTP id BB5611FF930
for <[email protected]>; Mon, 9 Oct 2023 13:43:26 +0000
(UTC)
X-Virus-Scanned: Debian amavisd-new at spamproc1-he-de.apache.org
X-Spam-Flag: NO
X-Spam-Score: -4.999
X-Spam-Level:
X-Spam-Status: No, score=-4.999 tagged_above=-999 required=6.31
tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1,
DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.2, RCVD_IN_DNSWL_HI=-5,
SPF_PASS=-0.001, URIBL_BLOCKED=0.001, WEIRD_PORT=0.001]
autolearn=disabled
Authentication-Results: spamproc1-he-de.apache.org (amavisd-new);
dkim=pass (2048-bit key) header.d=insight.com
Received: from mx1-ec2-va.apache.org ([116.203.227.195])
by localhost (spamproc1-he-de.apache.org [116.203.196.100])
(amavisd-new, port 10024)
with ESMTP id 3sAhuQTmsEFs for <[email protected]>;
Mon, 9 Oct 2023 13:43:24 +0000 (UTC)
Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=139.138.35.239;
helo=esa.hc3834-14.iphmx.com; [email protected];
receiver=<UNKNOWN>
Received: from esa.hc3834-14.iphmx.com (esa.hc3834-14.iphmx.com
[139.138.35.239])
by mx1-ec2-va.apache.org (ASF Mail Server at mx1-ec2-va.apache.org)
with ESMTPS id E5389BE7D3
for <[email protected]>; Mon, 9 Oct 2023 13:43:23 +0000
(UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
d=insight.com; [email protected]; q=dns/txt; s=ces;
t=1696859004; x=1728395004;
h=from:to:subject:date:message-id:mime-version;
bh=nVSD1yMw/YREgJXX8SAvKxASOD0oAkGL5FZbJiMHwHE=;
b=P6VBq11t7gpg3IjnueGxJjswztSJEHwUP+NVwej3M62t692+Y/iMSwa0
G4muSiUBmaYqJRAUnMNTQnL7tcklbfyP4tsrXQCXRlXiE+egiTx923Ze2
j9SnEISK57fyi8KrAwcmo7aoWugL3MlSytnH7HPk1mtRVWtkWZ0L7otIu
V0N2uOtx+I5AezbCpnVVOa5oAsjaT33wJnp7omPR/VvSHXvUJuU77fkYg
jc18mdrbthUD7FBmEx6Jq90m9sspRnIUgXNcGGKGXo8sRw9X6RIOULG3I
Gi+0VSZ4q/wdHs5hkgYY//y2CrqkMClnD8OfhIueIVrCONVmpVJwjA9L8
A==;
X-CSE-ConnectionGUID: 7BbC2KonQd2yWmpgrUOydQ==
X-CSE-MsgGUID: kEhXo4rkT5mCSJ6HnGBE1Q==
X-IronPort-RemoteIP: 104.47.56.168
X-IronPort-MID: 81577351
X-IronPort-Reputation: None
X-IronPort-Listener: OutgoingMail
X-IronPort-SenderGroup: RELAY_O365
X-IronPort-MailFlowPolicy: $RELAYED
Received: from mail-co1nam11lp2168.outbound.protection.outlook.com (HELO
NAM11-CO1-obe.outbound.protection.outlook.com) ([104.47.56.168])
by ob1.hc3834-14.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Oct
2023 13:43:17 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
b=c6GId9m5dxtIdoY+EdildsJSLra5zIK0QOQ+aUa+OAZSFS3U2XBG/GIcuZO0jWf7EanjoMWWtoFJiH3r+9wWjzNKhAOK86TLDR17Ss3wMVYX3tkIRb5VkiST/igSK9scFFECicAXOB8eeMDDxEUSaQsJdsM3ql48/CvcLUUCuNaYQ3ru53hN2HvGAzSWCbXmBfR8nx9ukv49KfvfO9gQFLa/Wc8RtLrtLlwozkr3Nxm4FIupNRkROFgKkoMERGSsxUnwbFIEZk7TdYGGxDYUOSloQPz/gGH3eZA7NenaamJmObjYIYnBBt6jXAHfVKnduaDF/U2yCbbfkcLi20txEw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;
s=arcselector9901;
h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
bh=9LxwrBoOtBn5eBneOrydMdtdQg6QnCzlBoGg+kO7aVM=;
b=W5JL9YRm/iK+oEl+Y5uY20LOXhosdDla3uq91T4t9ddAPcrmzHOtpzqVUObFtEOZ2ShOy2oIdtlNJm2D48xemTFZvrIALXdjO7zEMSXJHOPUcySTkgOFngHhJYLYd5wFc0s/XA7iEeAmVC+ToO0VRY14inyrkBx8oPQQs2tJ7x9frvIbyyBuYLqACDWKA9iVsYMfa/qGbx5ehe8vqptYZV/Qw1nwyVg3jbZGz+sPJMvmOczJqB88AwP/sL4+4VNEQzMrN/4lhJR/dlhVJtqxGth+Tt9RIRWXOLA7btQuLwC9fbCn/lIFSpM8ZkxD6/jgy+r37GbrHyUHVPNMOnojMA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
smtp.mailfrom=insight.com; dmarc=pass action=none header.from=insight.com;
dkim=pass header.d=insight.com; arc=none
Received: from BN8PR06MB5777.namprd06.prod.outlook.com (2603:10b6:408:c6::19)
by PH0PR06MB7949.namprd06.prod.outlook.com (2603:10b6:510:a6::11) with
Microsoft SMTP Server (version=TLS1_2,
cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6863.36; Mon, 9 Oct
2023 13:43:14 +0000
Received: from BN8PR06MB5777.namprd06.prod.outlook.com
([fe80::aef7:3c62:a760:f2b9]) by BN8PR06MB5777.namprd06.prod.outlook.com
([fe80::aef7:3c62:a760:f2b9%3]) with mapi id 15.20.6863.032; Mon, 9 Oct 2023
13:43:14 +0000
From: "Kumari, Anita" <[email protected]>
To: "[email protected]" <[email protected]>
Subject: Help needed in Apache Flink for Event processing from consume,sink
then source same events flow
Thread-Topic: Help needed in Apache Flink for Event processing from
consume,sink then source same events flow
Thread-Index: Adn6tm4rrchBRLPYQvmJf5cliu5jRQ==
Date: Mon, 9 Oct 2023 13:43:14 +0000
Message-ID:
<bn8pr06mb57770bdf237edded8c51ebac87...@bn8pr06mb5777.namprd06.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator:
authentication-results: dkim=none (message not signed)
header.d=none;dmarc=none action=none header.from=insight.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: BN8PR06MB5777:EE_|PH0PR06MB7949:EE_
x-ms-office365-filtering-correlation-id: 423b14a1-4c8a-4241-1ece-08dbc8cdaf8a
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info:
JnUqw0itYucFiBG8FNMKTD6DQRmLnJM6YwyFDtYhSfws8TDzqsC6mhDCwzDCqRGK2JlKjE97mXZ8Xm6tzC5DHWqlX9L8RMOJHRt2bx78q+FOMVWTclDJ08NFEyF/2E1puEc4RPFQ9MjJvVpLhLadxGqPaPVU3bkiaR5fR/3Yr+BxxczJh9V9yya3+dYgu0lmzBjH0RSlk4bbh778o2fOTkU51wclIoMVwspNhkF8LPXh2XnuqP575bLGSvBI7C76BUZ/Kx+JkvJIILTMkj6CwxxXuMLuVygu7HPQ5w4vwKmxJjQP8pEN/av1NgYkZ7TPOxr47kIH9vcfbjyomEVWeVVqCfjtjAkSjd4QfQuCiljaIXsKaRb99v42tpDrB197t2nQtJQeNfrwoX4M2K+DCDEaSF4RxWGxrz713vVhuTcVlwz/YFdfTpwwb9R5ErzCowSxAV1TVJyM443J9cQcw/xdYW4bzswfQcRxFESQ2ae8sebHuDuhMxWebiV9SRyezTnyWUqMTZLprZ9EvNmBw1qmzQLDj/IxpFgY4JRmZP1aHa2zPz55b6zmjTzcd+DdURgFwnJKfS6Mm9qtFyacfDWWA6Cpbi4T6ZB2V0geqxg=
x-forefront-antispam-report:
CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN8PR06MB5777.namprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(39860400002)(396003)(346002)(136003)(376002)(366004)(209900001)(230922051799003)(186009)(64100799003)(451199024)(1800799009)(9686003)(71200400001)(26005)(99936003)(55016003)(82960400001)(38100700002)(86362001)(33656002)(40140700001)(38070700005)(122000001)(166002)(83380400001)(6506007)(2906002)(478600001)(7696005)(21615005)(8676002)(5660300002)(76116006)(52536014)(41300700001)(8936002)(316002)(6916009)(66446008)(64756008)(66946007)(9326002)(66556008)(66476007);DIR:OUT;SFP:1101;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0:
=?utf-8?B?ZmxGOXM0Y01rYkhPUHRtM2hHRWZqcys2a2had2srRys4TGdkK1NoT0s2L0M5?=
=?utf-8?B?K2hwMG95d0xVcnlEVU5Mb0V3N0w1ZVV3Z1BoM1ZndWtPaG4rYTY5Q25ObXE1?=
=?utf-8?B?ZUU3UVJDL0xhZ25QSUxzU2JhdVh4Wm5BV2cxdHJGanYveC9oNGk1N2gySmJh?=
=?utf-8?B?ak1vRUFBVUZieGltdnViWS9xYjhQQzFRUnYvYzhQUnh2YTlFWnpXckZDbWtC?=
=?utf-8?B?REdMZ2x4b2RCV0JJbDM3bmFESktIZTl2UmVRWWlSTXc1WVY2QmhOWTVNb29v?=
=?utf-8?B?OHgyMGlVd2dhTjFDSHc2RXNDL1BucHZTNStMZHhBMkpob01Cc1lhQzZSTCtN?=
=?utf-8?B?TWU3TWkrQ245T1BMQUNib0hKRVBNVng2bW9sbTRLT1FOL21tdzIzdytKRUUy?=
=?utf-8?B?MFE2MkFCSzFGMHhEeGt4cnhjQ0QwZ1NzdFNVdFZxRHJqTngwM09Qek5hNjNa?=
=?utf-8?B?SFVtWlB5Yjc3cTNVZm5xbUFRRXM2dHlBWVVtTHpWRy94TTVGQStHM1ZZWW96?=
=?utf-8?B?cllKZHhmdUxFRmFuZnlybWdJQWI5UTU0N3pDOW9MdFUwT2tVeE10REoza0Zu?=
=?utf-8?B?WWRjYVo3RTM1S1VZY3lhaU93anRaTzE3aktlTjBVVW1nN2NPZWVrYlhsK1pa?=
=?utf-8?B?Sk9vVUgyVTRxblIxNHEvQjE4OUNHbXBwSWh5cXE5M2RjOTFjZVNINVM5UTRi?=
=?utf-8?B?YjA5UmZLKzdsMktBU0N1WWs1L3FHc2ZvMHNKNGxBN1czSFo1MWx3TElpM3RG?=
=?utf-8?B?dFJpY1hDVjdSak9wblorK0I1VGl1SXpGL1ZtTFVTR0d2eTh6LzRweGdkOE5Q?=
=?utf-8?B?RHZtNUJFdXE3WVhzVkJXZTR0dkVFdTFKdmtDOWNYQ1lCRDhoS3poU2JtK1B5?=
=?utf-8?B?dVVlYXo2c1RvMkdkSUFzMUZiemdhQ3NkQXlLV2cremZlcDU2ZTgydEROeHVs?=
=?utf-8?B?RXllMzhiNWhQYTJFMTBkbGRiMWVsRnBqMTlUNEZ5V3NPQy9wNHplQWpDQ3dm?=
=?utf-8?B?NXlBOHZRZXRHVjdya0gxSG84c3NVeUFUMzVqVzArMm5WOWFkTzAzbjFYMi93?=
=?utf-8?B?RGFLWTJyUXhSWmJoa3VFbUVTN0pPcXZZd3pQRXZ3elU2Sjd6OGx6Zjk3ODBx?=
=?utf-8?B?UmJRaXVLcXMyZ3RWUThLZ2k5eDhwbWJ0T0hvdFRtYlVtUUpxUVhpSERpaDhT?=
=?utf-8?B?MjY3bW13MVNRYnlPaXJ5UG8wbllaaWtFVWZyRkJDeWY1Q2wvbEk4VXZqSklM?=
=?utf-8?B?VDhpNFFaMmhUSkRCY1FpalBkRTdXQWpnNlcyR2FrMUVITm9IQjA3WFJNeW9u?=
=?utf-8?B?UzJGUFdNWklWblZDN0FaeUp6TTJRTzYwTVRzTUlWY1Ivem9zUXlVODg5UGox?=
=?utf-8?B?REZMNm1WTUVvNkk3WXlPdU12eWVpWGdMM0Z2Q3lxSTNBVkc1VnNjVXZRVURn?=
=?utf-8?B?Q1grT09GbHNXRWpKQ2dIV3FwdHRHUWhQRTlBUFZPVGVSZWhheStRQlRZRmlX?=
=?utf-8?B?ZWpPWXpjVGZGSmVKZWJXdWdmamFXR3VrdTNJaDNuR1BXSDI3S2x1aWpaQkMy?=
=?utf-8?B?Z1JyQXNFQ2lxNGhEaW9FbExZSUkxaWliblJkVVlwRVZVdXZLNUN2dXAxWkda?=
=?utf-8?B?N1lCSHU4SWU4YzV6d2JmRENJeW9PMGtqb1Q4S1ViTklXczlXWUZDZzFTRzNw?=
=?utf-8?B?Q2l5MTF4d3gxbFZTWDJhdWRTanEvNFNSS09BaEZWaHFSZ1AvV1NTVzZXZzZQ?=
=?utf-8?B?Nm15dkRHSG1ySmVKL1hEVEEzN01yMkNVZlRRWDVZanMyN1pvV1AvZkFMMDNm?=
=?utf-8?B?UlR4ZzVNMjNsWGlGdlhsaWlvQ00vd00vZ09JNUJtQncwajhxZkdVK3JOZ0h2?=
=?utf-8?B?eVlQSnA1eGpidjFWaW5WL2ZBaFhYeExnZndxMG91ZzdQZ2hoUjYrVDNienlF?=
=?utf-8?B?bS9rNUd4OGFyU1o2dDRBZUxXZnllZklDSjBUOFRQaVZ4djZodDFlR1dzVE80?=
=?utf-8?B?R2xPVUNGOE4wYnR5anplNm9idUZtQjZhc00ySFpvbHRZTGlSNUUxMDJ2SU5Q?=
=?utf-8?B?aWsveEJKdllGbi95dmZVanY5eFNhdnkrRlVpMStISFRDVExEL0wvNlpFcWho?=
=?utf-8?Q?aRK7cXMAH50GbrIKUK0snYuqV?=
Content-Type: multipart/related;
boundary="_004_BN8PR06MB57770BDF237EDDED8C51EBAC87CEABN8PR06MB5777namp_";
type="multipart/alternative"
MIME-Version: 1.0
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0:
lOFz9w+kx6vn9vqFXRn03huMxt/Pn+yxj7TBvli7Bu2VzTKqBIPYcOjd34yyf/gHcvcmjcO6nS38fIjXXTSmw70eqgQW84j0empEASll1zC1infMk/Hn7aDj+lUWKKGV8/5MK/wyY+OzOELv8LVUNef5DlwGYVq2xQGKmRIYx7zyh4WPvI05CBj5MU2GzicNQgHmUUu3vAiz+bXEXJrxkXsc7ZGxpCdQCMrsRZYDSrXUu5NdtHqzkTbpcCHLELlm4UDCuON09YBrJ/+1fxIbdCSjFiBq9BR8rl8hxe5FkIsSPd4RWxFn4a5I0wbDa6JvrexlEjrxW9wwOZRYylB3cC2rGhKvjqz4i89uxohCLzRxHEb81jMyoQlghxbz63AxF0WwmHKmB1LmGku+wkWly0RSFxpnbLiZpaBzR6wImTaWMfa1rCXs/js40UYpwCIbUGQ/NtgqJov4tuk04GvAiOyY353I2p/vlj5MOomDK5rBhZFHs0nROjYT+fKo0/jezASDhMUtZW1rutdYJDEv6NDyoKrkLcWjKNd205m/RIVyoU+VFnx0Qa3bBh1res7a6tbPV0V9uDpTlM4guOjPXlw7G4x4qvw9fRmItAhTL0fwGC3BZnUsILsGhMGB+gfCFtfQ2HlvOUjYnauOx0Nl66tTW1dJ0ePy9BKcgPb7uWw6bkaqZYdzJ+zph5utX6hxvfh8VOF8qTrdaGUoOodza/OWbJH1N2OlNzG/WnATgZDhzRfNVCwp6eLn1Bb0UUu1E8bu8llpuvUSzc/JtqaIPg==
X-OriginatorOrg: insight.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: BN8PR06MB5777.namprd06.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id:
423b14a1-4c8a-4241-1ece-08dbc8cdaf8a
X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Oct 2023 13:43:14.1938
(UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 6c637512-c417-4e78-9d62-b61258e4b619
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname:
k1qxcGonBRSTms3uU1ydp3BSjEzxG+vUP0YVg2KdZGUyYZnHFa4lpXcoYJC9Fntd2N/2qGImFbsOUJtWDmIXisaJ5w/Wel0bth7vVMBJ2Ks=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR06MB7949