diff --git a/docker-compose/deploy/app-developer/.env b/docker-compose/deploy/app-developer/.env index f7fe4ac..b919b3a 100644 --- a/docker-compose/deploy/app-developer/.env +++ b/docker-compose/deploy/app-developer/.env @@ -1,6 +1,6 @@ PGSQL_VERSION=11.7-alpine P6CORE_IMAGE_ID=amalto/platform6 -P6CORE_VERSION=6.0.1 +P6CORE_VERSION=latest P6CORE_DATA=p6core.data PROXY_ENV=prod INSTANCE_ID=unnamed diff --git a/docker-compose/deploy/demobc-developer/.env b/docker-compose/deploy/demobc-developer/.env index f7fe4ac..b919b3a 100644 --- a/docker-compose/deploy/demobc-developer/.env +++ b/docker-compose/deploy/demobc-developer/.env @@ -1,6 +1,6 @@ PGSQL_VERSION=11.7-alpine P6CORE_IMAGE_ID=amalto/platform6 -P6CORE_VERSION=6.0.1 +P6CORE_VERSION=latest P6CORE_DATA=p6core.data PROXY_ENV=prod INSTANCE_ID=unnamed diff --git a/docker-compose/deploy/failover-server/.env b/docker-compose/deploy/failover-server/.env index b5ee285..b0af2f1 100644 --- a/docker-compose/deploy/failover-server/.env +++ b/docker-compose/deploy/failover-server/.env @@ -1,6 +1,6 @@ PGSQL_VERSION=11.7-alpine NGINX_VERSION=1.17.9 -P6CORE_VERSION=6.0.1 +P6CORE_VERSION=latest P6CORE_IMAGE_ID=amalto/platform6 P6CORE_DATA=p6core.data INSTANCE_ID=unnamed diff --git a/docker-compose/deploy/standalone-server-nginx/.env b/docker-compose/deploy/standalone-server-nginx/.env index b5ee285..b0af2f1 100644 --- a/docker-compose/deploy/standalone-server-nginx/.env +++ b/docker-compose/deploy/standalone-server-nginx/.env @@ -1,6 +1,6 @@ PGSQL_VERSION=11.7-alpine NGINX_VERSION=1.17.9 -P6CORE_VERSION=6.0.1 +P6CORE_VERSION=latest P6CORE_IMAGE_ID=amalto/platform6 P6CORE_DATA=p6core.data INSTANCE_ID=unnamed diff --git a/docker-compose/deploy/standalone-server-traefik/.env b/docker-compose/deploy/standalone-server-traefik/.env index fe2f698..de49bb4 100644 --- a/docker-compose/deploy/standalone-server-traefik/.env +++ b/docker-compose/deploy/standalone-server-traefik/.env @@ -1,6 +1,6 @@ PGSQL_VERSION=11.7-alpine TRAEFIK_VERSION=v2.1 -P6CORE_VERSION=6.0.1 +P6CORE_VERSION=latest P6CORE_IMAGE_ID=amalto/platform6 P6CORE_DATA=p6core.data INSTANCE_ID=unnamed diff --git a/docker-compose/deploy/standalone-server/.env b/docker-compose/deploy/standalone-server/.env index 7a24710..88d875d 100644 --- a/docker-compose/deploy/standalone-server/.env +++ b/docker-compose/deploy/standalone-server/.env @@ -1,6 +1,6 @@ PGSQL_VERSION=11.7-alpine P6CORE_IMAGE_ID=amalto/platform6 -P6CORE_VERSION=6.0.1 +P6CORE_VERSION=latest P6CORE_DATA=p6core.data INSTANCE_ID=unnamed PLATFORM6_DATA_PATH=~/platform6/instances diff --git a/docker-compose/reference/dev/p6init.sql b/docker-compose/reference/dev/p6init.sql index 0c00b5a..0663da4 100644 --- a/docker-compose/reference/dev/p6init.sql +++ b/docker-compose/reference/dev/p6init.sql @@ -42,8 +42,8 @@ ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION -- PostgreSQL database dump -- --- Dumped from database version 11.3 --- Dumped by pg_dump version 11.3 +-- Dumped from database version 11.7 +-- Dumped by pg_dump version 11.7 SET statement_timeout = 0; SET lock_timeout = 0; @@ -123,8 +123,8 @@ GRANT CONNECT ON DATABASE template1 TO PUBLIC; -- PostgreSQL database dump -- --- Dumped from database version 11.3 --- Dumped by pg_dump version 11.3 +-- Dumped from database version 11.7 +-- Dumped by pg_dump version 11.7 SET statement_timeout = 0; SET lock_timeout = 0; @@ -309,8 +309,17 @@ ALTER TABLE p6core.item OWNER TO b2box; -- Name: log; Type: TABLE; Schema: p6core; Owner: b2box -- -CREATE TABLE p6core.log PARTITION OF p6core.item -FOR VALUES IN ('LOG'); +CREATE TABLE p6core.log ( + datapartition p6core.itempartitiontype NOT NULL, + datatype character varying(64) NOT NULL, + iid1 character varying(256) NOT NULL, + iid2 character varying(96) NOT NULL, + iid3 character varying(96) NOT NULL, + iid4 character varying(96) NOT NULL, + content xml NOT NULL, + inserttime bigint +); +ALTER TABLE ONLY p6core.item ATTACH PARTITION p6core.log FOR VALUES IN ('LOG'); ALTER TABLE p6core.log OWNER TO b2box; @@ -349,8 +358,17 @@ ALTER TABLE p6core.serviceconfig OWNER TO b2box; -- Name: table_data; Type: TABLE; Schema: p6core; Owner: b2box -- -CREATE TABLE p6core.table_data PARTITION OF p6core.item -FOR VALUES IN ('TABLE_DATA'); +CREATE TABLE p6core.table_data ( + datapartition p6core.itempartitiontype NOT NULL, + datatype character varying(64) NOT NULL, + iid1 character varying(256) NOT NULL, + iid2 character varying(96) NOT NULL, + iid3 character varying(96) NOT NULL, + iid4 character varying(96) NOT NULL, + content xml NOT NULL, + inserttime bigint +); +ALTER TABLE ONLY p6core.item ATTACH PARTITION p6core.table_data FOR VALUES IN ('TABLE_DATA'); ALTER TABLE p6core.table_data OWNER TO b2box; @@ -359,8 +377,17 @@ ALTER TABLE p6core.table_data OWNER TO b2box; -- Name: transaction; Type: TABLE; Schema: p6core; Owner: b2box -- -CREATE TABLE p6core.transaction PARTITION OF p6core.item -FOR VALUES IN ('TRANSACTION'); +CREATE TABLE p6core.transaction ( + datapartition p6core.itempartitiontype NOT NULL, + datatype character varying(64) NOT NULL, + iid1 character varying(256) NOT NULL, + iid2 character varying(96) NOT NULL, + iid3 character varying(96) NOT NULL, + iid4 character varying(96) NOT NULL, + content xml NOT NULL, + inserttime bigint +); +ALTER TABLE ONLY p6core.item ATTACH PARTITION p6core.transaction FOR VALUES IN ('TRANSACTION'); ALTER TABLE p6core.transaction OWNER TO b2box; @@ -426,7 +453,8 @@ COPY p6core.flyway_schema_history (installed_rank, version, description, type, s 30 30 B2BOX5-2059 Remove p6rest registration SQL V30__B2BOX5-2059_Remove_p6rest_registration.sql 1031885722 b2box 2020-01-10 11:43:55.526183 8 t 31 31 B2BOX5-2048 Create instancedata table SQL V31__B2BOX5-2048_Create_instancedata_table.sql -2118184683 b2box 2020-02-20 18:14:02.649568 31 t 32 32 B2BOX5-2100 Simplify table field SQL V32__B2BOX5-2100_Simplify_table_field.sql 1117258956 b2box 2020-02-20 18:14:02.696593 5 t -33 33 P6CORE-28 TransactionMessage xpath indexes SQL V33__P6CORE-28_TransactionMessage_xpath_indexes.sql 226923796 b2box 2020-03-18 13:44:23.128842 38 t +33 33 P6CORE-28 TransactionMessage xpath indexes SQL V33__P6CORE-28_TransactionMessage_xpath_indexes.sql 453706835 b2box 2020-03-25 17:30:36.086775 37 t +34 34 P6CORE-216 Remove unused datasource attributes SQL V34__P6CORE-216_Remove_unused_datasource_attributes.sql -1034506901 b2box 2020-03-25 17:30:36.136025 3 t \. @@ -706,6 +734,41 @@ CREATE INDEX item_idx01 ON p6core.transaction USING btree (datapartition); CREATE INDEX item_idx02 ON p6core.transaction USING btree (datatype); +-- +-- Name: item_mi_fts_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx01 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx02 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/CreationDate//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx03 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx04 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx05; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx05 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + -- -- Name: item_mi_idx01; Type: INDEX; Schema: p6core; Owner: b2box -- @@ -769,6 +832,34 @@ CREATE INDEX item_ti_fts_idx04 ON p6core.transaction USING gist (to_tsvector('en CREATE INDEX item_ti_fts_idx05 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/TransactionInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))) WHERE ((datatype)::text = 'TransactionInfo'::text); +-- +-- Name: item_ti_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_idx01 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/TransactionInfo/CreationDate//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_idx02 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/TransactionInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_idx03 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/TransactionInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_idx04 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/TransactionInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + -- -- Name: log_datatype_idx; Type: INDEX; Schema: p6core; Owner: b2box -- @@ -819,8 +910,8 @@ GRANT ALL ON DATABASE b2box TO b2box; -- PostgreSQL database dump -- --- Dumped from database version 11.3 --- Dumped by pg_dump version 11.3 +-- Dumped from database version 11.7 +-- Dumped by pg_dump version 11.7 SET statement_timeout = 0; SET lock_timeout = 0; diff --git a/docker-compose/reference/dev/p6init_with_demoapp.sql b/docker-compose/reference/dev/p6init_with_demoapp.sql index 975e5ba..e83451b 100644 --- a/docker-compose/reference/dev/p6init_with_demoapp.sql +++ b/docker-compose/reference/dev/p6init_with_demoapp.sql @@ -42,8 +42,8 @@ ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION -- PostgreSQL database dump -- --- Dumped from database version 11.3 --- Dumped by pg_dump version 11.3 +-- Dumped from database version 11.7 +-- Dumped by pg_dump version 11.7 SET statement_timeout = 0; SET lock_timeout = 0; @@ -123,8 +123,8 @@ GRANT CONNECT ON DATABASE template1 TO PUBLIC; -- PostgreSQL database dump -- --- Dumped from database version 11.3 --- Dumped by pg_dump version 11.3 +-- Dumped from database version 11.7 +-- Dumped by pg_dump version 11.7 SET statement_timeout = 0; SET lock_timeout = 0; @@ -309,8 +309,17 @@ ALTER TABLE p6core.item OWNER TO b2box; -- Name: log; Type: TABLE; Schema: p6core; Owner: b2box -- -CREATE TABLE p6core.log PARTITION OF p6core.item -FOR VALUES IN ('LOG'); +CREATE TABLE p6core.log ( + datapartition p6core.itempartitiontype NOT NULL, + datatype character varying(64) NOT NULL, + iid1 character varying(256) NOT NULL, + iid2 character varying(96) NOT NULL, + iid3 character varying(96) NOT NULL, + iid4 character varying(96) NOT NULL, + content xml NOT NULL, + inserttime bigint +); +ALTER TABLE ONLY p6core.item ATTACH PARTITION p6core.log FOR VALUES IN ('LOG'); ALTER TABLE p6core.log OWNER TO b2box; @@ -349,8 +358,17 @@ ALTER TABLE p6core.serviceconfig OWNER TO b2box; -- Name: table_data; Type: TABLE; Schema: p6core; Owner: b2box -- -CREATE TABLE p6core.table_data PARTITION OF p6core.item -FOR VALUES IN ('TABLE_DATA'); +CREATE TABLE p6core.table_data ( + datapartition p6core.itempartitiontype NOT NULL, + datatype character varying(64) NOT NULL, + iid1 character varying(256) NOT NULL, + iid2 character varying(96) NOT NULL, + iid3 character varying(96) NOT NULL, + iid4 character varying(96) NOT NULL, + content xml NOT NULL, + inserttime bigint +); +ALTER TABLE ONLY p6core.item ATTACH PARTITION p6core.table_data FOR VALUES IN ('TABLE_DATA'); ALTER TABLE p6core.table_data OWNER TO b2box; @@ -359,8 +377,17 @@ ALTER TABLE p6core.table_data OWNER TO b2box; -- Name: transaction; Type: TABLE; Schema: p6core; Owner: b2box -- -CREATE TABLE p6core.transaction PARTITION OF p6core.item -FOR VALUES IN ('TRANSACTION'); +CREATE TABLE p6core.transaction ( + datapartition p6core.itempartitiontype NOT NULL, + datatype character varying(64) NOT NULL, + iid1 character varying(256) NOT NULL, + iid2 character varying(96) NOT NULL, + iid3 character varying(96) NOT NULL, + iid4 character varying(96) NOT NULL, + content xml NOT NULL, + inserttime bigint +); +ALTER TABLE ONLY p6core.item ATTACH PARTITION p6core.transaction FOR VALUES IN ('TRANSACTION'); ALTER TABLE p6core.transaction OWNER TO b2box; @@ -426,7 +453,8 @@ COPY p6core.flyway_schema_history (installed_rank, version, description, type, s 30 30 B2BOX5-2059 Remove p6rest registration SQL V30__B2BOX5-2059_Remove_p6rest_registration.sql 1031885722 b2box 2020-01-10 11:43:55.526183 8 t 31 31 B2BOX5-2048 Create instancedata table SQL V31__B2BOX5-2048_Create_instancedata_table.sql -2118184683 b2box 2020-02-20 18:14:02.649568 31 t 32 32 B2BOX5-2100 Simplify table field SQL V32__B2BOX5-2100_Simplify_table_field.sql 1117258956 b2box 2020-02-20 18:14:02.696593 5 t -33 33 P6CORE-28 TransactionMessage xpath indexes SQL V33__P6CORE-28_TransactionMessage_xpath_indexes.sql 226923796 b2box 2020-03-18 13:44:23.128842 38 t +33 33 P6CORE-28 TransactionMessage xpath indexes SQL V33__P6CORE-28_TransactionMessage_xpath_indexes.sql 453706835 b2box 2020-03-25 17:30:36.086775 37 t +34 34 P6CORE-216 Remove unused datasource attributes SQL V34__P6CORE-216_Remove_unused_datasource_attributes.sql -1034506901 b2box 2020-03-25 17:30:36.136025 3 t \. @@ -462,7 +490,7 @@ COPY p6core.serviceconfig (id1, id2, id3, content, bytes, inserttime) FROM stdin Default email {"name": "Default", "type": "JAVAMAIL", "appKey": "", "revisionId": "edf7ea27e3c35e3c0071e669e34d1d98", "contentMode": "NONE", "description": {"EN": "Default email profile"}, "defaultProfile": true, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548169368257, "configurationProperties": {}} \N 1548169368271 Logging Event views {"name": "Logging Event", "type": "TRANSACTIONS", "appKey": "", "xmlView": "\\n \\n logging_event\\n \\n LOG\\n \\n \\n \\n ID\\n \\n Id\\n Identifiant\\n \\n logging_event/id\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n RangeOfDates(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n StringContains\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n StringContains\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n StringContains\\n \\n \\n AnyField\\n \\n Contains the words\\n Contient les mots\\n \\n logging_event\\n StringContains\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n Date(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n String\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n String\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n String\\n \\n \\n Level\\n \\n Level\\n Level\\n \\n logging_event/level\\n String\\n \\n \\n\\n", "revisionId": "efe8acc7d4f399db36d7f501f3487c9c", "contentMode": "NONE", "description": {"EN": "Logging Event", "FR": "Evènement de log"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548267162338} \N 1548267162347 _logging_event datamodels {"name": "_logging_event", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n", "revisionId": "92330d48ae06ac2623bca161872d6cf0", "contentMode": "NONE", "description": {"EN": " Logging events (formerly named .logging_event)"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1538389926868} \N 1538389926969 -b17c9bb9b4b747f68f261357df83c71c p6_demo applications {"logo": "data:image/jpeg;base64,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", "name": "b17c9bb9b4b747f68f261357df83c71c", "appKey": "p6_demo", "status": "6.0.1", "content": "eyJwbGF0Zm9ybTYudmlld3MiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnZpZXdzIiwibmFtZSI6IlRyYW5zYWN0aW9ucyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUcmFuc2FjdGlvbnMgZm9yIHA2X2RlbW9cIixcIkZSXCI6XCJUcmFuc2FjdGlvbnMgcG91ciBwNl9kZW1vXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTc1OTg4NjE1ODk2LFwicmV2aXNpb25JZFwiOlwiOTUyOGIyMjljYWM1NWUwMjZmYmYwYzZjMTlkODQ4ZGJcIixcInR5cGVcIjpcIlRSQU5TQUNUSU9OU1wiLFwieG1sVmlld1wiOlwiPFZpZXc+XFxuICAgIDxTbWFydFRhZ3M+XFxuICAgICAgICA8VHJhbnNhY3Rpb25UeXBlPlRyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvblR5cGU8L1RyYW5zYWN0aW9uVHlwZT5cXG4gICAgICAgIDxUcmFuc2FjdGlvbkZvcm1hdD5UcmFuc2FjdGlvbkluZm8vUGl2b3REb2N1bWVudEZvcm1hdDwvVHJhbnNhY3Rpb25Gb3JtYXQ+XFxuICAgIDwvU21hcnRUYWdzPlxcbiAgICA8RGF0YVR5cGU+cDZfZGVtby5UcmFuc2FjdGlvbkluZm88L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPnA2X2RlbW8uVHJhbnNhY3Rpb25JbmZvPC9EYXRhTW9kZWw+XFxuICAgIDxEYXRhUGFydGl0aW9uPlRSQU5TQUNUSU9OPC9EYXRhUGFydGl0aW9uPlxcbiAgICA8UmVwcm9jZXNzUm91dGVVcmk+ZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fRGlzcGF0Y2hlcjwvUmVwcm9jZXNzUm91dGVVcmk+XFxuICAgIDxMaXN0T2ZLZXlzPlxcbiAgICAgICAgPEtleT5cXG4gICAgICAgICAgICA8TmFtZT5JZDwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5JZDwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5JZDwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0lkPC9YUGF0aD5cXG4gICAgICAgIDwvS2V5PlxcbiAgICA8L0xpc3RPZktleXM+XFxuICAgIDxMaXN0T2ZTZWFyY2hhYmxlcz5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkxvYWREYXRlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkxvYWQgRGF0ZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5EYXRlIGRlIGNyw6lhdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0NyZWF0aW9uRGF0ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+UmFuZ2VPZkRhdGVzKHl5eXlNTWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+U3RhdHVzRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UZWNoLiBTdGF0dXMgRGF0ZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5EYXRlIGRlIG1vZGlmLiBTdGF0dXQgVGVjaC48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNEYXRlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5SYW5nZU9mRGF0ZXMoeXl5eU1NZGQnVCdISDptbTpzcyk8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UcmFuc2FjdGlvblR5cGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGRlIHRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgICAgICA8Q2hvaWNlIGZpZWxkLWxpbmUtaGVpZ2h0PVxcXCIxXFxcIiBtdWx0aS1zZWxlY3Q9XFxcInRydWVcXFwiIG11bHRpLXNlbGVjdC1kZWxpbWl0ZXI9XFxcInxcXFwiPlJlcXVlc3QgZm9yIFF1b3RhdGlvbiwgUXVvdGUsIFB1cmNoYXNlIE9yZGVyPC9DaG9pY2U+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UcmFuc2FjdGlvbk51bWJlcjwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UcmFuc2FjdGlvbiBOdW1iZXI8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+TnVtw6lybyBkZSB0cmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uTnVtYmVyPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkJ1eWVyTmFtZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5CdXllciBOYW1lPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk5vbSBkZSBsJ2FjaGV0ZXVyPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vS2V5VmFsdWVbLi9LZXkgPSBcXFwiQnV5ZXIgTmFtZVxcXCJdL1ZhbHVlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPktleXdvcmRzPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPktleXdvcmRzPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk1vdHMgY2xlZnM8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mbzwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UZWNobmljYWxTdGF0dXNDb2RlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRlY2huaWNhbCBTdGF0dXM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+U3RhdHV0IHRlY2huaXF1ZTwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0NvZGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgICAgIDxDaG9pY2UgZmllbGQtbGluZS1oZWlnaHQ9XFxcIjJcXFwiIG11bHRpLXNlbGVjdD1cXFwidHJ1ZVxcXCIgbXVsdGktc2VsZWN0LWRlbGltaXRlcj1cXFwifFxcXCI+SGFuZGxlZCxSZWNlaXZlZCxTZW50PC9DaG9pY2U+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5GdW5jdGlvbmFsU3RhdHVzQ29kZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5GdW5jdGlvbmFsIFN0YXR1czwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgZm9uY3Rpb25uZWw8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9GdW5jdGlvbmFsU3RhdHVzQ29kZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICAgICAgPENob2ljZSBmaWVsZC1saW5lLWhlaWdodD1cXFwiMlxcXCIgbXVsdGktc2VsZWN0PVxcXCJ0cnVlXFxcIiBtdWx0aS1zZWxlY3QtZGVsaW1pdGVyPVxcXCJ8XFxcIj5BY2NlcHRlZCxEZWNsaW5lZCxRdW90ZSBwcm92aWRlZCxSZWplY3RlZDwvQ2hvaWNlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICA8L0xpc3RPZlNlYXJjaGFibGVzPlxcbiAgICA8TGlzdE9mVmlld2FibGVzPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkxvYWREYXRlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkxvYWQgRGF0ZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5EYXRlIGRlIGNyw6lhdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0NyZWF0aW9uRGF0ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+RGF0ZSh5eXl5TU1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+U3RhdHVzRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5TdGF0dXMgRGF0ZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5EYXRlIHN0YXR1dDwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0RhdGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eU1NZGQnVCdISDptbTpzcyk8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlRyYW5zYWN0aW9uVHlwZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UcmFuc2FjdGlvbiBUeXBlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlR5cGUgZGUgdHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvblR5cGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+VHJhbnNhY3Rpb25OdW1iZXI8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gIzwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5OwrAgZGUgdHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvbk51bWJlcjwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5TZWxsZXJOYW1lPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlNlbGxlciBOYW1lPC9FTj5cXG4gICAgICAgICAgICAgICAgIDxGUj5Ob20gdmVuZGV1cjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlW0tleT1cXFwiU2VsbGVyIE5hbWVcXFwiXS9WYWx1ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5CdXllck5hbWU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+QnV5ZXIgTmFtZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Ob20gZGUgbCdhY2hldGV1cjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlW0tleT1cXFwiQnV5ZXIgTmFtZVxcXCJdL1ZhbHVlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlRlY2huaWNhbFN0YXR1c0NvZGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VGVjaC4gU3RhdHVzPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlN0YXR1dCB0ZWNoLjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0NvZGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+RnVuY3Rpb25hbFN0YXR1c0NvZGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+RnVuY3QuIFN0YXR1czwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgZm9uY3QuPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vRnVuY3Rpb25hbFN0YXR1c0NvZGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+RnVuY3Rpb25hbFN0YXR1c01lc3NhZ2U8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+RnVuY3QuIFN0YXR1cyBNc2cuPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlN0YXR1dCBGb25jdC4gTXNnLjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0Z1bmN0aW9uYWxTdGF0dXNNZXNzYWdlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkRvY3VtZW50PC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvY3VtZW50PC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjY8OocyBkb2MuPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVGFyZ2V0RG9jdW1lbnRVUkk8L1hQYXRoPlxcbiAgICAgICAgICAgICA8VHlwZT5VUkk8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgXFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgPE5hbWU+aXRlbUxpbms8L05hbWU+XFxuICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxFTj5Xb3JrIEl0ZW08L0VOPlxcbiAgICAgICAgICAgIDxGUj5UcmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1dvcmtmbG93L0luc3RhbmNlL2ZsaW5rPC9YUGF0aD5cXG4gICAgICAgICA8VHlwZT5JdGVtTGluazwvVHlwZT5cXG4gICAgICA8L1ZpZXdhYmxlPlxcbiAgICA8L0xpc3RPZlZpZXdhYmxlcz5cXG48L1ZpZXc+XFxuXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTc1OTg4NjE1ODk2fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnZpZXdzIiwibmFtZSI6IldvcmtmbG93IFRhc2tzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiV29ya2Zsb3cgVGFza3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiV29ya2Zsb3cgVGFza3MgZm9yIHA2X2RlbW9cIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NzU5ODg2MTU5MTMsXCJyZXZpc2lvbklkXCI6XCIwNjViOTI1Yjg5YjhiNjQyY2Y3OWYzNjQwZmVlZGY2ZFwiLFwidHlwZVwiOlwiV09SS0lURU1TXCIsXCJ4bWxWaWV3XCI6XCI8Vmlldz5cXG4gICAgPFNtYXJ0VGFncy8+XFxuICAgIDxEYXRhVHlwZT5Xb3JrZmxvd1Rhc2s8L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPldvcmtmbG93VGFzazwvRGF0YU1vZGVsPlxcbiAgICA8RGF0YVBhcnRpdGlvbj5UUkFOU0FDVElPTjwvRGF0YVBhcnRpdGlvbj5cXG4gICAgPFJlcHJvY2Vzc1JvdXRlVXJpLz5cXG4gICAgPExpc3RPZktleXM+XFxuICAgICAgICA8S2V5PlxcbiAgICAgICAgICAgIDxOYW1lPklkPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPklkPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPklkPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaWQ8L1hQYXRoPlxcbiAgICAgICAgPC9LZXk+XFxuICAgIDwvTGlzdE9mS2V5cz5cXG4gICAgPExpc3RPZlNlYXJjaGFibGVzPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+RG9jLiBUeXBlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGR1IERvYzwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25UeXBlXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkRvYy4gTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gTnVtYmVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk7CsCBkdSBEb2M8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPldvcmtmbG93VGFzay9pdGVtQXR0cmlidXRlc1trZXk9XFxcIlRyYW5zYWN0aW9uTnVtYmVyXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkFzc2lnbmVlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkFzc2lnbmVlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRlc3RpbmF0YWlyZTwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2Fzc2lnbmVlcy9hc3NpZ25lZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+SW5MaXN0PC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICA8L0xpc3RPZlNlYXJjaGFibGVzPlxcbiAgICA8TGlzdE9mVmlld2FibGVzPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPldGU3RhcnREYXRlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBTdGFydCBEYXRlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRhdGUgZGUgZMOpYnV0PC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJTdGFydERhdGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eS1NTS1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgIDxOYW1lPkRvY1R5cGU8L05hbWU+XFxuICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgIDxGUj5UeXBlPC9GUj5cXG4gICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPFhQYXRoPi9Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJUcmFuc2FjdGlvblR5cGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgPE5hbWU+RG9jTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgIDxFTj5Eb2MuIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgIDxGUj5OwrAgZG9jLjwvRlI+XFxuICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgIDxYUGF0aD4vV29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25OdW1iZXJcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICBcXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5pdGVtTGluazwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UcmFuc2FjdGlvbjwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UcmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2ZsaW5rPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5JdGVtTGluazwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+V29ya2Zsb3dTdGVwPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBBY3Rpb25zPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjdGlvbnMgV0YuPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svc3RlcC9Xb3JrZmxvd1N0ZXA8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPldvcmtmbG93U3RlcDwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgIDwvTGlzdE9mVmlld2FibGVzPlxcbjwvVmlldz5cXG5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NzU5ODg2MTU5MTN9XSwicGxhdGZvcm02LnJvdXRlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlJvdXRpbmdSdWxlRGlzcGF0Y2hlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJvdXRpbmdSdWxlRGlzcGF0Y2hlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEaXNwYXRjaGVyIHRvIFJGUSwgUXVvdGUgb3IgUE8gUm91dGluZyBSdWxlc1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU3NTk4ODYxNDkyOCxcInJldmlzaW9uSWRcIjpcIjA0NmQ1M2E5MmVkMDg3M2M3M2ViMDU4NTg5YTM2NmIyXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG4gICAgdm9pZCBjb25maWd1cmUoKSB7XFxuICAgICAgICBmcm9tKCdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPSdSZXF1ZXN0IEZvciBRdW90YXRpb24nXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAudG8oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1JlcXVlc3RGb3JRdW90YXRpb24nKVxcbiAgICAgICAgICAgICAgICAud2hlbih4cGF0aChcXFwiL1RyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvblR5cGU9J1F1b3RlJ1xcXCIpKVxcbiAgICAgICAgICAgICAgICAgICAgLnRvKCdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19RdW90ZScpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZT0nUHVyY2hhc2UgT3JkZXInXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAudG8oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1B1cmNoYXNlT3JkZXInKVxcbiAgICAgICAgICAgICAgICAub3RoZXJ3aXNlKClcXG4gICAgICAgICAgICAgICAgICAgIC50aHJvd0V4Y2VwdGlvbihpby5wbGF0Zm9ybTYuY29tbW9uLnV0aWwuUDZFeGNlcHRpb24sJ05vIG1hdGNoaW5nIHJ1bGUgZm91bmQgZm9yIGl0ZW0hJylcXG4gICAgICAgICAgICAuZW5kKClcXG4gICAgICAgICAgICAucm91dGVJZChcXFwicDZfZGVtbyBSb3V0aW5nIFJ1bGVzIERpc3BhdGNoZXJcXFwiKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBSb3V0aW5nIFJ1bGVzIERpc3BhdGNoZXJcXFwiKVxcbiAgICB9XFxufSlcXG5cIixcInR5cGVcIjpcInhtbF9yb3V0aW5nXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU3NTk4ODYxNDkyOH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5yb3V0ZXMiLCJuYW1lIjoiU2NoZWR1bGVyRm9yUkZRQ3JlYXRpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJTY2hlZHVsZXJGb3JSRlFDcmVhdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJTY2hlZHVsZWQgY3JlYXRpb24gb2YgUmVxdWVzdHMgZm9yIFF1b3RhdGlvblwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU3NTk4ODYxNDk3OSxcInJldmlzaW9uSWRcIjpcImMwZTg4OWVkMzcyOGQxMWRhOWJjMTc4MTIyN2ZjOWRiXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJkZWYgcm91dGVJZCA9IFxcXCJwNl9kZW1vIFNjaGVkdWxlZCBjcmVhdGlvbiBvZiBSRlFzXFxcIlxcblxcbnRyeSB7XFxuICAgIHA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcbiAgICAgICAgdm9pZCBjb25maWd1cmUoKSB7XFxuICAgICAgICAgICAgZnJvbShcXFwidGltZXI6Ly9teVRpbWVyP3BlcmlvZD0xMG1cXFwiKVxcbiAgICAgICAgICAgICAgICAudG8oJ3A2Y21iOi8vc2NyaXB0cz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249ZXhlY3V0ZSZpZD1wNl9kZW1vLkNyZWF0ZVJGUVRyYW5zYWN0aW9uJylcXG4gICAgICAgICAgICAgICAgLnJvdXRlSWQocm91dGVJZClcXG4gICAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uKHJvdXRlSWQpXFxuICAgICAgICB9XFxuICAgIH0pXFxuXFxuICAgIHA2LnV0aWxzLnBhdXNlKClcXG59IGZpbmFsbHkge1xcbiAgcDYuY2FtZWwuZGVzdHJveVJvdXRlKHJvdXRlSWQpXFxufVxcblwiLFwidHlwZVwiOlwic2NoZWR1bGVyXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU3NTk4ODYxNDk3OX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5yb3V0ZXMiLCJuYW1lIjoiUm91dGluZ1J1bGVzRm9yUHVyY2hhc2VPcmRlcnMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSb3V0aW5nUnVsZXNGb3JQdXJjaGFzZU9yZGVyc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJSb3V0aW5nIHJ1bGVzIGZvciBQdXJjaGFzZSBPcmRlcnNcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NzU5ODg2MTQ5MDksXCJyZXZpc2lvbklkXCI6XCI4ZGNkNWI3NzkzZDUzMjc0ZmY0ZDBkNDIxNmI4OThkNlwiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwicDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuXFxuICAgIHZvaWQgY29uZmlndXJlKCkge1xcblxcbiAgICAgICAgZnJvbSgnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUHVyY2hhc2VPcmRlcicpXFxuICAgICAgICAgICAgLmNob2ljZSgpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0NvZGU9J1JlY2VpdmVkJ1xcXCIpKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwicGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uXFxcIikuY29uc3RhbnQoXFxcImludm9rZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGF0dXNcXFwiKS5jb25zdGFudChcXFwiUmVjZWl2ZWRcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwic3RlcFxcXCIpLmNvbnN0YW50KFxcXCJIYW5kbGVQdXJjaGFzZU9yZGVyXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcImFwcGtleVxcXCIpLmNvbnN0YW50KFxcXCJwNl9kZW1vXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcImZsb3duYW1lXFxcIikuY29uc3RhbnQoXFxcIlVVSURcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnRvKFxcXCJwNnJvdXRlOi8vcGxhdGZvcm02LndvcmtmbG93c3RlcHNcXFwiKVxcbiAgICAgICAgICAgIC5lbmQoKVxcbiAgICAgICAgICAgIC5yb3V0ZUlkKCdwNl9kZW1vIFJvdXRpbmcgcnVsZXMgZm9yIFB1cmNoYXNlIE9yZGVycycpXFxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFJvdXRpbmcgcnVsZXMgZm9yIFB1cmNoYXNlIE9yZGVyc1xcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTc1OTg4NjE0OTA5fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJTY2hlZHVsZXJGb3JDb3VudGVyc1JlZnJlc2giLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJTY2hlZHVsZXJGb3JDb3VudGVyc1JlZnJlc2hcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50ZXJzXCIsXCJGUlwiOlwiQWN0dWFsaXNhdGlvbiBwbGFuaWZpw6llIGRlcyBjb21wdGV1cnNcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NzU5ODg2MTQ5NjMsXCJyZXZpc2lvbklkXCI6XCJiOTBhODAxYzAzNmNkNGMwMTgyNTFkMDg3NjQ1MDY1NFwiLFwiYXV0b1N0YXJ0XCI6dHJ1ZSxcInRlbXBsYXRlVGV4dFwiOlwicDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuXFx0ZGVmIHZvaWQgY29uZmlndXJlKCkge1xcblxcdFxcdGZyb20oXFxcInF1YXJ0ejI6Ly9wbGF0Zm9ybTYvcDZyb3V0ZV9Db3VudF9SRlFzP2Nyb249MCsxKyorKisqKz8rKlxcXCIpXFxuXFx0XFx0XFx0LnRvKCdwNmNtYjovL2NvdW50ZXJzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1zeW5jaHJvbml6ZSZpZD1wNl9kZW1vLkNvdW50UkZRcycpXFxuXFx0XFx0XFx0LnJvdXRlSWQoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFJGUXMnKVxcblxcdFxcdFxcdC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRSRlFzIGNvdW50ZXJcXFwiKVxcblxcblxcdFxcdGZyb20oXFxcInF1YXJ0ejI6Ly9wbGF0Zm9ybTYvcDZyb3V0ZV9Db3VudF9RdW90ZXM/Y3Jvbj0wKzIrKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRRdW90ZXMnKVxcblxcdFxcdFxcdC5yb3V0ZUlkKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRRdW90ZXMnKVxcblxcdFxcdFxcdC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRRdW90ZXMgY291bnRlclxcXCIpXFxuXFxuICAgICAgICBmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfUE9zX0FjY2VwdGVkP2Nyb249MCszKyorKisqKz8rKlxcXCIpXFxuXFx0XFx0XFx0LnRvKCdwNmNtYjovL2NvdW50ZXJzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1zeW5jaHJvbml6ZSZpZD1wNl9kZW1vLkNvdW50QWNjZXB0ZWRQT3MnKVxcblxcdFxcdFxcdC5yb3V0ZUlkKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRBY2NlcHRlZFBPcycpXFxuXFx0XFx0XFx0LmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFNjaGVkdWxlZCByZWZyZXNoIG9mIHRoZSBDb3VudEFjY2VwdGVkUE9zIGNvdW50ZXJcXFwiKVxcblxcbiAgICAgICAgZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X1BPc19SZWplY3RlZD9jcm9uPTArNCsqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudFJlamVjdGVkUE9zJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50UmVqZWN0ZWRQT3MnKVxcblxcdFxcdFxcdC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRSZWplY3RlZFBPcyBjb3VudGVyXFxcIilcXG5cXG5cXHRcXHRmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfRmFpbGVkUm91dGluZ09yZGVycz9jcm9uPTArMC8xNSsqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudEZhaWxlZFJvdXRpbmdPcmRlcnMnKVxcblxcdFxcdFxcdC5yb3V0ZUlkKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50RmFpbGVkUm91dGluZ09yZGVycyBjb3VudGVyXFxcIilcXG5cXHR9XFxufSlcXG5cIixcInR5cGVcIjpcInNjaGVkdWxlclwiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NzU5ODg2MTQ5NjN9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IkJsb2NrY2hhaW5FdmVudEhhbmRsZXIiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJCbG9ja2NoYWluRXZlbnRIYW5kbGVyXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkJsb2NrY2hhaW4gRXZlbnQgSGFuZGxlclwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU3NTk4ODYxNTAyNCxcInJldmlzaW9uSWRcIjpcImZiN2VjYzUwMDMxNjFiMjBkMTZmMWFkZjA0NzBmZjgzXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCIvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuLy8gRGVmaW5lIHJvdXRlcyB3aXRoIHByZS1wcm9jZXNzaW5nIGluc3RydWN0aW9ucyAoaWUuIHRvIGRlZmluZSBhbmQgcmVnaXN0ZXIgYmVhbnMpLlxcbi8vXFxuLy8gUGFyYW1ldGVyczpcXG4vLyAgICBwcmVQcm9jZXNzaW5nU3RhdGVtZW50OiAgIFByZS1wcm9jZXNzaW5nIGluc3RydWN0aW9uc1xcbi8vICAgIGFkZFJvdXRlczogICAgICAgICAgICAgICAgVGhlIHJvdXRlIGRlZmluaXRpb25zXFxuLy9cXG4vLyBFeGFtcGxlOlxcbi8vICAgIHA2LmNhbWVsLnJlZ2lzdGVyQmVhbihcXFwibXlCZWFuXFxcIiwgU2VydmljZUJlYW4gKVxcbi8vXFxuLy8gTW9yZSBpbmZvcm1hdGlvbiBvbiBodHRwczovL2RvY3VtZW50YXRpb24uYW1hbHRvLmNvbS9wbGF0Zm9ybTYvbGF0ZXN0L2RldmVsb3AtYXBwL2J1aWx0LWluLXNlcnZpY2VzL3JvdXRlcy9yb3V0ZXMtZHNsLyNncm9vdnktYmVhbi1leGVjdXRpb25cXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuXFxuXFxuJHtwcmVQcm9jZXNzaW5nU3RhdGVtZW50fVxcblxcbnA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcblxcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG5cXG4gICAgICAgICR7YWRkUm91dGVzfVxcblxcbiAgICB9XFxufSlcXG5cIixcInR5cGVcIjpcIndlYjNqXCIsXCJzY3JpcHRTZWdtZW50c1wiOntcImFkZFJvdXRlc1wiOlwiZnJvbShcXFwid2ViM2o6Ly9cXFwiICsgZXRoQ2xpZW50VVJMICsgXFxcIj9hZGRyZXNzPVxcXCIgKyBjb250cmFjdEFkZHJlc3MgKyBcXFwiJm9wZXJhdGlvbj1FVEhfTE9HX0ZMT1dBQkxFXFxcIilcXG4gICAgICAgICAgICAudG8oXFxcImJlYW46Ly9sb2dUb0pTT04/bWV0aG9kPXRvSlNPTlxcXCIpXFxuICAgICAgICAgICAgLnRvKFxcXCJwNmNtYjovL3NjcmlwdHM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPWV4ZWN1dGUmaWQ9cDZfZGVtby5CbG9ja2NoYWluRXZlbnRIYW5kbGVyXFxcIilcXG4gICAgICAgICAgICAucm91dGVJZChcXFwicDZfZGVtbyBXZWIzaiAtIEJsb2NrY2hhaW5FdmVudEhhbmRsZXJcXFwiKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBCbG9ja2NoYWluIEV2ZW50IEhhbmRsZXJcXFwiKVwiLFwicHJlUHJvY2Vzc2luZ1N0YXRlbWVudFwiOlwiaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXJcXG5pbXBvcnQgb3JnLndlYjNqLnByb3RvY29sLmNvcmUubWV0aG9kcy5yZXNwb25zZS5Mb2dcXG5cXG5jbGFzcyBMb2dUb0pTT04ge1xcbiAgICBkZWYgU3RyaW5nIHRvSlNPTihMb2cgbG9nKSB7XFxuICAgICAgICByZXR1cm4gbmV3IE9iamVjdE1hcHBlcigpLndyaXRlVmFsdWVBc1N0cmluZyhsb2cpO1xcbiAgICB9XFxufVxcblxcbnA2LmNhbWVsLnJlZ2lzdGVyQmVhbihcXFwibG9nVG9KU09OXFxcIiwgTG9nVG9KU09OKVxcblxcbmRlZiBldGhDbGllbnRVUkwgPSBwNi5hcHBjb25maWcuZ2V0KCdldGhDbGllbnRVUkwnKVxcbmRlZiBjb250cmFjdEFkZHJlc3MgPSAgcDYuYXBwY29uZmlnLmdldCgnY29udHJhY3RBZGRyZXNzJylcXG5cIn19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTc1OTg4NjE1MDI0fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJSb3V0aW5nUnVsZXNGb3JSRlFzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUm91dGluZ1J1bGVzRm9yUkZRc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJSb3V0aW5nIHJ1bGVzIGZvciBSZXF1ZXN0Rm9yUXVvdGF0aW9uc1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU3NTk4ODYxNDk0NixcInJldmlzaW9uSWRcIjpcImJjOTk3ZDViOTEyZGU4ODQ1YTczZTE0ZjgwYjQzMWY2XCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG5cXG4gICAgdm9pZCBjb25maWd1cmUoKSB7XFxuICAgICAgICBmcm9tKCdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19SZXF1ZXN0Rm9yUXVvdGF0aW9uJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzQ29kZT0nUmVjZWl2ZWQnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJwbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb25cXFwiKS5jb25zdGFudChcXFwiaW52b2tlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcInN0YXR1c1xcXCIpLmNvbnN0YW50KFxcXCJSZWNlaXZlZFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGVwXFxcIikuY29uc3RhbnQoXFxcIkhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb25cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiYXBwa2V5XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiZmxvd25hbWVcXFwiKS5jb25zdGFudChcXFwiVVVJRFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAudG8oXFxcInA2cm91dGU6Ly9wbGF0Zm9ybTYud29ya2Zsb3dzdGVwc1xcXCIpXFxuICAgICAgICAgICAgICAgIC5vdGhlcndpc2UoKVxcbiAgICAgICAgICAgICAgICAgICAgLnRocm93RXhjZXB0aW9uKGlvLnBsYXRmb3JtNi5jb21tb24udXRpbC5QNkV4Y2VwdGlvbiwnTm8gbWF0Y2hpbmcgcnVsZSBmb3VuZCBmb3IgaXRlbSEnKVxcbiAgICAgICAgICAgIC5lbmQoKVxcbiAgICAgICAgICAgIC5yb3V0ZUlkKFxcXCJwNl9kZW1vIFJvdXRpbmcgcnVsZXMgZm9yIFJlcXVlc3RGb3JRdW90YXRpb25zXFxcIilcXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnNcXFwiKVxcbiAgICB9XFxufSlcXG5cIixcInR5cGVcIjpcInhtbF9yb3V0aW5nXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU3NTk4ODYxNDk0Nn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5yb3V0ZXMiLCJuYW1lIjoiUm91dGluZ1J1bGVzRm9yUXVvdGVzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUm91dGluZ1J1bGVzRm9yUXVvdGVzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlJvdXRpbmcgcnVsZXMgZm9yIFF1b3Rlc1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU3NTk4ODYxNDk5NyxcInJldmlzaW9uSWRcIjpcIjhlYWU4ODA0OGEyODkxOGYxNmQzZjg2MzRhZDdjOWQ0XCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG4gICAgXFxuICAgIHZvaWQgY29uZmlndXJlKCkge1xcbiAgICAgICAgZnJvbSgnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUXVvdGUnKVxcbiAgICAgICAgICAgIC5jaG9pY2UoKVxcbiAgICAgICAgICAgICAgICAud2hlbih4cGF0aChcXFwiL1RyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNDb2RlPSdDcmVhdGVkJ1xcXCIpKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlciggJ3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbicpLmNvbnN0YW50KCdleGVjdXRlJylcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcImFwcGtleVxcXCIpLmNvbnN0YW50KFxcXCJwNl9kZW1vXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoJ2lkJykuY29uc3RhbnQoJ3A2X2RlbW8uU2VuZFF1b3RlVG9CbG9ja2NoYWluJylcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRQcm9wZXJ0eSgnZXhlY3V0ZS5hc3luYycpLmNvbnN0YW50KHRydWUpXFxuICAgICAgICAgICAgICAgICAgICAudG8oXFxcInA2cm91dGU6Ly9wbGF0Zm9ybTYuc2NyaXB0c1xcXCIpXFxuICAgICAgICAgICAgICAgIC5vdGhlcndpc2UoKVxcbiAgICAgICAgICAgICAgICAgICAgLnRocm93RXhjZXB0aW9uKGlvLnBsYXRmb3JtNi5jb21tb24udXRpbC5QNkV4Y2VwdGlvbiwnTm8gbWF0Y2hpbmcgcnVsZSBmb3VuZCBmb3IgaXRlbSEnKVxcbiAgICAgICAgICAgIC5lbmQoKVxcbiAgICAgICAgICAgIC5yb3V0ZUlkKCdwNl9kZW1vIFJvdXRpbmcgcnVsZXMgZm9yIFF1b3RlcycpXFxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFJvdXRpbmcgcnVsZXMgZm9yIFF1b3Rlc1xcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTc1OTg4NjE0OTk3fV0sInBsYXRmb3JtNi50YWJsZXMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnRhYmxlcyIsIm5hbWUiOiJJdGVtcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkl0ZW1zXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkl0ZW1zXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTc1OTg4NjE1Nzk3LFwicmV2aXNpb25JZFwiOlwiNWVjZjk0NTU3NWQ1ZWQ4ZDU3Njg0OGVkZTg3ZGZlZmNcIixcImZpZWxkc1wiOltcIklkXCIsXCJEZXNjcmlwdGlvblwiLFwiVW5pdFByaWNlXCIsXCJDdXJyZW5jeVwiLFwiVU9NXCIsXCJDYXRlZ29yeVwiXSxcImtleXNcIjpbXCJJZFwiXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NzU5ODg2MTU3OTd9XSwicGxhdGZvcm02LnNjcmlwdHMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiVmlld19Xb3JrZmxvdyBUYXNrcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlZpZXdfV29ya2Zsb3cgVGFza3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJvdmlkZSBodG1sIGRpc3BsYXkgb2YgV29ya2Zsb3cgVGFza3NcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NzU5ODg2MTUyNTQsXCJyZXZpc2lvbklkXCI6XCI2Zjg0NTg2ZGNlMTIxMWRmYmU1NmNhNjdlYThlMzdkMFwiLFwibWFpblNjcmlwdFwiOlwiZGVmIHJlc3VsdHMgPSBwNi54c2x0LnByb2Nlc3MoXFxcIlZpZXdfV29ya2xvdyBUYXNrc1xcXCIsIHA2LnJlc291cmNlLmdldCgnV29ya2Zsb3dfVGFza190b19IVE1MJyksIHA2LnBpcGVsaW5lLmdldCggJ3htbCcpKVxcblxcbnA2LnBpcGVsaW5lLnB1dCAncG9ydGFsSHRtbCcsIHJlc3VsdHMsICd0ZXh0L2h0bWwnXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOlt7XCJuYW1lXCI6XCJXb3JrZmxvd19UYXNrX3RvX0hUTUxcIixcInR5cGVcIjpcIlhTTFRcIixcImNvbnRlbnRcIjpcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD1cXFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtXFxcIiB2ZXJzaW9uPVxcXCIyLjBcXFwiPlxcbiAgICA8eHNsOm91dHB1dCBtZXRob2Q9XFxcImh0bWxcXFwiIGluZGVudD1cXFwieWVzXFxcIiBvbWl0LXhtbC1kZWNsYXJhdGlvbj1cXFwieWVzXFxcIiAvPlxcbiAgICBcXG4gICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD1cXFwiL1dvcmtmbG93VGFza1xcXCI+XFxuXFxuXFxuXFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZpZXctd3JhcHBlclxcXCI+XFxuXFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHRleHQtbWVkaXVtXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J1RyYW5zYWN0aW9uVHlwZSddL3ZhbHVlcy9fdGV4dFxcXCIvPjx4c2w6dGV4dD4gIyA8L3hzbDp0ZXh0Pjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J1RyYW5zYWN0aW9uTnVtYmVyJ10vdmFsdWVzL190ZXh0XFxcIi8+PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHRleHQtbWVkaXVtXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPkFzc2lnbmVkIHRvOjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVxcXCIjXFxcIiBkYXRhLXRvZ2dsZT1cXFwibW9kYWxcXFwiIGRhdGEtdGFyZ2V0PVxcXCIjYXNzaWduZWVzRGlhbG9nXFxcIj48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdBc3NpZ25lZFRvJ10vdmFsdWVzL0VOXFxcIi8+PC9hPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbGctNFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGF0dXM8L2Rpdj5cXG5cXHQgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdTdGF0dXMnXS92YWx1ZXMvRU5cXFwiLz48L2Rpdj5cXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXG5cXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbGctNFxcXCI+XFxuXFx0XFx0XFx0XFx0XFx0PGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGFydCBkYXRlPC9kaXY+XFxuXFx0ICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9XFxcIml0ZW1BdHRyaWJ1dGVzW2tleT0nU3RhcnREYXRlJ10vdmFsdWVzL190ZXh0XFxcIi8+PC9kaXY+XFxuXFx0XFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0XFx0PC9kaXY+XFxuXFx0XFx0PC9kaXY+XFxuICAgICAgICBcXG4gICAgICAgIDxkaXYgaWQ9XFxcImFzc2lnbmVlc0RpYWxvZ1xcXCIgY2xhc3M9XFxcIm1vZGFsIGZhZGVcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWRpYWxvZ1xcXCI+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWNvbnRlbnRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtaGVhZGVyXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImNsb3NlXFxcIiBkYXRhLWRpc21pc3M9XFxcIm1vZGFsXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JiMyMTU7PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cXFwibW9kYWwtdGl0bGVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwicmlnaHQtc3BhY2VkXFxcIj5Bc3NpZ25lZCB0bzo8L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J0Fzc2lnbmVkVG8nXS92YWx1ZXMvRU5cXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2g0PlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1ib2R5XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XFxcImJhc2ljLWxpc3Qgbm8tYm90dG9tLW1hcmdpblxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6Zm9yLWVhY2ggc2VsZWN0PVxcXCJhc3NpZ25lZXMvYXNzaWduZWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCIuXFxcIi8+PC9saT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Zm9yLWVhY2g+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcblxcdDwveHNsOnRlbXBsYXRlPlxcblxcbjwveHNsOnN0eWxlc2hlZXQ+XCIsXCJieXRlQ29udGVudFwiOm51bGx9XX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NzU5ODg2MTUyNTR9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJSRlFTbWFydENvbnRyYWN0SGVscGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUkZRU21hcnRDb250cmFjdEhlbHBlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJSRlEgU21hcnQgQ29udHJhY3QgSGVscGVyXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTc1OTg4NjE1NjA1LFwicmV2aXNpb25JZFwiOlwiMmRlNjk5MWFkMjUzOWFkMDBiZWJkZTA3Njg1NTI5M2JcIixcIm1haW5TY3JpcHRcIjpcImRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbi8vIFRlc3QgcHJvdGVjdGluZyBwcml2YXRlIGtleSB3aXRoIGEgcGFzc3dvcmQgaW4gYSB3YWxsZXRcXG5kZWYgcGFzc3dvcmQgPSBcXFwiQUR1bW15UGFzc3dvcmRcXFwiXFxuZGVmIHByaXZhdGVLZXkgPSBcXFwiMHhjODc1MDlhMWMwNjdiYmRlNzhiZWI3OTNlNmZhNzY1MzBiNjM4MmE0YzAyNDFlNWU0YTllYzBhMGY0NGRjMGQzXFxcIlxcbmxvZy5kZWJ1ZyBcXFwiV2FsbGV0IGZpbGUgXFxcIiArIGhlbHBlci5nZW5lcmF0ZVdhbGxldEpTT05Gcm9tUHJpdmF0ZUtleShwcml2YXRlS2V5LCBwYXNzd29yZClcXG5cXG4vLyBUZXN0IHJlYWRpbmcgY3JlZGVudGlhbHNcXG5kZWYgY3JlZGVudGlhbHMgPSBoZWxwZXIucmVhZENyZWRlbnRpYWxzKClcXG5sb2cuZGVidWcgXFxcIkFjY291bnQgYWRkcmVzcyBpczogXFxcIiArIGNyZWRlbnRpYWxzLmdldEFkZHJlc3MoKVxcbmxvZy5kZWJ1ZyBcXFwiQWNjb3VudCBwcml2YXRlIGtleSBpczogMHhcXFwiICsgY3JlZGVudGlhbHMuZ2V0RWNLZXlQYWlyKCkuZ2V0UHJpdmF0ZUtleSgpLnRvU3RyaW5nKDE2KVxcblxcbi8vIFRlc3QgRXRoIGNsaWVudCBjb25uZWN0aW9uXFxuZGVmIGNvbnRyYWN0ID0gaGVscGVyLmdldFNtYXJ0Q29udHJhY3QoKVxcbmxvZy5kZWJ1ZyBcXFwiR2V0IG51bWJlciBvZiBSRlFzXFxcIlxcbmRlZiBuYnJPZlJGUXMgPSBjb250cmFjdC5uYnJPZlJGUXMoKS5zZW5kKClcXG5sb2cuZGVidWcgXFxcIkN1cnJlbnQgbnVtYmVyIG9mIFJGUXMgaXM6IFxcXCIgKyBuYnJPZlJGUXNcXG5cXG5sb2cuZGVidWcgXFxcIkdldCBudW1iZXIgb2YgcXVvdGVzXFxcIlxcbmRlZiBuYnJPZlF1b3RlcyA9IGNvbnRyYWN0Lm5ick9mUXVvdGVzKCkuc2VuZCgpXFxubG9nLmRlYnVnIFxcXCJDdXJyZW50IG51bWJlciBvZiBxdW90ZXMgaXM6IFxcXCIgKyBuYnJPZlF1b3Rlc1xcblxcbi8vIFRlc3QgUkZRIHN1Ym1pc3Npb25cXG5kZWYgcmZxSWQgPSBVVUlELnJhbmRvbVVVSUQoKVxcbmxvZy5kZWJ1ZyBcXFwiUkZRIGlkIGlzIFxcXCIgKyByZnFJZFxcblxcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgdWJsID0gXFxcIjwuLi4+XFxcIlxcblxcbmRlZiByZWNlaXB0ID0gaGVscGVyLnN1Ym1pdFJGUShyZnFJZCwgbm93LCB1YmwpXFxubG9nLmRlYnVnIHJlY2VpcHQudG9TdHJpbmcoKVxcblxcbmRlZiAocmVhZElzc3VlZEF0LCByZWFkVUJMLCByZWFkU3RhdHVzKSA9IGhlbHBlci5nZXRSRlEocmZxSWQpXFxubG9nLmRlYnVnIFxcXCJSRlEgaXMgaXNzdWVkIGF0OiBcXFwiICsgcmVhZElzc3VlZEF0XFxubG9nLmRlYnVnIFxcXCJSRlEgVUJMIGlzOiBcXFwiICsgcmVhZFVCTFxcbmxvZy5kZWJ1ZyBcXFwiUkZRIHN0YXR1cyBpczogXFxcIiArIHJlYWRTdGF0dXNcXG5cXG4vLyBSZWFkIFJGUVJlY2VpdmVkIGV2ZW50c1xcbi8vZGVmIHRvcGljT2ZSRlFSZWNlaXZlZCA9IEhhc2guc2hhM1N0cmluZyhcXFwiUkZRUmVjZWl2ZWQoYnl0ZXMxNix1aW50MjU2LHN0cmluZylcXFwiKVxcbmxvZy5kZWJ1ZyBcXFwiVG9waWMgb2YgUkZRUmVjZWl2ZWQ6IFxcXCIgKyBoZWxwZXIuUkZRUmVjZWl2ZWRFdmVudEhhc2hcXG5cXG4vLyBUZXN0IGRlY2xpbmluZyBhIFJGUVxcbmRlZiBkZWNsaW5lSWQgPSBVVUlELnJhbmRvbVVVSUQoKVxcbnJlY2VpcHQgPSBoZWxwZXIuZGVjbGluZVJGUShkZWNsaW5lSWQsIHJmcUlkLCBub3cpXFxubG9nLmRlYnVnIHJlY2VpcHQudG9TdHJpbmcoKVxcblxcbmRlZiAocmVhZERlY2xpbmVJc3N1ZWRBdCwgcmVhZERlY2xpbmVVQkwsIHJlYWREZWNsaW5lU3RhdHVzLCByZWFkRGVjbGluZVJGUUlkLCByZWFkRGVjbGluZVN1cHBsaWVyQWRkcmVzcykgPSBoZWxwZXIuZ2V0UXVvdGUoZGVjbGluZUlkKVxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZSBpcyBpc3N1ZWQgYXQ6IFxcXCIgKyByZWFkRGVjbGluZUlzc3VlZEF0XFxubG9nLmRlYnVnIFxcXCJEZWNsaW5lIFVCTCBpczogXFxcIiArIHJlYWREZWNsaW5lVUJMIC8vIHNob3VsZCBiZSBlbXB0eVxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkRGVjbGluZVN0YXR1cyAvLyBzaG91bGQgYmUgRGVjbGluZVxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZWQgUkZRIGlzOiBcXFwiICsgcmVhZERlY2xpbmVSRlFJZCAvLyBzaG91bGQgYmUgcmZxSWRcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmUgc3VwcGxpZXIgYWRkcmVzcyBpczogXFxcIiArIHJlYWREZWNsaW5lU3VwcGxpZXJBZGRyZXNzXFxuXFxuZGVmIHJlYWREZWNsaW5lZFJGUVN0YXR1cyA9IGhlbHBlci5nZXRSRlEocmZxSWQpWzJdXFxubG9nLmRlYnVnIFxcXCJEZWNsaW5lZCBSRlEgc3RhdHVzIGlzOiBcXFwiICsgcmVhZERlY2xpbmVkUkZRU3RhdHVzIC8vIHNob3VsZCBiZSBEZWNsaW5lZFxcblxcbi8vIFRlc3Qgc3VibWl0dGluZyBhIHF1b3RlXFxuZGVmIHF1b3RlSWQgPSBVVUlELnJhbmRvbVVVSUQoKVxcbmRlZiBxdW90ZVVibCA9IFxcXCI8cXVvdGUgLz5cXFwiXFxucmVjZWlwdCA9IGhlbHBlci5zdWJtaXRRdW90ZShxdW90ZUlkLCByZnFJZCwgbm93LCBxdW90ZVVibClcXG5sb2cuZGVidWcgcmVjZWlwdC50b1N0cmluZygpXFxuXFxuZGVmIChyZWFkUXVvdGVJc3N1ZWRBdCwgcmVhZFF1b3RlVUJMLCByZWFkUXVvdGVTdGF0dXMsIHJlYWRRdW90ZVJGUUlkLCByZWFkUXVvdGVTdXBwbGllckFkZHJlc3MpID0gaGVscGVyLmdldFF1b3RlKHF1b3RlSWQpXFxubG9nLmRlYnVnIFxcXCJRdW90ZSBpcyBpc3N1ZWQgYXQ6IFxcXCIgKyByZWFkUXVvdGVJc3N1ZWRBdFxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgVUJMIGlzOiBcXFwiICsgcmVhZFF1b3RlVUJMXFxubG9nLmRlYnVnIFxcXCJRdW90ZSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkUXVvdGVTdGF0dXMgLy8gc2hvdWxkIGJlIE9mZmVyXFxubG9nLmRlYnVnIFxcXCJRdW90ZSBSRlEgaXM6IFxcXCIgKyByZWFkUXVvdGVSRlFJZCAvLyBzaG91bGQgYmUgcmZxSWRcXG5sb2cuZGVidWcgXFxcIlF1b3RlIHN1cHBsaWVyIGFkZHJlc3MgaXM6IFxcXCIgKyByZWFkUXVvdGVTdXBwbGllckFkZHJlc3NcXG5cXG5kZWYgcmVhZFJGUVN0YXR1cyA9IGhlbHBlci5nZXRSRlEocmZxSWQpWzJdXFxubG9nLmRlYnVnIFxcXCJOZXcgUkZRIHN0YXR1cyBpczogXFxcIiArIHJlYWRSRlFTdGF0dXMgLy8gc2hvdWxkIGJlIFF1b3RlUHJvdmlkZWRcXG5cIixcImNsYXNzU2NyaXB0c1wiOntcIlJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcIjpcImltcG9ydCBjb20uZmFzdGVyeG1sLmphY2tzb24uZGF0YWJpbmQuT2JqZWN0TWFwcGVyXFxuXFxuaW1wb3J0IGlvLnBsYXRmb3JtNi5kZW1vLnNjLlJlcXVlc3RGb3JRdW90YXRpb25zXFxuXFxuaW1wb3J0IGphdmEudGltZS4qXFxuXFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuRXZlbnRFbmNvZGVyXFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuRXZlbnRWYWx1ZXNcXG5pbXBvcnQgb3JnLndlYjNqLmFiaS5GdW5jdGlvblJldHVybkRlY29kZXJcXG5pbXBvcnQgb3JnLndlYjNqLmFiaS5UeXBlUmVmZXJlbmNlXFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuZGF0YXR5cGVzLkV2ZW50XFxuaW1wb3J0IG9yZy53ZWIzai5hYmkuZGF0YXR5cGVzLlR5cGVcXG5pbXBvcnQgb3JnLndlYjNqLmNyeXB0by4qXFxuaW1wb3J0IG9yZy53ZWIzai5wcm90b2NvbC5jb3JlLm1ldGhvZHMucmVzcG9uc2UuVHJhbnNhY3Rpb25SZWNlaXB0XFxuaW1wb3J0IG9yZy53ZWIzai50eC4qXFxuaW1wb3J0IG9yZy53ZWIzai51dGlscy5OdW1lcmljXFxuXFxuXFxuZW51bSBSRlFTdGF0dXMge1xcbiAgICBSZWNlaXZlZCwgRGVjbGluZWQsIFF1b3RlUHJvdmlkZWRcXG59XFxuXFxuZW51bSBRdW90ZVN0YXR1cyB7XFxuICAgIE9mZmVyLCBEZWNsaW5lXFxufVxcblxcbmNsYXNzIFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIge1xcblxcbiAgICAvLyAhISEgRm9yIGRlbW8gcHVycG9zZXMsIGRvbid0IGRvIHRoaXMgaW4gcHJvZHVjdGlvbiEgQWx3YXlzIGFzayB0aGUgdXNlciBmb3IgaGlzL2hlciBwYXNzd29yZCBvciBzdG9yZSB5b3VyIHByaXZhdGUga2V5IGluIGEgdmF1bHQvSEQgd2FsbGV0IVxcbiAgICBzdGF0aWMgZGVmIHBhc3N3b3JkID0gXFxcIkFEdW1teVBhc3N3b3JkXFxcIlxcblxcbiAgICAvLyBIZWxwZXIgc3RhdGVcXG4gICAgZGVmIGNvbnRleHRcXG4gICAgZGVmIHdlYjNqXFxuICAgIGRlZiBzbWFydENvbnRyYWN0XFxuXFxuICAgIFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIoZGVmIGNvbnRleHQpIHtcXG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcXG5cXG4gICAgICAgIGRlZiBldGhDbGllbnRVUkwgID0gY29udGV4dC5wNi5hcHBjb25maWcuZ2V0KCdldGhDbGllbnRVUkwnKVxcbiAgICAgICAgdGhpcy53ZWIzaiA9IGNvbnRleHQucDYuZXRoZXJldW1ycGMuYnVpbGQoZXRoQ2xpZW50VVJMKVxcblxcbiAgICAgICAgLy8gRGVmaW5lIGEgY3VzdG9tIHRyYW5zYWN0aW9uIG1hbmFnZXIgd2l0aCBhIHBvbGxpbmcgZnJlcXVlbmN5IG9mIDIgc2Vjb25kc1xcbiAgICAgICAgZGVmIHRyYW5zYWN0aW9uTWFuYWdlciA9IGNvbnRleHQucDYuZXRoZXJldW1ycGMucG9sbGluZ1RyYW5zYWN0aW9uTWFuYWdlcih3ZWIzaiwgcmVhZENyZWRlbnRpYWxzKCksIDIwMDBMKVxcblxcbiAgICAgICAgZGVmIGNvbnRyYWN0QWRkcmVzcyA9IGNvbnRleHQucDYuYXBwY29uZmlnLmdldCgnY29udHJhY3RBZGRyZXNzJylcXG4gICAgICAgIHRoaXMuc21hcnRDb250cmFjdCA9IFJlcXVlc3RGb3JRdW90YXRpb25zLmxvYWQoY29udHJhY3RBZGRyZXNzLCB3ZWIzaiwgdHJhbnNhY3Rpb25NYW5hZ2VyLCBjb250ZXh0LnA2LmV0aGVyZXVtcnBjLkRFRkFVTFRfR0FTX1BST1ZJREVSKVxcbiAgICB9XFxuXFxuICAgIENyZWRlbnRpYWxzIHJlYWRDcmVkZW50aWFscygpIHtcXG4gICAgICAgIHJldHVybiBjb250ZXh0LnA2LmV0aGVyZXVtcnBjLmdldENyZWRlbnRpYWxzKGNvbnRleHQucDYuYXBwY29uZmlnLmdldChcXFwiZGVtb1dhbGxldFxcXCIpLCBwYXNzd29yZClcXG4gICAgfVxcblxcbiAgICBUcmFuc2FjdGlvblJlY2VpcHQgc3VibWl0UkZRKFVVSUQgaWQsIFpvbmVkRGF0ZVRpbWUgbm93LCBTdHJpbmcgdWJsKSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5zdWJtaXRSRlEoXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQoaWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSxcXG4gICAgICAgICAgICB1YmwpLnNlbmQoKVxcbiAgICB9XFxuXFxuICAgIFR1cGxlIGdldFJGUShVVUlEIGlkKSB7XFxuICAgICAgICBkZWYgcmVzdWx0ID0gc21hcnRDb250cmFjdC5nZXRSRlEoY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQoaWQpKS5zZW5kKClcXG5cXG4gICAgICAgIGRlZiBpc3N1ZWRBdCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5iaWdJbnRlZ2VyVG9aRFQocmVzdWx0LmdldFZhbHVlMSgpKVxcbiAgICAgICAgZGVmIHVibCA9IHJlc3VsdC5nZXRWYWx1ZTIoKVxcbiAgICAgICAgZGVmIHN0YXR1cyA9IFJGUVN0YXR1cy52YWx1ZXMoKVtyZXN1bHQuZ2V0VmFsdWUzKCkuaW50VmFsdWUoKV1cXG5cXG4gICAgICAgIHJldHVybiBuZXcgVHVwbGUoaXNzdWVkQXQsIHVibCwgc3RhdHVzKVxcbiAgICB9XFxuXFxuICAgIFRyYW5zYWN0aW9uUmVjZWlwdCBkZWNsaW5lUkZRKFVVSUQgZGVjbGluZUlkLCBVVUlEIHJmcUlkLCBab25lZERhdGVUaW1lIG5vdykge1xcbiAgICAgICAgcmV0dXJuIHNtYXJ0Q29udHJhY3QuZGVjbGluZVJGUShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChkZWNsaW5lSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRCeXRlc0Zyb21VVUlEKHJmcUlkKSxcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uemR0VG9CaWdJbnRlZ2VyKG5vdykpLnNlbmQoKVxcbiAgICB9XFxuXFxuICAgIFR1cGxlIGdldFF1b3RlKFVVSUQgaWQpIHtcXG4gICAgICAgIGRlZiByZXN1bHQgPSBzbWFydENvbnRyYWN0LmdldFF1b3RlKGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRCeXRlc0Zyb21VVUlEKGlkKSkuc2VuZCgpXFxuXFxuICAgICAgICBkZWYgaXNzdWVkQXQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uYmlnSW50ZWdlclRvWkRUKHJlc3VsdC5nZXRWYWx1ZTEoKSlcXG4gICAgICAgIGRlZiB1YmwgPSByZXN1bHQuZ2V0VmFsdWUyKClcXG4gICAgICAgIGRlZiBzdGF0dXMgPSBRdW90ZVN0YXR1cy52YWx1ZXMoKVtyZXN1bHQuZ2V0VmFsdWUzKCkuaW50VmFsdWUoKV1cXG4gICAgICAgIGRlZiByZnFJZCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRVVUlERnJvbUJ5dGVzKHJlc3VsdC5nZXRWYWx1ZTQoKSlcXG4gICAgICAgIGRlZiBzdXBwbGllckFkZHJlc3MgPSByZXN1bHQuZ2V0VmFsdWU1KClcXG5cXG4gICAgICAgIHJldHVybiBuZXcgVHVwbGUoaXNzdWVkQXQsIHVibCwgc3RhdHVzLCByZnFJZCwgc3VwcGxpZXJBZGRyZXNzKVxcbiAgICB9XFxuXFxuICAgIFRyYW5zYWN0aW9uUmVjZWlwdCBzdWJtaXRRdW90ZShVVUlEIGlkLCBVVUlEIHJmcUlkLCBab25lZERhdGVUaW1lIG5vdywgU3RyaW5nIHVibCkge1xcbiAgICAgICAgcmV0dXJuIHNtYXJ0Q29udHJhY3Quc3VibWl0UXVvdGUoXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQoaWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRCeXRlc0Zyb21VVUlEKHJmcUlkKSxcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uemR0VG9CaWdJbnRlZ2VyKG5vdyksIHVibCkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgLy8gUmVhZCBldmVudHNcXG5cXG4gICAgZmluYWwgc3RhdGljIFN0cmluZyBSRlFSZWNlaXZlZEV2ZW50SGFzaCA9IEV2ZW50RW5jb2Rlci5lbmNvZGUoUmVxdWVzdEZvclF1b3RhdGlvbnMuUkZRUkVDRUlWRURfRVZFTlQpXFxuXFxuICAgIFR1cGxlIHJlYWRSRlFSZWNlaXZlZEV2ZW50KExpc3Q8U3RyaW5nPiBsb2dUb3BpY3MsIFN0cmluZyBsb2dEYXRhKSB7XFxuICAgICAgICBkZWYgZXZlbnQgPSBleHRyYWN0RXZlbnQoUmVxdWVzdEZvclF1b3RhdGlvbnMuUkZRUkVDRUlWRURfRVZFTlQsIGxvZ1RvcGljcywgbG9nRGF0YSlcXG5cXG4gICAgICAgIGRlZiByZnFJZCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRVVUlERnJvbUJ5dGVzKChieXRlW10pIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKSlcXG4gICAgICAgIGRlZiBpc3N1ZWRBdCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5iaWdJbnRlZ2VyVG9aRFQoKEJpZ0ludGVnZXIpIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMSkuZ2V0VmFsdWUoKSlcXG4gICAgICAgIGRlZiB1YmwgPSAoU3RyaW5nKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDIpLmdldFZhbHVlKClcXG5cXG4gICAgICAgIHJldHVybiBuZXcgVHVwbGUocmZxSWQsIGlzc3VlZEF0LCB1YmwpXFxuICAgIH1cXG5cXG4gICAgZmluYWwgc3RhdGljIFN0cmluZyBSRlFEZWNsaW5lZEV2ZW50SGFzaCA9IEV2ZW50RW5jb2Rlci5lbmNvZGUoUmVxdWVzdEZvclF1b3RhdGlvbnMuUkZRREVDTElORURfRVZFTlQpXFxuXFxuICAgIFR1cGxlIHJlYWRSRlFEZWNsaW5lZEV2ZW50KExpc3Q8U3RyaW5nPiBsb2dUb3BpY3MsIFN0cmluZyBsb2dEYXRhKSB7XFxuICAgICAgICBkZWYgZXZlbnQgPSBleHRyYWN0RXZlbnQoUmVxdWVzdEZvclF1b3RhdGlvbnMuUkZRREVDTElORURfRVZFTlQsIGxvZ1RvcGljcywgbG9nRGF0YSlcXG5cXG4gICAgICAgIGRlZiBzdXBwbGllciA9IChTdHJpbmcpIGV2ZW50LmdldEluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKVxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgwKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHF1b3RlSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDEpLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgaXNzdWVkQXQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uYmlnSW50ZWdlclRvWkRUKChCaWdJbnRlZ2VyKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDIpLmdldFZhbHVlKCkpXFxuXFxuICAgICAgICByZXR1cm4gbmV3IFR1cGxlKHN1cHBsaWVyLCByZnFJZCwgcXVvdGVJZCwgaXNzdWVkQXQpXFxuICAgIH1cXG5cXG4gICAgZmluYWwgc3RhdGljIFN0cmluZyBRdW90ZVJlY2VpdmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5RVU9URVJFQ0VJVkVEX0VWRU5UKVxcblxcbiAgICBUdXBsZSByZWFkUXVvdGVSZWNlaXZlZEV2ZW50KExpc3Q8U3RyaW5nPiBsb2dUb3BpY3MsIFN0cmluZyBsb2dEYXRhKSB7XFxuICAgICAgICBkZWYgZXZlbnQgPSBleHRyYWN0RXZlbnQoUmVxdWVzdEZvclF1b3RhdGlvbnMuUVVPVEVSRUNFSVZFRF9FVkVOVCwgbG9nVG9waWNzLCBsb2dEYXRhKVxcblxcbiAgICAgICAgZGVmIHN1cHBsaWVyID0gKFN0cmluZykgZXZlbnQuZ2V0SW5kZXhlZFZhbHVlcygpLmdldCgwKS5nZXRWYWx1ZSgpXFxuICAgICAgICBkZWYgcmZxSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgcXVvdGVJZCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRVVUlERnJvbUJ5dGVzKChieXRlW10pIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMSkuZ2V0VmFsdWUoKSlcXG4gICAgICAgIGRlZiBpc3N1ZWRBdCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5iaWdJbnRlZ2VyVG9aRFQoKEJpZ0ludGVnZXIpIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMikuZ2V0VmFsdWUoKSlcXG4gICAgICAgIGRlZiB1YmwgPSAoU3RyaW5nKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDMpLmdldFZhbHVlKClcXG5cXG4gICAgICAgIHJldHVybiBuZXcgVHVwbGUoc3VwcGxpZXIsIHJmcUlkLCBxdW90ZUlkLCBpc3N1ZWRBdCwgdWJsKVxcbiAgICB9XFxuXFxuICAgIC8vIEV2ZW50IGhlbHBlciBtZXRob2RzXFxuXFxuICAgIHN0YXRpYyBFdmVudFZhbHVlcyBleHRyYWN0RXZlbnQoRXZlbnQgZXZlbnQsIExpc3Q8U3RyaW5nPiBsb2dUb3BpY3MsIFN0cmluZyBsb2dEYXRhKSB7XFxuICAgICAgICBTdHJpbmcgZW5jb2RlZEV2ZW50U2lnbmF0dXJlID0gRXZlbnRFbmNvZGVyLmVuY29kZShldmVudClcXG5cXG4gICAgICAgIGlmIChsb2dUb3BpY3NbMF0gIT0gZW5jb2RlZEV2ZW50U2lnbmF0dXJlKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG51bGxcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIExpc3Q8VHlwZT4gaW5kZXhlZFZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8PigpXFxuICAgICAgICBMaXN0PFR5cGU+IG5vbkluZGV4ZWRWYWx1ZXMgPSBGdW5jdGlvblJldHVybkRlY29kZXIuZGVjb2RlKGxvZ0RhdGEsIGV2ZW50LmdldE5vbkluZGV4ZWRQYXJhbWV0ZXJzKCkpXFxuXFxuICAgICAgICBMaXN0PFR5cGVSZWZlcmVuY2U8VHlwZT4+IGluZGV4ZWRQYXJhbWV0ZXJzID0gZXZlbnQuZ2V0SW5kZXhlZFBhcmFtZXRlcnMoKVxcbiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbmRleGVkUGFyYW1ldGVycy5zaXplKCk7IGkrKykge1xcbiAgICAgICAgICAgIFR5cGUgdmFsdWUgPSBGdW5jdGlvblJldHVybkRlY29kZXIuZGVjb2RlSW5kZXhlZFZhbHVlKGxvZ1RvcGljc1tpICsgMV0sIGluZGV4ZWRQYXJhbWV0ZXJzLmdldChpKSlcXG4gICAgICAgICAgICBpbmRleGVkVmFsdWVzLmFkZCh2YWx1ZSlcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiBuZXcgRXZlbnRWYWx1ZXMoaW5kZXhlZFZhbHVlcywgbm9uSW5kZXhlZFZhbHVlcylcXG4gICAgfVxcblxcbiAgICBzdGF0aWMgZ2VuZXJhdGVXYWxsZXRKU09ORnJvbVByaXZhdGVLZXkoU3RyaW5nIHByaXZhdGVLZXlJbkhleCwgU3RyaW5nIHBhc3N3b3JkKSB7XFxuICAgICAgICBkZWYgcHJpdmF0ZUtleSA9IG5ldyBCaWdJbnRlZ2VyKE51bWVyaWMuY2xlYW5IZXhQcmVmaXgocHJpdmF0ZUtleUluSGV4KSwgMTYpXFxuICAgICAgICBkZWYga2V5UGFpciA9IEVDS2V5UGFpci5jcmVhdGUocHJpdmF0ZUtleSlcXG4gICAgICAgIGRlZiB3YWxsZXRGaWxlID0gV2FsbGV0LmNyZWF0ZVN0YW5kYXJkKHBhc3N3b3JkLCBrZXlQYWlyKVxcbiAgICAgICAgZGVmIG9iamVjdE1hcHBlciA9IG5ldyBPYmplY3RNYXBwZXIoKVxcbiAgICAgICAgcmV0dXJuIG9iamVjdE1hcHBlci53cml0ZVZhbHVlQXNTdHJpbmcod2FsbGV0RmlsZSlcXG4gICAgfVxcblxcbiAgICAvLyBEYXRlIC8gVGltZSBoZWxwZXIgZnVuY3Rpb25zXFxuXFxuICAgIHN0YXRpYyBab25lZERhdGVUaW1lIG5vdygpIHtcXG4gICAgICAgIHJldHVybiBab25lZERhdGVUaW1lLm5vdyhab25lSWQuc3lzdGVtRGVmYXVsdCgpKVxcbiAgICB9XFxufVxcblwifSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU3NTk4ODYxNTYwNX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlJlY2VpdmVSRlFUcmFuc2FjdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJlY2VpdmVSRlFUcmFuc2FjdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJIYW5kbGUgdGhlIHJlY2VwdGlvbiBvZiBhbiBSRlEgKGNyZWF0aW9uIG9mIHRoZSBSRlEgVHJhbnNhY3Rpb25JbmZvLCBzdG9yYWdlIHRvIGZpbGUgc3lzdGVt4oCmKSAtIFNjcmlwdCBjYWxsZWQgYnkgdGhlIEJsb2NrY2hhaW5FdmVudEhhbmRsZXIgc2NyaXB0XCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTc1OTg4NjE1Mjc1LFwicmV2aXNpb25JZFwiOlwiNTljYzZjOGU1OWM2MmI0MmVmOTc0NzhjZDM5Nzc1YmRcIixcIm1haW5TY3JpcHRcIjpcImltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzXFxuaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0XFxuXFxuLy8gVGhpcyBzY3JpcHQgcmVhZHMgdGhlIGluY29taW5nIFJGUSwgcGFyc2VzIGl0cyBjb250ZW50IGFuZCB3cml0ZXMgdGhlIHRyYW5zYWN0aW9uIGluIFA2IGRhdGFiYXNlIHVzaW5nIGl0cyBpbnRlcm5hbCBUcmFuc2FjdGlvbkluZm8gbW9kZWwgKGNoZWNrIHRoZSBEYXRhIE1vZGVscyBtZW51IGZvciBtb3JlIGluZm8pXFxuZGVmIHJmcUNvbnRlbnQgPSBwNi5waXBlbGluZS5nZXQgJ3VibCdcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcihmYWxzZSwgdHJ1ZSlcXG5kZWYgcmZxID0gc2x1cnBlci5wYXJzZVRleHQocmZxQ29udGVudClcXG5cXG5kZWYgaW5zdGFuY2VJZCA9IHA2LmNvbmZpZ3VyYXRpb24uZ2V0KFxcXCJpbnN0YW5jZS5pZFxcXCIpXFxuXFxuZGVmIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxcblNpbXBsZURhdGVGb3JtYXQgdHJhbnNhY3Rpb25TREYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpXFxuZGVmIGZvcm1hdHRlZERhdGUgPSB0cmFuc2FjdGlvblNERi5mb3JtYXQoY3VycmVudERhdGUpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSWQgPSByZnEuSUQudGV4dCgpXFxuZGVmIGNvbW1lbnRzID0gcmZxLk5vdGUudGV4dCgpXFxuZGVmIGlzc3VlRGF0ZSA9IHJmcS5Jc3N1ZURhdGUudGV4dCgpXFxuXFxuaW50IG5iTGluZXMgPSByZnEuUmVxdWVzdEZvclF1b3RhdGlvbkxpbmUuc2l6ZSgpXFxuXFxuZGVmIHNlbGxlck5hbWUgPSByZnEuU2VsbGVyU3VwcGxpZXJQYXJ0eS5QYXJ0eS5QYXJ0eU5hbWUuTmFtZS50ZXh0KClcXG5kZWYgYnV5ZXJOYW1lID0gcmZxLk9yaWdpbmF0b3JDdXN0b21lclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcblxcbmRlZiB0cmFuc2FjdGlvblR5cGUgPSAnUmVxdWVzdEZvclF1b3RhdGlvbidcXG5kZWYgc3RhdHVzID0gJ1JlY2VpdmVkJ1xcbmRlZiBzdGF0dXNNZXNzYWdlID0gJ1JlY2VpdmVkIGJ5IERlbW8gQXBwJ1xcblxcbi8vIFdyaXRlIHRoZSB0cmFuc2FjdGlvbiBvbiB0aGUgZmlsZSBzeXN0ZW1cXG5kZWYgc291cmNlVVJJID0gXFxcImZpbGU6Ly8kUDZfREFUQS9yZXNvdXJjZXMvZG9jdW1lbnRzL1JlcXVlc3RGb3JRdW90YXRpb24vaW4vXFxcIiArIHRyYW5zYWN0aW9uSWQgKyBcXFwiLnhtbFxcXCJcXG5kZWYgc291cmNlRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybChzb3VyY2VVUkkpXFxuRmlsZVV0aWxzLndyaXRlU3RyaW5nVG9GaWxlKHNvdXJjZUZpbGUsIHJmcUNvbnRlbnQsJ1VURi04JylcXG5cXG5kZWYgdGFyZ2V0VVJJID0gXFxcImZpbGU6Ly8kUDZfREFUQS9yZXNvdXJjZXMvZG9jdW1lbnRzL1JlcXVlc3RGb3JRdW90YXRpb24vXFxcIiArIHRyYW5zYWN0aW9uSWQgKyBcXFwiLnhtbFxcXCJcXG5kZWYgdGFyZ2V0RmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCh0YXJnZXRVUkkpXFxuRmlsZVV0aWxzLndyaXRlU3RyaW5nVG9GaWxlKHRhcmdldEZpbGUsIHJmcUNvbnRlbnQsJ1VURi04JylcXG5cXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gXFxcIlxcXCJcXFwiPFRyYW5zYWN0aW9uSW5mbz5cXG4gICAgPElkPiR7dHJhbnNhY3Rpb25JZH08L0lkPlxcbiAgICA8Q3JlYXRpb25EYXRlPiR7Zm9ybWF0dGVkRGF0ZX08L0NyZWF0aW9uRGF0ZT5cXG4gICAgPFRyYW5zYWN0aW9uVHlwZT5SZXF1ZXN0IEZvciBRdW90YXRpb248L1RyYW5zYWN0aW9uVHlwZT5cXG4gICAgPFRyYW5zYWN0aW9uTnVtYmVyPiR7dHJhbnNhY3Rpb25JZH08L1RyYW5zYWN0aW9uTnVtYmVyPlxcbiAgICA8U291cmNlU3lzdGVtPkRlbW8gQXBwPC9Tb3VyY2VTeXN0ZW0+XFxuICAgIDxUYXJnZXRTeXN0ZW0vPlxcbiAgICA8U2VuZGVyLz5cXG4gICAgPEZpbmFsUmVjaXBpZW50PlN1cHBsaWVyPC9GaW5hbFJlY2lwaWVudD5cXG4gICAgPFRyYW5zZmVyUHJvdG9jb2w+QmxvY2tjaGFpbjwvVHJhbnNmZXJQcm90b2NvbD5cXG4gICAgPERlbGl2ZXJlZFZpYT5FdGhlcmV1bSBCbG9ja2NoYWluPC9EZWxpdmVyZWRWaWE+XFxuICAgIDxTb3VyY2VEb2N1bWVudEZvcm1hdD5VQkw8L1NvdXJjZURvY3VtZW50Rm9ybWF0PlxcbiAgICA8U291cmNlRG9jdW1lbnRVUkk+JHtzb3VyY2VVUkl9PC9Tb3VyY2VEb2N1bWVudFVSST5cXG4gICAgPFNvdXJjZURvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1NvdXJjZURvY3VtZW50Q29udGVudFR5cGU+XFxuICAgIDxQaXZvdERvY3VtZW50Rm9ybWF0PlVCTDwvUGl2b3REb2N1bWVudEZvcm1hdD5cXG4gICAgPFBpdm90RG9jdW1lbnRVUkk+JHt0YXJnZXRVUkl9PC9QaXZvdERvY3VtZW50VVJJPlxcbiAgICA8UGl2b3REb2N1bWVudENvbnRlbnRUeXBlPnRleHQveG1sOyBjaGFyc2V0PXV0Zi04PC9QaXZvdERvY3VtZW50Q29udGVudFR5cGU+XFxuICAgIDxUYXJnZXREb2N1bWVudEZvcm1hdD5VQkw8L1RhcmdldERvY3VtZW50Rm9ybWF0PlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRVUkk+JHt0YXJnZXRVUkl9PC9UYXJnZXREb2N1bWVudFVSST5cXG4gICAgPFRhcmdldERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1RhcmdldERvY3VtZW50Q29udGVudFR5cGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNDb2RlPiR7c3RhdHVzfTwvVGVjaG5pY2FsU3RhdHVzQ29kZT5cXG4gICAgPFRlY2huaWNhbFN0YXR1c01lc3NhZ2U+JHtzdGF0dXNNZXNzYWdlfTwvVGVjaG5pY2FsU3RhdHVzTWVzc2FnZT5cXG4gICAgPFRlY2huaWNhbFN0YXR1c0RhdGU+JHtmb3JtYXR0ZWREYXRlfTwvVGVjaG5pY2FsU3RhdHVzRGF0ZT5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNDb2RlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNEYXRlLz5cXG4gICAgPEZsYWdzPntcXFwiYWF2aXNpYmxlXFxcIjogdHJ1ZX08L0ZsYWdzPlxcbiAgICA8T3JnUGF0aD4vJHtpbnN0YW5jZUlkfS88L09yZ1BhdGg+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PlNlbGxlciBOYW1lPC9LZXk+XFxuICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNlbGxlck5hbWUpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5CdXllciBOYW1lPC9LZXk+XFxuICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGJ1eWVyTmFtZSl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5PkNvbW1lbnQ8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChjb21tZW50cyl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgICAgPEtleT5Jc3N1ZSBEYXRlPC9LZXk+XFxuICAgICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVEYXRlKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5PkxpbmUgaXRlbXM8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke25iTGluZXN9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+VG90YWwgQW1vdW50PC9LZXk+XFxuICAgICAgPFZhbHVlPjwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+Q3VycmVuY3k8L0tleT5cXG4gICAgICA8VmFsdWU+PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbjwvVHJhbnNhY3Rpb25JbmZvPlxcXCJcXFwiXFxcIlxcblxcbmRlZiBpcGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHRyYW5zYWN0aW9uSWQpXFxucDYudHJhbnNhY3Rpb24uc2F2ZUFuZFJvdXRlKHRyYW5zYWN0aW9uSW5mbywgJ3A2X2RlbW8uVHJhbnNhY3Rpb25JbmZvJywgaXBrLCAnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fRGlzcGF0Y2hlcicpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU3NTk4ODYxNTI3NX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlZpZXdfVHJhbnNhY3Rpb25zIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVmlld19UcmFuc2FjdGlvbnNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJvdmlkZSBodG1sIGRpc3BsYXkgb2YgVHJhbnNhY3Rpb25zXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTc1OTg4NjE1NTg3LFwicmV2aXNpb25JZFwiOlwiM2M0YzYwYTJjMTUwY2JmMmNhZjUyMjRkMTViYjgzOTFcIixcIm1haW5TY3JpcHRcIjpcImltcG9ydCBqYXZhLnRleHQuRGVjaW1hbEZvcm1hdDtcXG5cXG5sb2cuZGVidWcgJ1A2X0RFTU8nXFxuXFxuRGVjaW1hbEZvcm1hdCBkZiA9IG5ldyBEZWNpbWFsRm9ybWF0KFxcXCIjIyMsIyMjLjAwXFxcIik7XFxuXFxuLy8gRGlzcGxheSBwaXBlbGluZSB2YXJpYWJsZXNcXG4vLyBwaXBlbGluZS52YXJpYWJsZXMoKS5lYWNoKCkgeyBcXG4vLyAgICAgbG9nLmRlYnVnIFxcXCJQSVBFTElORSBWQVIgJHtpdH1cXFwiIFxcbi8vIH1cXG5cXG4vLyBHZXQgYW5kIGRpc3BsYXkgcmF3IFhtbCBmb3IgdGVzdFxcbmRlZiBwcmV0dHlYbWwgPSBwNi5waXBlbGluZS5nZXQgJ3htbCdcXG5cXG4vLyBHZXQgc2x1cnBlZCB4bWxcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gcDYucGlwZWxpbmUuZ2V0WG1sICd4bWwnXFxuXFxuLy8gUmV0dXJuIGZpbGUgZXh0ZW5zaW9uXFxuZGVmIGdldF9maWxlX2V4dGVuc2lvbiA9IHsgU3RyaW5nIHBhdGggLT4gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZignLicpICsgMSkgfVxcblxcbi8vIFJldHVybiBmaWxlIG5hbWVcXG5kZWYgZ2V0X2ZpbGVfbmFtZSA9IHsgU3RyaW5nIHBhdGggLT4gcGF0aC5zdWJzdHJpbmcocGF0aC5sYXN0SW5kZXhPZignLycpICsgMSkgfSBcXG5cXG4vLyBLZXlcXG5kZWYgSWQgPSB0cmFuc2FjdGlvbkluZm8uSWQudGV4dCgpXFxuZGVmIEJ1c2luZXNzRG9jTmFtZSA9IHRyYW5zYWN0aW9uSW5mby5UcmFuc2FjdGlvblR5cGUudGV4dCgpXFxuZGVmIEJ1c2luZXNzRG9jTnVtYmVyID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uTnVtYmVyLnRleHQoKVxcbmRlZiBFbmRwb2ludCA9IHRyYW5zYWN0aW9uSW5mby5EZWxpdmVyZWRWaWEudGV4dCgpXFxuLy9kZWYgTWVzc2FnZSA9IG1lc3NhZ2VJbmZvLk1lc3NhZ2UudGV4dCgpXFxuXFxuLy8gVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiBibG9jayBzdGFydFxcbmRlZiBUZWNobmljYWxTdGF0dXNDb2RlID0gdHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUudGV4dCgpXFxuZGVmIFRlY2huaWNhbFN0YXR1c0RhdGUgPSB0cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzRGF0ZS50ZXh0KClcXG5kZWYgVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9IHRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNNZXNzYWdlLnRleHQoKVxcblxcblxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzQ29kZSA9IHRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZS50ZXh0KClcXG5kZWYgRnVuY3Rpb25hbFN0YXR1c0RhdGUgPSB0cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0RhdGUudGV4dCgpXFxuZGVmIEZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlID0gdHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlLnRleHQoKVxcbi8vIFRyYW5zYWN0aW9uU3RhdHVzSW5mb3JtYXRpb24gYmxvY2sgZW5kXFxuXFxuZGVmIFNvdXJjZURvY3VtZW50VVJJID0gdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKVxcbmRlZiBzcmNEb2NFeHRlbnNpb24gPSBnZXRfZmlsZV9leHRlbnNpb24oU291cmNlRG9jdW1lbnRVUkkpXFxuZGVmIHNyY0RvY0ZpbGVOYW1lID0gZ2V0X2ZpbGVfbmFtZShTb3VyY2VEb2N1bWVudFVSSSlcXG5cXG5kZWYgU291cmNlRG9jdW1lbnRDb250ZW50VHlwZSA9IHRyYW5zYWN0aW9uSW5mby5Tb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlLnRleHQoKVxcblxcbmRlZiBDdXJyZW50RG9jdW1lbnRVUkkgPSB0cmFuc2FjdGlvbkluZm8uVGFyZ2V0RG9jdW1lbnRVUkkudGV4dCgpXFxuZGVmIGN1ckRvY0V4dGVuc2lvbiA9IGdldF9maWxlX2V4dGVuc2lvbihDdXJyZW50RG9jdW1lbnRVUkkpXFxuZGVmIGN1ckRvY0ZpbGVOYW1lID0gZ2V0X2ZpbGVfbmFtZShDdXJyZW50RG9jdW1lbnRVUkkpXFxuXFxuZGVmIEN1cnJlbnREb2N1bWVudENvbnRlbnRUeXBlID0gdHJhbnNhY3Rpb25JbmZvLlRhcmdldERvY3VtZW50Q29udGVudFR5cGUudGV4dCgpXFxuXFxuZGVmIEF0dGFjaG1lbnRzID0gdHJhbnNhY3Rpb25JbmZvLkF0dGFjaG1lbnRzXFxuZGVmIERpc3BsYXlhYmxlQXR0YWNobWVudHMgPSBcXFwiXFxcIlxcblxcbkF0dGFjaG1lbnRzLmVhY2gge1xcbiAgICBkZWYgVVJJID0gaXQuQXR0YWNobWVudC5VUkkudGV4dCgpXFxuICAgIGRlZiBDb250ZW50VHlwZSA9IGl0LkF0dGFjaG1lbnQuQ29udGVudFR5cGUudGV4dCgpXFxuICAgIGRlZiBhdHRhY2htZW50RXh0ZW5zaW9uID0gZ2V0X2ZpbGVfZXh0ZW5zaW9uKFVSSSlcXG4gICAgZGVmIGF0dGFjaG1lbnRGaWxlTmFtZSA9IGdldF9maWxlX25hbWUoVVJJKVxcbiAgICBkZWYgY3VycmVudEF0dGFjaG1lbnQgPSBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiaW5saW5lLWJsb2NrXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+PGNlbnRlcj5BdHRhY2htZW50PC9jZW50ZXI+PC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPlxcblxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlXFxcIj5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBvbmNsaWNrPVxcXCJwbGF0Zm9ybTYudHJhbnNhY3Rpb25Eb3dubG9hZCh0aGlzKVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVxcXCJmdC1pY29uIGZ0LWljb24tJHthdHRhY2htZW50RXh0ZW5zaW9ufVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtZXh0ZW5zaW9uPVxcXCIke2F0dGFjaG1lbnRFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1pZHM9JHtJZH1cXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdXJpPVxcXCIkVVJJfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtY29udGVudC10eXBlPVxcXCIke0NvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT1cXFwiYXR0YWNobWVudEZpbGVOYW1lXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPVxcXCJnZXQtZmlsZS1uYW1lXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT1cXFwicGF0aFxcXCIgc2VsZWN0PVxcXCJVUklcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDpjYWxsLXRlbXBsYXRlPlxcbiAgICAgICAgICAgICAgICAgICAgPC94c2w6dmFyaWFibGU+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke2F0dGFjaG1lbnRGaWxlTmFtZX1cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgJHthdHRhY2htZW50RmlsZU5hbWV9XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICBcXFwiXFxcIlxcXCJcXG4gICAgXFxuICAgIERpc3BsYXlhYmxlQXR0YWNobWVudHMgPSBcXFwiJHtEaXNwbGF5YWJsZUF0dGFjaG1lbnRzfSR7Y3VycmVudEF0dGFjaG1lbnR9XFxcIlxcbn1cXG5cXG4vLyBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJvbGRcXFwiIHdheVxcbmRlZiBJc3N1ZSA9IHRyYW5zYWN0aW9uSW5mby5Jc3N1ZVxcbmRlZiBJc3N1ZUxldmVsRVJST1IgPSBJc3N1ZS5maW5kQWxsIHsgaXQubGV2ZWwgPT0gJ0VSUk9SJyB9XFxuZGVmIGVycm9ycyA9IFtdXFxuXFxuSXNzdWVMZXZlbEVSUk9SLmVhY2gge1xcbiAgICBpZiAoaXQubGV2ZWwgPT0gJ0VSUk9SJykge1xcbiAgICAgICAgZXJyb3JzID0gdG9rZW5pemUoIGl0LlRleHQsICcmI3hBOycgKVxcbiAgICB9XFxufVxcblxcbmRlZiBJc3N1ZUVycm9yTGluZSA9IFxcXCJcXFwiXFxuXFxuZXJyb3JzLmVhY2gge1xcbiAgICBkZWYgbGluZSA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJtaS1saW5lXFxcIj5cXG4gICAgICAgIDxzdHJvbmc+PHNwYW4gY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHt0b2tlbml6ZShpdCwnXFxcXFxcXFx8JylbMV19PC9zcGFuPjwvc3Ryb25nPiA8c3Bhbj4gLSA8L3NwYW4+XFxuICAgICAgICA8c3BhbiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke3Rva2VuaXplKGl0LCdcXFxcXFxcXHwnKVsyXX08L3NwYW4+XFxuICAgIDwvZGl2PlxcbiAgICBcXFwiXFxcIlxcXCJcXG4gICAgXFxuICAgIElzc3VlRXJyb3JMaW5lID0gXFxcIiR7SXNzdWVFcnJvckxpbmV9JHtsaW5lfVxcXCJcXG59XFxuXFxuZGVmIElzc3VlTGV2ZWxFcnJvck9sZFdheSA9IChJc3N1ZUxldmVsRVJST1Iuc2l6ZSgpICE9IDApID8gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBtZXNzYWdlLWluZm8tc2VjdGlvblxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIj5JbnZhbGlkIGRvY3VtZW50IGR1ZSB0byA8c3Ryb25nPiR7ZXJyb3JzLnNpemUoKX0gZXJyb3Iocyk8L3N0cm9uZz48L2Rpdj5cXG4gICAgICAgIFxcbiAgICAgICAgJHtJc3N1ZUVycm9yTGluZX1cXG5cXG4gICAgPC9kaXY+XFxuXFxcIlxcXCJcXFwiIDogXFxcIlxcXCJcXG5cXG4vLyBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJuZXdcXFwiIHdheVxcbmRlZiBJc3N1ZXMgPSB0cmFuc2FjdGlvbkluZm8uSXNzdWVzXFxuZGVmIElzc3Vlc0xldmVsRVJST1IgPSBJc3N1ZXMuSXNzdWUuZmluZEFsbCB7IGl0LmxldmVsID09ICdFUlJPUicgfVxcblxcbmRlZiBJc3N1ZXNFcnJvckxpbmUgPSBcXFwiXFxcIlxcblxcbklzc3Vlc0xldmVsRVJST1IuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtaS1saW5lXFxcIj5cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj7igKIgJHtpdC5NZXNzYWdlfTwvc3Bhbj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICBcXFwiXFxcIlxcXCJcXG4gICAgXFxuICAgIGlzc3Vlc0xldmVsRXJyb3JOZXdXYXkgPSBcXFwiJHtpc3N1ZXNMZXZlbEVycm9yTmV3V2F5fSR7bGluZX1cXFwiXFxufVxcblxcbmRlZiBpc3N1ZXNMZXZlbEVycm9yTmV3V2F5ID0gKElzc3Vlc0xldmVsRVJST1Iuc2l6ZSgpICE9IDApID8gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBtZXNzYWdlLWluZm8tc2VjdGlvblxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIj5Db250ZW50IGNoZWNrIGhhcyBpZGVudGlmaWVkIDxzdHJvbmc+JHtJc3N1ZXNMZXZlbEVSUk9SLnNpemUoKX0gZXJyb3Iocyk8L3N0cm9uZz48L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgJHtpc3N1ZXNMZXZlbEVycm9yTmV3V2F5fVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgPC9kaXY+XFxuXFxcIlxcXCJcXFwiIDogXFxcIlxcXCJcXG5cXG5kZWYgQXVkaXRUcmFpbCA9IHRyYW5zYWN0aW9uSW5mby5BdWRpdFRyYWlsXFxuZGVmIEF1ZGlvVHJhaWxSZWNvcmQgPSBBdWRpdFRyYWlsLlJlY29yZCA/OiBbXVxcbmRlZiBBdWRpb1RyYWlsUmVjb3JkRGlzcGxheSA9IFxcXCJcXFwiXFxuXFxuQXVkaW9UcmFpbFJlY29yZC5lYWNoIHtcXG4gICAgZGVmIGF1ZGl0VHlwZSA9IChpdC5UeXBlID09IFxcXCJGdW5jdGlvbmFsU3RhdHVzXFxcIikgPyBcXFwiRnVuY3Rpb25hbCBzdGF0dXNcXFwiIDogKGl0LlR5cGUgPT0gXFxcIlRlY2huaWNhbFN0YXR1c1xcXCIpID8gXFxcIlRlY2huaWNhbCBzdGF0dXNcXFwiIDogJydcXG4gICAgZGVmIGxpbmUgPSBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwicm93IHJvdy1pdGVtLXNlcGFyYXRlZFxcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMVxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5UeXBlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgJHthdWRpdFR5cGV9XFxuICAgICAgICAgICAgL2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhdHVzPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LkNvZGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0zXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkRhdGU8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuRGF0ZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTZcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+TWVzc2FnZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5NZXNzYWdlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuXFxuICAgIDwvZGl2PlxcbiAgICBcXFwiXFxcIlxcXCJcXG4gICAgXFxuICAgIEF1ZGlvVHJhaWxSZWNvcmREaXNwbGF5ID0gXFxcIiR7QXVkaW9UcmFpbFJlY29yZERpc3BsYXl9JHtsaW5lfVxcXCJcXG59XFxuXFxuZGVmIEF1ZGlvVHJhaWxEaXNwbGF5ID0gKEF1ZGlvVHJhaWxSZWNvcmQuc2l6ZSgpID4gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwicm93IHRvcC1tYXJnaW5cXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XFxcImJ0biBidG4teHMgYnRuLXN1Y2Nlc3NcXFwiIGRhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCIgZGF0YS10YXJnZXQ9XFxcIiNhdWRpdFRyYWlsXFxcIj5TdGF0dXMgaGlzdG9yeTwvYnV0dG9uPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgaWQ9XFxcImF1ZGl0VHJhaWxcXFwiIGNsYXNzPVxcXCJjb2xsYXBzZSBzaWRlLXBhZGRlZFxcXCI+PGRpdj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgJHtBdWRpb1RyYWlsUmVjb3JkRGlzcGxheX1cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbmRlZiBXb3JrZmxvdyA9IHRyYW5zYWN0aW9uSW5mby5Xb3JrZmxvd1xcbmRlZiBXb3JrZmxvd0luc3RhbmNlID0gdHJhbnNhY3Rpb25JbmZvLldvcmtmbG93Lkluc3RhbmNlXFxuZGVmIFdvcmtmbG93SW5zdGFuY2VEaXNwbGF5ID0gXFxcIlxcXCJcXG5cXG5cXG5Xb3JrZmxvd0luc3RhbmNlLmVhY2gge1xcbiAgICBkZWYgbGluZSA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgcm93LWl0ZW0tc2VwYXJhdGVkXFxcIj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPldvcmtmbG93IFR5cGU8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuc3RlcC5zdGVwSWR9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlN0YXJ0IERhdGU8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuc3RhcnREYXRlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5FbmQgRGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5lbmREYXRlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5Bc3NpZ25lZCB0bzwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGVwLmFzc2lnbmVkVG9OYW1lfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5IYW5kbGVkIGJ5PC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LnN0ZXAuYWN0aW9uZWRCeUVtYWlsfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuc3RhdHVzfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICBcXFwiXFxcIlxcXCJcXG4gICAgXFxuICAgIFdvcmtmbG93SW5zdGFuY2VEaXNwbGF5ID0gXFxcIiR7V29ya2Zsb3dJbnN0YW5jZURpc3BsYXl9JHtsaW5lfVxcXCJcXG59XFxuXFxuZGVmIFdvcmtmbG93RGlzcGxheSA9IChXb3JrZmxvd0luc3RhbmNlLnNpemUoKSA+IDApID8gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvdyB0b3AtbWFyZ2luXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBtZXNzYWdlLWluZm8tc2VjdGlvblxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWhlYWRlclxcXCIgc3R5bGU9XFxcIm1hcmdpbi1ib3R0b206IDVweDtcXFwiPlxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVxcXCJidG4gYnRuLXhzIGJ0bi1zdWNjZXNzXFxcIiBkYXRhLXRvZ2dsZT1cXFwiY29sbGFwc2VcXFwiIGRhdGEtdGFyZ2V0PVxcXCIjaGlzdG9yeVRyYWlsXFxcIj5Xb3JrZmxvdyBoaXN0b3J5PC9idXR0b24+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBpZD1cXFwiaGlzdG9yeVRyYWlsXFxcIiBjbGFzcz1cXFwiY29sbGFwc2Ugc2lkZS1wYWRkZWRcXFwiPjxkaXY+PC9kaXY+XFxuICAgICAgICAgICAgICAgICR7V29ya2Zsb3dJbnN0YW5jZURpc3BsYXl9XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgPC9kaXY+XFxuXFxcIlxcXCJcXFwiIDogXFxcIlxcXCJcXG5cXG4vLyBLZXlWYWx1ZVxcbmRlZiBTZWxsZXJOYW1lID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09IFxcXCJTZWxsZXIgTmFtZVxcXCJ9LlZhbHVlLnRleHQoKVxcbmRlZiBCdXllck5hbWUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkJ1eWVyIE5hbWVcXFwifS5WYWx1ZS50ZXh0KClcXG5kZWYgSXNzdWVEYXRlID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09IFxcXCJJc3N1ZSBEYXRlXFxcIn0uVmFsdWUudGV4dCgpXFxuZGVmIEN1cnJlbmN5ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09IFxcXCJDdXJyZW5jeVxcXCJ9LlZhbHVlLnRleHQoKVxcblxcbmRlZiBUb3RhbEFtb3VudCA9IHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5maW5ke2l0LktleSA9PSBcXFwiVG90YWwgQW1vdW50XFxcIn0uVmFsdWUudGV4dCgpXFxuXFxucHJpbnQgXFxcIlRPVEFMIEFNT1VOVFxcXCIgKyBUb3RhbEFtb3VudFxcbmRlZiBGb3JtYXR0ZWRUb3RhbEFtb3V0ID0gVG90YWxBbW91bnQgPyBkZi5mb3JtYXQoRG91YmxlLnZhbHVlT2YoVG90YWxBbW91bnQpKSA6IFxcXCJcXFwiXFxuXFxubG9nLmRlYnVnICdQNl9ERU1PIEZvcm1hdHRlZFRvdGFsQW1vdXQgPSAnK0Zvcm1hdHRlZFRvdGFsQW1vdXRcXG5cXG5cXG5kZWYgTGluZUl0ZW1zID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09IFxcXCJMaW5lIGl0ZW1zXFxcIn0uVmFsdWUudGV4dCgpXFxuXFxuZGVmIFRyYW5zYWN0aW9uU3RhdHVzSW5mb3JtYXRpb24gPSAoVGVjaG5pY2FsU3RhdHVzQ29kZSAhPSAnJylcXG4gICAgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5UZWNobmljYWwgc3RhdHVzPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke1RlY2huaWNhbFN0YXR1c0NvZGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtOFxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5Bc3NvY2lhdGVkIG1lc3NhZ2UgLSBhcyBvZiAke1RlY2huaWNhbFN0YXR1c0RhdGV9PC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke1RlY2huaWNhbFN0YXR1c01lc3NhZ2V9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICA6IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlN0YXR1czwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtOFxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5Bc3NvY2lhdGVkIG1lc3NhZ2U8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPjwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICBcXFwiXFxcIlxcXCJcXG4gICAgXFxubG9nLmRlYnVnICdQNkRFTU8gVmlld19EZW1vIFRyYW5zYWN0aW9uIHNjcmlwdCBMSU5FIDMwNicgIFxcbiAgICBcXG5kZWYgRnVuY3Rpb25hbFN0YXR1c0luZm9ybWF0aW9uID0gKEZ1bmN0aW9uYWxTdGF0dXNDb2RlICE9ICcnKVxcbiAgICA/IFxcXCJcXFwiXFxcIlxcbiAgICA8aHIvPlxcdFxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkZ1bmN0aW9uYWwgc3RhdHVzPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0Z1bmN0aW9uYWxTdGF0dXNDb2RlfTwvZGl2PlxcblxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLThcXFwiPlxcbiAgICAgICAgXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5Bc3NvY2lhdGVkIG1lc3NhZ2UgLSBhcyBvZiAke0Z1bmN0aW9uYWxTdGF0dXNEYXRlfTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtGdW5jdGlvbmFsU3RhdHVzTWVzc2FnZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICA8L2Rpdj4gXFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICA6ICcnXFxuXFxuLy8gZGVmIG15X2h0bWwgPSBcXFwiXFxcIlxcXCI8ZGl2PlRFU1Q8L2Rpdj5cXFwiXFxcIlxcXCJcXG5cXG5sb2cuZGVidWcgJ1A2REVNTyBWaWV3X0RlbW8gVHJhbnNhY3Rpb24gc2NyaXB0IExJTkUgMzMxJ1xcblxcbmRlZiBteV9odG1sID0gXFxcIlxcXCJcXFwiXFxuPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZpZXctd3JhcHBlclxcXCI+XFxuXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPlRyYW5zYWN0aW9uOiA8c3Ryb25nPjxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPiR7QnVzaW5lc3NEb2NOYW1lfTwvc3Bhbj4gJHtCdXNpbmVzc0RvY051bWJlcn08L3N0cm9uZz48L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcblxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TZWxsZXIgbmFtZTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke1NlbGxlck5hbWV9PC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkJ1eWVyIG5hbWU8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtCdXllck5hbWV9PC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkRlbGl2ZXJlZCB2aWE8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtFbmRwb2ludH08L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHhzLXN0YWNrZWQtc3BhY2VyIGNvbC1zbS02IG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIj5BZGRpdGlvbmFsIGluZm9ybWF0aW9uPC9kaXY+XFxuXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG5cXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGF0ZTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtJc3N1ZURhdGV9PC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+VG90YWwgQW1vdW50PC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPiR7Q3VycmVuY3l9PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke0Zvcm1hdHRlZFRvdGFsQW1vdXR9XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5MaW5lIGl0ZW1zPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0xpbmVJdGVtc308L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgICAgICA8L2Rpdj5cXG5cXG5cXG4gICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93IHRvcC1tYXJnaW5cXFwiPlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIHhzLXN0YWNrZWQtc3BhY2VyIGNvbC1zbS02IG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIj5UcmFuc2FjdGlvbiBzdGF0dXMgaW5mb3JtYXRpb248L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICAke1RyYW5zYWN0aW9uU3RhdHVzSW5mb3JtYXRpb259IFxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgICR7RnVuY3Rpb25hbFN0YXR1c0luZm9ybWF0aW9ufVxcbiAgICAgICAgICAgIFxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICBcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtc20tNiBtZXNzYWdlLWluZm8tc2VjdGlvblxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWhlYWRlclxcXCI+RG9jdW1lbnRzIGFuZCBBdHRhY2htZW50KHMpPC9kaXY+XFxuXFxuICAgICAgICAgICAgPGRpdj5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5saW5lLWJsb2NrXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+PGNlbnRlcj5Tb3VyY2UgZG9jdW1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke3NyY0RvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWV4dGVuc2lvbj1cXFwiJHtzcmNEb2NFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1pZHM9XFxcIiR7SWR9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiR7U291cmNlRG9jdW1lbnRVUkl9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50LXR5cGU9XFxcIiR7U291cmNlRG9jdW1lbnRDb250ZW50VHlwZX1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXZpZXc9XFxcInt7VklFV05BTUV9fVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tZmlsZS1uYW1lXFxcIiB0aXRsZT1cXFwiJHtzcmNEb2NGaWxlTmFtZX1cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtzcmNEb2NGaWxlTmFtZX1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImlubGluZS1ibG9ja1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPjxjZW50ZXI+VGFyZ2V0IGRvY3VtZW50PC9jZW50ZXI+PC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlXFxcIj5cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBvbmNsaWNrPVxcXCJwbGF0Zm9ybTYudHJhbnNhY3Rpb25Eb3dubG9hZCh0aGlzKVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVxcXCJmdC1pY29uIGZ0LWljb24tJHtjdXJEb2NFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1leHRlbnNpb249XFxcIiR7Y3VyRG9jRXh0ZW5zaW9ufVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtaWRzPVxcXCIke0lkfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdXJpPVxcXCIke0N1cnJlbnREb2N1bWVudFVSSX1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQtdHlwZT1cXFwiJHtDdXJyZW50RG9jdW1lbnRDb250ZW50VHlwZX1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXZpZXc9XFxcInt7VklFV05BTUV9fVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOnZhcmlhYmxlIG5hbWU9XFxcImN1ckRvY0ZpbGVOYW1lXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6Y2FsbC10ZW1wbGF0ZSBuYW1lPVxcXCJnZXQtZmlsZS1uYW1lXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNsOndpdGgtcGFyYW0gbmFtZT1cXFwicGF0aFxcXCIgc2VsZWN0PVxcXCJDdXJyZW50RG9jdW1lbnRVUklcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOnZhcmlhYmxlPlxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tZmlsZS1uYW1lXFxcIiB0aXRsZT1cXFwiJHtjdXJEb2NGaWxlTmFtZX1cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjdXJEb2NGaWxlTmFtZX1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIFxcblxcbiAgICAgICAgICAgICAgICAke0Rpc3BsYXlhYmxlQXR0YWNobWVudHN9XFxuXFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgICAgICA8L2Rpdj5cXG5cXG5cXG4gICAgICAgIDwhLS0gV2lsbCBkaXNwbGF5IGluZm8gb24gRXJyb3JzIGNhcHR1cmVkIHRoZSBcXFwib2xkXFxcIiB3YXkgLS0+XFxuICAgICAgICBcXG4gICAgICAgICR7SXNzdWVMZXZlbEVycm9yT2xkV2F5fSBcXG5cXG4gICAgICAgIDwhLS0gV2lsbCBkaXNwbGF5IGluZm8gb24gRXJyb3JzIGNhcHR1cmVkIHRoZSBcXFwibmV3XFxcIiB3YXkgLS0+XFxuICAgICAgICBcXG4gICAgICAgICR7aXNzdWVzTGV2ZWxFcnJvck5ld1dheX1cXG5cXG4gICAgXFxuICAgIDwvZGl2PlxcblxcbiAgICAke0F1ZGlvVHJhaWxEaXNwbGF5fSAgICAgICAgICAgIFxcbiAgICBcXG4gICAgJHtXb3JrZmxvd0Rpc3BsYXl9ICAgICAgICAgICAgIFxcbiAgICBcXG4gICAgXFxuPC9kaXY+XFxuXFxcIlxcXCJcXFwiXFxuXFxucDYucGlwZWxpbmUucHV0ICdwb3J0YWxIdG1sJywgbXlfaHRtbCwgJ3RleHQvaHRtbCdcXG5cXG5sb2cuZGVidWcgJ1A2REVNTyBWaWV3X0RlbW8gVHJhbnNhY3Rpb24gc2NyaXB0IGV4ZWN1dGlvbiBpcyBPVkVSJ1wiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NzU5ODg2MTU1ODd9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJVbmluc3RhbGxBcHBsaWNhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlVuaW5zdGFsbEFwcGxpY2F0aW9uXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkRlbGV0ZSBhbGwgU2VydmljZSBJdGVtcywgVHJhbnNhY3Rpb25zIGFuZCBXb3JrZmxvdyBUYXNrcyByZWxhdGVkIHRvIHA2X2RlbW9cIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NzU5ODg2MTUzNjcsXCJyZXZpc2lvbklkXCI6XCJjN2I0NWVjNDk3MjA5ODY4MjhkYmViZjc1ZTAzM2E4N1wiLFwibWFpblNjcmlwdFwiOlwiLy8gVGhpcyBzY3JpcHQgaXMgZXhlY3V0ZWQgdG8gY2xlYW4gdXAgYWxsIHRoZSBhcHBsaWNhdGlvbnMgcmVzb3VyY2VzXFxuXFxuLy8gRGVsZXRlIGFsbCB0cmFuc2FjdGlvbnMgYW5kIHdvcmtmbG93IHRhc2tzXFxucDYuc3Byb2MuZXhlY3V0ZSgncDZfZGVtby5EZWxldGVQNkRlbW9UcmFuc2FjdGlvbnMnKVxcbmxvZy5kZWJ1ZyAnRGVtbyBhcHAgdHJhbnNhY3Rpb25zIGFuZCB3b3JrZmxvdyB0YXNrcyBkZWxldGVkJ1xcblxcbi8vIERlc3Ryb3kgcm91dGVzXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFdlYjNqIC0gQmxvY2tjaGFpbkV2ZW50SGFuZGxlcicpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlcicpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJvdXRpbmcgcnVsZXMgZm9yIFB1cmNoYXNlIE9yZGVycycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJvdXRpbmcgcnVsZXMgZm9yIFF1b3RlcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJvdXRpbmcgcnVsZXMgZm9yIFJlcXVlc3RGb3JRdW90YXRpb25zJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gU2NoZWR1bGVkIGNyZWF0aW9uIG9mIFJGUXMnKVxcbnA2LmNhbWVsLmRlc3Ryb3lSb3V0ZSgncDZfZGVtbyBSZWZyZXNoIENvdW50UkZRcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRRdW90ZXMnKVxcbnA2LmNhbWVsLmRlc3Ryb3lSb3V0ZSgncDZfZGVtbyBSZWZyZXNoIENvdW50QWNjZXB0ZWRQT3MnKVxcbnA2LmNhbWVsLmRlc3Ryb3lSb3V0ZSgncDZfZGVtbyBSZWZyZXNoIENvdW50UmVqZWN0ZWRQT3MnKVxcbnA2LmNhbWVsLmRlc3Ryb3lSb3V0ZSgncDZfZGVtbyBSZWZyZXNoIENvdW50RmFpbGVkUm91dGluZ09yZGVycycpXFxuXFxuLy8gVW5kZXBsb3kgYnVuZGxlZCByZXNvdXJjZXNcXG5wNi5idW5kbGVkLnVuZGVwbG95KCdwNl9kZW1vLlBPUmV2aWV3JylcXG5wNi5idW5kbGVkLnVuZGVwbG95KCdwNl9kZW1vLlRhYmxlSXRlbXNEYXRhJylcXG5sb2cuZGVidWcgJ0J1bmRsZWQgcmVzb3VyY2VzIGRlbGV0ZWQgZnJvbSB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0nXFxuXFxuLy8gTm90aWZ5IFA2IHRoYXQgdW4taW5zdGFsbGF0aW9uIHdhcyBzdWNjZXNzZnVsXFxucDYucGlwZWxpbmUucHV0KFxcXCJpbnN0YWxsU2NyaXB0UmVzdWx0XFxcIiwgXFxcInRydWVcXFwiKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NzU5ODg2MTUzNjd9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJTZW5kUXVvdGVUb0Jsb2NrY2hhaW4iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJTZW5kUXVvdGVUb0Jsb2NrY2hhaW5cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiV3JpdGUgUXVvdGUgaW4gYW4gRXRoZXJldW0gc21hcnQgY29udHJhY3RcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NzU5ODg2MTUzODYsXCJyZXZpc2lvbklkXCI6XCJkYWIwMzg4N2E0OTc1OWUxYjhkZDczMTBlMGFhNTZhNlwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuaW1wb3J0IGphdmEudXRpbC5VVUlEXFxuaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5pby5GaWxlVXRpbHNcXG5cXG5cXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBxdW90ZUlkU3RyaW5nID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuLy8gRmV0Y2ggdGhlIHF1b3RlIHRyYW5zYWN0aW9uIGluZm9cXG5kZWYgcXVvdGVQayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIHF1b3RlSWRTdHJpbmcpXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5nZXQocXVvdGVQaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuZGVmIHNyY0ZpbGUgPSBwNi51cmkuZmlsZUZyb21VcmwodHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKSlcXG5TdHJpbmcgcXVvdGVDb250ZW50ID0gRmlsZVV0aWxzLnJlYWRGaWxlVG9TdHJpbmcoc3JjRmlsZSlcXG5cXG4vLyBVcGRhdGUgdHJhbnNhY3Rpb24gaW5mbyBzdGF0dXNcXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcblxcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNDb2RlID0gJ1NlbnQnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c01lc3NhZ2UgPSAnJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNEYXRlID0gZm9ybWF0dGVkRGF0ZVxcblxcbnA2LnRyYW5zYWN0aW9uLnNhdmUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBxdW90ZVBrKVxcblxcbi8vIFdyaXRlIHF1b3RlIGluIHRoZSBibG9ja2NoYWluXFxuZGVmIHF1b3RlSWQgPSBVVUlELmZyb21TdHJpbmcocXVvdGVJZFN0cmluZylcXG5cXG5kZWYgcXVvdGVYTUwgPSBzbHVycGVyLnBhcnNlVGV4dChxdW90ZUNvbnRlbnQpXFxuZGVmIHJmcUlkID0gVVVJRC5mcm9tU3RyaW5nKHF1b3RlWE1MLlJlcXVlc3RGb3JRdW90YXRpb25Eb2N1bWVudFJlZmVyZW5jZS5VVUlELnRleHQoKSlcXG5cXG5oZWxwZXIuc3VibWl0UXVvdGUocXVvdGVJZCwgcmZxSWQsIG5vdywgcXVvdGVDb250ZW50KVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NzU5ODg2MTUzODZ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJDcmVhdGVSRlFUcmFuc2FjdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkNyZWF0ZVJGUVRyYW5zYWN0aW9uXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkNyZWF0ZSBhIFJlcXVlc3RGb3JRdW90YXRpb24gVUJMIERvY3VtZW50IGFuZCB3cml0ZSBpdCBpbiBhbiBFdGhlcmV1bSBzbWFydCBjb250cmFjdFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU3NTk4ODYxNTQxMCxcInJldmlzaW9uSWRcIjpcImEwNmZhNjMzZTYwNjc1NDQ0OWY4ZDhiODI2ODcwNTQ4XCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5pbXBvcnQgamF2YS51dGlsLlVVSURcXG5pbXBvcnQgamF2YS51dGlsLlJhbmRvbVxcblxcblxcbi8vIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBidXllciBpbiB0aGUgc3lzdGVtIHRvIGtlZXAgdGhlIERlbW8gQXBwIHNpbXBsZVxcbmRlZiBidXllcklkID0gJzEnXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuLy8gQ2FsY3VsYXRlIGlzc3VlIGRhdGUgYW5kIHRpbWUgZm9yIGdlbmVyYXRlZCBSRlEgdHJhbnNhY3Rpb25cXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIGlzc3VlRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eS1NTS1kZFxcXCIpLmZvcm1hdChub3cpXFxuZGVmIGlzc3VlVGltZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwiSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcblxcblJhbmRvbSByYW5kID0gbmV3IFJhbmRvbSgpXFxuXFxuLy8gUmV0cmlldmUgdGhlIGxpc3Qgb2YgY2F0ZWdvcmllcyBmcm9tIEl0ZW1zIHRhYmxlXFxuZGVmIGl0ZW1SZWNvcmRzID0gcDYudGFibGUubG9va3VwKCdwNl9kZW1vLkl0ZW1zJywgWzpdKVxcblxcblNldDxTdHJpbmc+IGNhdGVnb3JpZXMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KClcXG5NYXA8U3RyaW5nLFN0cmluZz4gY2F0X3RvX3VvbSA9IG5ldyBIYXNoTWFwPFN0cmluZyxTdHJpbmc+KClcXG5cXG5mb3IgKG15UmVjb3JkIGluIGl0ZW1SZWNvcmRzKSB7XFxuICAgIGRlZiBjYXRlZ29yeSA9IG15UmVjb3JkLkNhdGVnb3J5XFxuICAgIGRlZiB1b20gPSBteVJlY29yZC5VT01cXG5cXG4gICAgaWYgKCFjYXRlZ29yaWVzLmNvbnRhaW5zKGNhdGVnb3J5KSkge1xcbiAgICAgICAgY2F0ZWdvcmllcy5hZGQoY2F0ZWdvcnkpXFxuICAgICAgICBjYXRfdG9fdW9tLnB1dChjYXRlZ29yeSwgdW9tKVxcbiAgICB9XFxufVxcblxcbi8vIEdlbmVyYXRlIHJhbmRvbSBSRlEgbGluZXMgZnJvbSBhdmFpbGFibGUgaXRlbXNcXG5pbnQgbmJMaW5lTWF4ID0gY2F0ZWdvcmllcy5zaXplKClcXG5pbnQgcXVhbnRpdHlNYXggPSAxMFxcbmludCBuYkxpbmVzID0gcmFuZC5uZXh0SW50KG5iTGluZU1heCkgKyAxXFxuXFxuZGVmIHJmcUxpbmVzPSAnJ1xcbmZvciAoaW50IGkgPTA7IGk8IG5iTGluZXM7IGkrKykge1xcbiAgICBcXG4gICAgaW50IGNhdGVnb3J5SW5kZXggPSByYW5kLm5leHRJbnQoY2F0ZWdvcmllcy5zaXplKCkpXFxuICAgIGRlZiBjYXRlZ29yeUFycmF5ID0gY2F0ZWdvcmllcy50b0FycmF5KClcXG4gICAgXFxuICAgIGRlZiBjYXRlZ29yeSA9IGNhdGVnb3J5QXJyYXlbY2F0ZWdvcnlJbmRleF1cXG4gICAgY2F0ZWdvcmllcy5yZW1vdmUoY2F0ZWdvcnkpXFxuXFxuICAgIGRlZiBxdWFudGl0eSA9IHJhbmQubmV4dEludChxdWFudGl0eU1heCArIDEpICsgMVxcbiAgICBkZWYgdW9tID0gY2F0X3RvX3VvbS5nZXQoY2F0ZWdvcnkpXFxuICAgICAgICBcXG4gICAgcmZxTGluZXMgKz0gXFxcIlxcXCJcXFwiPGNhYzpSZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZT5cXG4gICAgICA8Y2JjOklEPiR7aSsxfTwvY2JjOklEPlxcbiAgICAgIDxjYmM6Tm90ZT5zYW1wbGU8L2NiYzpOb3RlPlxcbiAgICAgIDxjYWM6TGluZUl0ZW0+XFxuICAgICAgICAgPGNiYzpJRD4ke2krMX08L2NiYzpJRD5cXG4gICAgICAgICA8Y2JjOlF1YW50aXR5IHVuaXRDb2RlPVxcXCIke3VvbX1cXFwiPiR7cXVhbnRpdHl9PC9jYmM6UXVhbnRpdHk+XFxuICAgICAgICAgPGNhYzpJdGVtPlxcbiAgICAgICAgICAgIDxjYmM6RGVzY3JpcHRpb24+PC9jYmM6RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNhdGVnb3J5KX08L2NiYzpOYW1lPlxcbiAgICAgICAgICAgIDxjYWM6QnV5ZXJzSXRlbUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgICAgICAgIDxjYmM6SUQ+JHtidXllcklkfTwvY2JjOklEPlxcbiAgICAgICAgICAgIDwvY2FjOkJ1eWVyc0l0ZW1JZGVudGlmaWNhdGlvbj5cXG4gICAgICAgICA8L2NhYzpJdGVtPlxcbiAgICAgIDwvY2FjOkxpbmVJdGVtPlxcbiAgIDwvY2FjOlJlcXVlc3RGb3JRdW90YXRpb25MaW5lPlxcbiAgICBcXFwiXFxcIlxcXCJcXG59XFxuXFxuLy8gR2VuZXJhdGUgdGhlIHRyYW5zYWN0aW9uIElEIGFuZCB0aGUgY29ycmVzcG9uZGluZyBVQkxcXG5kZWYgdHJhbnNhY3Rpb25JZCA9IFVVSUQucmFuZG9tVVVJRCgpXFxuXFxuZGVmIHJlcXVlc3RGb3JRdW90YXRpb25VQkwgPSBcXFwiXFxcIlxcXCI8UmVxdWVzdEZvclF1b3RhdGlvbiB4bWxucz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6UmVxdWVzdEZvclF1b3RhdGlvbi0yXFxcIiB4bWxuczpjYWM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkFnZ3JlZ2F0ZUNvbXBvbmVudHMtMlxcXCIgeG1sbnM6Y2JjPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25CYXNpY0NvbXBvbmVudHMtMlxcXCI+XFxuICAgPGNiYzpVQkxWZXJzaW9uSUQ+Mi4wPC9jYmM6VUJMVmVyc2lvbklEPlxcbiAgIDxjYmM6SUQ+JHt0cmFuc2FjdGlvbklkfTwvY2JjOklEPlxcbiAgIDxjYmM6SXNzdWVEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgIDxjYmM6SXNzdWVUaW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlzc3VlVGltZSl9PC9jYmM6SXNzdWVUaW1lPlxcbiAgIDxjYmM6Tm90ZT5BdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBSRlE8L2NiYzpOb3RlPlxcbiAgIDxjYWM6T3JpZ2luYXRvckN1c3RvbWVyUGFydHk+XFxuICAgICAgPGNhYzpQYXJ0eT5cXG4gICAgICAgICA8Y2FjOlBhcnR5TmFtZT5cXG4gICAgICAgICAgICA8Y2JjOk5hbWU+QnV5ZXIgQ29ycC48L2NiYzpOYW1lPlxcbiAgICAgICAgIDwvY2FjOlBhcnR5TmFtZT5cXG4gICAgICAgICA8Y2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgICAgICAgPGNiYzpTdHJlZXROYW1lPkF2b24gV2F5PC9jYmM6U3RyZWV0TmFtZT5cXG4gICAgICAgICAgICA8Y2JjOkJ1aWxkaW5nTmFtZT5UaGVyZWFib3V0czwvY2JjOkJ1aWxkaW5nTmFtZT5cXG4gICAgICAgICAgICA8Y2JjOkJ1aWxkaW5nTnVtYmVyPjU2QTwvY2JjOkJ1aWxkaW5nTnVtYmVyPlxcbiAgICAgICAgICAgIDxjYmM6Q2l0eU5hbWU+QnJpZGd0b3c8L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgICAgICA8Y2JjOlBvc3RhbFpvbmU+Wlo5OSAxWlo8L2NiYzpQb3N0YWxab25lPlxcbiAgICAgICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5Bdm9uPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgICAgICA8Y2FjOkFkZHJlc3NMaW5lPlxcbiAgICAgICAgICAgICAgIDxjYmM6TGluZT4zcmQgRmxvb3IsIFJvb20gNTwvY2JjOkxpbmU+XFxuICAgICAgICAgICAgPC9jYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgPGNhYzpDb3VudHJ5PlxcbiAgICAgICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPkdCPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgICAgIDwvY2FjOkNvdW50cnk+XFxuICAgICAgICAgPC9jYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICA8L2NhYzpQYXJ0eT5cXG4gICA8L2NhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICA8Y2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgICAgPGNiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPkNPMDAxPC9jYmM6Q3VzdG9tZXJBc3NpZ25lZEFjY291bnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5PlxcbiAgICAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6TmFtZT5TZWxsZXIgSW5jLjwvY2JjOk5hbWU+XFxuICAgICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QnVzeSBTdHJlZXQ8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOYW1lPlRoZXJlYWJvdXRzPC9jYmM6QnVpbGRpbmdOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+NTZBPC9jYmM6QnVpbGRpbmdOdW1iZXI+XFxuICAgICAgICAgICAgPGNiYzpDaXR5TmFtZT5GYXJ0aGluZzwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6UG9zdGFsWm9uZT5BQTk5IDFCQjwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PkhlcmVtb3V0aHNoaXJlPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgICAgICA8Y2FjOkFkZHJlc3NMaW5lPlxcbiAgICAgICAgICAgICAgIDxjYmM6TGluZT5UaGUgUm91bmRhYm91dDwvY2JjOkxpbmU+XFxuICAgICAgICAgICAgPC9jYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgPGNhYzpDb3VudHJ5PlxcbiAgICAgICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPkdCPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgICAgIDwvY2FjOkNvdW50cnk+XFxuICAgICAgICAgPC9jYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICA8L2NhYzpQYXJ0eT5cXG4gICA8L2NhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgICR7cmZxTGluZXN9XFxuPC9SZXF1ZXN0Rm9yUXVvdGF0aW9uPlxcblxcXCJcXFwiXFxcIlxcblxcbi8vIFdyaXRlIHRoZSB0cmFuc2FjdGlvbiBpbiB0aGUgYmxvY2tjaGFpblxcbmhlbHBlci5zdWJtaXRSRlEodHJhbnNhY3Rpb25JZCwgbm93LCByZXF1ZXN0Rm9yUXVvdGF0aW9uVUJMKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NzU5ODg2MTU0MTB9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVJGUS1Qcm92aWRlRm9ybUZvclF1b3RlQ3JlYXRpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVJGUS1Qcm92aWRlRm9ybUZvclF1b3RlQ3JlYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJvdmlkZSB0aGUgZm9ybSBzdXBwb3J0aW5nIHRoZSBjcmVhdGlvbiBvZiBhIHF1b3RlXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTc1OTg4NjE1MTU1LFwicmV2aXNpb25JZFwiOlwiM2FjNjQ1NDY2YWQ5OTBkZjkzZWI1ZWVhOTk1MDljMGFcIixcIm1haW5TY3JpcHRcIjpcImltcG9ydCBncm9vdnkuanNvbi4qXFxuaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5pby5GaWxlVXRpbHNcXG5cXG5kZWYgeG1sIFxcdFxcdD0gcDYucGlwZWxpbmUuZ2V0WG1sICd4bWwnXFxubG9nLmRlYnVnICdYTUwgPT09PT09PiAnKyB4bWxcXG5cXG5wNi5waXBlbGluZS52YXJpYWJsZXMoKS5lYWNoKCkgeyBsb2cuZGVidWcgXFxcIlBJUEVMSU5FIFZBUiAke2l0fVxcXCIgfVxcblxcbmRlZiBtcGsgXFx0XFx0PSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKHhtbC5pdGVtRGF0YVR5cGUudGV4dCgpLCB4bWwuaXRlbUlkcy50ZXh0KCkuc3BsaXQoJ1xcXFxcXFxcLicpKVxcbmRlZiBtZXNzYWdlIFxcdD0gcDYudHJhbnNhY3Rpb24uZ2V0KG1waylcXG5cXG5sb2cuZGVidWcgJ01FU1NBR0UgPT09PT09PiAnKyBtZXNzYWdlXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoZmFsc2UsIHRydWUpXFxuZGVmIHRyYW5zYWN0aW9uID0gc2x1cnBlci5wYXJzZVRleHQobWVzc2FnZSlcXG5cXG5kZWYgbXlVUkkgPSB0cmFuc2FjdGlvbi5Tb3VyY2VEb2N1bWVudFVSSS50ZXh0KClcXG4gICAgICAgIFxcbmRlZiAgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybChteVVSSSlcXG4gICAgICAgIFxcblN0cmluZyByZnFDb250ZW50ID0gRmlsZVV0aWxzLnJlYWRGaWxlVG9TdHJpbmcoc3JjRmlsZSlcXG5cXG5kZWYgcmZxID0gc2x1cnBlci5wYXJzZVRleHQocmZxQ29udGVudClcXG5cXG5kZWYgcmZxTGluZXMgPSBcXFwiXFxcIlxcbnJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5lYWNoeyByZnFMaW5lIC0+IFxcblxcbiAgICBkZWYgaXRlbUNhdGVnb3J5ID0gcmZxTGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpXFxuICAgIFxcbiAgICBkZWYgaXRlbVJlY29yZHMgPSBwNi50YWJsZS5sb29rdXAoJ3A2X2RlbW8uSXRlbXMnLCBbJ0NhdGVnb3J5JzppdGVtQ2F0ZWdvcnldKVxcblxcbiAgICBkZWYgaXRlbXM9ICcnXFxuICAgIGZvcihteVJlY29yZCBpbiBpdGVtUmVjb3Jkcykge1xcbiAgICAgICAgZGVmIGRlc2NyaXB0aW9uID0gbXlSZWNvcmQuRGVzY3JpcHRpb25cXG4gICAgICAgIGRlZiBpZCA9IG15UmVjb3JkLklkXFxuICAgICAgICBkZWYgdW9tID0gbXlSZWNvcmQuVU9NXFxuICAgICAgICBkZWYgdW5pdFByaWNlID0gbXlSZWNvcmQuVW5pdFByaWNlXFxuICAgICAgICBkZWYgY3VycmVuY3kgPSBteVJlY29yZC5DdXJyZW5jeVxcbiAgICBcXG4gICAgICAgIGlmICghJycuZXF1YWxzKGl0ZW1zKSkge1xcbiAgICAgICAgICAgIGl0ZW1zICs9ICcsXFxcXHJcXFxcbidcXG4gICAgICAgIH0gICAgICAgIFxcbiAgICAgICAgaXRlbXMgKz0gJ3sgXFxcImlkXFxcIjogJytKc29uT3V0cHV0LnRvSnNvbihkZXNjcmlwdGlvbikrJywgXFxcInByaWNlXFxcIjogJytKc29uT3V0cHV0LnRvSnNvbih1bml0UHJpY2UpKycsIFxcXCJ1bml0XFxcIjogJytKc29uT3V0cHV0LnRvSnNvbihjdXJyZW5jeSkrJywgXFxcImN1cnJlbmN5XFxcIjogJytKc29uT3V0cHV0LnRvSnNvbihjdXJyZW5jeSkrJywgXFxcInVvbVxcXCI6ICcrSnNvbk91dHB1dC50b0pzb24odW9tKSsnIH0nXFxuICAgIH0gICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgIFxcbiAgICBsb2cuZGVidWcgJ0lURU1TID0+ICcraXRlbXMgIFxcblxcblxcbiAgICBkZWYgb25lTGluZSA9IFxcXCJcXFwiXFxcIiB7XFxuICAgICAgICAgICAgIFxcXCJpZFxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5JRC50ZXh0KCkpfSxcXG4gICAgICAgICAgICAgXFxcIm5vdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcUxpbmUuTGluZUl0ZW0uSXRlbS5OYW1lLnRleHQoKSl9LFxcbiAgICAgICAgICAgICBcXFwicXVhbnRpdHlcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcUxpbmUuTGluZUl0ZW0uUXVhbnRpdHkudGV4dCgpKX0sXFxuICAgICAgICAgICAgIFxcXCJpdGVtc1xcXCI6IFtcXG4gICAgICAgICAgICAgICAgICR7aXRlbXN9XFxuICAgICAgICAgICAgXVxcbiAgICAgICAgfVxcXCJcXFwiXFxcIlxcbiAgICAgICAgXFxuXFxuICAgIGlmICghXFxcIlxcXCIuZXF1YWxzKHJmcUxpbmVzKSkge1xcbiAgICAgICAgcmZxTGluZXMgKz0gXFxcIixcXFxcclxcXFxuXFxcIlxcbiAgICB9XFxuICAgICByZnFMaW5lcyArPSBvbmVMaW5lXFxufVxcblxcbmxvZy5kZWJ1ZyAnUkZRIExJTkVTID0+ICcrcmZxTGluZXNcXG5cXG5kZWYgbW9kZWwgPSBcXFwiXFxcIlxcXCJ7XFxuICAgIFxcXCJyZnFcXFwiOiB7IFxcbiAgICAgICAgXFxcImlkXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnEuSUQudGV4dCgpKX0sXFxuICAgICAgICBcXFwiaXNzdWVEYXRlXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnEuSXNzdWVEYXRlLnRleHQoKSl9LFxcbiAgICAgICAgXFxcImlzc3VlVGltZVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxLklzc3VlVGltZS50ZXh0KCkpfSxcXG4gICAgICAgIFxcXCJub3RlXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnEuTm90ZS50ZXh0KCkpfVxcbiAgICB9LFxcbiAgICBcXFwibGluZXNcXFwiOiBbXFxuICAgICAgICAke3JmcUxpbmVzfVxcbiAgICBdXFxufVxcXCJcXFwiXFxcIlxcblxcbmxvZy5kZWJ1ZyAnTU9ERUwgPT4gJyttb2RlbFxcblxcbmRlZiBmb3JtID0gcDYucmVzb3VyY2UuZ2V0KCAnV0ZfUkZRX0Zvcm0nIClcXG5hc3NlcnQgZm9ybSAhPSBudWxsIDogXFxcIlVuYWJsZSB0byBmaW5kIHRoZSBjb21waWxlZCByZXNvdXJjZSBXRl9SRlFfRm9ybVxcXCJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ21vZGVsJywgbW9kZWxcXG5wNi5waXBlbGluZS5wdXQgJ2Zvcm0nLCBmb3JtXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOlt7XCJuYW1lXCI6XCJXRl9SRlFfRm9ybVwiLFwidHlwZVwiOlwiVFlQRVNDUklQVFwiLFwiY29udGVudFwiOlwiLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxcbi8qKioqKiovIFxcdC8vIFRoZSBtb2R1bGUgY2FjaGVcXG4vKioqKioqLyBcXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cXG4vKioqKioqLyBcXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHRcXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcXG4vKioqKioqLyBcXHRcXHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xcbi8qKioqKiovIFxcdFxcdFxcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xcbi8qKioqKiovIFxcdFxcdH1cXG4vKioqKioqLyBcXHRcXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxcbi8qKioqKiovIFxcdFxcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcXG4vKioqKioqLyBcXHRcXHRcXHRpOiBtb2R1bGVJZCxcXG4vKioqKioqLyBcXHRcXHRcXHRsOiBmYWxzZSxcXG4vKioqKioqLyBcXHRcXHRcXHRleHBvcnRzOiB7fVxcbi8qKioqKiovIFxcdFxcdH07XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHRcXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cXG4vKioqKioqLyBcXHRcXHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcXG4vKioqKioqLyBcXHRcXHRtb2R1bGUubCA9IHRydWU7XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHRcXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxcbi8qKioqKiovIFxcdFxcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcXG4vKioqKioqLyBcXHR9XFxuLyoqKioqKi9cXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xcbi8qKioqKiovIFxcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xcbi8qKioqKiovIFxcdFxcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcXG4vKioqKioqLyBcXHRcXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xcbi8qKioqKiovIFxcdFxcdFxcdFxcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXFxuLyoqKioqKi8gXFx0XFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG4vKioqKioqLyBcXHRcXHRcXHRcXHRnZXQ6IGdldHRlclxcbi8qKioqKiovIFxcdFxcdFxcdH0pO1xcbi8qKioqKiovIFxcdFxcdH1cXG4vKioqKioqLyBcXHR9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcXG4vKioqKioqLyBcXHRcXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cXG4vKioqKioqLyBcXHRcXHRcXHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxcbi8qKioqKiovIFxcdFxcdFxcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XFxuLyoqKioqKi8gXFx0XFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xcbi8qKioqKiovIFxcdFxcdHJldHVybiBnZXR0ZXI7XFxuLyoqKioqKi8gXFx0fTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxcbi8qKioqKiovIFxcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXFxcIlxcXCI7XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcXG4vKioqKioqLyBcXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSA5MCk7XFxuLyoqKioqKi8gfSlcXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbi8qKioqKiovIChbXFxuLyogMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0O1xcblxcbi8qKiovIH0pLFxcbi8qIDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXFxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xcblxcbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxcblxcbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XFxuXFxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XFxufVxcbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xcbn1cXG4oZnVuY3Rpb24gKCkge1xcbiAgICB0cnkge1xcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xcbiAgICAgICAgfVxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XFxuICAgIH1cXG59ICgpKVxcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XFxuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XFxuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XFxuICAgIH1cXG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XFxuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XFxuICAgIH0gY2F0Y2goZSl7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcXG4gICAgICAgIH0gY2F0Y2goZSl7XFxuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG5cXG59XFxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcXG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xcbiAgICB9XFxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XFxuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XFxuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcXG4gICAgfSBjYXRjaCAoZSl7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpe1xcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxcbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcblxcblxcbn1cXG52YXIgcXVldWUgPSBbXTtcXG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcXG52YXIgY3VycmVudFF1ZXVlO1xcbnZhciBxdWV1ZUluZGV4ID0gLTE7XFxuXFxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcXG4gICAgICAgIHJldHVybjtcXG4gICAgfVxcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcXG4gICAgfVxcbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XFxuICAgICAgICBkcmFpblF1ZXVlKCk7XFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcXG4gICAgaWYgKGRyYWluaW5nKSB7XFxuICAgICAgICByZXR1cm47XFxuICAgIH1cXG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XFxuICAgIGRyYWluaW5nID0gdHJ1ZTtcXG5cXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcXG4gICAgd2hpbGUobGVuKSB7XFxuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcXG4gICAgICAgIHF1ZXVlID0gW107XFxuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XFxuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xcbiAgICB9XFxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XFxuICAgIGRyYWluaW5nID0gZmFsc2U7XFxuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcXG59XFxuXFxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcXG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcXG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcXG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XFxuICAgIH1cXG59O1xcblxcbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcXG4gICAgdGhpcy5mdW4gPSBmdW47XFxuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcXG59XFxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcXG59O1xcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XFxucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcXG5wcm9jZXNzLmVudiA9IHt9O1xcbnByb2Nlc3MuYXJndiA9IFtdO1xcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcXG5cXG5mdW5jdGlvbiBub29wKCkge31cXG5cXG5wcm9jZXNzLm9uID0gbm9vcDtcXG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcXG5wcm9jZXNzLm9uY2UgPSBub29wO1xcbnByb2Nlc3Mub2ZmID0gbm9vcDtcXG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcXG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XFxucHJvY2Vzcy5lbWl0ID0gbm9vcDtcXG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XFxucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcXG5cXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XFxuXFxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xcbn07XFxuXFxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcXG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xcbn07XFxucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNBcnJheSgnYWJjJyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2ZyZWVHbG9iYWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTEpO1xcblxcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXFxudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XFxuXFxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXFxudmFyIHJvb3QgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2ZyZWVHbG9iYWxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChyb290KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXFxuICogb2YgYE9iamVjdGAuIChlLmcuIGFycmF5cywgZnVuY3Rpb25zLCBvYmplY3RzLCByZWdleGVzLCBgbmV3IE51bWJlcigwKWAsIGFuZCBgbmV3IFN0cmluZygnJylgKVxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc09iamVjdCh7fSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcXG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgKHR5cGUgPT0gJ29iamVjdCcgfHwgdHlwZSA9PSAnZnVuY3Rpb24nKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNPYmplY3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxcbiAqIGFuZCBoYXMgYSBgdHlwZW9mYCByZXN1bHQgb2YgXFxcIm9iamVjdFxcXCIuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzT2JqZWN0TGlrZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzTmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0VmFsdWVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA0KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxcbiAqL1xcbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xcbiAgdmFyIHZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0VmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5KTtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNOYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXROYXRpdmUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UmF3VGFnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19vYmplY3RUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5NSk7XFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxcbiAgICB1bmRlZmluZWRUYWcgPSAnW29iamVjdCBVbmRlZmluZWRdJztcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXFxuICovXFxuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcXG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWRUYWcgOiBudWxsVGFnO1xcbiAgfVxcbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxcbiAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFJhd1RhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpXFxuICAgIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fb2JqZWN0VG9TdHJpbmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUdldFRhZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3BsaWNlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0SW5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjIwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRJbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2RlZXBFcXVhbF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2RlbGV0ZUluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fa2V5c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjQpO1xcblxcblxcblxcblxcblxcblxcblxcbnZhciBzdHJ1Y3R1cmUgPSB7XFxuICBlbXB0eToge30sXFxuICBlbXB0eUxpc3Q6IFtdLFxcbiAgZ2V0SW46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0SW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICBzZXRJbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRJbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIGRlZXBFcXVhbDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19kZWVwRXF1YWxfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICBkZWxldGVJbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19kZWxldGVJbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIGZyb21KUzogZnVuY3Rpb24gZnJvbUpTKHZhbHVlKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH0sXFxuICBrZXlzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICBzaXplOiBmdW5jdGlvbiBzaXplKGFycmF5KSB7XFxuICAgIHJldHVybiBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7XFxuICB9LFxcbiAgc3BsaWNlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3NwbGljZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHRvSlM6IGZ1bmN0aW9uIHRvSlModmFsdWUpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RydWN0dXJlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBQZXJmb3JtcyBhXFxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XFxuICpcXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmVxKCdhJywgJ2EnKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmVxKE5hTiwgTmFOKTtcXG4gKiAvLyA9PiB0cnVlXFxuICovXFxuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XFxuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZXEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N5bWJvbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XFxuXFxuXFxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXFxudmFyIElORklOSVRZID0gMSAvIDA7XFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxcbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXFxuICovXFxuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9XFxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9ICh0b0tleSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbXBvbmVudHNfUHJvdmlkZXJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19jb21wb25lbnRzX2Nvbm5lY3RBZHZhbmNlZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY29ubmVjdF9jb25uZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwMCk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgUHJvdmlkZXIgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBjcmVhdGVQcm92aWRlciAqL1xcbi8qIHVudXNlZCBoYXJtb255IHJlZXhwb3J0IGNvbm5lY3RBZHZhbmNlZCAqL1xcbi8qIGhhcm1vbnkgcmVleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jb25uZWN0X2Nvbm5lY3RfX1tcXFwiYVxcXCJdOyB9KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG4vKipcXG4gKiBVc2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuXFxuICpcXG4gKiBQcm92aWRlIHNwcmludGYtc3R5bGUgZm9ybWF0IChvbmx5ICVzIGlzIHN1cHBvcnRlZCkgYW5kIGFyZ3VtZW50c1xcbiAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZVxcbiAqIGV4cGVjdGluZy5cXG4gKlxcbiAqIFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50XFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxcbiAqL1xcblxcbnZhciBpbnZhcmlhbnQgPSBmdW5jdGlvbihjb25kaXRpb24sIGZvcm1hdCwgYSwgYiwgYywgZCwgZSwgZikge1xcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQgcmVxdWlyZXMgYW4gZXJyb3IgbWVzc2FnZSBhcmd1bWVudCcpO1xcbiAgICB9XFxuICB9XFxuXFxuICBpZiAoIWNvbmRpdGlvbikge1xcbiAgICB2YXIgZXJyb3I7XFxuICAgIGlmIChmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxcbiAgICAgICAgJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcgK1xcbiAgICAgICAgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJ1xcbiAgICAgICk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgdmFyIGFyZ3MgPSBbYSwgYiwgYywgZCwgZSwgZl07XFxuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcXG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihcXG4gICAgICAgIGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3NbYXJnSW5kZXgrK107IH0pXFxuICAgICAgKTtcXG4gICAgICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICB9XFxuXFxuICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWVcXG4gICAgdGhyb3cgZXJyb3I7XFxuICB9XFxufTtcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGludmFyaWFudDtcXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18sIF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fOy8qIVxcbiAgQ29weXJpZ2h0IChjKSAyMDE2IEplZCBXYXRzb24uXFxuICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxcbiAgaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xcbiovXFxuLyogZ2xvYmFsIGRlZmluZSAqL1xcblxcbihmdW5jdGlvbiAoKSB7XFxuXFx0J3VzZSBzdHJpY3QnO1xcblxcblxcdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcXG5cXG5cXHRmdW5jdGlvbiBjbGFzc05hbWVzICgpIHtcXG5cXHRcXHR2YXIgY2xhc3NlcyA9IFtdO1xcblxcblxcdFxcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XFxuXFx0XFx0XFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcXG5cXHRcXHRcXHRpZiAoIWFyZykgY29udGludWU7XFxuXFxuXFx0XFx0XFx0dmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnO1xcblxcblxcdFxcdFxcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xcblxcdFxcdFxcdFxcdGNsYXNzZXMucHVzaChhcmcpO1xcblxcdFxcdFxcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XFxuXFx0XFx0XFx0XFx0Y2xhc3Nlcy5wdXNoKGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKSk7XFxuXFx0XFx0XFx0fSBlbHNlIGlmIChhcmdUeXBlID09PSAnb2JqZWN0Jykge1xcblxcdFxcdFxcdFxcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcXG5cXHRcXHRcXHRcXHRcXHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XFxuXFx0XFx0XFx0XFx0XFx0XFx0Y2xhc3Nlcy5wdXNoKGtleSk7XFxuXFx0XFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdFxcdH1cXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcblxcdFxcdHJldHVybiBjbGFzc2VzLmpvaW4oJyAnKTtcXG5cXHR9XFxuXFxuXFx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XFxuXFx0XFx0bW9kdWxlLmV4cG9ydHMgPSBjbGFzc05hbWVzO1xcblxcdH0gZWxzZSBpZiAodHJ1ZSkge1xcblxcdFxcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcXG5cXHRcXHQhKF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18gPSBbXSwgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gPSAoZnVuY3Rpb24gKCkge1xcblxcdFxcdFxcdHJldHVybiBjbGFzc05hbWVzO1xcblxcdFxcdH0pLmFwcGx5KGV4cG9ydHMsIF9fV0VCUEFDS19BTURfREVGSU5FX0FSUkFZX18pLFxcblxcdFxcdFxcdFxcdF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fICE9PSB1bmRlZmluZWQgJiYgKG1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18pKTtcXG5cXHR9IGVsc2Uge1xcblxcdFxcdHdpbmRvdy5jbGFzc05hbWVzID0gY2xhc3NOYW1lcztcXG5cXHR9XFxufSgpKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlNYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvcHlBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc1N5bWJvbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RyaW5nVG9QYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X190b0tleV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9TdHJpbmdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xcblxcblxcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8udG9QYXRoKCdhLmIuYycpO1xcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXVxcbiAqXFxuICogXy50b1BhdGgoJ2FbMF0uYi5jJyk7XFxuICogLy8gPT4gWydhJywgJzAnLCAnYicsICdjJ11cXG4gKi9cXG5mdW5jdGlvbiB0b1BhdGgodmFsdWUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5TWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuICB9XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSA/IFt2YWx1ZV0gOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19jb3B5QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0cmluZ1RvUGF0aF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9TdHJpbmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9ICh0b1BhdGgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc1N5bWJvbCgnYWJjJyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxcbiAgICAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID09IHN5bWJvbFRhZyk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzU3ltYm9sKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgU3ltYm9sID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLlN5bWJvbDtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChTeW1ib2wpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xcbnZhciBuYXRpdmVDcmVhdGUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdCwgJ2NyZWF0ZScpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG5hdGl2ZUNyZWF0ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpc3RDYWNoZUNsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbGlzdENhY2hlRGVsZXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbGlzdENhY2hlR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbGlzdENhY2hlSGFzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fbGlzdENhY2hlU2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExMyk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcXG5cXG4gIHRoaXMuY2xlYXIoKTtcXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xcbiAgfVxcbn1cXG5cXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19saXN0Q2FjaGVDbGVhcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbGlzdENhY2hlRGVsZXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saXN0Q2FjaGVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2xpc3RDYWNoZUhhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fbGlzdENhY2hlU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKExpc3RDYWNoZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXFxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXFxuICovXFxuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcXG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XFxuICB3aGlsZSAobGVuZ3RoLS0pIHtcXG4gICAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2VxX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XFxuICAgICAgcmV0dXJuIGxlbmd0aDtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIC0xO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NvY0luZGV4T2YpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0tleWFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTE1KTtcXG5cXG5cXG4vKipcXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIHJlZmVyZW5jZSBrZXkuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxcbiAqL1xcbmZ1bmN0aW9uIGdldE1hcERhdGEobWFwLCBrZXkpIHtcXG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzS2V5YWJsZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoa2V5KVxcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxcbiAgICA6IGRhdGEubWFwO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRNYXBEYXRhKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZGVmaW5lUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTYpO1xcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBhc3NpZ25WYWx1ZWAgYW5kIGBhc3NpZ25NZXJnZVZhbHVlYCB3aXRob3V0XFxuICogdmFsdWUgY2hlY2tzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlQXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XFxuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nICYmIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZGVmaW5lUHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZGVmaW5lUHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5LCB7XFxuICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXFxuICAgICAgJ2VudW1lcmFibGUnOiB0cnVlLFxcbiAgICAgICd2YWx1ZSc6IHZhbHVlLFxcbiAgICAgICd3cml0YWJsZSc6IHRydWVcXG4gICAgfSk7XFxuICB9IGVsc2Uge1xcbiAgICBvYmplY3Rba2V5XSA9IHZhbHVlO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlQXNzaWduVmFsdWUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob3JpZ2luYWxNb2R1bGUpIHtcXG5cXHRpZighb3JpZ2luYWxNb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XFxuXFx0XFx0dmFyIG1vZHVsZSA9IE9iamVjdC5jcmVhdGUob3JpZ2luYWxNb2R1bGUpO1xcblxcdFxcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxcblxcdFxcdGlmKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xcblxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFxcXCJsb2FkZWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUubDtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImlkXFxcIiwge1xcblxcdFxcdFxcdGVudW1lcmFibGU6IHRydWUsXFxuXFx0XFx0XFx0Z2V0OiBmdW5jdGlvbigpIHtcXG5cXHRcXHRcXHRcXHRyZXR1cm4gbW9kdWxlLmk7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH0pO1xcblxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFxcXCJleHBvcnRzXFxcIiwge1xcblxcdFxcdFxcdGVudW1lcmFibGU6IHRydWUsXFxuXFx0XFx0fSk7XFxuXFx0XFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XFxuXFx0fVxcblxcdHJldHVybiBtb2R1bGU7XFxufTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xcblxcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UuIEEgdmFsdWUgaXMgY29uc2lkZXJlZCBhcnJheS1saWtlIGlmIGl0J3NcXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXFxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZSwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlKCdhYmMnKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlKF8ubm9vcCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc0FycmF5TGlrZSh2YWx1ZSkge1xcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLmxlbmd0aCkgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRnVuY3Rpb25fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcnJheUxpa2UpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFByb3RvdHlwZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXFxudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKiogVXNlZCB0byBpbmZlciB0aGUgYE9iamVjdGAgY29uc3RydWN0b3IuICovXFxudmFyIG9iamVjdEN0b3JTdHJpbmcgPSBmdW5jVG9TdHJpbmcuY2FsbChPYmplY3QpO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCB0aGF0IGlzLCBhbiBvYmplY3QgY3JlYXRlZCBieSB0aGVcXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC44LjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcGxhaW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYSA9IDE7XFxuICogfVxcbiAqXFxuICogXy5pc1BsYWluT2JqZWN0KG5ldyBGb28pO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoWzEsIDIsIDNdKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc1BsYWluT2JqZWN0KHsgJ3gnOiAwLCAneSc6IDAgfSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc1BsYWluT2JqZWN0KE9iamVjdC5jcmVhdGUobnVsbCkpO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XFxuICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAhPSBvYmplY3RUYWcpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgdmFyIHByb3RvID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxuICBpZiAocHJvdG8gPT09IG51bGwpIHtcXG4gICAgcmV0dXJuIHRydWU7XFxuICB9XFxuICB2YXIgQ3RvciA9IGhhc093blByb3BlcnR5LmNhbGwocHJvdG8sICdjb25zdHJ1Y3RvcicpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiZcXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNQbGFpbk9iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IGZvcm1hdE5hbWU7XFxuZnVuY3Rpb24gZm9ybWF0TmFtZShjb250ZXh0LCBuYW1lKSB7XFxuICB2YXIgc2VjdGlvblByZWZpeCA9IGNvbnRleHQuX3JlZHV4Rm9ybS5zZWN0aW9uUHJlZml4O1xcblxcbiAgcmV0dXJuICFzZWN0aW9uUHJlZml4ID8gbmFtZSA6IHNlY3Rpb25QcmVmaXggKyBcXFwiLlxcXCIgKyBuYW1lO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhY3Rpb25UeXBlc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYWN0aW9uVHlwZXM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5SW5zZXJ0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheUluc2VydDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlNb3ZlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheU1vdmU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UG9wXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVBvcDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlQdXNoXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVB1c2g7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UmVtb3ZlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVJlbW92ZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlSZW1vdmVBbGxcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UmVtb3ZlQWxsOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVNoaWZ0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVNoaWZ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVNwbGljZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlTcGxpY2U7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U3dhcFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlTd2FwOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVVuc2hpZnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5VW5zaGlmdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXV0b2ZpbGxcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGF1dG9maWxsOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJibHVyXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBibHVyOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJjaGFuZ2VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNoYW5nZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZGVzdHJveVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGVzdHJveTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiRmllbGRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZHNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZpZWxkczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiRmllbGRBcnJheVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGRBcnJheTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiRm9ybVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRm9ybTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiRm9ybVNlY3Rpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZvcm1TZWN0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJmb2N1c1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZm9jdXM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImZvcm1WYWx1ZVNlbGVjdG9yXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmb3JtVmFsdWVTZWxlY3RvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybU5hbWVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtTmFtZXM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImdldEZvcm1WYWx1ZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1WYWx1ZXM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImdldEZvcm1Jbml0aWFsVmFsdWVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtSW5pdGlhbFZhbHVlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybVN5bmNFcnJvcnNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1TeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtQXN5bmNFcnJvcnNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1Bc3luY0Vycm9yczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybVN5bmNXYXJuaW5nc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVN5bmNXYXJuaW5nczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybVN1Ym1pdEVycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVN1Ym1pdEVycm9yczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaW5pdGlhbGl6ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5pdGlhbGl6ZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNEaXJ0eVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNEaXJ0eTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNJbnZhbGlkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc0ludmFsaWQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImlzUHJpc3RpbmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzUHJpc3RpbmU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImlzVmFsaWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzVmFsaWQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImlzU3VibWl0dGluZ1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNTdWJtaXR0aW5nOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJoYXNTdWJtaXRTdWNjZWVkZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGhhc1N1Ym1pdFN1Y2NlZWRlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaGFzU3VibWl0RmFpbGVkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBoYXNTdWJtaXRGYWlsZWQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInByb3BUeXBlc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcHJvcFR5cGVzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWR1Y2VyXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWR1Y2VyOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWR1eEZvcm1cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlZHV4Rm9ybTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwicmVnaXN0ZXJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVnaXN0ZXJGaWVsZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwicmVzZXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlc2V0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzZXRTdWJtaXRGYWlsZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNldFN1Ym1pdEZhaWxlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic2V0U3VibWl0U3VjY2VlZGVkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzZXRTdWJtaXRTdWNjZWVkZWQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0YXJ0QXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGFydEFzeW5jVmFsaWRhdGlvbjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0U3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wQXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wQXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wU3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU3VibWlzc2lvbkVycm9yXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdWJtaXNzaW9uRXJyb3I7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInRvdWNoXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB0b3VjaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidW5yZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1bnJlZ2lzdGVyRmllbGQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInVudG91Y2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVudG91Y2g7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInZhbHVlc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdmFsdWVzOyB9KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVBbGxfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG5cXG5cXG5cXG52YXIgX2NyZWF0ZUFsbCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUFsbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbnZhciBhY3Rpb25UeXBlcyA9IF9jcmVhdGVBbGwuYWN0aW9uVHlwZXMsXFxuICAgIGFycmF5SW5zZXJ0ID0gX2NyZWF0ZUFsbC5hcnJheUluc2VydCxcXG4gICAgYXJyYXlNb3ZlID0gX2NyZWF0ZUFsbC5hcnJheU1vdmUsXFxuICAgIGFycmF5UG9wID0gX2NyZWF0ZUFsbC5hcnJheVBvcCxcXG4gICAgYXJyYXlQdXNoID0gX2NyZWF0ZUFsbC5hcnJheVB1c2gsXFxuICAgIGFycmF5UmVtb3ZlID0gX2NyZWF0ZUFsbC5hcnJheVJlbW92ZSxcXG4gICAgYXJyYXlSZW1vdmVBbGwgPSBfY3JlYXRlQWxsLmFycmF5UmVtb3ZlQWxsLFxcbiAgICBhcnJheVNoaWZ0ID0gX2NyZWF0ZUFsbC5hcnJheVNoaWZ0LFxcbiAgICBhcnJheVNwbGljZSA9IF9jcmVhdGVBbGwuYXJyYXlTcGxpY2UsXFxuICAgIGFycmF5U3dhcCA9IF9jcmVhdGVBbGwuYXJyYXlTd2FwLFxcbiAgICBhcnJheVVuc2hpZnQgPSBfY3JlYXRlQWxsLmFycmF5VW5zaGlmdCxcXG4gICAgYXV0b2ZpbGwgPSBfY3JlYXRlQWxsLmF1dG9maWxsLFxcbiAgICBibHVyID0gX2NyZWF0ZUFsbC5ibHVyLFxcbiAgICBjaGFuZ2UgPSBfY3JlYXRlQWxsLmNoYW5nZSxcXG4gICAgZGVzdHJveSA9IF9jcmVhdGVBbGwuZGVzdHJveSxcXG4gICAgRmllbGQgPSBfY3JlYXRlQWxsLkZpZWxkLFxcbiAgICBGaWVsZHMgPSBfY3JlYXRlQWxsLkZpZWxkcyxcXG4gICAgRmllbGRBcnJheSA9IF9jcmVhdGVBbGwuRmllbGRBcnJheSxcXG4gICAgRm9ybSA9IF9jcmVhdGVBbGwuRm9ybSxcXG4gICAgRm9ybVNlY3Rpb24gPSBfY3JlYXRlQWxsLkZvcm1TZWN0aW9uLFxcbiAgICBmb2N1cyA9IF9jcmVhdGVBbGwuZm9jdXMsXFxuICAgIGZvcm1WYWx1ZVNlbGVjdG9yID0gX2NyZWF0ZUFsbC5mb3JtVmFsdWVTZWxlY3RvcixcXG4gICAgZ2V0Rm9ybU5hbWVzID0gX2NyZWF0ZUFsbC5nZXRGb3JtTmFtZXMsXFxuICAgIGdldEZvcm1WYWx1ZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1WYWx1ZXMsXFxuICAgIGdldEZvcm1Jbml0aWFsVmFsdWVzID0gX2NyZWF0ZUFsbC5nZXRGb3JtSW5pdGlhbFZhbHVlcyxcXG4gICAgZ2V0Rm9ybVN5bmNFcnJvcnMgPSBfY3JlYXRlQWxsLmdldEZvcm1TeW5jRXJyb3JzLFxcbiAgICBnZXRGb3JtQXN5bmNFcnJvcnMgPSBfY3JlYXRlQWxsLmdldEZvcm1Bc3luY0Vycm9ycyxcXG4gICAgZ2V0Rm9ybVN5bmNXYXJuaW5ncyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVN5bmNXYXJuaW5ncyxcXG4gICAgZ2V0Rm9ybVN1Ym1pdEVycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVN1Ym1pdEVycm9ycyxcXG4gICAgaW5pdGlhbGl6ZSA9IF9jcmVhdGVBbGwuaW5pdGlhbGl6ZSxcXG4gICAgaXNEaXJ0eSA9IF9jcmVhdGVBbGwuaXNEaXJ0eSxcXG4gICAgaXNJbnZhbGlkID0gX2NyZWF0ZUFsbC5pc0ludmFsaWQsXFxuICAgIGlzUHJpc3RpbmUgPSBfY3JlYXRlQWxsLmlzUHJpc3RpbmUsXFxuICAgIGlzVmFsaWQgPSBfY3JlYXRlQWxsLmlzVmFsaWQsXFxuICAgIGlzU3VibWl0dGluZyA9IF9jcmVhdGVBbGwuaXNTdWJtaXR0aW5nLFxcbiAgICBoYXNTdWJtaXRTdWNjZWVkZWQgPSBfY3JlYXRlQWxsLmhhc1N1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgaGFzU3VibWl0RmFpbGVkID0gX2NyZWF0ZUFsbC5oYXNTdWJtaXRGYWlsZWQsXFxuICAgIHByb3BUeXBlcyA9IF9jcmVhdGVBbGwucHJvcFR5cGVzLFxcbiAgICByZWR1Y2VyID0gX2NyZWF0ZUFsbC5yZWR1Y2VyLFxcbiAgICByZWR1eEZvcm0gPSBfY3JlYXRlQWxsLnJlZHV4Rm9ybSxcXG4gICAgcmVnaXN0ZXJGaWVsZCA9IF9jcmVhdGVBbGwucmVnaXN0ZXJGaWVsZCxcXG4gICAgcmVzZXQgPSBfY3JlYXRlQWxsLnJlc2V0LFxcbiAgICBzZXRTdWJtaXRGYWlsZWQgPSBfY3JlYXRlQWxsLnNldFN1Ym1pdEZhaWxlZCxcXG4gICAgc2V0U3VibWl0U3VjY2VlZGVkID0gX2NyZWF0ZUFsbC5zZXRTdWJtaXRTdWNjZWVkZWQsXFxuICAgIHN0YXJ0QXN5bmNWYWxpZGF0aW9uID0gX2NyZWF0ZUFsbC5zdGFydEFzeW5jVmFsaWRhdGlvbixcXG4gICAgc3RhcnRTdWJtaXQgPSBfY3JlYXRlQWxsLnN0YXJ0U3VibWl0LFxcbiAgICBzdG9wQXN5bmNWYWxpZGF0aW9uID0gX2NyZWF0ZUFsbC5zdG9wQXN5bmNWYWxpZGF0aW9uLFxcbiAgICBzdG9wU3VibWl0ID0gX2NyZWF0ZUFsbC5zdG9wU3VibWl0LFxcbiAgICBzdWJtaXQgPSBfY3JlYXRlQWxsLnN1Ym1pdCxcXG4gICAgU3VibWlzc2lvbkVycm9yID0gX2NyZWF0ZUFsbC5TdWJtaXNzaW9uRXJyb3IsXFxuICAgIHRvdWNoID0gX2NyZWF0ZUFsbC50b3VjaCxcXG4gICAgdW5yZWdpc3RlckZpZWxkID0gX2NyZWF0ZUFsbC51bnJlZ2lzdGVyRmllbGQsXFxuICAgIHVudG91Y2ggPSBfY3JlYXRlQWxsLnVudG91Y2gsXFxuICAgIHZhbHVlcyA9IF9jcmVhdGVBbGwudmFsdWVzO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX0lOU0VSVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfSU5TRVJUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9NT1ZFXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9NT1ZFOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9QT1BcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1BPUDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfUFVTSFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUFVTSDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfUkVNT1ZFXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9SRU1PVkU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX1JFTU9WRV9BTExcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1JFTU9WRV9BTEw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX1NISUZUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9TSElGVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU1BMSUNFXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9TUExJQ0U7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX1VOU0hJRlRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1VOU0hJRlQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX1NXQVBcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NXQVA7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFVVE9GSUxMXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBVVRPRklMTDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQkxVUlxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQkxVUjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQ0hBTkdFXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDSEFOR0U7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX1NVQk1JVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ0xFQVJfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJDTEVBUl9TVUJNSVRfRVJST1JTXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9TVUJNSVRfRVJST1JTOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJDTEVBUl9BU1lOQ19FUlJPUlxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQ0xFQVJfQVNZTkNfRVJST1I7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkRFU1RST1lcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIERFU1RST1k7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkZPQ1VTXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGT0NVUzsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiSU5JVElBTElaRVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gSU5JVElBTElaRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiUkVHSVNURVJfRklFTERcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFJFR0lTVEVSX0ZJRUxEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJSRVNFVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUkVTRVQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNFVF9TVUJNSVRfRkFJTEVEXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTRVRfU1VCTUlUX0ZBSUxFRDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNFVF9TVUJNSVRfU1VDQ0VFREVEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVEFSVF9BU1lOQ19WQUxJREFUSU9OXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTVEFSVF9BU1lOQ19WQUxJREFUSU9OOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVEFSVF9TVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUQVJUX1NVQk1JVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU1RPUF9BU1lOQ19WQUxJREFUSU9OXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTVE9QX0FTWU5DX1ZBTElEQVRJT047IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUT1BfU1VCTUlUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTVE9QX1NVQk1JVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU1VCTUlUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTVUJNSVQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlRPVUNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBUT1VDSDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVU5SRUdJU1RFUl9GSUVMRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVU5SRUdJU1RFUl9GSUVMRDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVU5UT1VDSFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gVU5UT1VDSDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVVBEQVRFX1NZTkNfRVJST1JTXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVUERBVEVfU1lOQ19FUlJPUlM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlVQREFURV9TWU5DX1dBUk5JTkdTXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVUERBVEVfU1lOQ19XQVJOSU5HUzsgfSk7XFxudmFyIEFSUkFZX0lOU0VSVCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfSU5TRVJUJztcXG52YXIgQVJSQVlfTU9WRSA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfTU9WRSc7XFxudmFyIEFSUkFZX1BPUCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfUE9QJztcXG52YXIgQVJSQVlfUFVTSCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfUFVTSCc7XFxudmFyIEFSUkFZX1JFTU9WRSA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfUkVNT1ZFJztcXG52YXIgQVJSQVlfUkVNT1ZFX0FMTCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfUkVNT1ZFX0FMTCc7XFxudmFyIEFSUkFZX1NISUZUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9TSElGVCc7XFxudmFyIEFSUkFZX1NQTElDRSA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfU1BMSUNFJztcXG52YXIgQVJSQVlfVU5TSElGVCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfVU5TSElGVCc7XFxudmFyIEFSUkFZX1NXQVAgPSAnQEByZWR1eC1mb3JtL0FSUkFZX1NXQVAnO1xcbnZhciBBVVRPRklMTCA9ICdAQHJlZHV4LWZvcm0vQVVUT0ZJTEwnO1xcbnZhciBCTFVSID0gJ0BAcmVkdXgtZm9ybS9CTFVSJztcXG52YXIgQ0hBTkdFID0gJ0BAcmVkdXgtZm9ybS9DSEFOR0UnO1xcbnZhciBDTEVBUl9TVUJNSVQgPSAnQEByZWR1eC1mb3JtL0NMRUFSX1NVQk1JVCc7XFxudmFyIENMRUFSX1NVQk1JVF9FUlJPUlMgPSAnQEByZWR1eC1mb3JtL0NMRUFSX1NVQk1JVF9FUlJPUlMnO1xcbnZhciBDTEVBUl9BU1lOQ19FUlJPUiA9ICdAcmVkdXgtZm9ybS9DTEVBUl9BU1lOQ19FUlJPUic7XFxudmFyIERFU1RST1kgPSAnQEByZWR1eC1mb3JtL0RFU1RST1knO1xcbnZhciBGT0NVUyA9ICdAQHJlZHV4LWZvcm0vRk9DVVMnO1xcbnZhciBJTklUSUFMSVpFID0gJ0BAcmVkdXgtZm9ybS9JTklUSUFMSVpFJztcXG52YXIgUkVHSVNURVJfRklFTEQgPSAnQEByZWR1eC1mb3JtL1JFR0lTVEVSX0ZJRUxEJztcXG52YXIgUkVTRVQgPSAnQEByZWR1eC1mb3JtL1JFU0VUJztcXG52YXIgU0VUX1NVQk1JVF9GQUlMRUQgPSAnQEByZWR1eC1mb3JtL1NFVF9TVUJNSVRfRkFJTEVEJztcXG52YXIgU0VUX1NVQk1JVF9TVUNDRUVERUQgPSAnQEByZWR1eC1mb3JtL1NFVF9TVUJNSVRfU1VDQ0VFREVEJztcXG52YXIgU1RBUlRfQVNZTkNfVkFMSURBVElPTiA9ICdAQHJlZHV4LWZvcm0vU1RBUlRfQVNZTkNfVkFMSURBVElPTic7XFxudmFyIFNUQVJUX1NVQk1JVCA9ICdAQHJlZHV4LWZvcm0vU1RBUlRfU1VCTUlUJztcXG52YXIgU1RPUF9BU1lOQ19WQUxJREFUSU9OID0gJ0BAcmVkdXgtZm9ybS9TVE9QX0FTWU5DX1ZBTElEQVRJT04nO1xcbnZhciBTVE9QX1NVQk1JVCA9ICdAQHJlZHV4LWZvcm0vU1RPUF9TVUJNSVQnO1xcbnZhciBTVUJNSVQgPSAnQEByZWR1eC1mb3JtL1NVQk1JVCc7XFxudmFyIFRPVUNIID0gJ0BAcmVkdXgtZm9ybS9UT1VDSCc7XFxudmFyIFVOUkVHSVNURVJfRklFTEQgPSAnQEByZWR1eC1mb3JtL1VOUkVHSVNURVJfRklFTEQnO1xcbnZhciBVTlRPVUNIID0gJ0BAcmVkdXgtZm9ybS9VTlRPVUNIJztcXG52YXIgVVBEQVRFX1NZTkNfRVJST1JTID0gJ0BAcmVkdXgtZm9ybS9VUERBVEVfU1lOQ19FUlJPUlMnO1xcbnZhciBVUERBVEVfU1lOQ19XQVJOSU5HUyA9ICdAQHJlZHV4LWZvcm0vVVBEQVRFX1NZTkNfV0FSTklOR1MnO1xcblxcbi8qKiovIH0pLFxcbi8qIDI4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbnZhciBnO1xcblxcbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXFxuZyA9IChmdW5jdGlvbigpIHtcXG5cXHRyZXR1cm4gdGhpcztcXG59KSgpO1xcblxcbnRyeSB7XFxuXFx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXFxuXFx0ZyA9IGcgfHwgRnVuY3Rpb24oXFxcInJldHVybiB0aGlzXFxcIikoKSB8fCAoMSxldmFsKShcXFwidGhpc1xcXCIpO1xcbn0gY2F0Y2goZSkge1xcblxcdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXFxuXFx0aWYodHlwZW9mIHdpbmRvdyA9PT0gXFxcIm9iamVjdFxcXCIpXFxuXFx0XFx0ZyA9IHdpbmRvdztcXG59XFxuXFxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxcbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXFxuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxcblxcbm1vZHVsZS5leHBvcnRzID0gZztcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWFwQ2FjaGVDbGVhcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbWFwQ2FjaGVEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTE0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19tYXBDYWNoZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcENhY2hlSGFzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fbWFwQ2FjaGVTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTE4KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBjb25zdHJ1Y3RvclxcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxcbiAqL1xcbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcXG5cXG4gIHRoaXMuY2xlYXIoKTtcXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xcbiAgfVxcbn1cXG5cXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxcbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWFwQ2FjaGVDbGVhcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tYXBDYWNoZURlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19tYXBDYWNoZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19tYXBDYWNoZUhhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBDYWNoZVNldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChNYXBDYWNoZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0Z1bmN0aW9uKF8pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XFxuICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXFxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cXG4gIHZhciB0YWcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0Z1bmN0aW9uKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xcbnZhciBNYXAgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ01hcCcpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKE1hcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0xpc3RDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RhY2tDbGVhcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3N0YWNrRGVsZXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fc3RhY2tHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdGFja0hhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3N0YWNrU2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNyk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBjb25zdHJ1Y3RvclxcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxcbiAqL1xcbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0xpc3RDYWNoZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShlbnRyaWVzKTtcXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcXG59XFxuXFxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cXG5TdGFjay5wcm90b3R5cGUuY2xlYXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0YWNrQ2xlYXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuU3RhY2sucHJvdG90eXBlWydkZWxldGUnXSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc3RhY2tEZWxldGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuU3RhY2sucHJvdG90eXBlLmdldCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fc3RhY2tHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuU3RhY2sucHJvdG90eXBlLmhhcyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RhY2tIYXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuU3RhY2sucHJvdG90eXBlLnNldCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc3RhY2tTZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoU3RhY2spO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDMzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3RvdHlwZSwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XFxuICB2YXIgQ3RvciA9IHZhbHVlICYmIHZhbHVlLmNvbnN0cnVjdG9yLFxcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xcblxcbiAgcmV0dXJuIHZhbHVlID09PSBwcm90bztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNQcm90b3R5cGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxcbiAqICBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxudmFyIGlzQXJndW1lbnRzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzQXJndW1lbnRzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzQXJndW1lbnRzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogZnVuY3Rpb24odmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnY2FsbGVlJykgJiZcXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzQXJndW1lbnRzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXFxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXFxuICpcXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxcbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNMZW5ndGgoMyk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNMZW5ndGgoJzMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XFxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXFxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNMZW5ndGgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdHViRmFsc2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTM3KTtcXG5cXG5cXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xcbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXFxudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcXG5cXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xcbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLkJ1ZmZlciA6IHVuZGVmaW5lZDtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMy4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdHViRmFsc2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNCdWZmZXIpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAzNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzVHlwZWRBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VVbmFyeV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25vZGVVdGlsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MCk7XFxuXFxuXFxuXFxuXFxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbm9kZVV0aWxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19ub2RlVXRpbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5pc1R5cGVkQXJyYXk7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VVbmFyeV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkobm9kZUlzVHlwZWRBcnJheSkgOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc1R5cGVkQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNUeXBlZEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXFxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xcblxcbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXFxcZCopJC87XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XFxuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XFxuXFxuICByZXR1cm4gISFsZW5ndGggJiZcXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcXG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXFxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzSW5kZXgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmaXJzdCBhcmd1bWVudCBpdCByZWNlaXZlcy5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBjYXRlZ29yeSBVdGlsXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBBbnkgdmFsdWUuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XFxuICpcXG4gKiBjb25zb2xlLmxvZyhfLmlkZW50aXR5KG9iamVjdCkgPT09IG9iamVjdCk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlkZW50aXR5KHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWU7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlkZW50aXR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA0MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTU3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy4gU2VlIHRoZVxcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBtZW1iZXJPZiBfXFxuICogQGNhdGVnb3J5IE9iamVjdFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBGb28oKSB7XFxuICogICB0aGlzLmEgPSAxO1xcbiAqICAgdGhpcy5iID0gMjtcXG4gKiB9XFxuICpcXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xcbiAqXFxuICogXy5rZXlzKG5ldyBGb28pO1xcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcXG4gKlxcbiAqIF8ua2V5cygnaGknKTtcXG4gKiAvLyA9PiBbJzAnLCAnMSddXFxuICovXFxuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5TGlrZUtleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoa2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsRGVlcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXFxuICogYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cXG4gKiAgMSAtIFVub3JkZXJlZCBjb21wYXJpc29uXFxuICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spIHtcXG4gIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcXG4gICAgcmV0dXJuIHRydWU7XFxuICB9XFxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpKSkge1xcbiAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcXG4gIH1cXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNFcXVhbERlZXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUlzRXF1YWwpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG5cXG5cXG5cXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXFxudmFyIHJlSXNEZWVwUHJvcCA9IC9cXFxcLnxcXFxcWyg/OlteW1xcXFxdXSp8KFtcXFwiJ10pKD86KD8hXFxcXDEpW15cXFxcXFxcXF18XFxcXFxcXFwuKSo/XFxcXDEpXFxcXF0vLFxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXFxcdyokLztcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUgYW5kIG5vdCBhIHByb3BlcnR5IHBhdGguXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcXG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgcmV0dXJuIHRydWU7XFxuICB9XFxuICByZXR1cm4gcmVJc1BsYWluUHJvcC50ZXN0KHZhbHVlKSB8fCAhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpIHx8XFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzS2V5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA0MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXFxuICpcXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXFxuICovXFxuXFxuXFxuXFxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3YXJuaW5nO1xcbi8qKlxcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxcbiAqXFxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZS5cXG4gKiBAcmV0dXJucyB7dm9pZH1cXG4gKi9cXG5mdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHtcXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cXG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcXG4gIH1cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xcbiAgdHJ5IHtcXG4gICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBpZiB5b3UgZW5hYmxlXFxuICAgIC8vIFxcXCJicmVhayBvbiBhbGwgZXhjZXB0aW9uc1xcXCIgaW4geW91ciBjb25zb2xlLFxcbiAgICAvLyBpdCB3b3VsZCBwYXVzZSB0aGUgZXhlY3V0aW9uIGF0IHRoaXMgbGluZS5cXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eSAqL1xcbiAgfSBjYXRjaCAoZSkge31cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tZW1wdHkgKi9cXG59XFxuXFxuLyoqKi8gfSksXFxuLyogNDUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihwcm9jZXNzKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlU3RvcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvbWJpbmVSZWR1Y2Vyc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2JpbmRBY3Rpb25DcmVhdG9yc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2FwcGx5TWlkZGxld2FyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2NvbXBvc2VfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxzX3dhcm5pbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzQpO1xcbi8qIHVudXNlZCBoYXJtb255IHJlZXhwb3J0IGNyZWF0ZVN0b3JlICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29tYmluZVJlZHVjZXJzICovXFxuLyogaGFybW9ueSByZWV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2JpbmRBY3Rpb25DcmVhdG9yc19fW1xcXCJhXFxcIl07IH0pO1xcbi8qIHVudXNlZCBoYXJtb255IHJlZXhwb3J0IGFwcGx5TWlkZGxld2FyZSAqL1xcbi8qIHVudXNlZCBoYXJtb255IHJlZXhwb3J0IGNvbXBvc2UgKi9cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKlxcbiogVGhpcyBpcyBhIGR1bW15IGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBmdW5jdGlvbiBuYW1lIGhhcyBiZWVuIGFsdGVyZWQgYnkgbWluaWZpY2F0aW9uLlxcbiogSWYgdGhlIGZ1bmN0aW9uIGhhcyBiZWVuIG1pbmlmaWVkIGFuZCBOT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nLCB3YXJuIHRoZSB1c2VyLlxcbiovXFxuZnVuY3Rpb24gaXNDcnVzaGVkKCkge31cXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgaXNDcnVzaGVkLm5hbWUgPT09ICdzdHJpbmcnICYmIGlzQ3J1c2hlZC5uYW1lICE9PSAnaXNDcnVzaGVkJykge1xcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbHNfd2FybmluZ19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoJ1lvdSBhcmUgY3VycmVudGx5IHVzaW5nIG1pbmlmaWVkIGNvZGUgb3V0c2lkZSBvZiBOT0RFX0VOViA9PT0gXFxcXCdwcm9kdWN0aW9uXFxcXCcuICcgKyAnVGhpcyBtZWFucyB0aGF0IHlvdSBhcmUgcnVubmluZyBhIHNsb3dlciBkZXZlbG9wbWVudCBidWlsZCBvZiBSZWR1eC4gJyArICdZb3UgY2FuIHVzZSBsb29zZS1lbnZpZnkgKGh0dHBzOi8vZ2l0aHViLmNvbS96ZXJ0b3NoL2xvb3NlLWVudmlmeSkgZm9yIGJyb3dzZXJpZnkgJyArICdvciBEZWZpbmVQbHVnaW4gZm9yIHdlYnBhY2sgKGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzAwMzAwMzEpICcgKyAndG8gZW5zdXJlIHlvdSBoYXZlIHRoZSBjb3JyZWN0IGNvZGUgZm9yIHlvdXIgcHJvZHVjdGlvbiBidWlsZC4nKTtcXG59XFxuXFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbm1vZHVsZS5leHBvcnRzID0gaXNQcm9taXNlO1xcblxcbmZ1bmN0aW9uIGlzUHJvbWlzZShvYmopIHtcXG4gIHJldHVybiAhIW9iaiAmJiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykgJiYgdHlwZW9mIG9iai50aGVuID09PSAnZnVuY3Rpb24nO1xcbn1cXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA0NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGFzRXJyb3JfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjI2KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNWYWxpZCA9IGZ1bmN0aW9uIGNyZWF0ZUlzVmFsaWQoc3RydWN0dXJlKSB7XFxuICB2YXIgZ2V0SW4gPSBzdHJ1Y3R1cmUuZ2V0SW4sXFxuICAgICAga2V5cyA9IHN0cnVjdHVyZS5rZXlzO1xcblxcbiAgdmFyIGhhc0Vycm9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGFzRXJyb3JfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSk7XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICB2YXIgaWdub3JlU3VibWl0RXJyb3JzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHZhciBmb3JtU3RhdGUgPSBnZXRGb3JtU3RhdGUoc3RhdGUpO1xcbiAgICAgIHZhciBzeW5jRXJyb3IgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnN5bmNFcnJvcicpO1xcbiAgICAgIGlmIChzeW5jRXJyb3IpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICB9XFxuICAgICAgaWYgKCFpZ25vcmVTdWJtaXRFcnJvcnMpIHtcXG4gICAgICAgIHZhciBlcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuZXJyb3InKTtcXG4gICAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHZhciBzeW5jRXJyb3JzID0gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5zeW5jRXJyb3JzJyk7XFxuICAgICAgdmFyIGFzeW5jRXJyb3JzID0gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5hc3luY0Vycm9ycycpO1xcbiAgICAgIHZhciBzdWJtaXRFcnJvcnMgPSBpZ25vcmVTdWJtaXRFcnJvcnMgPyB1bmRlZmluZWQgOiBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnN1Ym1pdEVycm9ycycpO1xcbiAgICAgIGlmICghc3luY0Vycm9ycyAmJiAhYXN5bmNFcnJvcnMgJiYgIXN1Ym1pdEVycm9ycykge1xcbiAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgfVxcblxcbiAgICAgIHZhciByZWdpc3RlcmVkRmllbGRzID0gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5yZWdpc3RlcmVkRmllbGRzJyk7XFxuICAgICAgaWYgKCFyZWdpc3RlcmVkRmllbGRzKSB7XFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICB9XFxuXFxuICAgICAgcmV0dXJuICFrZXlzKHJlZ2lzdGVyZWRGaWVsZHMpLmZpbHRlcihmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHJlZ2lzdGVyZWRGaWVsZHMsICdbXFxcXCcnICsgbmFtZSArICdcXFxcJ10uY291bnQnKSA+IDA7XFxuICAgICAgfSkuc29tZShmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgcmV0dXJuIGhhc0Vycm9yKGdldEluKHJlZ2lzdGVyZWRGaWVsZHMsICdbXFxcXCcnICsgbmFtZSArICdcXFxcJ10nKSwgc3luY0Vycm9ycywgYXN5bmNFcnJvcnMsIHN1Ym1pdEVycm9ycyk7XFxuICAgICAgfSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSXNWYWxpZCk7XFxuXFxuLyoqKi8gfSksXFxuLyogNDggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzRXF1YWxXaXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgyKTtcXG5cXG5cXG5cXG52YXIgY3VzdG9taXplciA9IGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqZWN0VmFsdWUsIG90aGVyVmFsdWUsIGluZGV4T3JrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKSB7XFxuICAvLyBodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjQjaXNFcXVhbFdpdGhcXG4gIGlmIChzdGFjaykge1xcbiAgICAvLyBTaGFsbG93IGNvbXBhcmVzXFxuICAgIC8vIEZvciAxc3QgbGV2ZWwsIHN0YWNrID09PSB1bmRlZmluZWQuXFxuICAgIC8vICAgLT4gRG8gbm90aGluZyAoYW5kIGltcGxpY2l0bHkgcmV0dXJuIHVuZGVmaW5lZCBzbyB0aGF0IGl0IGdvZXMgdG8gY29tcGFyZSAybmQgbGV2ZWwpXFxuICAgIC8vIEZvciAybmQgbGV2ZWwgYW5kIHVwLCBzdGFjayAhPT0gdW5kZWZpbmVkLlxcbiAgICAvLyAgIC0+IENvbXBhcmUgYnkgPT09IG9wZXJhdG9yXFxuICAgIHJldHVybiBvYmplY3RWYWx1ZSA9PT0gb3RoZXJWYWx1ZTtcXG4gIH1cXG59O1xcblxcbnZhciBzaGFsbG93Q29tcGFyZSA9IGZ1bmN0aW9uIHNoYWxsb3dDb21wYXJlKGluc3RhbmNlLCBuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xcbiAgcmV0dXJuICFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5zdGFuY2UucHJvcHMsIG5leHRQcm9wcywgY3VzdG9taXplcikgfHwgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzRXF1YWxXaXRoX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpbnN0YW5jZS5zdGF0ZSwgbmV4dFN0YXRlLCBjdXN0b21pemVyKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNoYWxsb3dDb21wYXJlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA0OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1hcGAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXFxuICogc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxcbiAqL1xcbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheU1hcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXk9W11dIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyB0by5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cXG4gKi9cXG5mdW5jdGlvbiBjb3B5QXJyYXkoc291cmNlLCBhcnJheSkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcXG5cXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgYXJyYXlbaW5kZXhdID0gc291cmNlW2luZGV4XTtcXG4gIH1cXG4gIHJldHVybiBhcnJheTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY29weUFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKGdsb2JhbCkgey8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXFxudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGZyZWVHbG9iYWwpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX21lbW9pemVDYXBwZWRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTYpO1xcblxcblxcbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxcXF1dK3xcXFxcWyg/OigtP1xcXFxkKyg/OlxcXFwuXFxcXGQrKT8pfChbXFxcIiddKSgoPzooPyFcXFxcMilbXlxcXFxcXFxcXXxcXFxcXFxcXC4pKj8pXFxcXDIpXFxcXF18KD89KD86XFxcXC58XFxcXFtcXFxcXSkoPzpcXFxcLnxcXFxcW1xcXFxdfCQpKS9nO1xcblxcbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xcbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXFxcXFwoXFxcXFxcXFwpPy9nO1xcblxcbi8qKlxcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqL1xcbnZhciBzdHJpbmdUb1BhdGggPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tZW1vaXplQ2FwcGVkX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbihzdHJpbmcpIHtcXG4gIHZhciByZXN1bHQgPSBbXTtcXG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xcbiAgICByZXN1bHQucHVzaCgnJyk7XFxuICB9XFxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XFxuICAgIHJlc3VsdC5wdXNoKHF1b3RlID8gc3ViU3RyaW5nLnJlcGxhY2UocmVFc2NhcGVDaGFyLCAnJDEnKSA6IChudW1iZXIgfHwgbWF0Y2gpKTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHJpbmdUb1BhdGgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDUzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXFxudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxcbiAqL1xcbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcXG4gIGlmIChmdW5jICE9IG51bGwpIHtcXG4gICAgdHJ5IHtcXG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICAgIHRyeSB7XFxuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xcbiAgICB9IGNhdGNoIChlKSB7fVxcbiAgfVxcbiAgcmV0dXJuICcnO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9ICh0b1NvdXJjZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTkpO1xcblxcblxcbi8qKlxcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcuIEFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZCBmb3IgYG51bGxgXFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy50b1N0cmluZyhudWxsKTtcXG4gKiAvLyA9PiAnJ1xcbiAqXFxuICogXy50b1N0cmluZygtMCk7XFxuICogLy8gPT4gJy0wJ1xcbiAqXFxuICogXy50b1N0cmluZyhbMSwgMiwgM10pO1xcbiAqIC8vID0+ICcxLDIsMydcXG4gKi9cXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgPyAnJyA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9ICh0b1N0cmluZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBhc3NpZ25WYWx1ZWAgZXhjZXB0IHRoYXQgaXQgZG9lc24ndCBhc3NpZ25cXG4gKiBgdW5kZWZpbmVkYCB2YWx1ZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxcbiAqL1xcbmZ1bmN0aW9uIGFzc2lnbk1lcmdlVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XFxuICBpZiAoKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2VxX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3Rba2V5XSwgdmFsdWUpKSB8fFxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIHZhbHVlKTtcXG4gIH1cXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYXNzaWduTWVyZ2VWYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG5cXG5cXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoZnVuY3Rpb24oKSB7XFxuICB0cnkge1xcbiAgICB2YXIgZnVuYyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0LCAnZGVmaW5lUHJvcGVydHknKTtcXG4gICAgZnVuYyh7fSwgJycsIHt9KTtcXG4gICAgcmV0dXJuIGZ1bmM7XFxuICB9IGNhdGNoIChlKSB7fVxcbn0oKSk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmaW5lUHJvcGVydHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDU3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVCYXNlRm9yX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyOCk7XFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGJhc2VGb3JPd25gIHdoaWNoIGl0ZXJhdGVzIG92ZXIgYG9iamVjdGBcXG4gKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS5cXG4gKiBJdGVyYXRlZSBmdW5jdGlvbnMgbWF5IGV4aXQgaXRlcmF0aW9uIGVhcmx5IGJ5IGV4cGxpY2l0bHkgcmV0dXJuaW5nIGBmYWxzZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxudmFyIGJhc2VGb3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVCYXNlRm9yX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VGb3IpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDU4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBVaW50OEFycmF5ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLlVpbnQ4QXJyYXk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoVWludDhBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX292ZXJBcmdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjApO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBnZXRQcm90b3R5cGUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QuZ2V0UHJvdG90eXBlT2YsIE9iamVjdCk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0UHJvdG90eXBlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcXG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcXG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob3ZlckFyZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgLCB1bmxlc3MgYGtleWAgaXMgXFxcIl9fcHJvdG9fX1xcXCIuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gc2FmZUdldChvYmplY3QsIGtleSkge1xcbiAgaWYgKGtleSA9PSAnX19wcm90b19fJykge1xcbiAgICByZXR1cm47XFxuICB9XFxuXFxuICByZXR1cm4gb2JqZWN0W2tleV07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNhZmVHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheUxpa2VLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlS2V5c0luX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheUxpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBhbmQgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiAqKk5vdGU6KiogTm9uLW9iamVjdCB2YWx1ZXMgYXJlIGNvZXJjZWQgdG8gb2JqZWN0cy5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAzLjAuMFxcbiAqIEBjYXRlZ29yeSBPYmplY3RcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogZnVuY3Rpb24gRm9vKCkge1xcbiAqICAgdGhpcy5hID0gMTtcXG4gKiAgIHRoaXMuYiA9IDI7XFxuICogfVxcbiAqXFxuICogRm9vLnByb3RvdHlwZS5jID0gMztcXG4gKlxcbiAqIF8ua2V5c0luKG5ldyBGb28pO1xcbiAqIC8vID0+IFsnYScsICdiJywgJ2MnXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqL1xcbmZ1bmN0aW9uIGtleXNJbihvYmplY3QpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5TGlrZUtleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgdHJ1ZSkgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlS2V5c0luX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChrZXlzSW4pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDYzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlVGltZXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0J1ZmZlcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNJbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNUeXBlZEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqL1xcbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xcbiAgdmFyIGlzQXJyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0J1ZmZlcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgIGlzVHlwZSA9ICFpc0FyciAmJiAhaXNBcmcgJiYgIWlzQnVmZiAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc1R5cGVkQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSxcXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXFxuICAgICAgcmVzdWx0ID0gc2tpcEluZGV4ZXMgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlVGltZXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XFxuXFxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcXG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcXG4gICAgICAgICEoc2tpcEluZGV4ZXMgJiYgKFxcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxcbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XFxuICAgICAgICAgICAvLyBOb2RlLmpzIDAuMTAgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gYnVmZmVycy5cXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxcbiAgICAgICAgICAgKGlzVHlwZSAmJiAoa2V5ID09ICdidWZmZXInIHx8IGtleSA9PSAnYnl0ZUxlbmd0aCcgfHwga2V5ID09ICdieXRlT2Zmc2V0JykpIHx8XFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXFxuICAgICAgICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0luZGV4X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShrZXksIGxlbmd0aClcXG4gICAgICAgICkpKSB7XFxuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYXJyYXlMaWtlS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUZvck93bl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Jhc2VJdGVyYXRlZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTkpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhcyBgb2JqZWN0YCBhbmQgdmFsdWVzIGdlbmVyYXRlZFxcbiAqIGJ5IHJ1bm5pbmcgZWFjaCBvd24gZW51bWVyYWJsZSBzdHJpbmcga2V5ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAgdGhydVxcbiAqIGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxcbiAqICh2YWx1ZSwga2V5LCBvYmplY3QpLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDIuNC4wXFxuICogQGNhdGVnb3J5IE9iamVjdFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2l0ZXJhdGVlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBvYmplY3QuXFxuICogQHNlZSBfLm1hcEtleXNcXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIHVzZXJzID0ge1xcbiAqICAgJ2ZyZWQnOiAgICB7ICd1c2VyJzogJ2ZyZWQnLCAgICAnYWdlJzogNDAgfSxcXG4gKiAgICdwZWJibGVzJzogeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEgfVxcbiAqIH07XFxuICpcXG4gKiBfLm1hcFZhbHVlcyh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2U7IH0pO1xcbiAqIC8vID0+IHsgJ2ZyZWQnOiA0MCwgJ3BlYmJsZXMnOiAxIH0gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcXG4gKlxcbiAqIC8vIFRoZSBgXy5wcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxcbiAqIF8ubWFwVmFsdWVzKHVzZXJzLCAnYWdlJyk7XFxuICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqL1xcbmZ1bmN0aW9uIG1hcFZhbHVlcyhvYmplY3QsIGl0ZXJhdGVlKSB7XFxuICB2YXIgcmVzdWx0ID0ge307XFxuICBpdGVyYXRlZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Jhc2VJdGVyYXRlZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaXRlcmF0ZWUsIDMpO1xcblxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUZvck93bl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBmdW5jdGlvbih2YWx1ZSwga2V5LCBvYmplY3QpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShyZXN1bHQsIGtleSwgaXRlcmF0ZWUodmFsdWUsIGtleSwgb2JqZWN0KSk7XFxuICB9KTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcFZhbHVlcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1NldENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlTb21lX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY3KTtcXG5cXG5cXG5cXG5cXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcXG5cXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXFxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xcblxcbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXFxuICB2YXIgc3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XFxuICBpZiAoc3RhY2tlZCAmJiBzdGFjay5nZXQob3RoZXIpKSB7XFxuICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xcbiAgfVxcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgcmVzdWx0ID0gdHJ1ZSxcXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1NldENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogdW5kZWZpbmVkO1xcblxcbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XFxuICBzdGFjay5zZXQob3RoZXIsIGFycmF5KTtcXG5cXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cXG4gIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7XFxuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xcblxcbiAgICBpZiAoY3VzdG9taXplcikge1xcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXFxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICBpZiAoY29tcGFyZWQpIHtcXG4gICAgICAgIGNvbnRpbnVlO1xcbiAgICAgIH1cXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxcbiAgICBpZiAoc2Vlbikge1xcbiAgICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlTb21lX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XFxuICAgICAgICAgICAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jYWNoZUhhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc2Vlbiwgb3RoSW5kZXgpICYmXFxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSkge1xcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgICBicmVhaztcXG4gICAgICB9XFxuICAgIH0gZWxzZSBpZiAoIShcXG4gICAgICAgICAgYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8XFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXFxuICAgICAgICApKSB7XFxuICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuICAgICAgYnJlYWs7XFxuICAgIH1cXG4gIH1cXG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XFxuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZXF1YWxBcnJheXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDY2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpZiBzdWl0YWJsZSBmb3Igc3RyaWN0XFxuICogIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlICYmICFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc09iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1N0cmljdENvbXBhcmFibGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDY3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYG1hdGNoZXNQcm9wZXJ0eWAgZm9yIHNvdXJjZSB2YWx1ZXMgc3VpdGFibGVcXG4gKiBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XFxuICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9XFxuICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gc3JjVmFsdWUgJiZcXG4gICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX190b0tleV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcXG4gIHBhdGggPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jYXN0UGF0aF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCwgb2JqZWN0KTtcXG5cXG4gIHZhciBpbmRleCA9IDAsXFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XFxuXFxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcXG4gICAgb2JqZWN0ID0gb2JqZWN0W09iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwYXRoW2luZGV4KytdKV07XFxuICB9XFxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDY5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdHJpbmdUb1BhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU0KTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cXG4gKi9cXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc3RyaW5nVG9QYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX190b1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2FzdFBhdGgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDcwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihwcm9jZXNzKSB7LyoqXFxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXFxuICpcXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXFxuICovXFxuXFxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJlxcbiAgICBTeW1ib2wuZm9yICYmXFxuICAgIFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSkgfHxcXG4gICAgMHhlYWM3O1xcblxcbiAgdmFyIGlzVmFsaWRFbGVtZW50ID0gZnVuY3Rpb24ob2JqZWN0KSB7XFxuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxcbiAgICAgIG9iamVjdCAhPT0gbnVsbCAmJlxcbiAgICAgIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xcbiAgfTtcXG5cXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxcbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xcbiAgbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5NCkoaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xcbn0gZWxzZSB7XFxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxcbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxcbiAgbW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5NykoKTtcXG59XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDcxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJiXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdWJzY3JpcHRpb25TaGFwZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RvcmVTaGFwZTsgfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX18pO1xcblxcblxcbnZhciBzdWJzY3JpcHRpb25TaGFwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLnNoYXBlKHtcXG4gIHRyeVN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgdHJ5VW5zdWJzY3JpYmU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmZ1bmMuaXNSZXF1aXJlZCxcXG4gIG5vdGlmeU5lc3RlZFN1YnM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmZ1bmMuaXNSZXF1aXJlZCxcXG4gIGlzU3Vic2NyaWJlZDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkXFxufSk7XFxuXFxudmFyIHN0b3JlU2hhcGUgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5zaGFwZSh7XFxuICBzdWJzY3JpYmU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmZ1bmMuaXNSZXF1aXJlZCxcXG4gIGRpc3BhdGNoOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWQsXFxuICBnZXRTdGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkXFxufSk7XFxuXFxuLyoqKi8gfSksXFxuLyogNzIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihwcm9jZXNzKSB7LyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gY29ubmVjdEFkdmFuY2VkO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX1N1YnNjcmlwdGlvbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxzX1Byb3BUeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgaG90UmVsb2FkaW5nVmVyc2lvbiA9IDA7XFxudmFyIGR1bW15U3RhdGUgPSB7fTtcXG5mdW5jdGlvbiBub29wKCkge31cXG5mdW5jdGlvbiBtYWtlU2VsZWN0b3JTdGF0ZWZ1bChzb3VyY2VTZWxlY3Rvciwgc3RvcmUpIHtcXG4gIC8vIHdyYXAgdGhlIHNlbGVjdG9yIGluIGFuIG9iamVjdCB0aGF0IHRyYWNrcyBpdHMgcmVzdWx0cyBiZXR3ZWVuIHJ1bnMuXFxuICB2YXIgc2VsZWN0b3IgPSB7XFxuICAgIHJ1bjogZnVuY3Rpb24gcnVuQ29tcG9uZW50U2VsZWN0b3IocHJvcHMpIHtcXG4gICAgICB0cnkge1xcbiAgICAgICAgdmFyIG5leHRQcm9wcyA9IHNvdXJjZVNlbGVjdG9yKHN0b3JlLmdldFN0YXRlKCksIHByb3BzKTtcXG4gICAgICAgIGlmIChuZXh0UHJvcHMgIT09IHNlbGVjdG9yLnByb3BzIHx8IHNlbGVjdG9yLmVycm9yKSB7XFxuICAgICAgICAgIHNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IHRydWU7XFxuICAgICAgICAgIHNlbGVjdG9yLnByb3BzID0gbmV4dFByb3BzO1xcbiAgICAgICAgICBzZWxlY3Rvci5lcnJvciA9IG51bGw7XFxuICAgICAgICB9XFxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcXG4gICAgICAgIHNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IHRydWU7XFxuICAgICAgICBzZWxlY3Rvci5lcnJvciA9IGVycm9yO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfTtcXG5cXG4gIHJldHVybiBzZWxlY3RvcjtcXG59XFxuXFxuZnVuY3Rpb24gY29ubmVjdEFkdmFuY2VkKFxcbi8qXFxuICBzZWxlY3RvckZhY3RvcnkgaXMgYSBmdW5jIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHJldHVybmluZyB0aGUgc2VsZWN0b3IgZnVuY3Rpb24gdXNlZCB0b1xcbiAgY29tcHV0ZSBuZXcgcHJvcHMgZnJvbSBzdGF0ZSwgcHJvcHMsIGFuZCBkaXNwYXRjaC4gRm9yIGV4YW1wbGU6XFxuICAgICBleHBvcnQgZGVmYXVsdCBjb25uZWN0QWR2YW5jZWQoKGRpc3BhdGNoLCBvcHRpb25zKSA9PiAoc3RhdGUsIHByb3BzKSA9PiAoe1xcbiAgICAgIHRoaW5nOiBzdGF0ZS50aGluZ3NbcHJvcHMudGhpbmdJZF0sXFxuICAgICAgc2F2ZVRoaW5nOiBmaWVsZHMgPT4gZGlzcGF0Y2goYWN0aW9uQ3JlYXRvcnMuc2F2ZVRoaW5nKHByb3BzLnRoaW5nSWQsIGZpZWxkcykpLFxcbiAgICB9KSkoWW91ckNvbXBvbmVudClcXG4gICBBY2Nlc3MgdG8gZGlzcGF0Y2ggaXMgcHJvdmlkZWQgdG8gdGhlIGZhY3Rvcnkgc28gc2VsZWN0b3JGYWN0b3JpZXMgY2FuIGJpbmQgYWN0aW9uQ3JlYXRvcnNcXG4gIG91dHNpZGUgb2YgdGhlaXIgc2VsZWN0b3IgYXMgYW4gb3B0aW1pemF0aW9uLiBPcHRpb25zIHBhc3NlZCB0byBjb25uZWN0QWR2YW5jZWQgYXJlIHBhc3NlZCB0b1xcbiAgdGhlIHNlbGVjdG9yRmFjdG9yeSwgYWxvbmcgd2l0aCBkaXNwbGF5TmFtZSBhbmQgV3JhcHBlZENvbXBvbmVudCwgYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cXG4gICBOb3RlIHRoYXQgc2VsZWN0b3JGYWN0b3J5IGlzIHJlc3BvbnNpYmxlIGZvciBhbGwgY2FjaGluZy9tZW1vaXphdGlvbiBvZiBpbmJvdW5kIGFuZCBvdXRib3VuZFxcbiAgcHJvcHMuIERvIG5vdCB1c2UgY29ubmVjdEFkdmFuY2VkIGRpcmVjdGx5IHdpdGhvdXQgbWVtb2l6aW5nIHJlc3VsdHMgYmV0d2VlbiBjYWxscyB0byB5b3VyXFxuICBzZWxlY3Rvciwgb3RoZXJ3aXNlIHRoZSBDb25uZWN0IGNvbXBvbmVudCB3aWxsIHJlLXJlbmRlciBvbiBldmVyeSBzdGF0ZSBvciBwcm9wcyBjaGFuZ2UuXFxuKi9cXG5zZWxlY3RvckZhY3RvcnkpIHtcXG4gIHZhciBfY29udGV4dFR5cGVzLCBfY2hpbGRDb250ZXh0VHlwZXM7XFxuXFxuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXFxuICAgICAgX3JlZiRnZXREaXNwbGF5TmFtZSA9IF9yZWYuZ2V0RGlzcGxheU5hbWUsXFxuICAgICAgZ2V0RGlzcGxheU5hbWUgPSBfcmVmJGdldERpc3BsYXlOYW1lID09PSB1bmRlZmluZWQgPyBmdW5jdGlvbiAobmFtZSkge1xcbiAgICByZXR1cm4gJ0Nvbm5lY3RBZHZhbmNlZCgnICsgbmFtZSArICcpJztcXG4gIH0gOiBfcmVmJGdldERpc3BsYXlOYW1lLFxcbiAgICAgIF9yZWYkbWV0aG9kTmFtZSA9IF9yZWYubWV0aG9kTmFtZSxcXG4gICAgICBtZXRob2ROYW1lID0gX3JlZiRtZXRob2ROYW1lID09PSB1bmRlZmluZWQgPyAnY29ubmVjdEFkdmFuY2VkJyA6IF9yZWYkbWV0aG9kTmFtZSxcXG4gICAgICBfcmVmJHJlbmRlckNvdW50UHJvcCA9IF9yZWYucmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIHJlbmRlckNvdW50UHJvcCA9IF9yZWYkcmVuZGVyQ291bnRQcm9wID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBfcmVmJHJlbmRlckNvdW50UHJvcCxcXG4gICAgICBfcmVmJHNob3VsZEhhbmRsZVN0YXQgPSBfcmVmLnNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyxcXG4gICAgICBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMgPSBfcmVmJHNob3VsZEhhbmRsZVN0YXQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBfcmVmJHNob3VsZEhhbmRsZVN0YXQsXFxuICAgICAgX3JlZiRzdG9yZUtleSA9IF9yZWYuc3RvcmVLZXksXFxuICAgICAgc3RvcmVLZXkgPSBfcmVmJHN0b3JlS2V5ID09PSB1bmRlZmluZWQgPyAnc3RvcmUnIDogX3JlZiRzdG9yZUtleSxcXG4gICAgICBfcmVmJHdpdGhSZWYgPSBfcmVmLndpdGhSZWYsXFxuICAgICAgd2l0aFJlZiA9IF9yZWYkd2l0aFJlZiA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBfcmVmJHdpdGhSZWYsXFxuICAgICAgY29ubmVjdE9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWydnZXREaXNwbGF5TmFtZScsICdtZXRob2ROYW1lJywgJ3JlbmRlckNvdW50UHJvcCcsICdzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMnLCAnc3RvcmVLZXknLCAnd2l0aFJlZiddKTtcXG5cXG4gIHZhciBzdWJzY3JpcHRpb25LZXkgPSBzdG9yZUtleSArICdTdWJzY3JpcHRpb24nO1xcbiAgdmFyIHZlcnNpb24gPSBob3RSZWxvYWRpbmdWZXJzaW9uKys7XFxuXFxuICB2YXIgY29udGV4dFR5cGVzID0gKF9jb250ZXh0VHlwZXMgPSB7fSwgX2NvbnRleHRUeXBlc1tzdG9yZUtleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJhXFxcIiAvKiBzdG9yZVNoYXBlICovXSwgX2NvbnRleHRUeXBlc1tzdWJzY3JpcHRpb25LZXldID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYlxcXCIgLyogc3Vic2NyaXB0aW9uU2hhcGUgKi9dLCBfY29udGV4dFR5cGVzKTtcXG4gIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IChfY2hpbGRDb250ZXh0VHlwZXMgPSB7fSwgX2NoaWxkQ29udGV4dFR5cGVzW3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9jaGlsZENvbnRleHRUeXBlcyk7XFxuXFxuICByZXR1cm4gZnVuY3Rpb24gd3JhcFdpdGhDb25uZWN0KFdyYXBwZWRDb21wb25lbnQpIHtcXG4gICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh0eXBlb2YgV3JhcHBlZENvbXBvbmVudCA9PSAnZnVuY3Rpb24nLCAnWW91IG11c3QgcGFzcyBhIGNvbXBvbmVudCB0byB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgJyArICgnY29ubmVjdC4gSW5zdGVhZCByZWNlaXZlZCAnICsgSlNPTi5zdHJpbmdpZnkoV3JhcHBlZENvbXBvbmVudCkpKTtcXG5cXG4gICAgdmFyIHdyYXBwZWRDb21wb25lbnROYW1lID0gV3JhcHBlZENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBXcmFwcGVkQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCc7XFxuXFxuICAgIHZhciBkaXNwbGF5TmFtZSA9IGdldERpc3BsYXlOYW1lKHdyYXBwZWRDb21wb25lbnROYW1lKTtcXG5cXG4gICAgdmFyIHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgY29ubmVjdE9wdGlvbnMsIHtcXG4gICAgICBnZXREaXNwbGF5TmFtZTogZ2V0RGlzcGxheU5hbWUsXFxuICAgICAgbWV0aG9kTmFtZTogbWV0aG9kTmFtZSxcXG4gICAgICByZW5kZXJDb3VudFByb3A6IHJlbmRlckNvdW50UHJvcCxcXG4gICAgICBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXM6IHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyxcXG4gICAgICBzdG9yZUtleTogc3RvcmVLZXksXFxuICAgICAgd2l0aFJlZjogd2l0aFJlZixcXG4gICAgICBkaXNwbGF5TmFtZTogZGlzcGxheU5hbWUsXFxuICAgICAgd3JhcHBlZENvbXBvbmVudE5hbWU6IHdyYXBwZWRDb21wb25lbnROYW1lLFxcbiAgICAgIFdyYXBwZWRDb21wb25lbnQ6IFdyYXBwZWRDb21wb25lbnRcXG4gICAgfSk7XFxuXFxuICAgIHZhciBDb25uZWN0ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgICBfaW5oZXJpdHMoQ29ubmVjdCwgX0NvbXBvbmVudCk7XFxuXFxuICAgICAgZnVuY3Rpb24gQ29ubmVjdChwcm9wcywgY29udGV4dCkge1xcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbm5lY3QpO1xcblxcbiAgICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0NvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSk7XFxuXFxuICAgICAgICBfdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcXG4gICAgICAgIF90aGlzLnN0YXRlID0ge307XFxuICAgICAgICBfdGhpcy5yZW5kZXJDb3VudCA9IDA7XFxuICAgICAgICBfdGhpcy5zdG9yZSA9IHByb3BzW3N0b3JlS2V5XSB8fCBjb250ZXh0W3N0b3JlS2V5XTtcXG4gICAgICAgIF90aGlzLnByb3BzTW9kZSA9IEJvb2xlYW4ocHJvcHNbc3RvcmVLZXldKTtcXG4gICAgICAgIF90aGlzLnNldFdyYXBwZWRJbnN0YW5jZSA9IF90aGlzLnNldFdyYXBwZWRJbnN0YW5jZS5iaW5kKF90aGlzKTtcXG5cXG4gICAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0KCkoX3RoaXMuc3RvcmUsICdDb3VsZCBub3QgZmluZCBcXFwiJyArIHN0b3JlS2V5ICsgJ1xcXCIgaW4gZWl0aGVyIHRoZSBjb250ZXh0IG9yIHByb3BzIG9mICcgKyAoJ1xcXCInICsgZGlzcGxheU5hbWUgKyAnXFxcIi4gRWl0aGVyIHdyYXAgdGhlIHJvb3QgY29tcG9uZW50IGluIGEgPFByb3ZpZGVyPiwgJykgKyAoJ29yIGV4cGxpY2l0bHkgcGFzcyBcXFwiJyArIHN0b3JlS2V5ICsgJ1xcXCIgYXMgYSBwcm9wIHRvIFxcXCInICsgZGlzcGxheU5hbWUgKyAnXFxcIi4nKSk7XFxuXFxuICAgICAgICBfdGhpcy5pbml0U2VsZWN0b3IoKTtcXG4gICAgICAgIF90aGlzLmluaXRTdWJzY3JpcHRpb24oKTtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgICB9XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xcbiAgICAgICAgdmFyIF9yZWYyO1xcblxcbiAgICAgICAgLy8gSWYgdGhpcyBjb21wb25lbnQgcmVjZWl2ZWQgc3RvcmUgZnJvbSBwcm9wcywgaXRzIHN1YnNjcmlwdGlvbiBzaG91bGQgYmUgdHJhbnNwYXJlbnRcXG4gICAgICAgIC8vIHRvIGFueSBkZXNjZW5kYW50cyByZWNlaXZpbmcgc3RvcmUrc3Vic2NyaXB0aW9uIGZyb20gY29udGV4dDsgaXQgcGFzc2VzIGFsb25nXFxuICAgICAgICAvLyBzdWJzY3JpcHRpb24gcGFzc2VkIHRvIGl0LiBPdGhlcndpc2UsIGl0IHNoYWRvd3MgdGhlIHBhcmVudCBzdWJzY3JpcHRpb24sIHdoaWNoIGFsbG93c1xcbiAgICAgICAgLy8gQ29ubmVjdCB0byBjb250cm9sIG9yZGVyaW5nIG9mIG5vdGlmaWNhdGlvbnMgdG8gZmxvdyB0b3AtZG93bi5cXG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLnByb3BzTW9kZSA/IG51bGwgOiB0aGlzLnN1YnNjcmlwdGlvbjtcXG4gICAgICAgIHJldHVybiBfcmVmMiA9IHt9LCBfcmVmMltzdWJzY3JpcHRpb25LZXldID0gc3Vic2NyaXB0aW9uIHx8IHRoaXMuY29udGV4dFtzdWJzY3JpcHRpb25LZXldLCBfcmVmMjtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XFxuICAgICAgICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuO1xcblxcbiAgICAgICAgLy8gY29tcG9uZW50V2lsbE1vdW50IGZpcmVzIGR1cmluZyBzZXJ2ZXIgc2lkZSByZW5kZXJpbmcsIGJ1dCBjb21wb25lbnREaWRNb3VudCBhbmRcXG4gICAgICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50IGRvIG5vdC4gQmVjYXVzZSBvZiB0aGlzLCB0cnlTdWJzY3JpYmUgaGFwcGVucyBkdXJpbmcgLi4uZGlkTW91bnQuXFxuICAgICAgICAvLyBPdGhlcndpc2UsIHVuc3Vic2NyaXB0aW9uIHdvdWxkIG5ldmVyIHRha2UgcGxhY2UgZHVyaW5nIFNTUiwgY2F1c2luZyBhIG1lbW9yeSBsZWFrLlxcbiAgICAgICAgLy8gVG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGEgY2hpbGQgY29tcG9uZW50IG1heSBoYXZlIHRyaWdnZXJlZCBhIHN0YXRlIGNoYW5nZSBieVxcbiAgICAgICAgLy8gZGlzcGF0Y2hpbmcgYW4gYWN0aW9uIGluIGl0cyBjb21wb25lbnRXaWxsTW91bnQsIHdlIGhhdmUgdG8gcmUtcnVuIHRoZSBzZWxlY3QgYW5kIG1heWJlXFxuICAgICAgICAvLyByZS1yZW5kZXIuXFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi50cnlTdWJzY3JpYmUoKTtcXG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlKSB0aGlzLmZvcmNlVXBkYXRlKCk7XFxuICAgICAgfTtcXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKG5leHRQcm9wcyk7XFxuICAgICAgfTtcXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGU7XFxuICAgICAgfTtcXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB0aGlzLnN1YnNjcmlwdGlvbi50cnlVbnN1YnNjcmliZSgpO1xcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSBudWxsO1xcbiAgICAgICAgdGhpcy5ub3RpZnlOZXN0ZWRTdWJzID0gbm9vcDtcXG4gICAgICAgIHRoaXMuc3RvcmUgPSBudWxsO1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4gPSBub29wO1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmYWxzZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmdldFdyYXBwZWRJbnN0YW5jZSA9IGZ1bmN0aW9uIGdldFdyYXBwZWRJbnN0YW5jZSgpIHtcXG4gICAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0KCkod2l0aFJlZiwgJ1RvIGFjY2VzcyB0aGUgd3JhcHBlZCBpbnN0YW5jZSwgeW91IG5lZWQgdG8gc3BlY2lmeSAnICsgKCd7IHdpdGhSZWY6IHRydWUgfSBpbiB0aGUgb3B0aW9ucyBhcmd1bWVudCBvZiB0aGUgJyArIG1ldGhvZE5hbWUgKyAnKCkgY2FsbC4nKSk7XFxuICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkSW5zdGFuY2U7XFxuICAgICAgfTtcXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5zZXRXcmFwcGVkSW5zdGFuY2UgPSBmdW5jdGlvbiBzZXRXcmFwcGVkSW5zdGFuY2UocmVmKSB7XFxuICAgICAgICB0aGlzLndyYXBwZWRJbnN0YW5jZSA9IHJlZjtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmluaXRTZWxlY3RvciA9IGZ1bmN0aW9uIGluaXRTZWxlY3RvcigpIHtcXG4gICAgICAgIHZhciBzb3VyY2VTZWxlY3RvciA9IHNlbGVjdG9yRmFjdG9yeSh0aGlzLnN0b3JlLmRpc3BhdGNoLCBzZWxlY3RvckZhY3RvcnlPcHRpb25zKTtcXG4gICAgICAgIHRoaXMuc2VsZWN0b3IgPSBtYWtlU2VsZWN0b3JTdGF0ZWZ1bChzb3VyY2VTZWxlY3RvciwgdGhpcy5zdG9yZSk7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnJ1bih0aGlzLnByb3BzKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmluaXRTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiBpbml0U3Vic2NyaXB0aW9uKCkge1xcbiAgICAgICAgaWYgKCFzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMpIHJldHVybjtcXG5cXG4gICAgICAgIC8vIHBhcmVudFN1YidzIHNvdXJjZSBzaG91bGQgbWF0Y2ggd2hlcmUgc3RvcmUgY2FtZSBmcm9tOiBwcm9wcyB2cy4gY29udGV4dC4gQSBjb21wb25lbnRcXG4gICAgICAgIC8vIGNvbm5lY3RlZCB0byB0aGUgc3RvcmUgdmlhIHByb3BzIHNob3VsZG4ndCB1c2Ugc3Vic2NyaXB0aW9uIGZyb20gY29udGV4dCwgb3IgdmljZSB2ZXJzYS5cXG4gICAgICAgIHZhciBwYXJlbnRTdWIgPSAodGhpcy5wcm9wc01vZGUgPyB0aGlzLnByb3BzIDogdGhpcy5jb250ZXh0KVtzdWJzY3JpcHRpb25LZXldO1xcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsc19TdWJzY3JpcHRpb25fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10odGhpcy5zdG9yZSwgcGFyZW50U3ViLCB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzKSk7XFxuXFxuICAgICAgICAvLyBgbm90aWZ5TmVzdGVkU3Vic2AgaXMgZHVwbGljYXRlZCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIGNvbXBvbmVudCBpcyAgdW5tb3VudGVkIGluXFxuICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIHRoZSBub3RpZmljYXRpb24gbG9vcCwgd2hlcmUgYHRoaXMuc3Vic2NyaXB0aW9uYCB3aWxsIHRoZW4gYmUgbnVsbC4gQW5cXG4gICAgICAgIC8vIGV4dHJhIG51bGwgY2hlY2sgZXZlcnkgY2hhbmdlIGNhbiBiZSBhdm9pZGVkIGJ5IGNvcHlpbmcgdGhlIG1ldGhvZCBvbnRvIGB0aGlzYCBhbmQgdGhlblxcbiAgICAgICAgLy8gcmVwbGFjaW5nIGl0IHdpdGggYSBuby1vcCBvbiB1bm1vdW50LiBUaGlzIGNhbiBwcm9iYWJseSBiZSBhdm9pZGVkIGlmIFN1YnNjcmlwdGlvbidzXFxuICAgICAgICAvLyBsaXN0ZW5lcnMgbG9naWMgaXMgY2hhbmdlZCB0byBub3QgY2FsbCBsaXN0ZW5lcnMgdGhhdCBoYXZlIGJlZW4gdW5zdWJzY3JpYmVkIGluIHRoZVxcbiAgICAgICAgLy8gbWlkZGxlIG9mIHRoZSBub3RpZmljYXRpb24gbG9vcC5cXG4gICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicyA9IHRoaXMuc3Vic2NyaXB0aW9uLm5vdGlmeU5lc3RlZFN1YnMuYmluZCh0aGlzLnN1YnNjcmlwdGlvbik7XFxuICAgICAgfTtcXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5vblN0YXRlQ2hhbmdlID0gZnVuY3Rpb24gb25TdGF0ZUNoYW5nZSgpIHtcXG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xcblxcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSkge1xcbiAgICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMoKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHRoaXMuY29tcG9uZW50RGlkVXBkYXRlID0gdGhpcy5ub3RpZnlOZXN0ZWRTdWJzT25Db21wb25lbnREaWRVcGRhdGU7XFxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoZHVtbXlTdGF0ZSk7XFxuICAgICAgICB9XFxuICAgICAgfTtcXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5ub3RpZnlOZXN0ZWRTdWJzT25Db21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBub3RpZnlOZXN0ZWRTdWJzT25Db21wb25lbnREaWRVcGRhdGUoKSB7XFxuICAgICAgICAvLyBgY29tcG9uZW50RGlkVXBkYXRlYCBpcyBjb25kaXRpb25hbGx5IGltcGxlbWVudGVkIHdoZW4gYG9uU3RhdGVDaGFuZ2VgIGRldGVybWluZXMgaXRcXG4gICAgICAgIC8vIG5lZWRzIHRvIG5vdGlmeSBuZXN0ZWQgc3Vicy4gT25jZSBjYWxsZWQsIGl0IHVuaW1wbGVtZW50cyBpdHNlbGYgdW50aWwgZnVydGhlciBzdGF0ZVxcbiAgICAgICAgLy8gY2hhbmdlcyBvY2N1ci4gRG9pbmcgaXQgdGhpcyB3YXkgdnMgaGF2aW5nIGEgcGVybWFuZW50IGBjb21wb25lbnREaWRVcGRhdGVgIHRoYXQgZG9lc1xcbiAgICAgICAgLy8gYSBib29sZWFuIGNoZWNrIGV2ZXJ5IHRpbWUgYXZvaWRzIGFuIGV4dHJhIG1ldGhvZCBjYWxsIG1vc3Qgb2YgdGhlIHRpbWUsIHJlc3VsdGluZ1xcbiAgICAgICAgLy8gaW4gc29tZSBwZXJmIGJvb3N0LlxcbiAgICAgICAgdGhpcy5jb21wb25lbnREaWRVcGRhdGUgPSB1bmRlZmluZWQ7XFxuICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMoKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmlzU3Vic2NyaWJlZCA9IGZ1bmN0aW9uIGlzU3Vic2NyaWJlZCgpIHtcXG4gICAgICAgIHJldHVybiBCb29sZWFuKHRoaXMuc3Vic2NyaXB0aW9uKSAmJiB0aGlzLnN1YnNjcmlwdGlvbi5pc1N1YnNjcmliZWQoKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmFkZEV4dHJhUHJvcHMgPSBmdW5jdGlvbiBhZGRFeHRyYVByb3BzKHByb3BzKSB7XFxuICAgICAgICBpZiAoIXdpdGhSZWYgJiYgIXJlbmRlckNvdW50UHJvcCAmJiAhKHRoaXMucHJvcHNNb2RlICYmIHRoaXMuc3Vic2NyaXB0aW9uKSkgcmV0dXJuIHByb3BzO1xcbiAgICAgICAgLy8gbWFrZSBhIHNoYWxsb3cgY29weSBzbyB0aGF0IGZpZWxkcyBhZGRlZCBkb24ndCBsZWFrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rvci5cXG4gICAgICAgIC8vIHRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yICdyZWYnIHNpbmNlIHRoYXQncyBhIHJlZmVyZW5jZSBiYWNrIHRvIHRoZSBjb21wb25lbnRcXG4gICAgICAgIC8vIGluc3RhbmNlLiBhIHNpbmdsZXRvbiBtZW1vaXplZCBzZWxlY3RvciB3b3VsZCB0aGVuIGJlIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlXFxuICAgICAgICAvLyBpbnN0YW5jZSwgcHJldmVudGluZyB0aGUgaW5zdGFuY2UgZnJvbSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZCwgYW5kIHRoYXQgd291bGQgYmUgYmFkXFxuICAgICAgICB2YXIgd2l0aEV4dHJhcyA9IF9leHRlbmRzKHt9LCBwcm9wcyk7XFxuICAgICAgICBpZiAod2l0aFJlZikgd2l0aEV4dHJhcy5yZWYgPSB0aGlzLnNldFdyYXBwZWRJbnN0YW5jZTtcXG4gICAgICAgIGlmIChyZW5kZXJDb3VudFByb3ApIHdpdGhFeHRyYXNbcmVuZGVyQ291bnRQcm9wXSA9IHRoaXMucmVuZGVyQ291bnQrKztcXG4gICAgICAgIGlmICh0aGlzLnByb3BzTW9kZSAmJiB0aGlzLnN1YnNjcmlwdGlvbikgd2l0aEV4dHJhc1tzdWJzY3JpcHRpb25LZXldID0gdGhpcy5zdWJzY3JpcHRpb247XFxuICAgICAgICByZXR1cm4gd2l0aEV4dHJhcztcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgIHZhciBzZWxlY3RvciA9IHRoaXMuc2VsZWN0b3I7XFxuICAgICAgICBzZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmYWxzZTtcXG5cXG4gICAgICAgIGlmIChzZWxlY3Rvci5lcnJvcikge1xcbiAgICAgICAgICB0aHJvdyBzZWxlY3Rvci5lcnJvcjtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoV3JhcHBlZENvbXBvbmVudCwgdGhpcy5hZGRFeHRyYVByb3BzKHNlbGVjdG9yLnByb3BzKSk7XFxuICAgICAgICB9XFxuICAgICAgfTtcXG5cXG4gICAgICByZXR1cm4gQ29ubmVjdDtcXG4gICAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgICBDb25uZWN0LldyYXBwZWRDb21wb25lbnQgPSBXcmFwcGVkQ29tcG9uZW50O1xcbiAgICBDb25uZWN0LmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XFxuICAgIENvbm5lY3QuY2hpbGRDb250ZXh0VHlwZXMgPSBjaGlsZENvbnRleHRUeXBlcztcXG4gICAgQ29ubmVjdC5jb250ZXh0VHlwZXMgPSBjb250ZXh0VHlwZXM7XFxuICAgIENvbm5lY3QucHJvcFR5cGVzID0gY29udGV4dFR5cGVzO1xcblxcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVXBkYXRlKCkge1xcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICAvLyBXZSBhcmUgaG90IHJlbG9hZGluZyFcXG4gICAgICAgIGlmICh0aGlzLnZlcnNpb24gIT09IHZlcnNpb24pIHtcXG4gICAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcXG4gICAgICAgICAgdGhpcy5pbml0U2VsZWN0b3IoKTtcXG5cXG4gICAgICAgICAgLy8gSWYgYW55IGNvbm5lY3RlZCBkZXNjZW5kYW50cyBkb24ndCBob3QgcmVsb2FkIChhbmQgcmVzdWJzY3JpYmUgaW4gdGhlIHByb2Nlc3MpLCB0aGVpclxcbiAgICAgICAgICAvLyBsaXN0ZW5lcnMgd2lsbCBiZSBsb3N0IHdoZW4gd2UgdW5zdWJzY3JpYmUuIFVuZm9ydHVuYXRlbHksIGJ5IGNvcHlpbmcgb3ZlciBhbGxcXG4gICAgICAgICAgLy8gbGlzdGVuZXJzLCB0aGlzIGRvZXMgbWVhbiB0aGF0IHRoZSBvbGQgdmVyc2lvbnMgb2YgY29ubmVjdGVkIGRlc2NlbmRhbnRzIHdpbGwgc3RpbGwgYmVcXG4gICAgICAgICAgLy8gbm90aWZpZWQgb2Ygc3RhdGUgY2hhbmdlczsgaG93ZXZlciwgdGhlaXIgb25TdGF0ZUNoYW5nZSBmdW5jdGlvbiBpcyBhIG5vLW9wIHNvIHRoaXNcXG4gICAgICAgICAgLy8gaXNuJ3QgYSBodWdlIGRlYWwuXFxuICAgICAgICAgIHZhciBvbGRMaXN0ZW5lcnMgPSBbXTtcXG5cXG4gICAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XFxuICAgICAgICAgICAgb2xkTGlzdGVuZXJzID0gdGhpcy5zdWJzY3JpcHRpb24ubGlzdGVuZXJzLmdldCgpO1xcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgdGhpcy5pbml0U3Vic2NyaXB0aW9uKCk7XFxuICAgICAgICAgIGlmIChzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMpIHtcXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi50cnlTdWJzY3JpYmUoKTtcXG4gICAgICAgICAgICBvbGRMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuc3Vic2NyaXB0aW9uLmxpc3RlbmVycy5zdWJzY3JpYmUobGlzdGVuZXIpO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfTtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX19fZGVmYXVsdCgpKENvbm5lY3QsIFdyYXBwZWRDb21wb25lbnQpO1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDczICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBY3Rpb25UeXBlczsgfSk7XFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGRlZmF1bHQgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3N5bWJvbF9vYnNlcnZhYmxlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwMyk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhlc2UgYXJlIHByaXZhdGUgYWN0aW9uIHR5cGVzIHJlc2VydmVkIGJ5IFJlZHV4LlxcbiAqIEZvciBhbnkgdW5rbm93biBhY3Rpb25zLCB5b3UgbXVzdCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUuXFxuICogSWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuXFxuICogRG8gbm90IHJlZmVyZW5jZSB0aGVzZSBhY3Rpb24gdHlwZXMgZGlyZWN0bHkgaW4geW91ciBjb2RlLlxcbiAqL1xcbnZhciBBY3Rpb25UeXBlcyA9IHtcXG4gIElOSVQ6ICdAQHJlZHV4L0lOSVQnXFxuXFxuICAvKipcXG4gICAqIENyZWF0ZXMgYSBSZWR1eCBzdG9yZSB0aGF0IGhvbGRzIHRoZSBzdGF0ZSB0cmVlLlxcbiAgICogVGhlIG9ubHkgd2F5IHRvIGNoYW5nZSB0aGUgZGF0YSBpbiB0aGUgc3RvcmUgaXMgdG8gY2FsbCBgZGlzcGF0Y2goKWAgb24gaXQuXFxuICAgKlxcbiAgICogVGhlcmUgc2hvdWxkIG9ubHkgYmUgYSBzaW5nbGUgc3RvcmUgaW4geW91ciBhcHAuIFRvIHNwZWNpZnkgaG93IGRpZmZlcmVudFxcbiAgICogcGFydHMgb2YgdGhlIHN0YXRlIHRyZWUgcmVzcG9uZCB0byBhY3Rpb25zLCB5b3UgbWF5IGNvbWJpbmUgc2V2ZXJhbCByZWR1Y2Vyc1xcbiAgICogaW50byBhIHNpbmdsZSByZWR1Y2VyIGZ1bmN0aW9uIGJ5IHVzaW5nIGBjb21iaW5lUmVkdWNlcnNgLlxcbiAgICpcXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlZHVjZXIgQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG5leHQgc3RhdGUgdHJlZSwgZ2l2ZW5cXG4gICAqIHRoZSBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBhY3Rpb24gdG8gaGFuZGxlLlxcbiAgICpcXG4gICAqIEBwYXJhbSB7YW55fSBbcHJlbG9hZGVkU3RhdGVdIFRoZSBpbml0aWFsIHN0YXRlLiBZb3UgbWF5IG9wdGlvbmFsbHkgc3BlY2lmeSBpdFxcbiAgICogdG8gaHlkcmF0ZSB0aGUgc3RhdGUgZnJvbSB0aGUgc2VydmVyIGluIHVuaXZlcnNhbCBhcHBzLCBvciB0byByZXN0b3JlIGFcXG4gICAqIHByZXZpb3VzbHkgc2VyaWFsaXplZCB1c2VyIHNlc3Npb24uXFxuICAgKiBJZiB5b3UgdXNlIGBjb21iaW5lUmVkdWNlcnNgIHRvIHByb2R1Y2UgdGhlIHJvb3QgcmVkdWNlciBmdW5jdGlvbiwgdGhpcyBtdXN0IGJlXFxuICAgKiBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzaGFwZSBhcyBgY29tYmluZVJlZHVjZXJzYCBrZXlzLlxcbiAgICpcXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtlbmhhbmNlcl0gVGhlIHN0b3JlIGVuaGFuY2VyLiBZb3UgbWF5IG9wdGlvbmFsbHkgc3BlY2lmeSBpdFxcbiAgICogdG8gZW5oYW5jZSB0aGUgc3RvcmUgd2l0aCB0aGlyZC1wYXJ0eSBjYXBhYmlsaXRpZXMgc3VjaCBhcyBtaWRkbGV3YXJlLFxcbiAgICogdGltZSB0cmF2ZWwsIHBlcnNpc3RlbmNlLCBldGMuIFRoZSBvbmx5IHN0b3JlIGVuaGFuY2VyIHRoYXQgc2hpcHMgd2l0aCBSZWR1eFxcbiAgICogaXMgYGFwcGx5TWlkZGxld2FyZSgpYC5cXG4gICAqXFxuICAgKiBAcmV0dXJucyB7U3RvcmV9IEEgUmVkdXggc3RvcmUgdGhhdCBsZXRzIHlvdSByZWFkIHRoZSBzdGF0ZSwgZGlzcGF0Y2ggYWN0aW9uc1xcbiAgICogYW5kIHN1YnNjcmliZSB0byBjaGFuZ2VzLlxcbiAgICovXFxufTtmdW5jdGlvbiBjcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpIHtcXG4gIHZhciBfcmVmMjtcXG5cXG4gIGlmICh0eXBlb2YgcHJlbG9hZGVkU3RhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGVuaGFuY2VyID09PSAndW5kZWZpbmVkJykge1xcbiAgICBlbmhhbmNlciA9IHByZWxvYWRlZFN0YXRlO1xcbiAgICBwcmVsb2FkZWRTdGF0ZSA9IHVuZGVmaW5lZDtcXG4gIH1cXG5cXG4gIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09ICd1bmRlZmluZWQnKSB7XFxuICAgIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRoZSBlbmhhbmNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBlbmhhbmNlcihjcmVhdGVTdG9yZSkocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUpO1xcbiAgfVxcblxcbiAgaWYgKHR5cGVvZiByZWR1Y2VyICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdGhlIHJlZHVjZXIgdG8gYmUgYSBmdW5jdGlvbi4nKTtcXG4gIH1cXG5cXG4gIHZhciBjdXJyZW50UmVkdWNlciA9IHJlZHVjZXI7XFxuICB2YXIgY3VycmVudFN0YXRlID0gcHJlbG9hZGVkU3RhdGU7XFxuICB2YXIgY3VycmVudExpc3RlbmVycyA9IFtdO1xcbiAgdmFyIG5leHRMaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzO1xcbiAgdmFyIGlzRGlzcGF0Y2hpbmcgPSBmYWxzZTtcXG5cXG4gIGZ1bmN0aW9uIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKSB7XFxuICAgIGlmIChuZXh0TGlzdGVuZXJzID09PSBjdXJyZW50TGlzdGVuZXJzKSB7XFxuICAgICAgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnMuc2xpY2UoKTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLyoqXFxuICAgKiBSZWFkcyB0aGUgc3RhdGUgdHJlZSBtYW5hZ2VkIGJ5IHRoZSBzdG9yZS5cXG4gICAqXFxuICAgKiBAcmV0dXJucyB7YW55fSBUaGUgY3VycmVudCBzdGF0ZSB0cmVlIG9mIHlvdXIgYXBwbGljYXRpb24uXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGdldFN0YXRlKCkge1xcbiAgICByZXR1cm4gY3VycmVudFN0YXRlO1xcbiAgfVxcblxcbiAgLyoqXFxuICAgKiBBZGRzIGEgY2hhbmdlIGxpc3RlbmVyLiBJdCB3aWxsIGJlIGNhbGxlZCBhbnkgdGltZSBhbiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCxcXG4gICAqIGFuZCBzb21lIHBhcnQgb2YgdGhlIHN0YXRlIHRyZWUgbWF5IHBvdGVudGlhbGx5IGhhdmUgY2hhbmdlZC4gWW91IG1heSB0aGVuXFxuICAgKiBjYWxsIGBnZXRTdGF0ZSgpYCB0byByZWFkIHRoZSBjdXJyZW50IHN0YXRlIHRyZWUgaW5zaWRlIHRoZSBjYWxsYmFjay5cXG4gICAqXFxuICAgKiBZb3UgbWF5IGNhbGwgYGRpc3BhdGNoKClgIGZyb20gYSBjaGFuZ2UgbGlzdGVuZXIsIHdpdGggdGhlIGZvbGxvd2luZ1xcbiAgICogY2F2ZWF0czpcXG4gICAqXFxuICAgKiAxLiBUaGUgc3Vic2NyaXB0aW9ucyBhcmUgc25hcHNob3R0ZWQganVzdCBiZWZvcmUgZXZlcnkgYGRpc3BhdGNoKClgIGNhbGwuXFxuICAgKiBJZiB5b3Ugc3Vic2NyaWJlIG9yIHVuc3Vic2NyaWJlIHdoaWxlIHRoZSBsaXN0ZW5lcnMgYXJlIGJlaW5nIGludm9rZWQsIHRoaXNcXG4gICAqIHdpbGwgbm90IGhhdmUgYW55IGVmZmVjdCBvbiB0aGUgYGRpc3BhdGNoKClgIHRoYXQgaXMgY3VycmVudGx5IGluIHByb2dyZXNzLlxcbiAgICogSG93ZXZlciwgdGhlIG5leHQgYGRpc3BhdGNoKClgIGNhbGwsIHdoZXRoZXIgbmVzdGVkIG9yIG5vdCwgd2lsbCB1c2UgYSBtb3JlXFxuICAgKiByZWNlbnQgc25hcHNob3Qgb2YgdGhlIHN1YnNjcmlwdGlvbiBsaXN0LlxcbiAgICpcXG4gICAqIDIuIFRoZSBsaXN0ZW5lciBzaG91bGQgbm90IGV4cGVjdCB0byBzZWUgYWxsIHN0YXRlIGNoYW5nZXMsIGFzIHRoZSBzdGF0ZVxcbiAgICogbWlnaHQgaGF2ZSBiZWVuIHVwZGF0ZWQgbXVsdGlwbGUgdGltZXMgZHVyaW5nIGEgbmVzdGVkIGBkaXNwYXRjaCgpYCBiZWZvcmVcXG4gICAqIHRoZSBsaXN0ZW5lciBpcyBjYWxsZWQuIEl0IGlzLCBob3dldmVyLCBndWFyYW50ZWVkIHRoYXQgYWxsIHN1YnNjcmliZXJzXFxuICAgKiByZWdpc3RlcmVkIGJlZm9yZSB0aGUgYGRpc3BhdGNoKClgIHN0YXJ0ZWQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgbGF0ZXN0XFxuICAgKiBzdGF0ZSBieSB0aGUgdGltZSBpdCBleGl0cy5cXG4gICAqXFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBsaXN0ZW5lciBBIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgb24gZXZlcnkgZGlzcGF0Y2guXFxuICAgKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdG8gcmVtb3ZlIHRoaXMgY2hhbmdlIGxpc3RlbmVyLlxcbiAgICovXFxuICBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcXG4gICAgaWYgKHR5cGVvZiBsaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbi4nKTtcXG4gICAgfVxcblxcbiAgICB2YXIgaXNTdWJzY3JpYmVkID0gdHJ1ZTtcXG5cXG4gICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xcbiAgICBuZXh0TGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XFxuICAgICAgaWYgKCFpc1N1YnNjcmliZWQpIHtcXG4gICAgICAgIHJldHVybjtcXG4gICAgICB9XFxuXFxuICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XFxuXFxuICAgICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xcbiAgICAgIHZhciBpbmRleCA9IG5leHRMaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XFxuICAgICAgbmV4dExpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xcbiAgICB9O1xcbiAgfVxcblxcbiAgLyoqXFxuICAgKiBEaXNwYXRjaGVzIGFuIGFjdGlvbi4gSXQgaXMgdGhlIG9ubHkgd2F5IHRvIHRyaWdnZXIgYSBzdGF0ZSBjaGFuZ2UuXFxuICAgKlxcbiAgICogVGhlIGByZWR1Y2VyYCBmdW5jdGlvbiwgdXNlZCB0byBjcmVhdGUgdGhlIHN0b3JlLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZVxcbiAgICogY3VycmVudCBzdGF0ZSB0cmVlIGFuZCB0aGUgZ2l2ZW4gYGFjdGlvbmAuIEl0cyByZXR1cm4gdmFsdWUgd2lsbFxcbiAgICogYmUgY29uc2lkZXJlZCB0aGUgKipuZXh0Kiogc3RhdGUgb2YgdGhlIHRyZWUsIGFuZCB0aGUgY2hhbmdlIGxpc3RlbmVyc1xcbiAgICogd2lsbCBiZSBub3RpZmllZC5cXG4gICAqXFxuICAgKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvbmx5IHN1cHBvcnRzIHBsYWluIG9iamVjdCBhY3Rpb25zLiBJZiB5b3Ugd2FudCB0b1xcbiAgICogZGlzcGF0Y2ggYSBQcm9taXNlLCBhbiBPYnNlcnZhYmxlLCBhIHRodW5rLCBvciBzb21ldGhpbmcgZWxzZSwgeW91IG5lZWQgdG9cXG4gICAqIHdyYXAgeW91ciBzdG9yZSBjcmVhdGluZyBmdW5jdGlvbiBpbnRvIHRoZSBjb3JyZXNwb25kaW5nIG1pZGRsZXdhcmUuIEZvclxcbiAgICogZXhhbXBsZSwgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYHJlZHV4LXRodW5rYCBwYWNrYWdlLiBFdmVuIHRoZVxcbiAgICogbWlkZGxld2FyZSB3aWxsIGV2ZW50dWFsbHkgZGlzcGF0Y2ggcGxhaW4gb2JqZWN0IGFjdGlvbnMgdXNpbmcgdGhpcyBtZXRob2QuXFxuICAgKlxcbiAgICogQHBhcmFtIHtPYmplY3R9IGFjdGlvbiBBIHBsYWluIG9iamVjdCByZXByZXNlbnRpbmcg4oCcd2hhdCBjaGFuZ2Vk4oCdLiBJdCBpc1xcbiAgICogYSBnb29kIGlkZWEgdG8ga2VlcCBhY3Rpb25zIHNlcmlhbGl6YWJsZSBzbyB5b3UgY2FuIHJlY29yZCBhbmQgcmVwbGF5IHVzZXJcXG4gICAqIHNlc3Npb25zLCBvciB1c2UgdGhlIHRpbWUgdHJhdmVsbGluZyBgcmVkdXgtZGV2dG9vbHNgLiBBbiBhY3Rpb24gbXVzdCBoYXZlXFxuICAgKiBhIGB0eXBlYCBwcm9wZXJ0eSB3aGljaCBtYXkgbm90IGJlIGB1bmRlZmluZWRgLiBJdCBpcyBhIGdvb2QgaWRlYSB0byB1c2VcXG4gICAqIHN0cmluZyBjb25zdGFudHMgZm9yIGFjdGlvbiB0eXBlcy5cXG4gICAqXFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBGb3IgY29udmVuaWVuY2UsIHRoZSBzYW1lIGFjdGlvbiBvYmplY3QgeW91IGRpc3BhdGNoZWQuXFxuICAgKlxcbiAgICogTm90ZSB0aGF0LCBpZiB5b3UgdXNlIGEgY3VzdG9tIG1pZGRsZXdhcmUsIGl0IG1heSB3cmFwIGBkaXNwYXRjaCgpYCB0b1xcbiAgICogcmV0dXJuIHNvbWV0aGluZyBlbHNlIChmb3IgZXhhbXBsZSwgYSBQcm9taXNlIHlvdSBjYW4gYXdhaXQpLlxcbiAgICovXFxuICBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcXG4gICAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShhY3Rpb24pKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBY3Rpb25zIG11c3QgYmUgcGxhaW4gb2JqZWN0cy4gJyArICdVc2UgY3VzdG9tIG1pZGRsZXdhcmUgZm9yIGFzeW5jIGFjdGlvbnMuJyk7XFxuICAgIH1cXG5cXG4gICAgaWYgKHR5cGVvZiBhY3Rpb24udHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbnMgbWF5IG5vdCBoYXZlIGFuIHVuZGVmaW5lZCBcXFwidHlwZVxcXCIgcHJvcGVydHkuICcgKyAnSGF2ZSB5b3UgbWlzc3BlbGxlZCBhIGNvbnN0YW50PycpO1xcbiAgICB9XFxuXFxuICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VycyBtYXkgbm90IGRpc3BhdGNoIGFjdGlvbnMuJyk7XFxuICAgIH1cXG5cXG4gICAgdHJ5IHtcXG4gICAgICBpc0Rpc3BhdGNoaW5nID0gdHJ1ZTtcXG4gICAgICBjdXJyZW50U3RhdGUgPSBjdXJyZW50UmVkdWNlcihjdXJyZW50U3RhdGUsIGFjdGlvbik7XFxuICAgIH0gZmluYWxseSB7XFxuICAgICAgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xcbiAgICB9XFxuXFxuICAgIHZhciBsaXN0ZW5lcnMgPSBjdXJyZW50TGlzdGVuZXJzID0gbmV4dExpc3RlbmVycztcXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcXG4gICAgICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnNbaV07XFxuICAgICAgbGlzdGVuZXIoKTtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gYWN0aW9uO1xcbiAgfVxcblxcbiAgLyoqXFxuICAgKiBSZXBsYWNlcyB0aGUgcmVkdWNlciBjdXJyZW50bHkgdXNlZCBieSB0aGUgc3RvcmUgdG8gY2FsY3VsYXRlIHRoZSBzdGF0ZS5cXG4gICAqXFxuICAgKiBZb3UgbWlnaHQgbmVlZCB0aGlzIGlmIHlvdXIgYXBwIGltcGxlbWVudHMgY29kZSBzcGxpdHRpbmcgYW5kIHlvdSB3YW50IHRvXFxuICAgKiBsb2FkIHNvbWUgb2YgdGhlIHJlZHVjZXJzIGR5bmFtaWNhbGx5LiBZb3UgbWlnaHQgYWxzbyBuZWVkIHRoaXMgaWYgeW91XFxuICAgKiBpbXBsZW1lbnQgYSBob3QgcmVsb2FkaW5nIG1lY2hhbmlzbSBmb3IgUmVkdXguXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbmV4dFJlZHVjZXIgVGhlIHJlZHVjZXIgZm9yIHRoZSBzdG9yZSB0byB1c2UgaW5zdGVhZC5cXG4gICAqIEByZXR1cm5zIHt2b2lkfVxcbiAgICovXFxuICBmdW5jdGlvbiByZXBsYWNlUmVkdWNlcihuZXh0UmVkdWNlcikge1xcbiAgICBpZiAodHlwZW9mIG5leHRSZWR1Y2VyICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0aGUgbmV4dFJlZHVjZXIgdG8gYmUgYSBmdW5jdGlvbi4nKTtcXG4gICAgfVxcblxcbiAgICBjdXJyZW50UmVkdWNlciA9IG5leHRSZWR1Y2VyO1xcbiAgICBkaXNwYXRjaCh7IHR5cGU6IEFjdGlvblR5cGVzLklOSVQgfSk7XFxuICB9XFxuXFxuICAvKipcXG4gICAqIEludGVyb3BlcmFiaWxpdHkgcG9pbnQgZm9yIG9ic2VydmFibGUvcmVhY3RpdmUgbGlicmFyaWVzLlxcbiAgICogQHJldHVybnMge29ic2VydmFibGV9IEEgbWluaW1hbCBvYnNlcnZhYmxlIG9mIHN0YXRlIGNoYW5nZXMuXFxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBvYnNlcnZhYmxlIHByb3Bvc2FsOlxcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JzZXJ2YWJsZVxcbiAgICovXFxuICBmdW5jdGlvbiBvYnNlcnZhYmxlKCkge1xcbiAgICB2YXIgX3JlZjtcXG5cXG4gICAgdmFyIG91dGVyU3Vic2NyaWJlID0gc3Vic2NyaWJlO1xcbiAgICByZXR1cm4gX3JlZiA9IHtcXG4gICAgICAvKipcXG4gICAgICAgKiBUaGUgbWluaW1hbCBvYnNlcnZhYmxlIHN1YnNjcmlwdGlvbiBtZXRob2QuXFxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9ic2VydmVyIEFueSBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBhcyBhbiBvYnNlcnZlci5cXG4gICAgICAgKiBUaGUgb2JzZXJ2ZXIgb2JqZWN0IHNob3VsZCBoYXZlIGEgYG5leHRgIG1ldGhvZC5cXG4gICAgICAgKiBAcmV0dXJucyB7c3Vic2NyaXB0aW9ufSBBbiBvYmplY3Qgd2l0aCBhbiBgdW5zdWJzY3JpYmVgIG1ldGhvZCB0aGF0IGNhblxcbiAgICAgICAqIGJlIHVzZWQgdG8gdW5zdWJzY3JpYmUgdGhlIG9ic2VydmFibGUgZnJvbSB0aGUgc3RvcmUsIGFuZCBwcmV2ZW50IGZ1cnRoZXJcXG4gICAgICAgKiBlbWlzc2lvbiBvZiB2YWx1ZXMgZnJvbSB0aGUgb2JzZXJ2YWJsZS5cXG4gICAgICAgKi9cXG4gICAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xcbiAgICAgICAgaWYgKHR5cGVvZiBvYnNlcnZlciAhPT0gJ29iamVjdCcpIHtcXG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgdGhlIG9ic2VydmVyIHRvIGJlIGFuIG9iamVjdC4nKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGZ1bmN0aW9uIG9ic2VydmVTdGF0ZSgpIHtcXG4gICAgICAgICAgaWYgKG9ic2VydmVyLm5leHQpIHtcXG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGdldFN0YXRlKCkpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICBvYnNlcnZlU3RhdGUoKTtcXG4gICAgICAgIHZhciB1bnN1YnNjcmliZSA9IG91dGVyU3Vic2NyaWJlKG9ic2VydmVTdGF0ZSk7XFxuICAgICAgICByZXR1cm4geyB1bnN1YnNjcmliZTogdW5zdWJzY3JpYmUgfTtcXG4gICAgICB9XFxuICAgIH0sIF9yZWZbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3N5bWJvbF9vYnNlcnZhYmxlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dXSA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICByZXR1cm4gdGhpcztcXG4gICAgfSwgX3JlZjtcXG4gIH1cXG5cXG4gIC8vIFdoZW4gYSBzdG9yZSBpcyBjcmVhdGVkLCBhbiBcXFwiSU5JVFxcXCIgYWN0aW9uIGlzIGRpc3BhdGNoZWQgc28gdGhhdCBldmVyeVxcbiAgLy8gcmVkdWNlciByZXR1cm5zIHRoZWlyIGluaXRpYWwgc3RhdGUuIFRoaXMgZWZmZWN0aXZlbHkgcG9wdWxhdGVzXFxuICAvLyB0aGUgaW5pdGlhbCBzdGF0ZSB0cmVlLlxcbiAgZGlzcGF0Y2goeyB0eXBlOiBBY3Rpb25UeXBlcy5JTklUIH0pO1xcblxcbiAgcmV0dXJuIF9yZWYyID0ge1xcbiAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXFxuICAgIHN1YnNjcmliZTogc3Vic2NyaWJlLFxcbiAgICBnZXRTdGF0ZTogZ2V0U3RhdGUsXFxuICAgIHJlcGxhY2VSZWR1Y2VyOiByZXBsYWNlUmVkdWNlclxcbiAgfSwgX3JlZjJbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3N5bWJvbF9vYnNlcnZhYmxlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dXSA9IG9ic2VydmFibGUsIF9yZWYyO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gd2FybmluZztcXG4vKipcXG4gKiBQcmludHMgYSB3YXJuaW5nIGluIHRoZSBjb25zb2xlIGlmIGl0IGV4aXN0cy5cXG4gKlxcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSB3YXJuaW5nIG1lc3NhZ2UuXFxuICogQHJldHVybnMge3ZvaWR9XFxuICovXFxuZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlKSB7XFxuICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXFxuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XFxuICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XFxuICB9XFxuICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cXG4gIHRyeSB7XFxuICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgaWYgeW91IGVuYWJsZVxcbiAgICAvLyBcXFwiYnJlYWsgb24gYWxsIGV4Y2VwdGlvbnNcXFwiIGluIHlvdXIgY29uc29sZSxcXG4gICAgLy8gaXQgd291bGQgcGF1c2UgdGhlIGV4ZWN1dGlvbiBhdCB0aGlzIGxpbmUuXFxuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHkgKi9cXG4gIH0gY2F0Y2ggKGUpIHt9XFxuICAvKiBlc2xpbnQtZW5hYmxlIG5vLWVtcHR5ICovXFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDc1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSBjb21wb3NlO1xcbi8qKlxcbiAqIENvbXBvc2VzIHNpbmdsZS1hcmd1bWVudCBmdW5jdGlvbnMgZnJvbSByaWdodCB0byBsZWZ0LiBUaGUgcmlnaHRtb3N0XFxuICogZnVuY3Rpb24gY2FuIHRha2UgbXVsdGlwbGUgYXJndW1lbnRzIGFzIGl0IHByb3ZpZGVzIHRoZSBzaWduYXR1cmUgZm9yXFxuICogdGhlIHJlc3VsdGluZyBjb21wb3NpdGUgZnVuY3Rpb24uXFxuICpcXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBmdW5jcyBUaGUgZnVuY3Rpb25zIHRvIGNvbXBvc2UuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIG9idGFpbmVkIGJ5IGNvbXBvc2luZyB0aGUgYXJndW1lbnQgZnVuY3Rpb25zXFxuICogZnJvbSByaWdodCB0byBsZWZ0LiBGb3IgZXhhbXBsZSwgY29tcG9zZShmLCBnLCBoKSBpcyBpZGVudGljYWwgdG8gZG9pbmdcXG4gKiAoLi4uYXJncykgPT4gZihnKGgoLi4uYXJncykpKS5cXG4gKi9cXG5cXG5mdW5jdGlvbiBjb21wb3NlKCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZ1bmNzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIGZ1bmNzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xcbiAgICAgIHJldHVybiBhcmc7XFxuICAgIH07XFxuICB9XFxuXFxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAxKSB7XFxuICAgIHJldHVybiBmdW5jc1swXTtcXG4gIH1cXG5cXG4gIHJldHVybiBmdW5jcy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgICByZXR1cm4gYShiLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKSk7XFxuICAgIH07XFxuICB9KTtcXG59XFxuXFxuLyoqKi8gfSksXFxuLyogNzYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihwcm9jZXNzKSB7LyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gd3JhcE1hcFRvUHJvcHNDb25zdGFudDtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZ2V0RGVwZW5kc09uT3duUHJvcHMgKi9cXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJiXFxcIl0gPSB3cmFwTWFwVG9Qcm9wc0Z1bmM7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fdXRpbHNfdmVyaWZ5UGxhaW5PYmplY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzcpO1xcblxcblxcbmZ1bmN0aW9uIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQoZ2V0Q29uc3RhbnQpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbml0Q29uc3RhbnRTZWxlY3RvcihkaXNwYXRjaCwgb3B0aW9ucykge1xcbiAgICB2YXIgY29uc3RhbnQgPSBnZXRDb25zdGFudChkaXNwYXRjaCwgb3B0aW9ucyk7XFxuXFxuICAgIGZ1bmN0aW9uIGNvbnN0YW50U2VsZWN0b3IoKSB7XFxuICAgICAgcmV0dXJuIGNvbnN0YW50O1xcbiAgICB9XFxuICAgIGNvbnN0YW50U2VsZWN0b3IuZGVwZW5kc09uT3duUHJvcHMgPSBmYWxzZTtcXG4gICAgcmV0dXJuIGNvbnN0YW50U2VsZWN0b3I7XFxuICB9O1xcbn1cXG5cXG4vLyBkZXBlbmRzT25Pd25Qcm9wcyBpcyB1c2VkIGJ5IGNyZWF0ZU1hcFRvUHJvcHNQcm94eSB0byBkZXRlcm1pbmUgd2hldGhlciB0byBwYXNzIHByb3BzIGFzIGFyZ3NcXG4vLyB0byB0aGUgbWFwVG9Qcm9wcyBmdW5jdGlvbiBiZWluZyB3cmFwcGVkLiBJdCBpcyBhbHNvIHVzZWQgYnkgbWFrZVB1cmVQcm9wc1NlbGVjdG9yIHRvIGRldGVybWluZVxcbi8vIHdoZXRoZXIgbWFwVG9Qcm9wcyBuZWVkcyB0byBiZSBpbnZva2VkIHdoZW4gcHJvcHMgaGF2ZSBjaGFuZ2VkLlxcbi8vIFxcbi8vIEEgbGVuZ3RoIG9mIG9uZSBzaWduYWxzIHRoYXQgbWFwVG9Qcm9wcyBkb2VzIG5vdCBkZXBlbmQgb24gcHJvcHMgZnJvbSB0aGUgcGFyZW50IGNvbXBvbmVudC5cXG4vLyBBIGxlbmd0aCBvZiB6ZXJvIGlzIGFzc3VtZWQgdG8gbWVhbiBtYXBUb1Byb3BzIGlzIGdldHRpbmcgYXJncyB2aWEgYXJndW1lbnRzIG9yIC4uLmFyZ3MgYW5kXFxuLy8gdGhlcmVmb3JlIG5vdCByZXBvcnRpbmcgaXRzIGxlbmd0aCBhY2N1cmF0ZWx5Li5cXG5mdW5jdGlvbiBnZXREZXBlbmRzT25Pd25Qcm9wcyhtYXBUb1Byb3BzKSB7XFxuICByZXR1cm4gbWFwVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcyAhPT0gbnVsbCAmJiBtYXBUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzICE9PSB1bmRlZmluZWQgPyBCb29sZWFuKG1hcFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMpIDogbWFwVG9Qcm9wcy5sZW5ndGggIT09IDE7XFxufVxcblxcbi8vIFVzZWQgYnkgd2hlbk1hcFN0YXRlVG9Qcm9wc0lzRnVuY3Rpb24gYW5kIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9uLFxcbi8vIHRoaXMgZnVuY3Rpb24gd3JhcHMgbWFwVG9Qcm9wcyBpbiBhIHByb3h5IGZ1bmN0aW9uIHdoaWNoIGRvZXMgc2V2ZXJhbCB0aGluZ3M6XFxuLy8gXFxuLy8gICogRGV0ZWN0cyB3aGV0aGVyIHRoZSBtYXBUb1Byb3BzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBkZXBlbmRzIG9uIHByb3BzLCB3aGljaFxcbi8vICAgIGlzIHVzZWQgYnkgc2VsZWN0b3JGYWN0b3J5IHRvIGRlY2lkZSBpZiBpdCBzaG91bGQgcmVpbnZva2Ugb24gcHJvcHMgY2hhbmdlcy5cXG4vLyAgICBcXG4vLyAgKiBPbiBmaXJzdCBjYWxsLCBoYW5kbGVzIG1hcFRvUHJvcHMgaWYgcmV0dXJucyBhbm90aGVyIGZ1bmN0aW9uLCBhbmQgdHJlYXRzIHRoYXRcXG4vLyAgICBuZXcgZnVuY3Rpb24gYXMgdGhlIHRydWUgbWFwVG9Qcm9wcyBmb3Igc3Vic2VxdWVudCBjYWxscy5cXG4vLyAgICBcXG4vLyAgKiBPbiBmaXJzdCBjYWxsLCB2ZXJpZmllcyB0aGUgZmlyc3QgcmVzdWx0IGlzIGEgcGxhaW4gb2JqZWN0LCBpbiBvcmRlciB0byB3YXJuXFxuLy8gICAgdGhlIGRldmVsb3BlciB0aGF0IHRoZWlyIG1hcFRvUHJvcHMgZnVuY3Rpb24gaXMgbm90IHJldHVybmluZyBhIHZhbGlkIHJlc3VsdC5cXG4vLyAgICBcXG5mdW5jdGlvbiB3cmFwTWFwVG9Qcm9wc0Z1bmMobWFwVG9Qcm9wcywgbWV0aG9kTmFtZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRQcm94eVNlbGVjdG9yKGRpc3BhdGNoLCBfcmVmKSB7XFxuICAgIHZhciBkaXNwbGF5TmFtZSA9IF9yZWYuZGlzcGxheU5hbWU7XFxuXFxuICAgIHZhciBwcm94eSA9IGZ1bmN0aW9uIG1hcFRvUHJvcHNQcm94eShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKSB7XFxuICAgICAgcmV0dXJuIHByb3h5LmRlcGVuZHNPbk93blByb3BzID8gcHJveHkubWFwVG9Qcm9wcyhzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKSA6IHByb3h5Lm1hcFRvUHJvcHMoc3RhdGVPckRpc3BhdGNoKTtcXG4gICAgfTtcXG5cXG4gICAgLy8gYWxsb3cgZGV0ZWN0RmFjdG9yeUFuZFZlcmlmeSB0byBnZXQgb3duUHJvcHNcXG4gICAgcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPSB0cnVlO1xcblxcbiAgICBwcm94eS5tYXBUb1Byb3BzID0gZnVuY3Rpb24gZGV0ZWN0RmFjdG9yeUFuZFZlcmlmeShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKSB7XFxuICAgICAgcHJveHkubWFwVG9Qcm9wcyA9IG1hcFRvUHJvcHM7XFxuICAgICAgcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPSBnZXREZXBlbmRzT25Pd25Qcm9wcyhtYXBUb1Byb3BzKTtcXG4gICAgICB2YXIgcHJvcHMgPSBwcm94eShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKTtcXG5cXG4gICAgICBpZiAodHlwZW9mIHByb3BzID09PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICBwcm94eS5tYXBUb1Byb3BzID0gcHJvcHM7XFxuICAgICAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IGdldERlcGVuZHNPbk93blByb3BzKHByb3BzKTtcXG4gICAgICAgIHByb3BzID0gcHJveHkoc3RhdGVPckRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuICAgICAgfVxcblxcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc192ZXJpZnlQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocHJvcHMsIGRpc3BsYXlOYW1lLCBtZXRob2ROYW1lKTtcXG5cXG4gICAgICByZXR1cm4gcHJvcHM7XFxuICAgIH07XFxuXFxuICAgIHJldHVybiBwcm94eTtcXG4gIH07XFxufVxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiA3NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gdmVyaWZ5UGxhaW5PYmplY3Q7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fd2FybmluZ19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XFxuXFxuXFxuXFxuZnVuY3Rpb24gdmVyaWZ5UGxhaW5PYmplY3QodmFsdWUsIGRpc3BsYXlOYW1lLCBtZXRob2ROYW1lKSB7XFxuICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShtZXRob2ROYW1lICsgJygpIGluICcgKyBkaXNwbGF5TmFtZSArICcgbXVzdCByZXR1cm4gYSBwbGFpbiBvYmplY3QuIEluc3RlYWQgcmVjZWl2ZWQgJyArIHZhbHVlICsgJy4nKTtcXG4gIH1cXG59XFxuXFxuLyoqKi8gfSksXFxuLyogNzggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlJbnNlcnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5SW5zZXJ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheU1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5TW92ZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlQb3BcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UG9wOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVB1c2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UHVzaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlSZW1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UmVtb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZUFsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmVBbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U2hpZnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U3BsaWNlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVNwbGljZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTd2FwXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVN3YXA7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5VW5zaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlVbnNoaWZ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhdXRvZmlsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXV0b2ZpbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJsdXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJsdXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNoYW5nZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hhbmdlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJjbGVhclN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY2xlYXJTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNsZWFyU3VibWl0RXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbGVhclN1Ym1pdEVycm9yczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2xlYXJBc3luY0Vycm9yXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbGVhckFzeW5jRXJyb3I7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImRlc3Ryb3lcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGRlc3Ryb3k7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImZvY3VzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmb2N1czsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaW5pdGlhbGl6ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaW5pdGlhbGl6ZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwicmVnaXN0ZXJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVnaXN0ZXJGaWVsZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwicmVzZXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlc2V0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdGFydEFzeW5jVmFsaWRhdGlvblxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhcnRBc3luY1ZhbGlkYXRpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0YXJ0U3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGFydFN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RvcEFzeW5jVmFsaWRhdGlvblxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RvcEFzeW5jVmFsaWRhdGlvbjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RvcFN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RvcFN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdEZhaWxlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0RmFpbGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzZXRTdWJtaXRTdWNjZWVkZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNldFN1Ym1pdFN1Y2NlZWRlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidG91Y2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnJlZ2lzdGVyRmllbGRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVucmVnaXN0ZXJGaWVsZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidW50b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW50b3VjaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidXBkYXRlU3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdXBkYXRlU3luY0Vycm9yczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidXBkYXRlU3luY1dhcm5pbmdzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1cGRhdGVTeW5jV2FybmluZ3M7IH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbnZhciBhcnJheUluc2VydCA9IGZ1bmN0aW9uIGFycmF5SW5zZXJ0KGZvcm0sIGZpZWxkLCBpbmRleCwgdmFsdWUpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfSU5TRVJUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCBpbmRleDogaW5kZXggfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBhcnJheU1vdmUgPSBmdW5jdGlvbiBhcnJheU1vdmUoZm9ybSwgZmllbGQsIGZyb20sIHRvKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX01PVkVcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQsIGZyb206IGZyb20sIHRvOiB0byB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlQb3AgPSBmdW5jdGlvbiBhcnJheVBvcChmb3JtLCBmaWVsZCkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QT1BcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGFycmF5UHVzaCA9IGZ1bmN0aW9uIGFycmF5UHVzaChmb3JtLCBmaWVsZCwgdmFsdWUpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUFVTSFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGFycmF5UmVtb3ZlID0gZnVuY3Rpb24gYXJyYXlSZW1vdmUoZm9ybSwgZmllbGQsIGluZGV4KSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXg6IGluZGV4IH0gfTtcXG59O1xcblxcbnZhciBhcnJheVJlbW92ZUFsbCA9IGZ1bmN0aW9uIGFycmF5UmVtb3ZlQWxsKGZvcm0sIGZpZWxkKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRV9BTExcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGFycmF5U2hpZnQgPSBmdW5jdGlvbiBhcnJheVNoaWZ0KGZvcm0sIGZpZWxkKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NISUZUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVNwbGljZSA9IGZ1bmN0aW9uIGFycmF5U3BsaWNlKGZvcm0sIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB2YWx1ZSkge1xcbiAgdmFyIGFjdGlvbiA9IHtcXG4gICAgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9TUExJQ0VcXFwiXSxcXG4gICAgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQsIGluZGV4OiBpbmRleCwgcmVtb3ZlTnVtOiByZW1vdmVOdW0gfVxcbiAgfTtcXG4gIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XFxuICAgIGFjdGlvbi5wYXlsb2FkID0gdmFsdWU7XFxuICB9XFxuICByZXR1cm4gYWN0aW9uO1xcbn07XFxuXFxudmFyIGFycmF5U3dhcCA9IGZ1bmN0aW9uIGFycmF5U3dhcChmb3JtLCBmaWVsZCwgaW5kZXhBLCBpbmRleEIpIHtcXG4gIGlmIChpbmRleEEgPT09IGluZGV4Qikge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N3YXAgaW5kaWNlcyBjYW5ub3QgYmUgZXF1YWwnKTtcXG4gIH1cXG4gIGlmIChpbmRleEEgPCAwIHx8IGluZGV4QiA8IDApIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdTd2FwIGluZGljZXMgY2Fubm90IGJlIG5lZ2F0aXZlJyk7XFxuICB9XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NXQVBcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQsIGluZGV4QTogaW5kZXhBLCBpbmRleEI6IGluZGV4QiB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlVbnNoaWZ0ID0gZnVuY3Rpb24gYXJyYXlVbnNoaWZ0KGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9VTlNISUZUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgYXV0b2ZpbGwgPSBmdW5jdGlvbiBhdXRvZmlsbChmb3JtLCBmaWVsZCwgdmFsdWUpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVVUT0ZJTExcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBibHVyID0gZnVuY3Rpb24gYmx1cihmb3JtLCBmaWVsZCwgdmFsdWUsIHRvdWNoKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkJMVVJcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQsIHRvdWNoOiB0b3VjaCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGNoYW5nZSA9IGZ1bmN0aW9uIGNoYW5nZShmb3JtLCBmaWVsZCwgdmFsdWUsIHRvdWNoLCBwZXJzaXN0ZW50U3VibWl0RXJyb3JzKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNIQU5HRVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgdG91Y2g6IHRvdWNoLCBwZXJzaXN0ZW50U3VibWl0RXJyb3JzOiBwZXJzaXN0ZW50U3VibWl0RXJyb3JzIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgY2xlYXJTdWJtaXQgPSBmdW5jdGlvbiBjbGVhclN1Ym1pdChmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSB9O1xcbn07XFxuXFxudmFyIGNsZWFyU3VibWl0RXJyb3JzID0gZnVuY3Rpb24gY2xlYXJTdWJtaXRFcnJvcnMoZm9ybSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJDTEVBUl9TVUJNSVRfRVJST1JTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgY2xlYXJBc3luY0Vycm9yID0gZnVuY3Rpb24gY2xlYXJBc3luY0Vycm9yKGZvcm0sIGZpZWxkKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX0FTWU5DX0VSUk9SXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0gfTtcXG59O1xcblxcbnZhciBkZXN0cm95ID0gZnVuY3Rpb24gZGVzdHJveSgpIHtcXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBmb3JtID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIGZvcm1bX2tleV0gPSBhcmd1bWVudHNbX2tleV07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkRFU1RST1lcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0gfTtcXG59O1xcblxcbnZhciBmb2N1cyA9IGZ1bmN0aW9uIGZvY3VzKGZvcm0sIGZpZWxkKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkZPQ1VTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0gfTtcXG59O1xcblxcbnZhciBpbml0aWFsaXplID0gZnVuY3Rpb24gaW5pdGlhbGl6ZShmb3JtLCB2YWx1ZXMsIGtlZXBEaXJ0eSkge1xcbiAgdmFyIG90aGVyTWV0YSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge307XFxuXFxuICBpZiAoa2VlcERpcnR5IGluc3RhbmNlb2YgT2JqZWN0KSB7XFxuICAgIG90aGVyTWV0YSA9IGtlZXBEaXJ0eTtcXG4gICAga2VlcERpcnR5ID0gZmFsc2U7XFxuICB9XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIklOSVRJQUxJWkVcXFwiXSwgbWV0YTogX2V4dGVuZHMoeyBmb3JtOiBmb3JtLCBrZWVwRGlydHk6IGtlZXBEaXJ0eSB9LCBvdGhlck1ldGEpLCBwYXlsb2FkOiB2YWx1ZXMgfTtcXG59O1xcblxcbnZhciByZWdpc3RlckZpZWxkID0gZnVuY3Rpb24gcmVnaXN0ZXJGaWVsZChmb3JtLCBuYW1lLCB0eXBlKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlJFR0lTVEVSX0ZJRUxEXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IG5hbWU6IG5hbWUsIHR5cGU6IHR5cGUgfSB9O1xcbn07XFxuXFxudmFyIHJlc2V0ID0gZnVuY3Rpb24gcmVzZXQoZm9ybSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJSRVNFVFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSB9O1xcbn07XFxuXFxudmFyIHN0YXJ0QXN5bmNWYWxpZGF0aW9uID0gZnVuY3Rpb24gc3RhcnRBc3luY1ZhbGlkYXRpb24oZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RBUlRfQVNZTkNfVkFMSURBVElPTlxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgc3RhcnRTdWJtaXQgPSBmdW5jdGlvbiBzdGFydFN1Ym1pdChmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX1NVQk1JVFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSB9O1xcbn07XFxuXFxudmFyIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBmdW5jdGlvbiBzdG9wQXN5bmNWYWxpZGF0aW9uKGZvcm0sIGVycm9ycykge1xcbiAgdmFyIGFjdGlvbiA9IHtcXG4gICAgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVE9QX0FTWU5DX1ZBTElEQVRJT05cXFwiXSxcXG4gICAgbWV0YTogeyBmb3JtOiBmb3JtIH0sXFxuICAgIHBheWxvYWQ6IGVycm9yc1xcbiAgfTtcXG4gIGlmIChlcnJvcnMgJiYgT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgYWN0aW9uLmVycm9yID0gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgc3RvcFN1Ym1pdCA9IGZ1bmN0aW9uIHN0b3BTdWJtaXQoZm9ybSwgZXJyb3JzKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfU1VCTUlUXFxcIl0sXFxuICAgIG1ldGE6IHsgZm9ybTogZm9ybSB9LFxcbiAgICBwYXlsb2FkOiBlcnJvcnNcXG4gIH07XFxuICBpZiAoZXJyb3JzICYmIE9iamVjdC5rZXlzKGVycm9ycykubGVuZ3RoKSB7XFxuICAgIGFjdGlvbi5lcnJvciA9IHRydWU7XFxuICB9XFxuICByZXR1cm4gYWN0aW9uO1xcbn07XFxuXFxudmFyIHN1Ym1pdCA9IGZ1bmN0aW9uIHN1Ym1pdChmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNVQk1JVFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSB9O1xcbn07XFxuXFxudmFyIHNldFN1Ym1pdEZhaWxlZCA9IGZ1bmN0aW9uIHNldFN1Ym1pdEZhaWxlZChmb3JtKSB7XFxuICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZpZWxkcyA9IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcXG4gICAgZmllbGRzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xcbiAgfVxcblxcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTRVRfU1VCTUlUX0ZBSUxFRFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkczogZmllbGRzIH0sIGVycm9yOiB0cnVlIH07XFxufTtcXG5cXG52YXIgc2V0U3VibWl0U3VjY2VlZGVkID0gZnVuY3Rpb24gc2V0U3VibWl0U3VjY2VlZGVkKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjMgPiAxID8gX2xlbjMgLSAxIDogMCksIF9rZXkzID0gMTsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xcbiAgICBmaWVsZHNbX2tleTMgLSAxXSA9IGFyZ3VtZW50c1tfa2V5M107XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNFVF9TVUJNSVRfU1VDQ0VFREVEXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSwgZXJyb3I6IGZhbHNlIH07XFxufTtcXG5cXG52YXIgdG91Y2ggPSBmdW5jdGlvbiB0b3VjaChmb3JtKSB7XFxuICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGZpZWxkcyA9IEFycmF5KF9sZW40ID4gMSA/IF9sZW40IC0gMSA6IDApLCBfa2V5NCA9IDE7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcXG4gICAgZmllbGRzW19rZXk0IC0gMV0gPSBhcmd1bWVudHNbX2tleTRdO1xcbiAgfVxcblxcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJUT1VDSFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkczogZmllbGRzIH0gfTtcXG59O1xcblxcbnZhciB1bnJlZ2lzdGVyRmllbGQgPSBmdW5jdGlvbiB1bnJlZ2lzdGVyRmllbGQoZm9ybSwgbmFtZSkge1xcbiAgdmFyIGRlc3Ryb3lPblVubW91bnQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IHRydWU7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVOUkVHSVNURVJfRklFTERcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0sIHBheWxvYWQ6IHsgbmFtZTogbmFtZSwgZGVzdHJveU9uVW5tb3VudDogZGVzdHJveU9uVW5tb3VudCB9IH07XFxufTtcXG5cXG52YXIgdW50b3VjaCA9IGZ1bmN0aW9uIHVudG91Y2goZm9ybSkge1xcbiAgZm9yICh2YXIgX2xlbjUgPSBhcmd1bWVudHMubGVuZ3RoLCBmaWVsZHMgPSBBcnJheShfbGVuNSA+IDEgPyBfbGVuNSAtIDEgOiAwKSwgX2tleTUgPSAxOyBfa2V5NSA8IF9sZW41OyBfa2V5NSsrKSB7XFxuICAgIGZpZWxkc1tfa2V5NSAtIDFdID0gYXJndW1lbnRzW19rZXk1XTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVU5UT1VDSFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkczogZmllbGRzIH0gfTtcXG59O1xcblxcbnZhciB1cGRhdGVTeW5jRXJyb3JzID0gZnVuY3Rpb24gdXBkYXRlU3luY0Vycm9ycyhmb3JtKSB7XFxuICB2YXIgc3luY0Vycm9ycyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XFxuICB2YXIgZXJyb3IgPSBhcmd1bWVudHNbMl07XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX0VSUk9SU1xcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSwgcGF5bG9hZDogeyBzeW5jRXJyb3JzOiBzeW5jRXJyb3JzLCBlcnJvcjogZXJyb3IgfSB9O1xcbn07XFxuXFxudmFyIHVwZGF0ZVN5bmNXYXJuaW5ncyA9IGZ1bmN0aW9uIHVwZGF0ZVN5bmNXYXJuaW5ncyhmb3JtKSB7XFxuICB2YXIgc3luY1dhcm5pbmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcXG4gIHZhciB3YXJuaW5nID0gYXJndW1lbnRzWzJdO1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVUERBVEVfU1lOQ19XQVJOSU5HU1xcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSwgcGF5bG9hZDogeyBzeW5jV2FybmluZ3M6IHN5bmNXYXJuaW5ncywgd2FybmluZzogd2FybmluZyB9IH07XFxufTtcXG5cXG4vKioqLyB9KSxcXG4vKiA3OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9lczZfZXJyb3JfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE0KTtcXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcbnZhciBTdWJtaXNzaW9uRXJyb3IgPSBmdW5jdGlvbiAoX0V4dGVuZGFibGVFcnJvcikge1xcbiAgX2luaGVyaXRzKFN1Ym1pc3Npb25FcnJvciwgX0V4dGVuZGFibGVFcnJvcik7XFxuXFxuICBmdW5jdGlvbiBTdWJtaXNzaW9uRXJyb3IoZXJyb3JzKSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdWJtaXNzaW9uRXJyb3IpO1xcblxcbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoU3VibWlzc2lvbkVycm9yLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoU3VibWlzc2lvbkVycm9yKSkuY2FsbCh0aGlzLCAnU3VibWl0IFZhbGlkYXRpb24gRmFpbGVkJykpO1xcblxcbiAgICBfdGhpcy5lcnJvcnMgPSBlcnJvcnM7XFxuICAgIHJldHVybiBfdGhpcztcXG4gIH1cXG5cXG4gIHJldHVybiBTdWJtaXNzaW9uRXJyb3I7XFxufShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfZXM2X2Vycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChTdWJtaXNzaW9uRXJyb3IpO1xcblxcbi8qKiovIH0pLFxcbi8qIDgwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0V2ZW50X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgxKTtcXG5cXG5cXG52YXIgc2lsZW5jZUV2ZW50ID0gZnVuY3Rpb24gc2lsZW5jZUV2ZW50KGV2ZW50KSB7XFxuICB2YXIgaXMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0V2ZW50X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCk7XFxuICBpZiAoaXMpIHtcXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gIH1cXG4gIHJldHVybiBpcztcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNpbGVuY2VFdmVudCk7XFxuXFxuLyoqKi8gfSksXFxuLyogODEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBpc0V2ZW50ID0gZnVuY3Rpb24gaXNFdmVudChjYW5kaWRhdGUpIHtcXG4gIHJldHVybiAhIShjYW5kaWRhdGUgJiYgY2FuZGlkYXRlLnN0b3BQcm9wYWdhdGlvbiAmJiBjYW5kaWRhdGUucHJldmVudERlZmF1bHQpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNFdmVudCk7XFxuXFxuLyoqKi8gfSksXFxuLyogODIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQxKTtcXG5cXG5cXG4vKipcXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzRXF1YWxgIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYGN1c3RvbWl6ZXJgIHdoaWNoXFxuICogaXMgaW52b2tlZCB0byBjb21wYXJlIHZhbHVlcy4gSWYgYGN1c3RvbWl6ZXJgIHJldHVybnMgYHVuZGVmaW5lZGAsIGNvbXBhcmlzb25zXFxuICogYXJlIGhhbmRsZWQgYnkgdGhlIG1ldGhvZCBpbnN0ZWFkLiBUaGUgYGN1c3RvbWl6ZXJgIGlzIGludm9rZWQgd2l0aCB1cCB0b1xcbiAqIHNpeCBhcmd1bWVudHM6IChvYmpWYWx1ZSwgb3RoVmFsdWUgWywgaW5kZXh8a2V5LCBvYmplY3QsIG90aGVyLCBzdGFja10pLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogZnVuY3Rpb24gaXNHcmVldGluZyh2YWx1ZSkge1xcbiAqICAgcmV0dXJuIC9eaCg/Oml8ZWxsbykkLy50ZXN0KHZhbHVlKTtcXG4gKiB9XFxuICpcXG4gKiBmdW5jdGlvbiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSkge1xcbiAqICAgaWYgKGlzR3JlZXRpbmcob2JqVmFsdWUpICYmIGlzR3JlZXRpbmcob3RoVmFsdWUpKSB7XFxuICogICAgIHJldHVybiB0cnVlO1xcbiAqICAgfVxcbiAqIH1cXG4gKlxcbiAqIHZhciBhcnJheSA9IFsnaGVsbG8nLCAnZ29vZGJ5ZSddO1xcbiAqIHZhciBvdGhlciA9IFsnaGknLCAnZ29vZGJ5ZSddO1xcbiAqXFxuICogXy5pc0VxdWFsV2l0aChhcnJheSwgb3RoZXIsIGN1c3RvbWl6ZXIpO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBpc0VxdWFsV2l0aCh2YWx1ZSwgb3RoZXIsIGN1c3RvbWl6ZXIpIHtcXG4gIGN1c3RvbWl6ZXIgPSB0eXBlb2YgY3VzdG9taXplciA9PSAnZnVuY3Rpb24nID8gY3VzdG9taXplciA6IHVuZGVmaW5lZDtcXG4gIHZhciByZXN1bHQgPSBjdXN0b21pemVyID8gY3VzdG9taXplcih2YWx1ZSwgb3RoZXIpIDogdW5kZWZpbmVkO1xcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBvdGhlciwgdW5kZWZpbmVkLCBjdXN0b21pemVyKSA6ICEhcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0VxdWFsV2l0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogODMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcbnZhciBwcm9jZXNzUHJvcHMgPSBmdW5jdGlvbiBwcm9jZXNzUHJvcHModHlwZSwgcHJvcHMsIF92YWx1ZSkge1xcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XFxuXFxuICBpZiAodHlwZSA9PT0gJ2NoZWNrYm94Jykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgY2hlY2tlZDogISF2YWx1ZVxcbiAgICB9KTtcXG4gIH1cXG4gIGlmICh0eXBlID09PSAncmFkaW8nKSB7XFxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcXG4gICAgICBjaGVja2VkOiB2YWx1ZSA9PT0gX3ZhbHVlLFxcbiAgICAgIHZhbHVlOiBfdmFsdWVcXG4gICAgfSk7XFxuICB9XFxuICBpZiAodHlwZSA9PT0gJ3NlbGVjdC1tdWx0aXBsZScpIHtcXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBwcm9wcywge1xcbiAgICAgIHZhbHVlOiB2YWx1ZSB8fCBbXVxcbiAgICB9KTtcXG4gIH1cXG4gIGlmICh0eXBlID09PSAnZmlsZScpIHtcXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBwcm9wcywge1xcbiAgICAgIHZhbHVlOiB2YWx1ZSB8fCB1bmRlZmluZWRcXG4gICAgfSk7XFxuICB9XFxuICByZXR1cm4gcHJvcHM7XFxufTtcXG5cXG52YXIgY3JlYXRlRmllbGRQcm9wcyA9IGZ1bmN0aW9uIGNyZWF0ZUZpZWxkUHJvcHMoX3JlZjIsIG5hbWUsIF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYyLmdldEluLFxcbiAgICAgIHRvSlMgPSBfcmVmMi50b0pTO1xcblxcbiAgdmFyIGFzeW5jRXJyb3IgPSBfcmVmLmFzeW5jRXJyb3IsXFxuICAgICAgYXN5bmNWYWxpZGF0aW5nID0gX3JlZi5hc3luY1ZhbGlkYXRpbmcsXFxuICAgICAgb25CbHVyID0gX3JlZi5vbkJsdXIsXFxuICAgICAgb25DaGFuZ2UgPSBfcmVmLm9uQ2hhbmdlLFxcbiAgICAgIG9uRHJvcCA9IF9yZWYub25Ecm9wLFxcbiAgICAgIG9uRHJhZ1N0YXJ0ID0gX3JlZi5vbkRyYWdTdGFydCxcXG4gICAgICBkaXJ0eSA9IF9yZWYuZGlydHksXFxuICAgICAgZGlzcGF0Y2ggPSBfcmVmLmRpc3BhdGNoLFxcbiAgICAgIG9uRm9jdXMgPSBfcmVmLm9uRm9jdXMsXFxuICAgICAgZm9ybSA9IF9yZWYuZm9ybSxcXG4gICAgICBmb3JtYXQgPSBfcmVmLmZvcm1hdCxcXG4gICAgICBwYXJzZSA9IF9yZWYucGFyc2UsXFxuICAgICAgcHJpc3RpbmUgPSBfcmVmLnByaXN0aW5lLFxcbiAgICAgIHByb3BzID0gX3JlZi5wcm9wcyxcXG4gICAgICBzdGF0ZSA9IF9yZWYuc3RhdGUsXFxuICAgICAgc3VibWl0RXJyb3IgPSBfcmVmLnN1Ym1pdEVycm9yLFxcbiAgICAgIHN1Ym1pdEZhaWxlZCA9IF9yZWYuc3VibWl0RmFpbGVkLFxcbiAgICAgIHN1Ym1pdHRpbmcgPSBfcmVmLnN1Ym1pdHRpbmcsXFxuICAgICAgc3luY0Vycm9yID0gX3JlZi5zeW5jRXJyb3IsXFxuICAgICAgc3luY1dhcm5pbmcgPSBfcmVmLnN5bmNXYXJuaW5nLFxcbiAgICAgIHZhbGlkYXRlID0gX3JlZi52YWxpZGF0ZSxcXG4gICAgICB2YWx1ZSA9IF9yZWYudmFsdWUsXFxuICAgICAgX3ZhbHVlID0gX3JlZi5fdmFsdWUsXFxuICAgICAgd2FybiA9IF9yZWYud2FybixcXG4gICAgICBjdXN0b20gPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWydhc3luY0Vycm9yJywgJ2FzeW5jVmFsaWRhdGluZycsICdvbkJsdXInLCAnb25DaGFuZ2UnLCAnb25Ecm9wJywgJ29uRHJhZ1N0YXJ0JywgJ2RpcnR5JywgJ2Rpc3BhdGNoJywgJ29uRm9jdXMnLCAnZm9ybScsICdmb3JtYXQnLCAncGFyc2UnLCAncHJpc3RpbmUnLCAncHJvcHMnLCAnc3RhdGUnLCAnc3VibWl0RXJyb3InLCAnc3VibWl0RmFpbGVkJywgJ3N1Ym1pdHRpbmcnLCAnc3luY0Vycm9yJywgJ3N5bmNXYXJuaW5nJywgJ3ZhbGlkYXRlJywgJ3ZhbHVlJywgJ192YWx1ZScsICd3YXJuJ10pO1xcblxcbiAgdmFyIGVycm9yID0gc3luY0Vycm9yIHx8IGFzeW5jRXJyb3IgfHwgc3VibWl0RXJyb3I7XFxuICB2YXIgd2FybmluZyA9IHN5bmNXYXJuaW5nO1xcblxcbiAgdmFyIGZvcm1hdEZpZWxkVmFsdWUgPSBmdW5jdGlvbiBmb3JtYXRGaWVsZFZhbHVlKHZhbHVlLCBmb3JtYXQpIHtcXG4gICAgaWYgKGZvcm1hdCA9PT0gbnVsbCkge1xcbiAgICAgIHJldHVybiB2YWx1ZTtcXG4gICAgfVxcbiAgICB2YXIgZGVmYXVsdEZvcm1hdHRlZFZhbHVlID0gdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWU7XFxuICAgIHJldHVybiBmb3JtYXQgPyBmb3JtYXQodmFsdWUsIG5hbWUpIDogZGVmYXVsdEZvcm1hdHRlZFZhbHVlO1xcbiAgfTtcXG5cXG4gIHZhciBmb3JtYXR0ZWRGaWVsZFZhbHVlID0gZm9ybWF0RmllbGRWYWx1ZSh2YWx1ZSwgZm9ybWF0KTtcXG5cXG4gIHJldHVybiB7XFxuICAgIGlucHV0OiBwcm9jZXNzUHJvcHMoY3VzdG9tLnR5cGUsIHtcXG4gICAgICBuYW1lOiBuYW1lLFxcbiAgICAgIG9uQmx1cjogb25CbHVyLFxcbiAgICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcXG4gICAgICBvbkRyYWdTdGFydDogb25EcmFnU3RhcnQsXFxuICAgICAgb25Ecm9wOiBvbkRyb3AsXFxuICAgICAgb25Gb2N1czogb25Gb2N1cyxcXG4gICAgICB2YWx1ZTogZm9ybWF0dGVkRmllbGRWYWx1ZVxcbiAgICB9LCBfdmFsdWUpLFxcbiAgICBtZXRhOiBfZXh0ZW5kcyh7fSwgdG9KUyhzdGF0ZSksIHtcXG4gICAgICBhY3RpdmU6ICEhKHN0YXRlICYmIGdldEluKHN0YXRlLCAnYWN0aXZlJykpLFxcbiAgICAgIGFzeW5jVmFsaWRhdGluZzogYXN5bmNWYWxpZGF0aW5nLFxcbiAgICAgIGF1dG9maWxsZWQ6ICEhKHN0YXRlICYmIGdldEluKHN0YXRlLCAnYXV0b2ZpbGxlZCcpKSxcXG4gICAgICBkaXJ0eTogZGlydHksXFxuICAgICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxcbiAgICAgIGVycm9yOiBlcnJvcixcXG4gICAgICBmb3JtOiBmb3JtLFxcbiAgICAgIHdhcm5pbmc6IHdhcm5pbmcsXFxuICAgICAgaW52YWxpZDogISFlcnJvcixcXG4gICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgc3VibWl0dGluZzogISFzdWJtaXR0aW5nLFxcbiAgICAgIHN1Ym1pdEZhaWxlZDogISFzdWJtaXRGYWlsZWQsXFxuICAgICAgdG91Y2hlZDogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICd0b3VjaGVkJykpLFxcbiAgICAgIHZhbGlkOiAhZXJyb3IsXFxuICAgICAgdmlzaXRlZDogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICd2aXNpdGVkJykpXFxuICAgIH0pLFxcbiAgICBjdXN0b206IF9leHRlbmRzKHt9LCBjdXN0b20sIHByb3BzKVxcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUZpZWxkUHJvcHMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDg0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRWYWx1ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzUmVhY3ROYXRpdmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMwKTtcXG5cXG5cXG5cXG52YXIgb25DaGFuZ2VWYWx1ZSA9IGZ1bmN0aW9uIG9uQ2hhbmdlVmFsdWUoZXZlbnQsIF9yZWYpIHtcXG4gIHZhciBuYW1lID0gX3JlZi5uYW1lLFxcbiAgICAgIHBhcnNlID0gX3JlZi5wYXJzZSxcXG4gICAgICBub3JtYWxpemUgPSBfcmVmLm5vcm1hbGl6ZTtcXG5cXG4gIC8vIHJlYWQgdmFsdWUgZnJvbSBpbnB1dFxcbiAgdmFyIHZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0VmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzUmVhY3ROYXRpdmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbiAgLy8gcGFyc2UgdmFsdWUgaWYgd2UgaGF2ZSBhIHBhcnNlclxcbiAgaWYgKHBhcnNlKSB7XFxuICAgIHZhbHVlID0gcGFyc2UodmFsdWUsIG5hbWUpO1xcbiAgfVxcblxcbiAgLy8gbm9ybWFsaXplIHZhbHVlXFxuICBpZiAobm9ybWFsaXplKSB7XFxuICAgIHZhbHVlID0gbm9ybWFsaXplKG5hbWUsIHZhbHVlKTtcXG4gIH1cXG5cXG4gIHJldHVybiB2YWx1ZTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG9uQ2hhbmdlVmFsdWUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDg1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSXNQcmlzdGluZSA9IGZ1bmN0aW9uIGNyZWF0ZUlzUHJpc3RpbmUoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGVtcHR5ID0gX3JlZi5lbXB0eSxcXG4gICAgICBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgdmFyIGluaXRpYWwgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLmluaXRpYWwnKSB8fCBlbXB0eTtcXG4gICAgICB2YXIgdmFsdWVzID0gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy52YWx1ZXMnKSB8fCBpbml0aWFsO1xcbiAgICAgIHJldHVybiBkZWVwRXF1YWwoaW5pdGlhbCwgdmFsdWVzKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVJc1ByaXN0aW5lKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiAgSW4gdGhlXFxuLy8gYnJvd3NlciB0aGlzIGlzIGEgbGl0dGxlIGNvbXBsaWNhdGVkIGR1ZSB0byB1bmtub3duIHF1YWxpdHkgb2YgTWF0aC5yYW5kb20oKVxcbi8vIGFuZCBpbmNvbnNpc3RlbnQgc3VwcG9ydCBmb3IgdGhlIGBjcnlwdG9gIEFQSS4gIFdlIGRvIHRoZSBiZXN0IHdlIGNhbiB2aWFcXG4vLyBmZWF0dXJlLWRldGVjdGlvblxcblxcbi8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcXFwidGhpc1xcXCIgaXMgYSBDcnlwdG8gaW1wbGVtZW50YXRpb24uXFxudmFyIGdldFJhbmRvbVZhbHVlcyA9ICh0eXBlb2YoY3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSkgfHxcXG4gICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZihtc0NyeXB0bykgIT0gJ3VuZGVmaW5lZCcgJiYgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQobXNDcnlwdG8pKTtcXG5pZiAoZ2V0UmFuZG9tVmFsdWVzKSB7XFxuICAvLyBXSEFUV0cgY3J5cHRvIFJORyAtIGh0dHA6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9DcnlwdG9cXG4gIHZhciBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB3aGF0d2dSTkcoKSB7XFxuICAgIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XFxuICAgIHJldHVybiBybmRzODtcXG4gIH07XFxufSBlbHNlIHtcXG4gIC8vIE1hdGgucmFuZG9tKCktYmFzZWQgKFJORylcXG4gIC8vXFxuICAvLyBJZiBhbGwgZWxzZSBmYWlscywgdXNlIE1hdGgucmFuZG9tKCkuICBJdCdzIGZhc3QsIGJ1dCBpcyBvZiB1bnNwZWNpZmllZFxcbiAgLy8gcXVhbGl0eS5cXG4gIHZhciBybmRzID0gbmV3IEFycmF5KDE2KTtcXG5cXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWF0aFJORygpIHtcXG4gICAgZm9yICh2YXIgaSA9IDAsIHI7IGkgPCAxNjsgaSsrKSB7XFxuICAgICAgaWYgKChpICYgMHgwMykgPT09IDApIHIgPSBNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwMDA7XFxuICAgICAgcm5kc1tpXSA9IHIgPj4+ICgoaSAmIDB4MDMpIDw8IDMpICYgMHhmZjtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gcm5kcztcXG4gIH07XFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDg3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbi8qKlxcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxcbiAqL1xcbnZhciBieXRlVG9IZXggPSBbXTtcXG5mb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgKytpKSB7XFxuICBieXRlVG9IZXhbaV0gPSAoaSArIDB4MTAwKS50b1N0cmluZygxNikuc3Vic3RyKDEpO1xcbn1cXG5cXG5mdW5jdGlvbiBieXRlc1RvVXVpZChidWYsIG9mZnNldCkge1xcbiAgdmFyIGkgPSBvZmZzZXQgfHwgMDtcXG4gIHZhciBidGggPSBieXRlVG9IZXg7XFxuICByZXR1cm4gYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArICctJyArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gKyAnLScgK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArICctJyArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXTtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBieXRlc1RvVXVpZDtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciBjbGFzc05hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XFxudmFyIEhlbHAgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xcbiAgICBfX2V4dGVuZHMoSGVscCwgX3N1cGVyKTtcXG4gICAgZnVuY3Rpb24gSGVscCgpIHtcXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xcbiAgICAgICAgX3RoaXMuX2hlbHBQb3B1cCA9IEhUTUxTcGFuRWxlbWVudCA9IG51bGw7XFxuICAgICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG4gICAgSGVscC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcXG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwic3BhblxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmYXMgZmEtZncgZmEtcXVlc3Rpb24tY2lyY2xlIGRlZmF1bHQtY29sb3InLCB0aGlzLnByb3BzLmNvbnRhaW5lckNsYXNzKSwgXFxcImRhdGEtY29udGVudFxcXCI6IHRoaXMucHJvcHMudGV4dCwgcmVmOiBmdW5jdGlvbiAoZG9tKSB7IHJldHVybiBfdGhpcy5faGVscFBvcHVwID0gZG9tOyB9LCBzdHlsZTogdGhpcy5wcm9wcy5zdHlsZSB9KSk7XFxuICAgIH07XFxuICAgIEhlbHAucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgJCh0aGlzLl9oZWxwUG9wdXApLnBvcG92ZXIoe1xcbiAgICAgICAgICAgIGNvbnRhaW5lcjogJ2JvZHknLFxcbiAgICAgICAgICAgIHRyaWdnZXI6ICdob3ZlcicsXFxuICAgICAgICAgICAgaHRtbDogdHJ1ZVxcbiAgICAgICAgfSk7XFxuICAgIH07XFxuICAgIEhlbHAucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgJCh0aGlzLl9oZWxwUG9wdXApLnBvcG92ZXIoJ2Rlc3Ryb3knKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIEhlbHA7XFxufShSZWFjdC5Db21wb25lbnQpKTtcXG5leHBvcnRzLmRlZmF1bHQgPSBIZWxwO1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDg5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbnZhciBjaGFyZW5jID0ge1xcbiAgLy8gVVRGLTggZW5jb2RpbmdcXG4gIHV0Zjg6IHtcXG4gICAgLy8gQ29udmVydCBhIHN0cmluZyB0byBhIGJ5dGUgYXJyYXlcXG4gICAgc3RyaW5nVG9CeXRlczogZnVuY3Rpb24oc3RyKSB7XFxuICAgICAgcmV0dXJuIGNoYXJlbmMuYmluLnN0cmluZ1RvQnl0ZXModW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikpKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBzdHJpbmdcXG4gICAgYnl0ZXNUb1N0cmluZzogZnVuY3Rpb24oYnl0ZXMpIHtcXG4gICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShjaGFyZW5jLmJpbi5ieXRlc1RvU3RyaW5nKGJ5dGVzKSkpO1xcbiAgICB9XFxuICB9LFxcblxcbiAgLy8gQmluYXJ5IGVuY29kaW5nXFxuICBiaW46IHtcXG4gICAgLy8gQ29udmVydCBhIHN0cmluZyB0byBhIGJ5dGUgYXJyYXlcXG4gICAgc3RyaW5nVG9CeXRlczogZnVuY3Rpb24oc3RyKSB7XFxuICAgICAgZm9yICh2YXIgYnl0ZXMgPSBbXSwgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspXFxuICAgICAgICBieXRlcy5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRik7XFxuICAgICAgcmV0dXJuIGJ5dGVzO1xcbiAgICB9LFxcblxcbiAgICAvLyBDb252ZXJ0IGEgYnl0ZSBhcnJheSB0byBhIHN0cmluZ1xcbiAgICBieXRlc1RvU3RyaW5nOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIHN0ciA9IFtdLCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKVxcbiAgICAgICAgc3RyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSkpO1xcbiAgICAgIHJldHVybiBzdHIuam9pbignJyk7XFxuICAgIH1cXG4gIH1cXG59O1xcblxcbm1vZHVsZS5leHBvcnRzID0gY2hhcmVuYztcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuXFxudmFyIF9fZXh0ZW5kcyA9IHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMgfHwgZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBkLl9fcHJvdG9fXyA9IGI7XFxuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XFxuICAgICAgICBmdW5jdGlvbiBfXygpIHtcXG4gICAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcXG4gICAgfTtcXG59KCk7XFxudmFyIF9fYXNzaWduID0gdGhpcyAmJiB0aGlzLl9fYXNzaWduIHx8IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHQpIHtcXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XFxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcXG4gICAgfVxcbiAgICByZXR1cm4gdDtcXG59O1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgcmVkdXhfZm9ybV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7XFxudmFyIHBsYXRmb3JtNiA9IF9fd2VicGFja19yZXF1aXJlX18oMjU0KTtcXG52YXIgd2ViU3RvcmFnZSA9IHBsYXRmb3JtNi53ZWJTdG9yYWdlO1xcbnZhciBmb3JtcyA9IHBsYXRmb3JtNi5mb3JtcztcXG52YXIgdGV4dF9pbnB1dF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTUpO1xcbnZhciBzZWxlY3RfaW5wdXRfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjU5KTtcXG52YXIgdG9nZ2xlX3BhbmVsXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2MCk7XFxudmFyIGhlbHBlcnNfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYzKTtcXG52YXIgVXRpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3Mik7XFxudmFyIHdvcmRpbmdzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3Myk7XFxudmFyIFdPUkRJTkdTID0gaGVscGVyc18xLmdldFdvcmRpbmdzKHdvcmRpbmdzXzEuZGVmYXVsdCwgd2ViU3RvcmFnZS5sb2NhbGUpO1xcbnZhciBDdXN0b21Gb3JtID0gZnVuY3Rpb24gKF9zdXBlcikge1xcbiAgICBfX2V4dGVuZHMoQ3VzdG9tRm9ybSwgX3N1cGVyKTtcXG4gICAgZnVuY3Rpb24gQ3VzdG9tRm9ybShwcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5yZW5kZXJSRlFEZXRhaWxzID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgIHZhciByZnEgPSBfdGhpcy5wcm9wcy5kYXRhLnJmcTtcXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJ0aWxlIGNvbC14cy0xMiBib3R0b20tbWFyZ2luLWxnXFxcIiB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0YWJsZVxcXCIsIHsgc3R5bGU6IHsgd2lkdGg6ICcxMDAlJywgbWluSGVpZ2h0OiA0MCB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoZWFkXFxcIiwgbnVsbCwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidHJcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0aFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby1sYWJlbFxcXCIgfSwgV09SRElOR1MuaWQpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0aFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby1sYWJlbFxcXCIgfSwgV09SRElOR1MuaXNzdWVfZGF0ZSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pc3N1ZV90aW1lKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tbGFiZWxcXFwiIH0sIFdPUkRJTkdTLm5vdGUpKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRib2R5XFxcIiwgbnVsbCwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidHJcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0ZFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby12YWx1ZVxcXCIsIHN0eWxlOiB7IHZlcnRpY2FsQWxpZ246ICdib3R0b20nIH0gfSwgcmZxLmlkKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGRcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tdmFsdWVcXFwiLCBzdHlsZTogeyB2ZXJ0aWNhbEFsaWduOiAnYm90dG9tJyB9IH0sIHJmcS5pc3N1ZURhdGUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0ZFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby12YWx1ZVxcXCIsIHN0eWxlOiB7IHZlcnRpY2FsQWxpZ246ICdib3R0b20nIH0gfSwgcmZxLmlzc3VlVGltZSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEubm90ZSkpKSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnJlbmRlckl0ZW1zID0gZnVuY3Rpb24gKF9hKSB7XFxuICAgICAgICAgICAgdmFyIGZpZWxkcyA9IF9hLmZpZWxkcztcXG4gICAgICAgICAgICB2YXIgdG90YWwgPSBVdGlscy5kaXNwbGF5VG90YWxBbW91bnQoZmllbGRzLmdldEFsbCgpKTtcXG4gICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IHRvdGFsOiB0b3RhbCB9KTtcXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgbnVsbCwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJib3R0b20tbWFyZ2luXFxcIiwgc3R5bGU6IHsgdGV4dEFsaWduOiAncmlnaHQnIH0gfSwgV09SRElOR1MudG90YWxfYW1vdW50LCBcXFwiOiBcXFwiLCB0b3RhbCksIF90aGlzLnJlbmRlckl0ZW0oeyBmaWVsZHM6IGZpZWxkcyB9KSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMucmVuZGVySXRlbSA9IGZ1bmN0aW9uIChfYSkge1xcbiAgICAgICAgICAgIHZhciBmaWVsZHMgPSBfYS5maWVsZHM7XFxuICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIG51bGwsIGZpZWxkcy5tYXAoZnVuY3Rpb24gKG1lbWJlciwgaW5kZXgsIGZpZWxkcykge1xcbiAgICAgICAgICAgICAgICB2YXIgbGluZSA9IF90aGlzLnByb3BzLmRhdGEubGluZXNbaW5kZXhdO1xcbiAgICAgICAgICAgICAgICB2YXIgZmllbGQgPSBmaWVsZHMuZ2V0KGluZGV4KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsga2V5OiBpbmRleCwgY2xhc3NOYW1lOiBcXFwiYm90dG9tLW1hcmdpblxcXCIsIHN0eWxlOiB7IHBhZGRpbmc6IDE1LCBib3JkZXJDb2xvcjogXFxcIiNlZWVcXFwiLCBib3JkZXJXaWR0aDogMSwgYm9yZGVyU3R5bGU6IFxcXCJzb2xpZFxcXCIgfSB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvdyBib3R0b20tbWFyZ2luXFxcIiB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImNvbC14cy02XFxcIiB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJiXFxcIiwgbnVsbCwgV09SRElOR1MubGluZSwgXFxcIiAjXFxcIiwgbGluZS5pZCkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImNvbC14cy02XFxcIiB9LCBXT1JESU5HUy5hbW91bnQsIFxcXCI6IFxcXCIsIFV0aWxzLmRpc3BsYXlJdGVtQW1vdW50KGZpZWxkKSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvdyB0ZXh0LW1lZGl1bSBib3R0b20tbWFyZ2luXFxcIiB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImNvbC14cy02XFxcIiB9LCBXT1JESU5HUy5kZXNjcmlwdGlvbiwgXFxcIjogXFxcIiwgbGluZS5ub3RlKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJjb2wteHMtNlxcXCIgfSwgV09SRElOR1MucXVhbnRpdHksIFxcXCI6IFxcXCIsIGxpbmUucXVhbnRpdHkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJyb3dcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoc2VsZWN0X2lucHV0XzEuZGVmYXVsdCwgeyBuYW1lOiBtZW1iZXIgKyBcXFwiLml0ZW1cXFwiLCBsYWJlbDogV09SRElOR1Muc2VsZWN0X2l0ZW0sIGNvbnRhaW5lckNsYXNzOiBcXFwiY29sLXhzLTEyXFxcIiwgb3B0aW9uczogVXRpbHMuZm9ybWF0SXRlbXNPcHRpb25zKGxpbmUuaXRlbXMpIH0pKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJyb3dcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQodGV4dF9pbnB1dF8xLmRlZmF1bHQsIHsgbmFtZTogbWVtYmVyICsgXFxcIi5kaXNjb3VudFxcXCIsIGxhYmVsOiBXT1JESU5HUy5kaXNjb3VudCwgY29udGFpbmVyQ2xhc3M6IFxcXCJjb2wteHMtMTJcXFwiLCB0eXBlOiBcXFwibnVtYmVyXFxcIiB9KSkpO1xcbiAgICAgICAgICAgIH0pKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5zdWJtaXRGb3JtID0gZnVuY3Rpb24gKHZhbHVlcykge1xcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IF9fYXNzaWduKHt9LCB2YWx1ZXMsIHsgdG90YWw6IF90aGlzLnN0YXRlLnRvdGFsIH0pO1xcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcXG4gICAgICAgICAgICBfdGhpcy5wcm9wcy5zdWJtaXRGb3JtKHtcXG4gICAgICAgICAgICAgICAgcmZxOiBKU09OLnN0cmluZ2lmeSh2YWx1ZXMucmZxKSxcXG4gICAgICAgICAgICAgICAgbGluZXM6IEpTT04uc3RyaW5naWZ5KHZhbHVlcy5saW5lcylcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5zdGF0ZSA9IHsgdG90YWw6ICcnIH07XFxuICAgICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG4gICAgQ3VzdG9tRm9ybS5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIHByb3BzID0gdGhpcy5wcm9wcztcXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHRvZ2dsZV9wYW5lbF8xLmRlZmF1bHQsIHsgcGFuZWxUaXRsZTogXFxcIlByb3ZpZGUgUXVvdGVcXFwiLCBoaWRlVGl0bGU6IGZhbHNlLCBkZWZhdWx0T3BlbmVkOiB0cnVlLCB0b2dnbGFibGU6IGZhbHNlLCBjYW5jZWxCdG46IHsgbGFiZWw6IFdPUkRJTkdTLmNhbmNlbCwgYWN0aW9uOiBwcm9wcy5jbG9zZUZvcm0gfSwgc3VibWl0QnRuOiB7IGxhYmVsOiBXT1JESU5HUy5zdWJtaXQsIGFjdGlvbjogcHJvcHMuaGFuZGxlU3VibWl0KHRoaXMuc3VibWl0Rm9ybSkgfSB9LCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJoNFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidXBwZXIgYm90dG9tLW1hcmdpblxcXCIgfSwgV09SRElOR1MucmZxX2luZm8pLCB0aGlzLnJlbmRlclJGUURldGFpbHMoKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiaDRcXFwiLCB7IGNsYXNzTmFtZTogXFxcInVwcGVyIGJvdHRvbS1tYXJnaW5cXFwiIH0sIFdPUkRJTkdTLmxpc3RfaXRlbXMpLCBSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZEFycmF5LCB7IG5hbWU6IFxcXCJsaW5lc1xcXCIsIGNvbXBvbmVudDogdGhpcy5yZW5kZXJJdGVtcyB9KSk7XFxuICAgIH07XFxuICAgIHJldHVybiBDdXN0b21Gb3JtO1xcbn0oUmVhY3QuQ29tcG9uZW50KTtcXG5leHBvcnRzLmRlZmF1bHQgPSBmb3Jtcy5yZWR1eEZvcm0oeyBmb3JtOiAnY3VzdG9tX2Zvcm0nIH0pKEN1c3RvbUZvcm0pO1xcblxcbi8qKiovIH0pLFxcbi8qIDkxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yZWR1Y2VyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yZWR1eEZvcm1fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19GaWVsZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX0ZpZWxkc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX0ZpZWxkQXJyYXlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19mb3JtVmFsdWVTZWxlY3Rvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3ZhbHVlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX3NlbGVjdG9yc19nZXRGb3JtTmFtZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjM5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19zZWxlY3RvcnNfZ2V0Rm9ybVZhbHVlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX3NlbGVjdG9yc19nZXRGb3JtSW5pdGlhbFZhbHVlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNFcnJvcnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fc2VsZWN0b3JzX2dldEZvcm1Bc3luY0Vycm9yc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNXYXJuaW5nc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19zZWxlY3RvcnNfZ2V0Rm9ybVN1Ym1pdEVycm9yc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19zZWxlY3RvcnNfaXNEaXJ0eV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zZWxlY3RvcnNfaXNJbnZhbGlkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX3NlbGVjdG9yc19pc1ByaXN0aW5lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fc2VsZWN0b3JzX2lzVmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19zZWxlY3RvcnNfaXNTdWJtaXR0aW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfX3NlbGVjdG9yc19oYXNTdWJtaXRTdWNjZWVkZWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fc2VsZWN0b3JzX2hhc1N1Ym1pdEZhaWxlZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19Gb3JtX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX0Zvcm1TZWN0aW9uX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1N1Ym1pc3Npb25FcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX3Byb3BUeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X19hY3Rpb25zX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNl9fYWN0aW9uVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZUFsbCA9IGZ1bmN0aW9uIGNyZWF0ZUFsbChzdHJ1Y3R1cmUpIHtcXG4gIHJldHVybiBfZXh0ZW5kcyh7XFxuICAgIC8vIHNlcGFyYXRlIG91dCBmaWVsZCBhY3Rpb25zXFxuICAgIGFjdGlvblR5cGVzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X19hY3Rpb25UeXBlc19fXFxuICB9LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X19hY3Rpb25zX18sIHtcXG4gICAgRmllbGQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0ZpZWxkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGaWVsZHM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX0ZpZWxkc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgRmllbGRBcnJheTogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fRmllbGRBcnJheV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgRm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fRm9ybV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgRm9ybVNlY3Rpb246IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfX0Zvcm1TZWN0aW9uX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICBmb3JtVmFsdWVTZWxlY3RvcjogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fZm9ybVZhbHVlU2VsZWN0b3JfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1OYW1lczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fc2VsZWN0b3JzX2dldEZvcm1OYW1lc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVZhbHVlczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fc2VsZWN0b3JzX2dldEZvcm1WYWx1ZXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1Jbml0aWFsVmFsdWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19zZWxlY3RvcnNfZ2V0Rm9ybUluaXRpYWxWYWx1ZXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1TeW5jRXJyb3JzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fc2VsZWN0b3JzX2dldEZvcm1TeW5jRXJyb3JzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBnZXRGb3JtQXN5bmNFcnJvcnM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19zZWxlY3RvcnNfZ2V0Rm9ybUFzeW5jRXJyb3JzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBnZXRGb3JtU3luY1dhcm5pbmdzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fc2VsZWN0b3JzX2dldEZvcm1TeW5jV2FybmluZ3NfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1TdWJtaXRFcnJvcnM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19zZWxlY3RvcnNfZ2V0Rm9ybVN1Ym1pdEVycm9yc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgaXNEaXJ0eTogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX3NlbGVjdG9yc19pc0RpcnR5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc0ludmFsaWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zZWxlY3RvcnNfaXNJbnZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc1ByaXN0aW5lOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fc2VsZWN0b3JzX2lzUHJpc3RpbmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzVmFsaWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgaXNTdWJtaXR0aW5nOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fc2VsZWN0b3JzX2lzU3VibWl0dGluZ19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgaGFzU3VibWl0U3VjY2VlZGVkOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fc2VsZWN0b3JzX2hhc1N1Ym1pdFN1Y2NlZWRlZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgaGFzU3VibWl0RmFpbGVkOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fc2VsZWN0b3JzX2hhc1N1Ym1pdEZhaWxlZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgcHJvcFR5cGVzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI0X19wcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgIHJlZHV4Rm9ybTogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcmVkdXhGb3JtX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICByZWR1Y2VyOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yZWR1Y2VyX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBTdWJtaXNzaW9uRXJyb3I6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfX1N1Ym1pc3Npb25FcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgdmFsdWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X192YWx1ZXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSlcXG4gIH0pO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQWxsKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA5MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlbGV0ZUluV2l0aENsZWFuVXBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTMpO1xcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcbnZhciBjcmVhdGVSZWR1Y2VyID0gZnVuY3Rpb24gY3JlYXRlUmVkdWNlcihzdHJ1Y3R1cmUpIHtcXG4gIHZhciBfYmVoYXZpb3JzO1xcblxcbiAgdmFyIGRlZXBFcXVhbCA9IHN0cnVjdHVyZS5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBzdHJ1Y3R1cmUuZW1wdHksXFxuICAgICAgZ2V0SW4gPSBzdHJ1Y3R1cmUuZ2V0SW4sXFxuICAgICAgc2V0SW4gPSBzdHJ1Y3R1cmUuc2V0SW4sXFxuICAgICAgZGVsZXRlSW4gPSBzdHJ1Y3R1cmUuZGVsZXRlSW4sXFxuICAgICAgZnJvbUpTID0gc3RydWN0dXJlLmZyb21KUyxcXG4gICAgICBrZXlzID0gc3RydWN0dXJlLmtleXMsXFxuICAgICAgc2l6ZSA9IHN0cnVjdHVyZS5zaXplLFxcbiAgICAgIHNwbGljZSA9IHN0cnVjdHVyZS5zcGxpY2U7XFxuXFxuICB2YXIgZGVsZXRlSW5XaXRoQ2xlYW5VcCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlbGV0ZUluV2l0aENsZWFuVXBfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSk7XFxuICB2YXIgZG9TcGxpY2UgPSBmdW5jdGlvbiBkb1NwbGljZShzdGF0ZSwga2V5LCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUsIGZvcmNlKSB7XFxuICAgIHZhciBleGlzdGluZyA9IGdldEluKHN0YXRlLCBrZXkgKyAnLicgKyBmaWVsZCk7XFxuICAgIHJldHVybiBleGlzdGluZyB8fCBmb3JjZSA/IHNldEluKHN0YXRlLCBrZXkgKyAnLicgKyBmaWVsZCwgc3BsaWNlKGV4aXN0aW5nLCBpbmRleCwgcmVtb3ZlTnVtLCB2YWx1ZSkpIDogc3RhdGU7XFxuICB9O1xcbiAgdmFyIHJvb3RLZXlzID0gWyd2YWx1ZXMnLCAnZmllbGRzJywgJ3N1Ym1pdEVycm9ycycsICdhc3luY0Vycm9ycyddO1xcbiAgdmFyIGFycmF5U3BsaWNlID0gZnVuY3Rpb24gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB2YWx1ZSkge1xcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHZhciBub25WYWx1ZXNWYWx1ZSA9IHZhbHVlICE9IG51bGwgPyBlbXB0eSA6IHVuZGVmaW5lZDtcXG4gICAgcmVzdWx0ID0gZG9TcGxpY2UocmVzdWx0LCAndmFsdWVzJywgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlLCB0cnVlKTtcXG4gICAgcmVzdWx0ID0gZG9TcGxpY2UocmVzdWx0LCAnZmllbGRzJywgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIG5vblZhbHVlc1ZhbHVlKTtcXG4gICAgcmVzdWx0ID0gZG9TcGxpY2UocmVzdWx0LCAnc3luY0Vycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdzdWJtaXRFcnJvcnMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgdW5kZWZpbmVkKTtcXG4gICAgcmVzdWx0ID0gZG9TcGxpY2UocmVzdWx0LCAnYXN5bmNFcnJvcnMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgdW5kZWZpbmVkKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxuXFxuICB2YXIgYmVoYXZpb3JzID0gKF9iZWhhdmlvcnMgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfSU5TRVJUXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZikge1xcbiAgICB2YXIgX3JlZiRtZXRhID0gX3JlZi5tZXRhLFxcbiAgICAgICAgZmllbGQgPSBfcmVmJG1ldGEuZmllbGQsXFxuICAgICAgICBpbmRleCA9IF9yZWYkbWV0YS5pbmRleCxcXG4gICAgICAgIHBheWxvYWQgPSBfcmVmLnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCAwLCBwYXlsb2FkKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9NT1ZFXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIpIHtcXG4gICAgdmFyIF9yZWYyJG1ldGEgPSBfcmVmMi5tZXRhLFxcbiAgICAgICAgZmllbGQgPSBfcmVmMiRtZXRhLmZpZWxkLFxcbiAgICAgICAgZnJvbSA9IF9yZWYyJG1ldGEuZnJvbSxcXG4gICAgICAgIHRvID0gX3JlZjIkbWV0YS50bztcXG5cXG4gICAgdmFyIGFycmF5ID0gZ2V0SW4oc3RhdGUsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gc2l6ZShhcnJheSkgOiAwO1xcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIGlmIChsZW5ndGgpIHtcXG4gICAgICByb290S2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgICAgIHZhciBwYXRoID0ga2V5ICsgJy4nICsgZmllbGQ7XFxuICAgICAgICBpZiAoZ2V0SW4ocmVzdWx0LCBwYXRoKSkge1xcbiAgICAgICAgICB2YXIgdmFsdWUgPSBnZXRJbihyZXN1bHQsIHBhdGggKyAnWycgKyBmcm9tICsgJ10nKTtcXG4gICAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBwYXRoLCBzcGxpY2UoZ2V0SW4ocmVzdWx0LCBwYXRoKSwgZnJvbSwgMSkpOyAvLyByZW1vdmVcXG4gICAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBwYXRoLCBzcGxpY2UoZ2V0SW4ocmVzdWx0LCBwYXRoKSwgdG8sIDAsIHZhbHVlKSk7IC8vIGluc2VydFxcbiAgICAgICAgfVxcbiAgICAgIH0pO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUE9QXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjMpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjMubWV0YS5maWVsZDtcXG5cXG4gICAgdmFyIGFycmF5ID0gZ2V0SW4oc3RhdGUsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gc2l6ZShhcnJheSkgOiAwO1xcbiAgICByZXR1cm4gbGVuZ3RoID8gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCBsZW5ndGggLSAxLCAxKSA6IHN0YXRlO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1BVU0hcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmNCkge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmNC5tZXRhLmZpZWxkLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWY0LnBheWxvYWQ7XFxuXFxuICAgIHZhciBhcnJheSA9IGdldEluKHN0YXRlLCAndmFsdWVzLicgKyBmaWVsZCk7XFxuICAgIHZhciBsZW5ndGggPSBhcnJheSA/IHNpemUoYXJyYXkpIDogMDtcXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgbGVuZ3RoLCAwLCBwYXlsb2FkKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9SRU1PVkVcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmNSkge1xcbiAgICB2YXIgX3JlZjUkbWV0YSA9IF9yZWY1Lm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWY1JG1ldGEuZmllbGQsXFxuICAgICAgICBpbmRleCA9IF9yZWY1JG1ldGEuaW5kZXg7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCAxKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9SRU1PVkVfQUxMXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjYpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjYubWV0YS5maWVsZDtcXG5cXG4gICAgdmFyIGFycmF5ID0gZ2V0SW4oc3RhdGUsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gc2l6ZShhcnJheSkgOiAwO1xcbiAgICByZXR1cm4gbGVuZ3RoID8gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCAwLCBsZW5ndGgpIDogc3RhdGU7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU0hJRlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmNykge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmNy5tZXRhLmZpZWxkO1xcblxcbiAgICByZXR1cm4gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCAwLCAxKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9TUExJQ0VcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmOCkge1xcbiAgICB2YXIgX3JlZjgkbWV0YSA9IF9yZWY4Lm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWY4JG1ldGEuZmllbGQsXFxuICAgICAgICBpbmRleCA9IF9yZWY4JG1ldGEuaW5kZXgsXFxuICAgICAgICByZW1vdmVOdW0gPSBfcmVmOCRtZXRhLnJlbW92ZU51bSxcXG4gICAgICAgIHBheWxvYWQgPSBfcmVmOC5wYXlsb2FkO1xcblxcbiAgICByZXR1cm4gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCBwYXlsb2FkKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9TV0FQXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjkpIHtcXG4gICAgdmFyIF9yZWY5JG1ldGEgPSBfcmVmOS5tZXRhLFxcbiAgICAgICAgZmllbGQgPSBfcmVmOSRtZXRhLmZpZWxkLFxcbiAgICAgICAgaW5kZXhBID0gX3JlZjkkbWV0YS5pbmRleEEsXFxuICAgICAgICBpbmRleEIgPSBfcmVmOSRtZXRhLmluZGV4QjtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICByb290S2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgICB2YXIgdmFsdWVBID0gZ2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QSArICddJyk7XFxuICAgICAgdmFyIHZhbHVlQiA9IGdldEluKHJlc3VsdCwga2V5ICsgJy4nICsgZmllbGQgKyAnWycgKyBpbmRleEIgKyAnXScpO1xcbiAgICAgIGlmICh2YWx1ZUEgIT09IHVuZGVmaW5lZCB8fCB2YWx1ZUIgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QSArICddJywgdmFsdWVCKTtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwga2V5ICsgJy4nICsgZmllbGQgKyAnWycgKyBpbmRleEIgKyAnXScsIHZhbHVlQSk7XFxuICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9VTlNISUZUXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjEwKSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWYxMC5tZXRhLmZpZWxkLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYxMC5wYXlsb2FkO1xcblxcbiAgICByZXR1cm4gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCAwLCAwLCBwYXlsb2FkKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBVVRPRklMTFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxMSkge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmMTEubWV0YS5maWVsZCxcXG4gICAgICAgIHBheWxvYWQgPSBfcmVmMTEucGF5bG9hZDtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ2FzeW5jRXJyb3JzLicgKyBmaWVsZCk7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnc3VibWl0RXJyb3JzLicgKyBmaWVsZCk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmF1dG9maWxsZWQnLCB0cnVlKTtcXG4gICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAndmFsdWVzLicgKyBmaWVsZCwgcGF5bG9hZCk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQkxVUlxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxMikge1xcbiAgICB2YXIgX3JlZjEyJG1ldGEgPSBfcmVmMTIubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjEyJG1ldGEuZmllbGQsXFxuICAgICAgICB0b3VjaCA9IF9yZWYxMiRtZXRhLnRvdWNoLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYxMi5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHZhciBpbml0aWFsID0gZ2V0SW4ocmVzdWx0LCAnaW5pdGlhbC4nICsgZmllbGQpO1xcbiAgICBpZiAoaW5pdGlhbCA9PT0gdW5kZWZpbmVkICYmIHBheWxvYWQgPT09ICcnKSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgfSBlbHNlIGlmIChwYXlsb2FkICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICd2YWx1ZXMuJyArIGZpZWxkLCBwYXlsb2FkKTtcXG4gICAgfVxcbiAgICBpZiAoZmllbGQgPT09IGdldEluKHJlc3VsdCwgJ2FjdGl2ZScpKSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnYWN0aXZlJyk7XFxuICAgIH1cXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcuYWN0aXZlJyk7XFxuICAgIGlmICh0b3VjaCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdhbnlUb3VjaGVkJywgdHJ1ZSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJDSEFOR0VcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTMpIHtcXG4gICAgdmFyIF9yZWYxMyRtZXRhID0gX3JlZjEzLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYxMyRtZXRhLmZpZWxkLFxcbiAgICAgICAgdG91Y2ggPSBfcmVmMTMkbWV0YS50b3VjaCxcXG4gICAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgPSBfcmVmMTMkbWV0YS5wZXJzaXN0ZW50U3VibWl0RXJyb3JzLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYxMy5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHZhciBpbml0aWFsID0gZ2V0SW4ocmVzdWx0LCAnaW5pdGlhbC4nICsgZmllbGQpO1xcbiAgICBpZiAoaW5pdGlhbCA9PT0gdW5kZWZpbmVkICYmIHBheWxvYWQgPT09ICcnKSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgfSBlbHNlIGlmIChwYXlsb2FkICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICd2YWx1ZXMuJyArIGZpZWxkLCBwYXlsb2FkKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ2FzeW5jRXJyb3JzLicgKyBmaWVsZCk7XFxuICAgIGlmICghcGVyc2lzdGVudFN1Ym1pdEVycm9ycykge1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnc3VibWl0RXJyb3JzLicgKyBmaWVsZCk7XFxuICAgIH1cXG4gICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy5hdXRvZmlsbGVkJyk7XFxuICAgIGlmICh0b3VjaCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdhbnlUb3VjaGVkJywgdHJ1ZSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJDTEVBUl9TVUJNSVRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHJldHVybiBkZWxldGVJbihzdGF0ZSwgJ3RyaWdnZXJTdWJtaXQnKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJDTEVBUl9TVUJNSVRfRVJST1JTXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICByZXR1cm4gZGVsZXRlSW5XaXRoQ2xlYW5VcChzdGF0ZSwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX0FTWU5DX0VSUk9SXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjE0KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWYxNC5tZXRhLmZpZWxkO1xcblxcbiAgICByZXR1cm4gZGVsZXRlSW4oc3RhdGUsICdhc3luY0Vycm9ycy4nICsgZmllbGQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkZPQ1VTXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjE1KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWYxNS5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHZhciBwcmV2aW91c2x5QWN0aXZlID0gZ2V0SW4oc3RhdGUsICdhY3RpdmUnKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZmllbGRzLicgKyBwcmV2aW91c2x5QWN0aXZlICsgJy5hY3RpdmUnKTtcXG4gICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudmlzaXRlZCcsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy5hY3RpdmUnLCB0cnVlKTtcXG4gICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnYWN0aXZlJywgZmllbGQpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIklOSVRJQUxJWkVcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTYpIHtcXG4gICAgdmFyIHBheWxvYWQgPSBfcmVmMTYucGF5bG9hZCxcXG4gICAgICAgIF9yZWYxNiRtZXRhID0gX3JlZjE2Lm1ldGEsXFxuICAgICAgICBrZWVwRGlydHkgPSBfcmVmMTYkbWV0YS5rZWVwRGlydHksXFxuICAgICAgICBrZWVwU3VibWl0U3VjY2VlZGVkID0gX3JlZjE2JG1ldGEua2VlcFN1Ym1pdFN1Y2NlZWRlZDtcXG5cXG4gICAgdmFyIG1hcERhdGEgPSBmcm9tSlMocGF5bG9hZCk7XFxuICAgIHZhciByZXN1bHQgPSBlbXB0eTsgLy8gY2xlYW4gYWxsIGZpZWxkIHN0YXRlXFxuXFxuICAgIC8vIHBlcnNpc3Qgb2xkIHdhcm5pbmdzLCB0aGV5IHdpbGwgZ2V0IHJlY2FsY3VsYXRlZCBpZiB0aGUgbmV3IGZvcm0gdmFsdWVzIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIHZhbHVlc1xcbiAgICB2YXIgd2FybmluZyA9IGdldEluKHN0YXRlLCAnd2FybmluZycpO1xcbiAgICBpZiAod2FybmluZykge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3dhcm5pbmcnLCB3YXJuaW5nKTtcXG4gICAgfVxcbiAgICB2YXIgc3luY1dhcm5pbmdzID0gZ2V0SW4oc3RhdGUsICdzeW5jV2FybmluZ3MnKTtcXG4gICAgaWYgKHN5bmNXYXJuaW5ncykge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N5bmNXYXJuaW5ncycsIHN5bmNXYXJuaW5ncyk7XFxuICAgIH1cXG5cXG4gICAgLy8gcGVyc2lzdCBvbGQgZXJyb3JzLCB0aGV5IHdpbGwgZ2V0IHJlY2FsY3VsYXRlZCBpZiB0aGUgbmV3IGZvcm0gdmFsdWVzIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkIHZhbHVlc1xcbiAgICB2YXIgZXJyb3IgPSBnZXRJbihzdGF0ZSwgJ2Vycm9yJyk7XFxuICAgIGlmIChlcnJvcikge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2Vycm9yJywgZXJyb3IpO1xcbiAgICB9XFxuICAgIHZhciBzeW5jRXJyb3JzID0gZ2V0SW4oc3RhdGUsICdzeW5jRXJyb3JzJyk7XFxuICAgIGlmIChzeW5jRXJyb3JzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY0Vycm9ycycsIHN5bmNFcnJvcnMpO1xcbiAgICB9XFxuXFxuICAgIHZhciByZWdpc3RlcmVkRmllbGRzID0gZ2V0SW4oc3RhdGUsICdyZWdpc3RlcmVkRmllbGRzJyk7XFxuICAgIGlmIChyZWdpc3RlcmVkRmllbGRzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAncmVnaXN0ZXJlZEZpZWxkcycsIHJlZ2lzdGVyZWRGaWVsZHMpO1xcbiAgICB9XFxuICAgIHZhciBuZXdWYWx1ZXMgPSBtYXBEYXRhO1xcbiAgICBpZiAoa2VlcERpcnR5ICYmIHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICAvL1xcbiAgICAgIC8vIEtlZXAgdGhlIHZhbHVlIG9mIGRpcnR5IGZpZWxkcyB3aGlsZSB1cGRhdGluZyB0aGUgdmFsdWUgb2ZcXG4gICAgICAvLyBwcmlzdGluZSBmaWVsZHMuIFRoaXMgd2F5LCBhcHBzIGNhbiByZWluaXRpYWxpemUgZm9ybXMgd2hpbGVcXG4gICAgICAvLyBhdm9pZGluZyBzdG9tcGluZyBvbiB1c2VyIGVkaXRzLlxcbiAgICAgIC8vXFxuICAgICAgLy8gTm90ZSAxOiBUaGUgaW5pdGlhbGl6ZSBhY3Rpb24gcmVwbGFjZXMgYWxsIGluaXRpYWwgdmFsdWVzXFxuICAgICAgLy8gcmVnYXJkbGVzcyBvZiBrZWVwRGlydHkuXFxuICAgICAgLy9cXG4gICAgICAvLyBOb3RlIDI6IFdoZW4gYSBmaWVsZCBpcyBkaXJ0eSwga2VlcERpcnR5IGlzIGVuYWJsZWQsIGFuZCB0aGUgZmllbGRcXG4gICAgICAvLyB2YWx1ZSBpcyB0aGUgc2FtZSBhcyB0aGUgbmV3IGluaXRpYWwgdmFsdWUgZm9yIHRoZSBmaWVsZCwgdGhlXFxuICAgICAgLy8gaW5pdGlhbGl6ZSBhY3Rpb24gY2F1c2VzIHRoZSBmaWVsZCB0byBiZWNvbWUgcHJpc3RpbmUuIFRoYXQgZWZmZWN0XFxuICAgICAgLy8gaXMgd2hhdCB3ZSB3YW50LlxcbiAgICAgIC8vXFxuICAgICAgdmFyIHByZXZpb3VzVmFsdWVzID0gZ2V0SW4oc3RhdGUsICd2YWx1ZXMnKTtcXG4gICAgICB2YXIgcHJldmlvdXNJbml0aWFsVmFsdWVzID0gZ2V0SW4oc3RhdGUsICdpbml0aWFsJyk7XFxuICAgICAga2V5cyhyZWdpc3RlcmVkRmllbGRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICB2YXIgcHJldmlvdXNJbml0aWFsVmFsdWUgPSBnZXRJbihwcmV2aW91c0luaXRpYWxWYWx1ZXMsIG5hbWUpO1xcbiAgICAgICAgdmFyIHByZXZpb3VzVmFsdWUgPSBnZXRJbihwcmV2aW91c1ZhbHVlcywgbmFtZSk7XFxuICAgICAgICBpZiAoIWRlZXBFcXVhbChwcmV2aW91c1ZhbHVlLCBwcmV2aW91c0luaXRpYWxWYWx1ZSkpIHtcXG4gICAgICAgICAgLy8gVGhpcyBmaWVsZCB3YXMgZGlydHkuIFJlc3RvcmUgdGhlIGRpcnR5IHZhbHVlLlxcbiAgICAgICAgICBuZXdWYWx1ZXMgPSBzZXRJbihuZXdWYWx1ZXMsIG5hbWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcbiAgICAgIH0pO1xcbiAgICB9XFxuICAgIGlmIChrZWVwU3VibWl0U3VjY2VlZGVkICYmIGdldEluKHN0YXRlLCAnc3VibWl0U3VjY2VlZGVkJykpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRTdWNjZWVkZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICd2YWx1ZXMnLCBuZXdWYWx1ZXMpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdpbml0aWFsJywgbWFwRGF0YSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVHSVNURVJfRklFTERcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTcpIHtcXG4gICAgdmFyIF9yZWYxNyRwYXlsb2FkID0gX3JlZjE3LnBheWxvYWQsXFxuICAgICAgICBuYW1lID0gX3JlZjE3JHBheWxvYWQubmFtZSxcXG4gICAgICAgIHR5cGUgPSBfcmVmMTckcGF5bG9hZC50eXBlO1xcblxcbiAgICB2YXIga2V5ID0gJ3JlZ2lzdGVyZWRGaWVsZHNbXFxcXCcnICsgbmFtZSArICdcXFxcJ10nO1xcbiAgICB2YXIgZmllbGQgPSBnZXRJbihzdGF0ZSwga2V5KTtcXG4gICAgaWYgKGZpZWxkKSB7XFxuICAgICAgdmFyIGNvdW50ID0gZ2V0SW4oZmllbGQsICdjb3VudCcpICsgMTtcXG4gICAgICBmaWVsZCA9IHNldEluKGZpZWxkLCAnY291bnQnLCBjb3VudCk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgZmllbGQgPSBmcm9tSlMoeyBuYW1lOiBuYW1lLCB0eXBlOiB0eXBlLCBjb3VudDogMSB9KTtcXG4gICAgfVxcbiAgICByZXR1cm4gc2V0SW4oc3RhdGUsIGtleSwgZmllbGQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlJFU0VUXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICB2YXIgcmVzdWx0ID0gZW1wdHk7XFxuICAgIHZhciByZWdpc3RlcmVkRmllbGRzID0gZ2V0SW4oc3RhdGUsICdyZWdpc3RlcmVkRmllbGRzJyk7XFxuICAgIGlmIChyZWdpc3RlcmVkRmllbGRzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAncmVnaXN0ZXJlZEZpZWxkcycsIHJlZ2lzdGVyZWRGaWVsZHMpO1xcbiAgICB9XFxuICAgIHZhciB2YWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ2luaXRpYWwnKTtcXG4gICAgaWYgKHZhbHVlcykge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcycsIHZhbHVlcyk7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnaW5pdGlhbCcsIHZhbHVlcyk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVUJNSVRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwgJ3RyaWdnZXJTdWJtaXQnLCB0cnVlKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVEFSVF9BU1lOQ19WQUxJREFUSU9OXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjE4KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWYxOC5tZXRhLmZpZWxkO1xcblxcbiAgICByZXR1cm4gc2V0SW4oc3RhdGUsICdhc3luY1ZhbGlkYXRpbmcnLCBmaWVsZCB8fCB0cnVlKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVEFSVF9TVUJNSVRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwgJ3N1Ym1pdHRpbmcnLCB0cnVlKTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVE9QX0FTWU5DX1ZBTElEQVRJT05cXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTkpIHtcXG4gICAgdmFyIHBheWxvYWQgPSBfcmVmMTkucGF5bG9hZDtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdhc3luY1ZhbGlkYXRpbmcnKTtcXG4gICAgaWYgKHBheWxvYWQgJiYgT2JqZWN0LmtleXMocGF5bG9hZCkubGVuZ3RoKSB7XFxuICAgICAgdmFyIF9lcnJvciA9IHBheWxvYWQuX2Vycm9yLFxcbiAgICAgICAgICBmaWVsZEVycm9ycyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwYXlsb2FkLCBbJ19lcnJvciddKTtcXG5cXG4gICAgICBpZiAoX2Vycm9yKSB7XFxuICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdlcnJvcicsIF9lcnJvcik7XFxuICAgICAgfVxcbiAgICAgIGlmIChPYmplY3Qua2V5cyhmaWVsZEVycm9ycykubGVuZ3RoKSB7XFxuICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdhc3luY0Vycm9ycycsIGZyb21KUyhmaWVsZEVycm9ycykpO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdhc3luY0Vycm9ycycpO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJyk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVE9QX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYyMCkge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYyMC5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0RmFpbGVkJyk7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcpO1xcbiAgICBpZiAocGF5bG9hZCAmJiBPYmplY3Qua2V5cyhwYXlsb2FkKS5sZW5ndGgpIHtcXG4gICAgICB2YXIgX2Vycm9yID0gcGF5bG9hZC5fZXJyb3IsXFxuICAgICAgICAgIGZpZWxkRXJyb3JzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHBheWxvYWQsIFsnX2Vycm9yJ10pO1xcblxcbiAgICAgIGlmIChfZXJyb3IpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2Vycm9yJywgX2Vycm9yKTtcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZXJyb3InKTtcXG4gICAgICB9XFxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpZWxkRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycsIGZyb21KUyhmaWVsZEVycm9ycykpO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzdWJtaXRFcnJvcnMnKTtcXG4gICAgICB9XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3VibWl0RmFpbGVkJywgdHJ1ZSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJywgdHJ1ZSk7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZXJyb3InKTtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzdWJtaXRFcnJvcnMnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNFVF9TVUJNSVRfRkFJTEVEXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIxKSB7XFxuICAgIHZhciBmaWVsZHMgPSBfcmVmMjEubWV0YS5maWVsZHM7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3VibWl0RmFpbGVkJywgdHJ1ZSk7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzdWJtaXR0aW5nJyk7XFxuICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xcbiAgICAgIHJldHVybiByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy50b3VjaGVkJywgdHJ1ZSk7XFxuICAgIH0pO1xcbiAgICBpZiAoZmllbGRzLmxlbmd0aCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNFVF9TVUJNSVRfU1VDQ0VFREVEXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEZhaWxlZCcpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRTdWNjZWVkZWQnLCB0cnVlKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJUT1VDSFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYyMikge1xcbiAgICB2YXIgZmllbGRzID0gX3JlZjIyLm1ldGEuZmllbGRzO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIGZpZWxkcy5mb3JFYWNoKGZ1bmN0aW9uIChmaWVsZCkge1xcbiAgICAgIHJldHVybiByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy50b3VjaGVkJywgdHJ1ZSk7XFxuICAgIH0pO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdhbnlUb3VjaGVkJywgdHJ1ZSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVU5SRUdJU1RFUl9GSUVMRFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYyMykge1xcbiAgICB2YXIgX3JlZjIzJHBheWxvYWQgPSBfcmVmMjMucGF5bG9hZCxcXG4gICAgICAgIG5hbWUgPSBfcmVmMjMkcGF5bG9hZC5uYW1lLFxcbiAgICAgICAgZGVzdHJveU9uVW5tb3VudCA9IF9yZWYyMyRwYXlsb2FkLmRlc3Ryb3lPblVubW91bnQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGtleSA9ICdyZWdpc3RlcmVkRmllbGRzW1xcXFwnJyArIG5hbWUgKyAnXFxcXCddJztcXG4gICAgdmFyIGZpZWxkID0gZ2V0SW4ocmVzdWx0LCBrZXkpO1xcbiAgICBpZiAoIWZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdDtcXG4gICAgfVxcblxcbiAgICB2YXIgY291bnQgPSBnZXRJbihmaWVsZCwgJ2NvdW50JykgLSAxO1xcbiAgICBpZiAoY291bnQgPD0gMCAmJiBkZXN0cm95T25Vbm1vdW50KSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCBrZXkpO1xcbiAgICAgIGlmIChkZWVwRXF1YWwoZ2V0SW4ocmVzdWx0LCAncmVnaXN0ZXJlZEZpZWxkcycpLCBlbXB0eSkpIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgZmllbGQgPSBzZXRJbihmaWVsZCwgJ2NvdW50JywgY291bnQpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwga2V5LCBmaWVsZCk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlRPVUNIXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjI0KSB7XFxuICAgIHZhciBmaWVsZHMgPSBfcmVmMjQubWV0YS5maWVsZHM7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnKTtcXG4gICAgfSk7XFxuICAgIHZhciBhbnlUb3VjaGVkID0ga2V5cyhnZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJykpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHJldHVybiBnZXRJbihyZXN1bHQsICdmaWVsZHMuJyArIGtleSArICcudG91Y2hlZCcpO1xcbiAgICB9KTtcXG4gICAgcmVzdWx0ID0gYW55VG91Y2hlZCA/IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKSA6IGRlbGV0ZUluKHJlc3VsdCwgJ2FueVRvdWNoZWQnKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVUERBVEVfU1lOQ19FUlJPUlNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjUpIHtcXG4gICAgdmFyIF9yZWYyNSRwYXlsb2FkID0gX3JlZjI1LnBheWxvYWQsXFxuICAgICAgICBzeW5jRXJyb3JzID0gX3JlZjI1JHBheWxvYWQuc3luY0Vycm9ycyxcXG4gICAgICAgIGVycm9yID0gX3JlZjI1JHBheWxvYWQuZXJyb3I7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBlcnJvcik7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY0Vycm9yJywgdHJ1ZSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZXJyb3InKTtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzeW5jRXJyb3InKTtcXG4gICAgfVxcbiAgICBpZiAoT2JqZWN0LmtleXMoc3luY0Vycm9ycykubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY0Vycm9ycycsIHN5bmNFcnJvcnMpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N5bmNFcnJvcnMnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX1dBUk5JTkdTXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjI2KSB7XFxuICAgIHZhciBfcmVmMjYkcGF5bG9hZCA9IF9yZWYyNi5wYXlsb2FkLFxcbiAgICAgICAgc3luY1dhcm5pbmdzID0gX3JlZjI2JHBheWxvYWQuc3luY1dhcm5pbmdzLFxcbiAgICAgICAgd2FybmluZyA9IF9yZWYyNiRwYXlsb2FkLndhcm5pbmc7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgaWYgKHdhcm5pbmcpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICd3YXJuaW5nJywgd2FybmluZyk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnd2FybmluZycpO1xcbiAgICB9XFxuICAgIGlmIChPYmplY3Qua2V5cyhzeW5jV2FybmluZ3MpLmxlbmd0aCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N5bmNXYXJuaW5ncycsIHN5bmNXYXJuaW5ncyk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJyk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfYmVoYXZpb3JzKTtcXG5cXG4gIHZhciByZWR1Y2VyID0gZnVuY3Rpb24gcmVkdWNlcigpIHtcXG4gICAgdmFyIHN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBlbXB0eTtcXG4gICAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50c1sxXTtcXG5cXG4gICAgdmFyIGJlaGF2aW9yID0gYmVoYXZpb3JzW2FjdGlvbi50eXBlXTtcXG4gICAgcmV0dXJuIGJlaGF2aW9yID8gYmVoYXZpb3Ioc3RhdGUsIGFjdGlvbikgOiBzdGF0ZTtcXG4gIH07XFxuXFxuICB2YXIgYnlGb3JtID0gZnVuY3Rpb24gYnlGb3JtKHJlZHVjZXIpIHtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVtcHR5O1xcbiAgICAgIHZhciBhY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcblxcbiAgICAgIHZhciBmb3JtID0gYWN0aW9uICYmIGFjdGlvbi5tZXRhICYmIGFjdGlvbi5tZXRhLmZvcm07XFxuICAgICAgaWYgKCFmb3JtKSB7XFxuICAgICAgICByZXR1cm4gc3RhdGU7XFxuICAgICAgfVxcbiAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJERVNUUk9ZXFxcIl0pIHtcXG4gICAgICAgIHJldHVybiBhY3Rpb24ubWV0YS5mb3JtLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBmb3JtKSB7XFxuICAgICAgICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgZm9ybSk7XFxuICAgICAgICB9LCBzdGF0ZSk7XFxuICAgICAgfVxcbiAgICAgIHZhciBmb3JtU3RhdGUgPSBnZXRJbihzdGF0ZSwgZm9ybSk7XFxuICAgICAgdmFyIHJlc3VsdCA9IHJlZHVjZXIoZm9ybVN0YXRlLCBhY3Rpb24pO1xcbiAgICAgIHJldHVybiByZXN1bHQgPT09IGZvcm1TdGF0ZSA/IHN0YXRlIDogc2V0SW4oc3RhdGUsIGZvcm0sIHJlc3VsdCk7XFxuICAgIH07XFxuICB9O1xcblxcbiAgLyoqXFxuICAgKiBBZGRzIGFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSB0byB0aGUgcmVkdWNlclxcbiAgICovXFxuICBmdW5jdGlvbiBkZWNvcmF0ZSh0YXJnZXQpIHtcXG4gICAgdGFyZ2V0LnBsdWdpbiA9IGZ1bmN0aW9uIHBsdWdpbihyZWR1Y2Vycykge1xcbiAgICAgIHZhciBfdGhpcyA9IHRoaXM7XFxuXFxuICAgICAgLy8gdXNlICdmdW5jdGlvbicga2V5d29yZCB0byBlbmFibGUgJ3RoaXMnXFxuICAgICAgcmV0dXJuIGRlY29yYXRlKGZ1bmN0aW9uICgpIHtcXG4gICAgICAgIHZhciBzdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZW1wdHk7XFxuICAgICAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhyZWR1Y2VycykucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwga2V5KSB7XFxuICAgICAgICAgIHZhciBwcmV2aW91c1N0YXRlID0gZ2V0SW4oYWNjdW11bGF0b3IsIGtleSk7XFxuICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSByZWR1Y2Vyc1trZXldKHByZXZpb3VzU3RhdGUsIGFjdGlvbiwgZ2V0SW4oc3RhdGUsIGtleSkpO1xcbiAgICAgICAgICByZXR1cm4gbmV4dFN0YXRlID09PSBwcmV2aW91c1N0YXRlID8gYWNjdW11bGF0b3IgOiBzZXRJbihhY2N1bXVsYXRvciwga2V5LCBuZXh0U3RhdGUpO1xcbiAgICAgICAgfSwgX3RoaXMoc3RhdGUsIGFjdGlvbikpO1xcbiAgICAgIH0pO1xcbiAgICB9O1xcblxcbiAgICByZXR1cm4gdGFyZ2V0O1xcbiAgfVxcblxcbiAgcmV0dXJuIGRlY29yYXRlKGJ5Rm9ybShyZWR1Y2VyKSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVSZWR1Y2VyKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA5MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG5cXG52YXIgY3JlYXRlRGVsZXRlSW5XaXRoQ2xlYW5VcCA9IGZ1bmN0aW9uIGNyZWF0ZURlbGV0ZUluV2l0aENsZWFuVXAoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGVtcHR5ID0gX3JlZi5lbXB0eSxcXG4gICAgICBnZXRJbiA9IF9yZWYuZ2V0SW4sXFxuICAgICAgZGVsZXRlSW4gPSBfcmVmLmRlbGV0ZUluLFxcbiAgICAgIHNldEluID0gX3JlZi5zZXRJbjtcXG5cXG5cXG4gIHZhciBkZWxldGVJbldpdGhDbGVhblVwID0gZnVuY3Rpb24gZGVsZXRlSW5XaXRoQ2xlYW5VcChzdGF0ZSwgcGF0aCkge1xcbiAgICBpZiAocGF0aFtwYXRoLmxlbmd0aCAtIDFdID09PSAnXScpIHtcXG4gICAgICAvLyBhcnJheSBwYXRoXFxuICAgICAgdmFyIHBhdGhUb2tlbnMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpO1xcbiAgICAgIHBhdGhUb2tlbnMucG9wKCk7XFxuICAgICAgdmFyIHBhcmVudCA9IGdldEluKHN0YXRlLCBwYXRoVG9rZW5zLmpvaW4oJy4nKSk7XFxuICAgICAgcmV0dXJuIHBhcmVudCA/IHNldEluKHN0YXRlLCBwYXRoLCB1bmRlZmluZWQpIDogc3RhdGU7XFxuICAgIH1cXG4gICAgdmFyIHJlc3VsdCA9IGRlbGV0ZUluKHN0YXRlLCBwYXRoKTtcXG4gICAgdmFyIGRvdEluZGV4ID0gcGF0aC5sYXN0SW5kZXhPZignLicpO1xcbiAgICBpZiAoZG90SW5kZXggPiAwKSB7XFxuICAgICAgdmFyIHBhcmVudFBhdGggPSBwYXRoLnN1YnN0cmluZygwLCBkb3RJbmRleCk7XFxuICAgICAgaWYgKHBhcmVudFBhdGhbcGFyZW50UGF0aC5sZW5ndGggLSAxXSAhPT0gJ10nKSB7XFxuICAgICAgICB2YXIgX3BhcmVudCA9IGdldEluKHJlc3VsdCwgcGFyZW50UGF0aCk7XFxuICAgICAgICBpZiAoZGVlcEVxdWFsKF9wYXJlbnQsIGVtcHR5KSkge1xcbiAgICAgICAgICByZXR1cm4gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsIHBhcmVudFBhdGgpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG5cXG4gIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRGVsZXRlSW5XaXRoQ2xlYW5VcCk7XFxuXFxuLyoqKi8gfSksXFxuLyogOTQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogVXNlZCB0byByZXNvbHZlIHRoZVxcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxcbiAqIG9mIHZhbHVlcy5cXG4gKi9cXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHJhdyBgdG9TdHJpbmdUYWdgLlxcbiAqL1xcbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xcbiAgdmFyIGlzT3duID0gaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgc3ltVG9TdHJpbmdUYWcpLFxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcXG5cXG4gIHRyeSB7XFxuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcXG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcXG4gIH0gY2F0Y2ggKGUpIHt9XFxuXFxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XFxuICBpZiAodW5tYXNrZWQpIHtcXG4gICAgaWYgKGlzT3duKSB7XFxuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFJhd1RhZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKlxcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcXG4gKiBvZiB2YWx1ZXMuXFxuICovXFxudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cXG4gKi9cXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChvYmplY3RUb1N0cmluZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX21lbW9pemVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTcpO1xcblxcblxcbi8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cXG52YXIgTUFYX01FTU9JWkVfU0laRSA9IDUwMDtcXG5cXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWVtb2l6ZWAgd2hpY2ggY2xlYXJzIHRoZSBtZW1vaXplZCBmdW5jdGlvbidzXFxuICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xcbiAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX21lbW9pemVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmMsIGZ1bmN0aW9uKGtleSkge1xcbiAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xcbiAgICAgIGNhY2hlLmNsZWFyKCk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGtleTtcXG4gIH0pO1xcblxcbiAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWVtb2l6ZUNhcHBlZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX01hcENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI5KTtcXG5cXG5cXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXFxudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xcbiAqIHByb3ZpZGVkLCBpdCBkZXRlcm1pbmVzIHRoZSBjYWNoZSBrZXkgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCBiYXNlZCBvbiB0aGVcXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcXG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxcbiAqIGlzIGludm9rZWQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmcgb2YgdGhlIG1lbW9pemVkIGZ1bmN0aW9uLlxcbiAqXFxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxcbiAqIGZ1bmN0aW9uLiBJdHMgY3JlYXRpb24gbWF5IGJlIGN1c3RvbWl6ZWQgYnkgcmVwbGFjaW5nIHRoZSBgXy5tZW1vaXplLkNhY2hlYFxcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXFxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcXG4gKiBtZXRob2QgaW50ZXJmYWNlIG9mIGBjbGVhcmAsIGBkZWxldGVgLCBgZ2V0YCwgYGhhc2AsIGFuZCBgc2V0YC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XFxuICogdmFyIG90aGVyID0geyAnYyc6IDMsICdkJzogNCB9O1xcbiAqXFxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWzEsIDJdXFxuICpcXG4gKiB2YWx1ZXMob3RoZXIpO1xcbiAqIC8vID0+IFszLCA0XVxcbiAqXFxuICogb2JqZWN0LmEgPSAyO1xcbiAqIHZhbHVlcyhvYmplY3QpO1xcbiAqIC8vID0+IFsxLCAyXVxcbiAqXFxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXFxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xcbiAqIHZhbHVlcyhvYmplY3QpO1xcbiAqIC8vID0+IFsnYScsICdiJ11cXG4gKlxcbiAqIC8vIFJlcGxhY2UgYF8ubWVtb2l6ZS5DYWNoZWAuXFxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcXG4gKi9cXG5mdW5jdGlvbiBtZW1vaXplKGZ1bmMsIHJlc29sdmVyKSB7XFxuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xcbiAgfVxcbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XFxuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xcblxcbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcXG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XFxuICAgIH1cXG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XFxuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX01hcENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gIHJldHVybiBtZW1vaXplZDtcXG59XFxuXFxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXFxubWVtb2l6ZS5DYWNoZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWVtb2l6ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0hhc2hfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX0xpc3RDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGNsZWFyXFxuICogQG1lbWJlck9mIE1hcENhY2hlXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcXG4gIHRoaXMuc2l6ZSA9IDA7XFxuICB0aGlzLl9fZGF0YV9fID0ge1xcbiAgICAnaGFzaCc6IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0hhc2hfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgICdtYXAnOiBuZXcgKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgJ3N0cmluZyc6IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0hhc2hfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11cXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlQ2xlYXIpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDk5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNoQ2xlYXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTAwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19oYXNoRGVsZXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faGFzaEdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2hhc2hIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19oYXNoU2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwOCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAY29uc3RydWN0b3JcXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcXG5cXG4gIHRoaXMuY2xlYXIoKTtcXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xcbiAgfVxcbn1cXG5cXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXFxuSGFzaC5wcm90b3R5cGUuY2xlYXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hhc2hDbGVhcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5IYXNoLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc2hEZWxldGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuSGFzaC5wcm90b3R5cGUuZ2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19oYXNoR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlLmhhcyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faGFzaEhhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5IYXNoLnByb3RvdHlwZS5zZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2hhc2hTZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoSGFzaCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGNsZWFyXFxuICogQG1lbWJlck9mIEhhc2hcXG4gKi9cXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG51bGwpIDoge307XFxuICB0aGlzLnNpemUgPSAwO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYXNoQ2xlYXIpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNNYXNrZWRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTAyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX190b1NvdXJjZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7XFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxcbiAqL1xcbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxcXFxcXiQuKis/KClbXFxcXF17fXxdL2c7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xcbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxcXF0kLztcXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXFxudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFxcXFxcJCYnKVxcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFxcXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXFxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXFxuKTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxcbiAqICBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XFxuICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNNYXNrZWRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgcGF0dGVybiA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRnVuY3Rpb25fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XFxuICByZXR1cm4gcGF0dGVybi50ZXN0KE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNOYXRpdmUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29yZUpzRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDMpO1xcblxcblxcbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXFxudmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7XFxuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3JlSnNEYXRhX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmtleXMgJiYgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3JlSnNEYXRhX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmtleXMuSUVfUFJPVE8gfHwgJycpO1xcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xcbn0oKSk7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgaXRzIHNvdXJjZSBtYXNrZWQuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNNYXNrZWQoZnVuYykge1xcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNNYXNrZWQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXFxudmFyIGNvcmVKc0RhdGEgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11bJ19fY29yZS1qc19zaGFyZWRfXyddO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNvcmVKc0RhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFZhbHVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMDUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBkZWxldGVcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBoYXNoIFRoZSBoYXNoIHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcXG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XFxuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYXNoRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMDYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XFxuXFxuXFxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xcbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgZ2V0XFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gaGFzaEdldChrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkge1xcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xcbiAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHVuZGVmaW5lZCA6IHJlc3VsdDtcXG4gIH1cXG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBIYXNoXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XFxuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XFxuICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYXNoSGFzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMDggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XFxuXFxuXFxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xcbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcXG5cXG4vKipcXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBIYXNoXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGhhc2ggaW5zdGFuY2UuXFxuICovXFxuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XFxuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XFxuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xcbiAgZGF0YVtrZXldID0gKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcXG4gIHJldHVybiB0aGlzO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYXNoU2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMDkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGNsZWFyXFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxcbiAqL1xcbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xcbiAgdGhpcy5zaXplID0gMDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobGlzdENhY2hlQ2xlYXIpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xcblxcbi8qKlxcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBkZWxldGVcXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcXG4gICAgICBpbmRleCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZGF0YSwga2V5KTtcXG5cXG4gIGlmIChpbmRleCA8IDApIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcXG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcXG4gICAgZGF0YS5wb3AoKTtcXG4gIH0gZWxzZSB7XFxuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcXG4gIH1cXG4gIC0tdGhpcy5zaXplO1xcbiAgcmV0dXJuIHRydWU7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGxpc3RDYWNoZURlbGV0ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTExICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NvY0luZGV4T2ZfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcXG4gICAgICBpbmRleCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZGF0YSwga2V5KTtcXG5cXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobGlzdENhY2hlR2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBoYXNcXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NvY0luZGV4T2ZfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobGlzdENhY2hlSGFzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBzZXRcXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcXG4gICAgICBpbmRleCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZGF0YSwga2V5KTtcXG5cXG4gIGlmIChpbmRleCA8IDApIHtcXG4gICAgKyt0aGlzLnNpemU7XFxuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xcbiAgfSBlbHNlIHtcXG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiB0aGlzO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIG1hcC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgZGVsZXRlXFxuICogQG1lbWJlck9mIE1hcENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xcbiAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XFxuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtYXBDYWNoZURlbGV0ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTE1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3IgdXNlIGFzIHVuaXF1ZSBvYmplY3Qga2V5LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGlzS2V5YWJsZSh2YWx1ZSkge1xcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XFxuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxcbiAgICA/ICh2YWx1ZSAhPT0gJ19fcHJvdG9fXycpXFxuICAgIDogKHZhbHVlID09PSBudWxsKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNLZXlhYmxlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIG1hcCB2YWx1ZSBmb3IgYGtleWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGdldFxcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBrZXkpLmdldChrZXkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtYXBDYWNoZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTE3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIE1hcENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIGtleSkuaGFzKGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlSGFzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xcblxcblxcbi8qKlxcbiAqIFNldHMgdGhlIG1hcCBga2V5YCB0byBgdmFsdWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBzZXRcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KSxcXG4gICAgICBzaXplID0gZGF0YS5zaXplO1xcblxcbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XFxuICB0aGlzLnNpemUgKz0gZGF0YS5zaXplID09IHNpemUgPyAwIDogMTtcXG4gIHJldHVybiB0aGlzO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtYXBDYWNoZVNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTE5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2FycmF5TWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG5cXG5cXG5cXG5cXG5cXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcXG5cXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cXG52YXIgc3ltYm9sUHJvdG8gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcXG4gICAgc3ltYm9sVG9TdHJpbmcgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnRvU3RyaW5nIDogdW5kZWZpbmVkO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRvU3RyaW5nYCB3aGljaCBkb2Vzbid0IGNvbnZlcnQgbnVsbGlzaFxcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcXG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2FycmF5TWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xcbiAgfVxcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcXG4gIH1cXG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XFxuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VUb1N0cmluZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19tZXJnZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfbG9kYXNoX2VzX21hcFZhbHVlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X3JlYWN0X3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2lzX3Byb21pc2VfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2lzX3Byb21pc2VfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fdXRpbF9nZXREaXNwbGF5TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX2hhbmRsZVN1Ym1pdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19ldmVudHNfc2lsZW5jZUV2ZW50X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fZXZlbnRzX3NpbGVuY2VFdmVudHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fYXN5bmNWYWxpZGF0aW9uX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX2RlZmF1bHRTaG91bGRBc3luY1ZhbGlkYXRlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX2RlZmF1bHRTaG91bGRWYWxpZGF0ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX2dlbmVyYXRlVmFsaWRhdG9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX3NlbGVjdG9yc19pc1ZhbGlkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KTtcXG5cXG5cXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXFxcImZ1bmN0aW9uXFxcIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcXFwic3ltYm9sXFxcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcXFwic3ltYm9sXFxcIiA6IHR5cGVvZiBvYmo7IH07XFxuXFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgaXNDbGFzc0NvbXBvbmVudCA9IGZ1bmN0aW9uIGlzQ2xhc3NDb21wb25lbnQoQ29tcG9uZW50KSB7XFxuICByZXR1cm4gQm9vbGVhbihDb21wb25lbnQgJiYgQ29tcG9uZW50LnByb3RvdHlwZSAmJiBfdHlwZW9mKENvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCkgPT09ICdvYmplY3QnKTtcXG59O1xcblxcbi8vIGV4dHJhY3QgZmllbGQtc3BlY2lmaWMgYWN0aW9uc1xcblxcbnZhciBhcnJheUluc2VydCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheUluc2VydFxcXCJdLFxcbiAgICBhcnJheU1vdmUgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlNb3ZlXFxcIl0sXFxuICAgIGFycmF5UG9wID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5UG9wXFxcIl0sXFxuICAgIGFycmF5UHVzaCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVB1c2hcXFwiXSxcXG4gICAgYXJyYXlSZW1vdmUgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlSZW1vdmVcXFwiXSxcXG4gICAgYXJyYXlSZW1vdmVBbGwgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlSZW1vdmVBbGxcXFwiXSxcXG4gICAgYXJyYXlTaGlmdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVNoaWZ0XFxcIl0sXFxuICAgIGFycmF5U3BsaWNlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U3BsaWNlXFxcIl0sXFxuICAgIGFycmF5U3dhcCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVN3YXBcXFwiXSxcXG4gICAgYXJyYXlVbnNoaWZ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5VW5zaGlmdFxcXCJdLFxcbiAgICBibHVyID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImJsdXJcXFwiXSxcXG4gICAgY2hhbmdlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImNoYW5nZVxcXCJdLFxcbiAgICBmb2N1cyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJmb2N1c1xcXCJdLFxcbiAgICBmb3JtQWN0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfXywgWydhcnJheUluc2VydCcsICdhcnJheU1vdmUnLCAnYXJyYXlQb3AnLCAnYXJyYXlQdXNoJywgJ2FycmF5UmVtb3ZlJywgJ2FycmF5UmVtb3ZlQWxsJywgJ2FycmF5U2hpZnQnLCAnYXJyYXlTcGxpY2UnLCAnYXJyYXlTd2FwJywgJ2FycmF5VW5zaGlmdCcsICdibHVyJywgJ2NoYW5nZScsICdmb2N1cyddKTtcXG5cXG52YXIgYXJyYXlBY3Rpb25zID0ge1xcbiAgYXJyYXlJbnNlcnQ6IGFycmF5SW5zZXJ0LFxcbiAgYXJyYXlNb3ZlOiBhcnJheU1vdmUsXFxuICBhcnJheVBvcDogYXJyYXlQb3AsXFxuICBhcnJheVB1c2g6IGFycmF5UHVzaCxcXG4gIGFycmF5UmVtb3ZlOiBhcnJheVJlbW92ZSxcXG4gIGFycmF5UmVtb3ZlQWxsOiBhcnJheVJlbW92ZUFsbCxcXG4gIGFycmF5U2hpZnQ6IGFycmF5U2hpZnQsXFxuICBhcnJheVNwbGljZTogYXJyYXlTcGxpY2UsXFxuICBhcnJheVN3YXA6IGFycmF5U3dhcCxcXG4gIGFycmF5VW5zaGlmdDogYXJyYXlVbnNoaWZ0XFxufTtcXG5cXG52YXIgcHJvcHNUb05vdFVwZGF0ZUZvciA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoT2JqZWN0LmtleXMoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX18pKSwgWydhcnJheScsICdhc3luY0Vycm9ycycsICdpbml0aWFsaXplZCcsICdpbml0aWFsVmFsdWVzJywgJ3N5bmNFcnJvcnMnLCAnc3luY1dhcm5pbmdzJywgJ3ZhbHVlcycsICdyZWdpc3RlcmVkRmllbGRzJ10pO1xcblxcbnZhciBjaGVja1N1Ym1pdCA9IGZ1bmN0aW9uIGNoZWNrU3VibWl0KHN1Ym1pdCkge1xcbiAgaWYgKCFzdWJtaXQgfHwgdHlwZW9mIHN1Ym1pdCAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IGVpdGhlciBwYXNzIGhhbmRsZVN1Ym1pdCgpIGFuIG9uU3VibWl0IGZ1bmN0aW9uIG9yIHBhc3Mgb25TdWJtaXQgYXMgYSBwcm9wJyk7XFxuICB9XFxuICByZXR1cm4gc3VibWl0O1xcbn07XFxuXFxuLyoqXFxuICogVGhlIGRlY29yYXRvciB0aGF0IGlzIHRoZSBtYWluIEFQSSB0byByZWR1eC1mb3JtXFxuICovXFxudmFyIGNyZWF0ZVJlZHV4Rm9ybSA9IGZ1bmN0aW9uIGNyZWF0ZVJlZHV4Rm9ybShzdHJ1Y3R1cmUpIHtcXG4gIHZhciBkZWVwRXF1YWwgPSBzdHJ1Y3R1cmUuZGVlcEVxdWFsLFxcbiAgICAgIGVtcHR5ID0gc3RydWN0dXJlLmVtcHR5LFxcbiAgICAgIGdldEluID0gc3RydWN0dXJlLmdldEluLFxcbiAgICAgIHNldEluID0gc3RydWN0dXJlLnNldEluLFxcbiAgICAgIGtleXMgPSBzdHJ1Y3R1cmUua2V5cyxcXG4gICAgICBmcm9tSlMgPSBzdHJ1Y3R1cmUuZnJvbUpTO1xcblxcbiAgdmFyIGlzVmFsaWQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fc2VsZWN0b3JzX2lzVmFsaWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSk7XFxuICByZXR1cm4gZnVuY3Rpb24gKGluaXRpYWxDb25maWcpIHtcXG4gICAgdmFyIGNvbmZpZyA9IF9leHRlbmRzKHtcXG4gICAgICB0b3VjaE9uQmx1cjogdHJ1ZSxcXG4gICAgICB0b3VjaE9uQ2hhbmdlOiBmYWxzZSxcXG4gICAgICBwZXJzaXN0ZW50U3VibWl0RXJyb3JzOiBmYWxzZSxcXG4gICAgICBkZXN0cm95T25Vbm1vdW50OiB0cnVlLFxcbiAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX2RlZmF1bHRTaG91bGRBc3luY1ZhbGlkYXRlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICAgIHNob3VsZFZhbGlkYXRlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X19kZWZhdWx0U2hvdWxkVmFsaWRhdGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgICAgZW5hYmxlUmVpbml0aWFsaXplOiBmYWxzZSxcXG4gICAgICBrZWVwRGlydHlPblJlaW5pdGlhbGl6ZTogZmFsc2UsXFxuICAgICAgZ2V0Rm9ybVN0YXRlOiBmdW5jdGlvbiBnZXRGb3JtU3RhdGUoc3RhdGUpIHtcXG4gICAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgICB9LFxcbiAgICAgIHB1cmU6IHRydWUsXFxuICAgICAgZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50OiBmYWxzZVxcbiAgICB9LCBpbml0aWFsQ29uZmlnKTtcXG5cXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChXcmFwcGVkQ29tcG9uZW50KSB7XFxuICAgICAgdmFyIEZvcm0gPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICAgICAgX2luaGVyaXRzKEZvcm0sIF9Db21wb25lbnQpO1xcblxcbiAgICAgICAgZnVuY3Rpb24gRm9ybShwcm9wcykge1xcbiAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRm9ybSk7XFxuXFxuICAgICAgICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGb3JtLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRm9ybSkpLmNhbGwodGhpcywgcHJvcHMpKTtcXG5cXG4gICAgICAgICAgX3RoaXMuc3VibWl0ID0gX3RoaXMuc3VibWl0LmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5yZXNldCA9IF90aGlzLnJlc2V0LmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5hc3luY1ZhbGlkYXRlID0gX3RoaXMuYXN5bmNWYWxpZGF0ZS5iaW5kKF90aGlzKTtcXG4gICAgICAgICAgX3RoaXMuZ2V0VmFsdWVzID0gX3RoaXMuZ2V0VmFsdWVzLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5yZWdpc3RlciA9IF90aGlzLnJlZ2lzdGVyLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy51bnJlZ2lzdGVyID0gX3RoaXMudW5yZWdpc3Rlci5iaW5kKF90aGlzKTtcXG4gICAgICAgICAgX3RoaXMuc3VibWl0Q29tcGxldGVkID0gX3RoaXMuc3VibWl0Q29tcGxldGVkLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5zdWJtaXRGYWlsZWQgPSBfdGhpcy5zdWJtaXRGYWlsZWQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLmZpZWxkVmFsaWRhdG9ycyA9IHt9O1xcbiAgICAgICAgICBfdGhpcy5sYXN0RmllbGRWYWxpZGF0b3JLZXlzID0gW107XFxuICAgICAgICAgIF90aGlzLmZpZWxkV2FybmVycyA9IHt9O1xcbiAgICAgICAgICBfdGhpcy5sYXN0RmllbGRXYXJuZXJLZXlzID0gW107XFxuICAgICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIF9jcmVhdGVDbGFzcyhGb3JtLCBbe1xcbiAgICAgICAgICBrZXk6ICdnZXRDaGlsZENvbnRleHQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xcbiAgICAgICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICBfcmVkdXhGb3JtOiBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICAgICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRJbihfdGhpczIucHJvcHMuZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgX3RoaXMyLnByb3BzLmZvcm0pO1xcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRlOiB0aGlzLmFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIGdldFZhbHVlczogdGhpcy5nZXRWYWx1ZXMsXFxuICAgICAgICAgICAgICAgIHNlY3Rpb25QcmVmaXg6IHVuZGVmaW5lZCxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXI6IHRoaXMucmVnaXN0ZXIsXFxuICAgICAgICAgICAgICAgIHVucmVnaXN0ZXI6IHRoaXMudW5yZWdpc3RlcixcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJJbm5lck9uU3VibWl0OiBmdW5jdGlvbiByZWdpc3RlcklubmVyT25TdWJtaXQoaW5uZXJPblN1Ym1pdCkge1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaW5uZXJPblN1Ym1pdCA9IGlubmVyT25TdWJtaXQ7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdpbml0SWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaW5pdElmTmVlZGVkKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBlbmFibGVSZWluaXRpYWxpemUgPSB0aGlzLnByb3BzLmVuYWJsZVJlaW5pdGlhbGl6ZTtcXG5cXG4gICAgICAgICAgICBpZiAobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgICBpZiAoKGVuYWJsZVJlaW5pdGlhbGl6ZSB8fCAhbmV4dFByb3BzLmluaXRpYWxpemVkKSAmJiAhZGVlcEVxdWFsKHRoaXMucHJvcHMuaW5pdGlhbFZhbHVlcywgbmV4dFByb3BzLmluaXRpYWxWYWx1ZXMpKSB7XFxuICAgICAgICAgICAgICAgIHZhciBrZWVwRGlydHkgPSBuZXh0UHJvcHMuaW5pdGlhbGl6ZWQgJiYgdGhpcy5wcm9wcy5rZWVwRGlydHlPblJlaW5pdGlhbGl6ZTtcXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5pbml0aWFsaXplKG5leHRQcm9wcy5pbml0aWFsVmFsdWVzLCBrZWVwRGlydHkpO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5pbml0aWFsVmFsdWVzICYmICghdGhpcy5wcm9wcy5pbml0aWFsaXplZCB8fCBlbmFibGVSZWluaXRpYWxpemUpKSB7XFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLmluaXRpYWxpemUodGhpcy5wcm9wcy5pbml0aWFsVmFsdWVzLCB0aGlzLnByb3BzLmtlZXBEaXJ0eU9uUmVpbml0aWFsaXplKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAndXBkYXRlU3luY0Vycm9yc0lmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZVN5bmNFcnJvcnNJZk5lZWRlZChuZXh0U3luY0Vycm9ycywgbmV4dEVycm9yKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGVycm9yID0gX3Byb3BzLmVycm9yLFxcbiAgICAgICAgICAgICAgICBzeW5jRXJyb3JzID0gX3Byb3BzLnN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHVwZGF0ZVN5bmNFcnJvcnMgPSBfcHJvcHMudXBkYXRlU3luY0Vycm9ycztcXG5cXG4gICAgICAgICAgICB2YXIgbm9FcnJvcnMgPSAoIXN5bmNFcnJvcnMgfHwgIU9iamVjdC5rZXlzKHN5bmNFcnJvcnMpLmxlbmd0aCkgJiYgIWVycm9yO1xcbiAgICAgICAgICAgIHZhciBuZXh0Tm9FcnJvcnMgPSAoIW5leHRTeW5jRXJyb3JzIHx8ICFPYmplY3Qua2V5cyhuZXh0U3luY0Vycm9ycykubGVuZ3RoKSAmJiAhbmV4dEVycm9yO1xcbiAgICAgICAgICAgIGlmICghKG5vRXJyb3JzICYmIG5leHROb0Vycm9ycykgJiYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKHN5bmNFcnJvcnMsIG5leHRTeW5jRXJyb3JzKSB8fCAhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmRlZXBFcXVhbChlcnJvciwgbmV4dEVycm9yKSkpIHtcXG4gICAgICAgICAgICAgIHVwZGF0ZVN5bmNFcnJvcnMobmV4dFN5bmNFcnJvcnMsIG5leHRFcnJvcik7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2NsZWFyU3VibWl0UHJvbWlzZUlmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyU3VibWl0UHJvbWlzZUlmTmVlZGVkKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBzdWJtaXR0aW5nID0gdGhpcy5wcm9wcy5zdWJtaXR0aW5nO1xcblxcbiAgICAgICAgICAgIGlmICh0aGlzLnN1Ym1pdFByb21pc2UgJiYgc3VibWl0dGluZyAmJiAhbmV4dFByb3BzLnN1Ym1pdHRpbmcpIHtcXG4gICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN1Ym1pdFByb21pc2U7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3N1Ym1pdElmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdElmTmVlZGVkKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMyID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgY2xlYXJTdWJtaXQgPSBfcHJvcHMyLmNsZWFyU3VibWl0LFxcbiAgICAgICAgICAgICAgICB0cmlnZ2VyU3VibWl0ID0gX3Byb3BzMi50cmlnZ2VyU3VibWl0O1xcblxcbiAgICAgICAgICAgIGlmICghdHJpZ2dlclN1Ym1pdCAmJiBuZXh0UHJvcHMudHJpZ2dlclN1Ym1pdCkge1xcbiAgICAgICAgICAgICAgY2xlYXJTdWJtaXQoKTtcXG4gICAgICAgICAgICAgIHRoaXMuc3VibWl0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ZhbGlkYXRlSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdmFsaWRhdGVJZk5lZWRlZChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzMyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzMy5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgdmFsaWRhdGUgPSBfcHJvcHMzLnZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICB2YWx1ZXMgPSBfcHJvcHMzLnZhbHVlcztcXG5cXG4gICAgICAgICAgICB2YXIgZmllbGRMZXZlbFZhbGlkYXRlID0gdGhpcy5nZW5lcmF0ZVZhbGlkYXRvcigpO1xcbiAgICAgICAgICAgIGlmICh2YWxpZGF0ZSB8fCBmaWVsZExldmVsVmFsaWRhdGUpIHtcXG4gICAgICAgICAgICAgIHZhciBpbml0aWFsUmVuZGVyID0gbmV4dFByb3BzID09PSB1bmRlZmluZWQ7XFxuICAgICAgICAgICAgICB2YXIgZmllbGRWYWxpZGF0b3JLZXlzID0gT2JqZWN0LmtleXModGhpcy5nZXRWYWxpZGF0b3JzKCkpO1xcbiAgICAgICAgICAgICAgdmFyIHNob3VsZFZhbGlkYXRlUmVzdWx0ID0gc2hvdWxkVmFsaWRhdGUoe1xcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzOiBuZXh0UHJvcHMsXFxuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsUmVuZGVyOiBpbml0aWFsUmVuZGVyLFxcbiAgICAgICAgICAgICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzOiB0aGlzLmxhc3RGaWVsZFZhbGlkYXRvcktleXMsXFxuICAgICAgICAgICAgICAgIGZpZWxkVmFsaWRhdG9yS2V5czogZmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IHN0cnVjdHVyZVxcbiAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICBpZiAoc2hvdWxkVmFsaWRhdGVSZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHByb3BzVG9WYWxpZGF0ZSA9IGluaXRpYWxSZW5kZXIgPyB0aGlzLnByb3BzIDogbmV4dFByb3BzO1xcblxcbiAgICAgICAgICAgICAgICB2YXIgX21lcmdlMiA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21lcmdlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWxpZGF0ZSA/IHZhbGlkYXRlKHByb3BzVG9WYWxpZGF0ZS52YWx1ZXMsIHByb3BzVG9WYWxpZGF0ZSkgfHwge30gOiB7fSwgZmllbGRMZXZlbFZhbGlkYXRlID8gZmllbGRMZXZlbFZhbGlkYXRlKHByb3BzVG9WYWxpZGF0ZS52YWx1ZXMsIHByb3BzVG9WYWxpZGF0ZSkgfHwge30gOiB7fSksXFxuICAgICAgICAgICAgICAgICAgICBfZXJyb3IgPSBfbWVyZ2UyLl9lcnJvcixcXG4gICAgICAgICAgICAgICAgICAgIG5leHRTeW5jRXJyb3JzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9tZXJnZTIsIFsnX2Vycm9yJ10pO1xcblxcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RGaWVsZFZhbGlkYXRvcktleXMgPSBmaWVsZFZhbGlkYXRvcktleXM7XFxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3luY0Vycm9yc0lmTmVlZGVkKG5leHRTeW5jRXJyb3JzLCBfZXJyb3IpO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd1cGRhdGVTeW5jV2FybmluZ3NJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVTeW5jV2FybmluZ3NJZk5lZWRlZChuZXh0U3luY1dhcm5pbmdzLCBuZXh0V2FybmluZykge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHM0ID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgd2FybmluZyA9IF9wcm9wczQud2FybmluZyxcXG4gICAgICAgICAgICAgICAgc3luY1dhcm5pbmdzID0gX3Byb3BzNC5zeW5jV2FybmluZ3MsXFxuICAgICAgICAgICAgICAgIHVwZGF0ZVN5bmNXYXJuaW5ncyA9IF9wcm9wczQudXBkYXRlU3luY1dhcm5pbmdzO1xcblxcbiAgICAgICAgICAgIHZhciBub1dhcm5pbmdzID0gKCFzeW5jV2FybmluZ3MgfHwgIU9iamVjdC5rZXlzKHN5bmNXYXJuaW5ncykubGVuZ3RoKSAmJiAhd2FybmluZztcXG4gICAgICAgICAgICB2YXIgbmV4dE5vV2FybmluZ3MgPSAoIW5leHRTeW5jV2FybmluZ3MgfHwgIU9iamVjdC5rZXlzKG5leHRTeW5jV2FybmluZ3MpLmxlbmd0aCkgJiYgIW5leHRXYXJuaW5nO1xcbiAgICAgICAgICAgIGlmICghKG5vV2FybmluZ3MgJiYgbmV4dE5vV2FybmluZ3MpICYmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNV9fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmRlZXBFcXVhbChzeW5jV2FybmluZ3MsIG5leHRTeW5jV2FybmluZ3MpIHx8ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKHdhcm5pbmcsIG5leHRXYXJuaW5nKSkpIHtcXG4gICAgICAgICAgICAgIHVwZGF0ZVN5bmNXYXJuaW5ncyhuZXh0U3luY1dhcm5pbmdzLCBuZXh0V2FybmluZyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3dhcm5JZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB3YXJuSWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczUgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBzaG91bGRWYWxpZGF0ZSA9IF9wcm9wczUuc2hvdWxkVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHdhcm4gPSBfcHJvcHM1Lndhcm4sXFxuICAgICAgICAgICAgICAgIHZhbHVlcyA9IF9wcm9wczUudmFsdWVzO1xcblxcbiAgICAgICAgICAgIHZhciBmaWVsZExldmVsV2FybiA9IHRoaXMuZ2VuZXJhdGVXYXJuZXIoKTtcXG4gICAgICAgICAgICBpZiAod2FybiB8fCBmaWVsZExldmVsV2Fybikge1xcbiAgICAgICAgICAgICAgdmFyIGluaXRpYWxSZW5kZXIgPSBuZXh0UHJvcHMgPT09IHVuZGVmaW5lZDtcXG4gICAgICAgICAgICAgIHZhciBmaWVsZFdhcm5lcktleXMgPSBPYmplY3Qua2V5cyh0aGlzLmdldFdhcm5lcnMoKSk7XFxuICAgICAgICAgICAgICB2YXIgc2hvdWxkV2FyblJlc3VsdCA9IHNob3VsZFZhbGlkYXRlKHtcXG4gICAgICAgICAgICAgICAgdmFsdWVzOiB2YWx1ZXMsXFxuICAgICAgICAgICAgICAgIG5leHRQcm9wczogbmV4dFByb3BzLFxcbiAgICAgICAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbFJlbmRlcjogaW5pdGlhbFJlbmRlcixcXG4gICAgICAgICAgICAgICAgbGFzdEZpZWxkVmFsaWRhdG9yS2V5czogdGhpcy5sYXN0RmllbGRXYXJuZXJLZXlzLFxcbiAgICAgICAgICAgICAgICBmaWVsZFZhbGlkYXRvcktleXM6IGZpZWxkV2FybmVyS2V5cyxcXG4gICAgICAgICAgICAgICAgc3RydWN0dXJlOiBzdHJ1Y3R1cmVcXG4gICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgaWYgKHNob3VsZFdhcm5SZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgdmFyIHByb3BzVG9XYXJuID0gaW5pdGlhbFJlbmRlciA/IHRoaXMucHJvcHMgOiBuZXh0UHJvcHM7XFxuXFxuICAgICAgICAgICAgICAgIHZhciBfbWVyZ2UzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWVyZ2VfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHdhcm4gPyB3YXJuKHByb3BzVG9XYXJuLnZhbHVlcywgcHJvcHNUb1dhcm4pIDoge30sIGZpZWxkTGV2ZWxXYXJuID8gZmllbGRMZXZlbFdhcm4ocHJvcHNUb1dhcm4udmFsdWVzLCBwcm9wc1RvV2FybikgOiB7fSksXFxuICAgICAgICAgICAgICAgICAgICBfd2FybmluZyA9IF9tZXJnZTMuX3dhcm5pbmcsXFxuICAgICAgICAgICAgICAgICAgICBuZXh0U3luY1dhcm5pbmdzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9tZXJnZTMsIFsnX3dhcm5pbmcnXSk7XFxuXFxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEZpZWxkV2FybmVyS2V5cyA9IGZpZWxkV2FybmVyS2V5cztcXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTeW5jV2FybmluZ3NJZk5lZWRlZChuZXh0U3luY1dhcm5pbmdzLCBfd2FybmluZyk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxNb3VudCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XFxuICAgICAgICAgICAgdGhpcy5pbml0SWZOZWVkZWQoKTtcXG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlSWZOZWVkZWQoKTtcXG4gICAgICAgICAgICB0aGlzLndhcm5JZk5lZWRlZCgpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICB0aGlzLmluaXRJZk5lZWRlZChuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJZk5lZWRlZChuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgIHRoaXMud2FybklmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy5jbGVhclN1Ym1pdFByb21pc2VJZk5lZWRlZChuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgIHRoaXMuc3VibWl0SWZOZWVkZWQobmV4dFByb3BzKTtcXG4gICAgICAgICAgICBpZiAobmV4dFByb3BzLm9uQ2hhbmdlKSB7XFxuICAgICAgICAgICAgICBpZiAoIWRlZXBFcXVhbChuZXh0UHJvcHMudmFsdWVzLCB0aGlzLnByb3BzLnZhbHVlcykpIHtcXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzLm9uQ2hhbmdlKG5leHRQcm9wcy52YWx1ZXMsIG5leHRQcm9wcy5kaXNwYXRjaCwgbmV4dFByb3BzKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXMzID0gdGhpcztcXG5cXG4gICAgICAgICAgICBpZiAoIXRoaXMucHJvcHMucHVyZSkgcmV0dXJuIHRydWU7XFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG5leHRQcm9wcykuc29tZShmdW5jdGlvbiAocHJvcCkge1xcbiAgICAgICAgICAgICAgLy8gdXNlZnVsIHRvIGRlYnVnIHJlcmVuZGVyc1xcbiAgICAgICAgICAgICAgLy8gaWYgKCFwbGFpbi5kZWVwRXF1YWwodGhpcy5wcm9wc1sgcHJvcCBdLCBuZXh0UHJvcHNbIHByb3AgXSkpIHtcXG4gICAgICAgICAgICAgIC8vICAgY29uc29sZS5pbmZvKHByb3AsICdjaGFuZ2VkJywgdGhpcy5wcm9wc1sgcHJvcCBdLCAnPT0+JywgbmV4dFByb3BzWyBwcm9wIF0pXFxuICAgICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczMucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczYgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBkZXN0cm95T25Vbm1vdW50ID0gX3Byb3BzNi5kZXN0cm95T25Vbm1vdW50LFxcbiAgICAgICAgICAgICAgICBkZXN0cm95ID0gX3Byb3BzNi5kZXN0cm95O1xcblxcbiAgICAgICAgICAgIGlmIChkZXN0cm95T25Vbm1vdW50KSB7XFxuICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XFxuICAgICAgICAgICAgICBkZXN0cm95KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldFZhbHVlcycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZXMoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudmFsdWVzO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2lzVmFsaWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNWYWxpZCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWxpZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdpc1ByaXN0aW5lJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzUHJpc3RpbmUoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMucHJpc3RpbmU7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAncmVnaXN0ZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVnaXN0ZXIobmFtZSwgdHlwZSwgZ2V0VmFsaWRhdG9yLCBnZXRXYXJuZXIpIHtcXG4gICAgICAgICAgICB0aGlzLnByb3BzLnJlZ2lzdGVyRmllbGQobmFtZSwgdHlwZSk7XFxuICAgICAgICAgICAgaWYgKGdldFZhbGlkYXRvcikge1xcbiAgICAgICAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRvcnNbbmFtZV0gPSBnZXRWYWxpZGF0b3I7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChnZXRXYXJuZXIpIHtcXG4gICAgICAgICAgICAgIHRoaXMuZmllbGRXYXJuZXJzW25hbWVdID0gZ2V0V2FybmVyO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd1bnJlZ2lzdGVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVucmVnaXN0ZXIobmFtZSkge1xcbiAgICAgICAgICAgIGlmICghdGhpcy5kZXN0cm95ZWQpIHtcXG4gICAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLmRlc3Ryb3lPblVubW91bnQgfHwgdGhpcy5wcm9wcy5mb3JjZVVucmVnaXN0ZXJPblVubW91bnQpIHtcXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy51bnJlZ2lzdGVyRmllbGQobmFtZSk7XFxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZpZWxkVmFsaWRhdG9yc1tuYW1lXTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZmllbGRXYXJuZXJzW25hbWVdO1xcbiAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy51bnJlZ2lzdGVyRmllbGQobmFtZSwgZmFsc2UpO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdnZXRGaWVsZExpc3QnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RmllbGRMaXN0KG9wdGlvbnMpIHtcXG4gICAgICAgICAgICB2YXIgcmVnaXN0ZXJlZEZpZWxkcyA9IHRoaXMucHJvcHMucmVnaXN0ZXJlZEZpZWxkcztcXG4gICAgICAgICAgICB2YXIgbGlzdCA9IFtdO1xcbiAgICAgICAgICAgIGlmICghcmVnaXN0ZXJlZEZpZWxkcykge1xcbiAgICAgICAgICAgICAgcmV0dXJuIGxpc3Q7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBrZXlTZXEgPSBrZXlzKHJlZ2lzdGVyZWRGaWVsZHMpO1xcbiAgICAgICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXhjbHVkZUZpZWxkQXJyYXkpIHtcXG4gICAgICAgICAgICAgIGtleVNlcSA9IGtleVNlcS5maWx0ZXIoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldEluKHJlZ2lzdGVyZWRGaWVsZHMsICdbXFxcXCcnICsgbmFtZSArICdcXFxcJ10udHlwZScpICE9PSAnRmllbGRBcnJheSc7XFxuICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGZyb21KUyhrZXlTZXEucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xcbiAgICAgICAgICAgICAgYWNjLnB1c2goa2V5KTtcXG4gICAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgICAgfSwgbGlzdCkpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldFZhbGlkYXRvcnMnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsaWRhdG9ycygpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM0ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgdmFsaWRhdG9ycyA9IHt9O1xcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGRWYWxpZGF0b3JzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgICAgICB2YXIgdmFsaWRhdG9yID0gX3RoaXM0LmZpZWxkVmFsaWRhdG9yc1tuYW1lXSgpO1xcbiAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvcikge1xcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JzW25hbWVdID0gdmFsaWRhdG9yO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0b3JzO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dlbmVyYXRlVmFsaWRhdG9yJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdlbmVyYXRlVmFsaWRhdG9yKCkge1xcbiAgICAgICAgICAgIHZhciB2YWxpZGF0b3JzID0gdGhpcy5nZXRWYWxpZGF0b3JzKCk7XFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbGlkYXRvcnMpLmxlbmd0aCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19nZW5lcmF0ZVZhbGlkYXRvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsaWRhdG9ycywgc3RydWN0dXJlKSA6IHVuZGVmaW5lZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdnZXRXYXJuZXJzJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFdhcm5lcnMoKSB7XFxuICAgICAgICAgICAgdmFyIF90aGlzNSA9IHRoaXM7XFxuXFxuICAgICAgICAgICAgdmFyIHdhcm5lcnMgPSB7fTtcXG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmZpZWxkV2FybmVycykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgICAgdmFyIHdhcm5lciA9IF90aGlzNS5maWVsZFdhcm5lcnNbbmFtZV0oKTtcXG4gICAgICAgICAgICAgIGlmICh3YXJuZXIpIHtcXG4gICAgICAgICAgICAgICAgd2FybmVyc1tuYW1lXSA9IHdhcm5lcjtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICByZXR1cm4gd2FybmVycztcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdnZW5lcmF0ZVdhcm5lcicsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZW5lcmF0ZVdhcm5lcigpIHtcXG4gICAgICAgICAgICB2YXIgd2FybmVycyA9IHRoaXMuZ2V0V2FybmVycygpO1xcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh3YXJuZXJzKS5sZW5ndGggPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fZ2VuZXJhdGVWYWxpZGF0b3JfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHdhcm5lcnMsIHN0cnVjdHVyZSkgOiB1bmRlZmluZWQ7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnYXN5bmNWYWxpZGF0ZScsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhc3luY1ZhbGlkYXRlKG5hbWUsIHZhbHVlKSB7XFxuICAgICAgICAgICAgdmFyIF90aGlzNiA9IHRoaXM7XFxuXFxuICAgICAgICAgICAgdmFyIF9wcm9wczcgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBhc3luY0JsdXJGaWVsZHMgPSBfcHJvcHM3LmFzeW5jQmx1ckZpZWxkcyxcXG4gICAgICAgICAgICAgICAgYXN5bmNFcnJvcnMgPSBfcHJvcHM3LmFzeW5jRXJyb3JzLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRlID0gX3Byb3BzNy5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wczcuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxpemVkID0gX3Byb3BzNy5pbml0aWFsaXplZCxcXG4gICAgICAgICAgICAgICAgcHJpc3RpbmUgPSBfcHJvcHM3LnByaXN0aW5lLFxcbiAgICAgICAgICAgICAgICBzaG91bGRBc3luY1ZhbGlkYXRlID0gX3Byb3BzNy5zaG91bGRBc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICBzdGFydEFzeW5jVmFsaWRhdGlvbiA9IF9wcm9wczcuc3RhcnRBc3luY1ZhbGlkYXRpb24sXFxuICAgICAgICAgICAgICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM3LnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHM3LnN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHZhbHVlcyA9IF9wcm9wczcudmFsdWVzO1xcblxcbiAgICAgICAgICAgIHZhciBzdWJtaXR0aW5nID0gIW5hbWU7XFxuICAgICAgICAgICAgaWYgKGFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgICAgIHZhciB2YWx1ZXNUb1ZhbGlkYXRlID0gc3VibWl0dGluZyA/IHZhbHVlcyA6IHNldEluKHZhbHVlcywgbmFtZSwgdmFsdWUpO1xcbiAgICAgICAgICAgICAgdmFyIHN5bmNWYWxpZGF0aW9uUGFzc2VzID0gc3VibWl0dGluZyB8fCAhZ2V0SW4oc3luY0Vycm9ycywgbmFtZSk7XFxuICAgICAgICAgICAgICB2YXIgaXNCbHVycmVkRmllbGQgPSAhc3VibWl0dGluZyAmJiAoIWFzeW5jQmx1ckZpZWxkcyB8fCB+YXN5bmNCbHVyRmllbGRzLmluZGV4T2YobmFtZS5yZXBsYWNlKC9cXFxcW1swLTldK1xcXFxdL2csICdbXScpKSk7XFxuICAgICAgICAgICAgICBpZiAoKGlzQmx1cnJlZEZpZWxkIHx8IHN1Ym1pdHRpbmcpICYmIHNob3VsZEFzeW5jVmFsaWRhdGUoe1xcbiAgICAgICAgICAgICAgICBhc3luY0Vycm9yczogYXN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxpemVkOiBpbml0aWFsaXplZCxcXG4gICAgICAgICAgICAgICAgdHJpZ2dlcjogc3VibWl0dGluZyA/ICdzdWJtaXQnIDogJ2JsdXInLFxcbiAgICAgICAgICAgICAgICBibHVycmVkRmllbGQ6IG5hbWUsXFxuICAgICAgICAgICAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICAgICAgICAgICAgc3luY1ZhbGlkYXRpb25QYXNzZXM6IHN5bmNWYWxpZGF0aW9uUGFzc2VzXFxuICAgICAgICAgICAgICB9KSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX2FzeW5jVmFsaWRhdGlvbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiBhc3luY1ZhbGlkYXRlKHZhbHVlc1RvVmFsaWRhdGUsIGRpc3BhdGNoLCBfdGhpczYucHJvcHMsIG5hbWUpO1xcbiAgICAgICAgICAgICAgICB9LCBzdGFydEFzeW5jVmFsaWRhdGlvbiwgc3RvcEFzeW5jVmFsaWRhdGlvbiwgbmFtZSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3N1Ym1pdENvbXBsZXRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzdWJtaXRDb21wbGV0ZWQocmVzdWx0KSB7XFxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3VibWl0UHJvbWlzZTtcXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3N1Ym1pdEZhaWxlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzdWJtaXRGYWlsZWQoZXJyb3IpIHtcXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5zdWJtaXRQcm9taXNlO1xcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2xpc3RlblRvU3VibWl0JyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGxpc3RlblRvU3VibWl0KHByb21pc2UpIHtcXG4gICAgICAgICAgICBpZiAoIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9pc19wcm9taXNlX19fZGVmYXVsdCgpKHByb21pc2UpKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdGhpcy5zdWJtaXRQcm9taXNlID0gcHJvbWlzZTtcXG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKHRoaXMuc3VibWl0Q29tcGxldGVkLCB0aGlzLnN1Ym1pdEZhaWxlZCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0JyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdChzdWJtaXRPckV2ZW50KSB7XFxuICAgICAgICAgICAgdmFyIF90aGlzNyA9IHRoaXM7XFxuXFxuICAgICAgICAgICAgdmFyIF9wcm9wczggPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBvblN1Ym1pdCA9IF9wcm9wczgub25TdWJtaXQsXFxuICAgICAgICAgICAgICAgIGJsdXIgPSBfcHJvcHM4LmJsdXIsXFxuICAgICAgICAgICAgICAgIGNoYW5nZSA9IF9wcm9wczguY2hhbmdlLFxcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wczguZGlzcGF0Y2gsXFxuICAgICAgICAgICAgICAgIHZhbGlkRXhjZXB0U3VibWl0ID0gX3Byb3BzOC52YWxpZEV4Y2VwdFN1Ym1pdDtcXG5cXG5cXG4gICAgICAgICAgICBpZiAoIXN1Ym1pdE9yRXZlbnQgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2V2ZW50c19zaWxlbmNlRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN1Ym1pdE9yRXZlbnQpKSB7XFxuICAgICAgICAgICAgICAvLyBzdWJtaXRPckV2ZW50IGlzIGFuIGV2ZW50OiBmaXJlIHN1Ym1pdCBpZiBub3QgYWxyZWFkeSBzdWJtaXR0aW5nXFxuICAgICAgICAgICAgICBpZiAoIXRoaXMuc3VibWl0UHJvbWlzZSkge1xcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbm5lck9uU3VibWl0KSB7XFxuICAgICAgICAgICAgICAgICAgLy8gd2lsbCBjYWxsIFxcXCJzdWJtaXRPckV2ZW50IGlzIHRoZSBzdWJtaXQgZnVuY3Rpb25cXFwiIGJsb2NrIGJlbG93XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXJPblN1Ym1pdCgpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxpc3RlblRvU3VibWl0KE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX2hhbmRsZVN1Ym1pdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY2hlY2tTdWJtaXQob25TdWJtaXQpLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKSh7IGJsdXI6IGJsdXIsIGNoYW5nZTogY2hhbmdlIH0sIGRpc3BhdGNoKSksIHZhbGlkRXhjZXB0U3VibWl0LCB0aGlzLmFzeW5jVmFsaWRhdGUsIHRoaXMuZ2V0RmllbGRMaXN0KHsgZXhjbHVkZUZpZWxkQXJyYXk6IHRydWUgfSkpKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAvLyBzdWJtaXRPckV2ZW50IGlzIHRoZSBzdWJtaXQgZnVuY3Rpb246IHJldHVybiBkZWZlcnJlZCBzdWJtaXQgdGh1bmtcXG4gICAgICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fZXZlbnRzX3NpbGVuY2VFdmVudHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICFfdGhpczcuc3VibWl0UHJvbWlzZSAmJiBfdGhpczcubGlzdGVuVG9TdWJtaXQoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjaGVja1N1Ym1pdChzdWJtaXRPckV2ZW50KSwgX2V4dGVuZHMoe30sIF90aGlzNy5wcm9wcywgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKSh7IGJsdXI6IGJsdXIsIGNoYW5nZTogY2hhbmdlIH0sIGRpc3BhdGNoKSksIHZhbGlkRXhjZXB0U3VibWl0LCBfdGhpczcuYXN5bmNWYWxpZGF0ZSwgX3RoaXM3LmdldEZpZWxkTGlzdCh7IGV4Y2x1ZGVGaWVsZEFycmF5OiB0cnVlIH0pKSk7XFxuICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAncmVzZXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXQoKSB7XFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5yZXNldCgpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3JlbmRlcicsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICAgICAgLy8gcmVtb3ZlIHNvbWUgcmVkdXgtZm9ybSBjb25maWctb25seSBwcm9wc1xcbiAgICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXFxuICAgICAgICAgICAgdmFyIF9wcm9wczkgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBhbnlUb3VjaGVkID0gX3Byb3BzOS5hbnlUb3VjaGVkLFxcbiAgICAgICAgICAgICAgICBhcnJheUluc2VydCA9IF9wcm9wczkuYXJyYXlJbnNlcnQsXFxuICAgICAgICAgICAgICAgIGFycmF5TW92ZSA9IF9wcm9wczkuYXJyYXlNb3ZlLFxcbiAgICAgICAgICAgICAgICBhcnJheVBvcCA9IF9wcm9wczkuYXJyYXlQb3AsXFxuICAgICAgICAgICAgICAgIGFycmF5UHVzaCA9IF9wcm9wczkuYXJyYXlQdXNoLFxcbiAgICAgICAgICAgICAgICBhcnJheVJlbW92ZSA9IF9wcm9wczkuYXJyYXlSZW1vdmUsXFxuICAgICAgICAgICAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3Byb3BzOS5hcnJheVJlbW92ZUFsbCxcXG4gICAgICAgICAgICAgICAgYXJyYXlTaGlmdCA9IF9wcm9wczkuYXJyYXlTaGlmdCxcXG4gICAgICAgICAgICAgICAgYXJyYXlTcGxpY2UgPSBfcHJvcHM5LmFycmF5U3BsaWNlLFxcbiAgICAgICAgICAgICAgICBhcnJheVN3YXAgPSBfcHJvcHM5LmFycmF5U3dhcCxcXG4gICAgICAgICAgICAgICAgYXJyYXlVbnNoaWZ0ID0gX3Byb3BzOS5hcnJheVVuc2hpZnQsXFxuICAgICAgICAgICAgICAgIGFzeW5jRXJyb3JzID0gX3Byb3BzOS5hc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0ZSA9IF9wcm9wczkuYXN5bmNWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0aW5nID0gX3Byb3BzOS5hc3luY1ZhbGlkYXRpbmcsXFxuICAgICAgICAgICAgICAgIGJsdXIgPSBfcHJvcHM5LmJsdXIsXFxuICAgICAgICAgICAgICAgIGNoYW5nZSA9IF9wcm9wczkuY2hhbmdlLFxcbiAgICAgICAgICAgICAgICBkZXN0cm95ID0gX3Byb3BzOS5kZXN0cm95LFxcbiAgICAgICAgICAgICAgICBkZXN0cm95T25Vbm1vdW50ID0gX3Byb3BzOS5kZXN0cm95T25Vbm1vdW50LFxcbiAgICAgICAgICAgICAgICBmb3JjZVVucmVnaXN0ZXJPblVubW91bnQgPSBfcHJvcHM5LmZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCxcXG4gICAgICAgICAgICAgICAgZGlydHkgPSBfcHJvcHM5LmRpcnR5LFxcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wczkuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgICAgIGVuYWJsZVJlaW5pdGlhbGl6ZSA9IF9wcm9wczkuZW5hYmxlUmVpbml0aWFsaXplLFxcbiAgICAgICAgICAgICAgICBlcnJvciA9IF9wcm9wczkuZXJyb3IsXFxuICAgICAgICAgICAgICAgIGZvY3VzID0gX3Byb3BzOS5mb2N1cyxcXG4gICAgICAgICAgICAgICAgZm9ybSA9IF9wcm9wczkuZm9ybSxcXG4gICAgICAgICAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX3Byb3BzOS5nZXRGb3JtU3RhdGUsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxpemUgPSBfcHJvcHM5LmluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxpemVkID0gX3Byb3BzOS5pbml0aWFsaXplZCxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlcyA9IF9wcm9wczkuaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICAgICAgaW52YWxpZCA9IF9wcm9wczkuaW52YWxpZCxcXG4gICAgICAgICAgICAgICAga2VlcERpcnR5T25SZWluaXRpYWxpemUgPSBfcHJvcHM5LmtlZXBEaXJ0eU9uUmVpbml0aWFsaXplLFxcbiAgICAgICAgICAgICAgICBwcmlzdGluZSA9IF9wcm9wczkucHJpc3RpbmUsXFxuICAgICAgICAgICAgICAgIHByb3BOYW1lc3BhY2UgPSBfcHJvcHM5LnByb3BOYW1lc3BhY2UsXFxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyZWRGaWVsZHMgPSBfcHJvcHM5LnJlZ2lzdGVyZWRGaWVsZHMsXFxuICAgICAgICAgICAgICAgIHJlZ2lzdGVyRmllbGQgPSBfcHJvcHM5LnJlZ2lzdGVyRmllbGQsXFxuICAgICAgICAgICAgICAgIHJlc2V0ID0gX3Byb3BzOS5yZXNldCxcXG4gICAgICAgICAgICAgICAgc2V0U3VibWl0RmFpbGVkID0gX3Byb3BzOS5zZXRTdWJtaXRGYWlsZWQsXFxuICAgICAgICAgICAgICAgIHNldFN1Ym1pdFN1Y2NlZWRlZCA9IF9wcm9wczkuc2V0U3VibWl0U3VjY2VlZGVkLFxcbiAgICAgICAgICAgICAgICBzaG91bGRBc3luY1ZhbGlkYXRlID0gX3Byb3BzOS5zaG91bGRBc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICBzaG91bGRWYWxpZGF0ZSA9IF9wcm9wczkuc2hvdWxkVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHN0YXJ0QXN5bmNWYWxpZGF0aW9uID0gX3Byb3BzOS5zdGFydEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3RhcnRTdWJtaXQgPSBfcHJvcHM5LnN0YXJ0U3VibWl0LFxcbiAgICAgICAgICAgICAgICBzdG9wQXN5bmNWYWxpZGF0aW9uID0gX3Byb3BzOS5zdG9wQXN5bmNWYWxpZGF0aW9uLFxcbiAgICAgICAgICAgICAgICBzdG9wU3VibWl0ID0gX3Byb3BzOS5zdG9wU3VibWl0LFxcbiAgICAgICAgICAgICAgICBzdWJtaXR0aW5nID0gX3Byb3BzOS5zdWJtaXR0aW5nLFxcbiAgICAgICAgICAgICAgICBzdWJtaXRGYWlsZWQgPSBfcHJvcHM5LnN1Ym1pdEZhaWxlZCxcXG4gICAgICAgICAgICAgICAgc3VibWl0U3VjY2VlZGVkID0gX3Byb3BzOS5zdWJtaXRTdWNjZWVkZWQsXFxuICAgICAgICAgICAgICAgIHRvdWNoID0gX3Byb3BzOS50b3VjaCxcXG4gICAgICAgICAgICAgICAgdG91Y2hPbkJsdXIgPSBfcHJvcHM5LnRvdWNoT25CbHVyLFxcbiAgICAgICAgICAgICAgICB0b3VjaE9uQ2hhbmdlID0gX3Byb3BzOS50b3VjaE9uQ2hhbmdlLFxcbiAgICAgICAgICAgICAgICBwZXJzaXN0ZW50U3VibWl0RXJyb3JzID0gX3Byb3BzOS5wZXJzaXN0ZW50U3VibWl0RXJyb3JzLFxcbiAgICAgICAgICAgICAgICBzeW5jRXJyb3JzID0gX3Byb3BzOS5zeW5jRXJyb3JzLFxcbiAgICAgICAgICAgICAgICBzeW5jV2FybmluZ3MgPSBfcHJvcHM5LnN5bmNXYXJuaW5ncyxcXG4gICAgICAgICAgICAgICAgdW5yZWdpc3RlckZpZWxkID0gX3Byb3BzOS51bnJlZ2lzdGVyRmllbGQsXFxuICAgICAgICAgICAgICAgIHVudG91Y2ggPSBfcHJvcHM5LnVudG91Y2gsXFxuICAgICAgICAgICAgICAgIHVwZGF0ZVN5bmNFcnJvcnMgPSBfcHJvcHM5LnVwZGF0ZVN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHVwZGF0ZVN5bmNXYXJuaW5ncyA9IF9wcm9wczkudXBkYXRlU3luY1dhcm5pbmdzLFxcbiAgICAgICAgICAgICAgICB2YWxpZCA9IF9wcm9wczkudmFsaWQsXFxuICAgICAgICAgICAgICAgIHZhbGlkRXhjZXB0U3VibWl0ID0gX3Byb3BzOS52YWxpZEV4Y2VwdFN1Ym1pdCxcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzOS52YWx1ZXMsXFxuICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBfcHJvcHM5Lndhcm5pbmcsXFxuICAgICAgICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzOSwgWydhbnlUb3VjaGVkJywgJ2FycmF5SW5zZXJ0JywgJ2FycmF5TW92ZScsICdhcnJheVBvcCcsICdhcnJheVB1c2gnLCAnYXJyYXlSZW1vdmUnLCAnYXJyYXlSZW1vdmVBbGwnLCAnYXJyYXlTaGlmdCcsICdhcnJheVNwbGljZScsICdhcnJheVN3YXAnLCAnYXJyYXlVbnNoaWZ0JywgJ2FzeW5jRXJyb3JzJywgJ2FzeW5jVmFsaWRhdGUnLCAnYXN5bmNWYWxpZGF0aW5nJywgJ2JsdXInLCAnY2hhbmdlJywgJ2Rlc3Ryb3knLCAnZGVzdHJveU9uVW5tb3VudCcsICdmb3JjZVVucmVnaXN0ZXJPblVubW91bnQnLCAnZGlydHknLCAnZGlzcGF0Y2gnLCAnZW5hYmxlUmVpbml0aWFsaXplJywgJ2Vycm9yJywgJ2ZvY3VzJywgJ2Zvcm0nLCAnZ2V0Rm9ybVN0YXRlJywgJ2luaXRpYWxpemUnLCAnaW5pdGlhbGl6ZWQnLCAnaW5pdGlhbFZhbHVlcycsICdpbnZhbGlkJywgJ2tlZXBEaXJ0eU9uUmVpbml0aWFsaXplJywgJ3ByaXN0aW5lJywgJ3Byb3BOYW1lc3BhY2UnLCAncmVnaXN0ZXJlZEZpZWxkcycsICdyZWdpc3RlckZpZWxkJywgJ3Jlc2V0JywgJ3NldFN1Ym1pdEZhaWxlZCcsICdzZXRTdWJtaXRTdWNjZWVkZWQnLCAnc2hvdWxkQXN5bmNWYWxpZGF0ZScsICdzaG91bGRWYWxpZGF0ZScsICdzdGFydEFzeW5jVmFsaWRhdGlvbicsICdzdGFydFN1Ym1pdCcsICdzdG9wQXN5bmNWYWxpZGF0aW9uJywgJ3N0b3BTdWJtaXQnLCAnc3VibWl0dGluZycsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0U3VjY2VlZGVkJywgJ3RvdWNoJywgJ3RvdWNoT25CbHVyJywgJ3RvdWNoT25DaGFuZ2UnLCAncGVyc2lzdGVudFN1Ym1pdEVycm9ycycsICdzeW5jRXJyb3JzJywgJ3N5bmNXYXJuaW5ncycsICd1bnJlZ2lzdGVyRmllbGQnLCAndW50b3VjaCcsICd1cGRhdGVTeW5jRXJyb3JzJywgJ3VwZGF0ZVN5bmNXYXJuaW5ncycsICd2YWxpZCcsICd2YWxpZEV4Y2VwdFN1Ym1pdCcsICd2YWx1ZXMnLCAnd2FybmluZyddKTtcXG4gICAgICAgICAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXFxuXFxuXFxuICAgICAgICAgICAgdmFyIHJlZHV4Rm9ybVByb3BzID0gX2V4dGVuZHMoe1xcbiAgICAgICAgICAgICAgYW55VG91Y2hlZDogYW55VG91Y2hlZCxcXG4gICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGU6IHRoaXMuYXN5bmNWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGluZzogYXN5bmNWYWxpZGF0aW5nXFxuICAgICAgICAgICAgfSwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKSh7IGJsdXI6IGJsdXIsIGNoYW5nZTogY2hhbmdlIH0sIGRpc3BhdGNoKSwge1xcbiAgICAgICAgICAgICAgZGVzdHJveTogZGVzdHJveSxcXG4gICAgICAgICAgICAgIGRpcnR5OiBkaXJ0eSxcXG4gICAgICAgICAgICAgIGRpc3BhdGNoOiBkaXNwYXRjaCxcXG4gICAgICAgICAgICAgIGVycm9yOiBlcnJvcixcXG4gICAgICAgICAgICAgIGZvcm06IGZvcm0sXFxuICAgICAgICAgICAgICBoYW5kbGVTdWJtaXQ6IHRoaXMuc3VibWl0LFxcbiAgICAgICAgICAgICAgaW5pdGlhbGl6ZTogaW5pdGlhbGl6ZSxcXG4gICAgICAgICAgICAgIGluaXRpYWxpemVkOiBpbml0aWFsaXplZCxcXG4gICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXM6IGluaXRpYWxWYWx1ZXMsXFxuICAgICAgICAgICAgICBpbnZhbGlkOiBpbnZhbGlkLFxcbiAgICAgICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICAgICAgcmVzZXQ6IHJlc2V0LFxcbiAgICAgICAgICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICAgICAgICAgIHN1Ym1pdEZhaWxlZDogc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICAgICAgc3VibWl0U3VjY2VlZGVkOiBzdWJtaXRTdWNjZWVkZWQsXFxuICAgICAgICAgICAgICB0b3VjaDogdG91Y2gsXFxuICAgICAgICAgICAgICB1bnRvdWNoOiB1bnRvdWNoLFxcbiAgICAgICAgICAgICAgdmFsaWQ6IHZhbGlkLFxcbiAgICAgICAgICAgICAgd2FybmluZzogd2FybmluZ1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHZhciBwcm9wc1RvUGFzcyA9IF9leHRlbmRzKHt9LCBwcm9wTmFtZXNwYWNlID8gX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wTmFtZXNwYWNlLCByZWR1eEZvcm1Qcm9wcykgOiByZWR1eEZvcm1Qcm9wcywgcmVzdCk7XFxuICAgICAgICAgICAgaWYgKGlzQ2xhc3NDb21wb25lbnQoV3JhcHBlZENvbXBvbmVudCkpIHtcXG4gICAgICAgICAgICAgIHByb3BzVG9QYXNzLnJlZiA9ICd3cmFwcGVkJztcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShXcmFwcGVkQ29tcG9uZW50LCBwcm9wc1RvUGFzcyk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1dKTtcXG5cXG4gICAgICAgIHJldHVybiBGb3JtO1xcbiAgICAgIH0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG4gICAgICBGb3JtLmRpc3BsYXlOYW1lID0gJ0Zvcm0oJyArIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX3V0aWxfZ2V0RGlzcGxheU5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKFdyYXBwZWRDb21wb25lbnQpICsgJyknO1xcbiAgICAgIEZvcm0uV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XFxuICAgICAgRm9ybS5jaGlsZENvbnRleHRUeXBlcyA9IHtcXG4gICAgICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QuaXNSZXF1aXJlZFxcbiAgICAgIH07XFxuICAgICAgRm9ybS5wcm9wVHlwZXMgPSB7XFxuICAgICAgICBkZXN0cm95T25Vbm1vdW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIGZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICBmb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nLmlzUmVxdWlyZWQsXFxuICAgICAgICBpbml0aWFsVmFsdWVzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgICAgIG9uU3VibWl0RmFpbDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICBvblN1Ym1pdFN1Y2Nlc3M6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgcHJvcE5hbWVTcGFjZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZyxcXG4gICAgICAgIHZhbGlkYXRlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgICAgIHdhcm46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgdG91Y2hPbkJsdXI6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgdG91Y2hPbkNoYW5nZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICB0cmlnZ2VyU3VibWl0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgcmVnaXN0ZXJlZEZpZWxkczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmFueVxcbiAgICAgIH07XFxuXFxuICAgICAgdmFyIGNvbm5lY3RvciA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfcmVhY3RfcmVkdXhfX1tcXFwiYVxcXCIgLyogY29ubmVjdCAqL10pKGZ1bmN0aW9uIChzdGF0ZSwgcHJvcHMpIHtcXG4gICAgICAgIHZhciBmb3JtID0gcHJvcHMuZm9ybSxcXG4gICAgICAgICAgICBnZXRGb3JtU3RhdGUgPSBwcm9wcy5nZXRGb3JtU3RhdGUsXFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlcyA9IHByb3BzLmluaXRpYWxWYWx1ZXMsXFxuICAgICAgICAgICAgZW5hYmxlUmVpbml0aWFsaXplID0gcHJvcHMuZW5hYmxlUmVpbml0aWFsaXplLFxcbiAgICAgICAgICAgIGtlZXBEaXJ0eU9uUmVpbml0aWFsaXplID0gcHJvcHMua2VlcERpcnR5T25SZWluaXRpYWxpemU7XFxuXFxuICAgICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSB8fCBlbXB0eSwgZm9ybSkgfHwgZW1wdHk7XFxuICAgICAgICB2YXIgc3RhdGVJbml0aWFsID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbCcpO1xcbiAgICAgICAgdmFyIGluaXRpYWxpemVkID0gISFzdGF0ZUluaXRpYWw7XFxuXFxuICAgICAgICB2YXIgc2hvdWxkVXBkYXRlSW5pdGlhbFZhbHVlcyA9IGVuYWJsZVJlaW5pdGlhbGl6ZSAmJiBpbml0aWFsaXplZCAmJiAhZGVlcEVxdWFsKGluaXRpYWxWYWx1ZXMsIHN0YXRlSW5pdGlhbCk7XFxuICAgICAgICB2YXIgc2hvdWxkUmVzZXRWYWx1ZXMgPSBzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzICYmICFrZWVwRGlydHlPblJlaW5pdGlhbGl6ZTtcXG5cXG4gICAgICAgIHZhciBpbml0aWFsID0gaW5pdGlhbFZhbHVlcyB8fCBzdGF0ZUluaXRpYWwgfHwgZW1wdHk7XFxuXFxuICAgICAgICBpZiAoc2hvdWxkVXBkYXRlSW5pdGlhbFZhbHVlcykge1xcbiAgICAgICAgICBpbml0aWFsID0gc3RhdGVJbml0aWFsIHx8IGVtcHR5O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIHZhbHVlcyA9IGdldEluKGZvcm1TdGF0ZSwgJ3ZhbHVlcycpIHx8IGluaXRpYWw7XFxuXFxuICAgICAgICBpZiAoc2hvdWxkUmVzZXRWYWx1ZXMpIHtcXG4gICAgICAgICAgdmFsdWVzID0gaW5pdGlhbDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHZhciBwcmlzdGluZSA9IHNob3VsZFJlc2V0VmFsdWVzIHx8IGRlZXBFcXVhbChpbml0aWFsLCB2YWx1ZXMpO1xcbiAgICAgICAgdmFyIGFzeW5jRXJyb3JzID0gZ2V0SW4oZm9ybVN0YXRlLCAnYXN5bmNFcnJvcnMnKTtcXG4gICAgICAgIHZhciBzeW5jRXJyb3JzID0gZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpIHx8IHt9O1xcbiAgICAgICAgdmFyIHN5bmNXYXJuaW5ncyA9IGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNXYXJuaW5ncycpIHx8IHt9O1xcbiAgICAgICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihmb3JtU3RhdGUsICdyZWdpc3RlcmVkRmllbGRzJyk7XFxuICAgICAgICB2YXIgdmFsaWQgPSBpc1ZhbGlkKGZvcm0sIGdldEZvcm1TdGF0ZSwgZmFsc2UpKHN0YXRlKTtcXG4gICAgICAgIHZhciB2YWxpZEV4Y2VwdFN1Ym1pdCA9IGlzVmFsaWQoZm9ybSwgZ2V0Rm9ybVN0YXRlLCB0cnVlKShzdGF0ZSk7XFxuICAgICAgICB2YXIgYW55VG91Y2hlZCA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnYW55VG91Y2hlZCcpO1xcbiAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSAhIWdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgICAgIHZhciBzdWJtaXRGYWlsZWQgPSAhIWdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEZhaWxlZCcpO1xcbiAgICAgICAgdmFyIHN1Ym1pdFN1Y2NlZWRlZCA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgICAgICB2YXIgZXJyb3IgPSBnZXRJbihmb3JtU3RhdGUsICdlcnJvcicpO1xcbiAgICAgICAgdmFyIHdhcm5pbmcgPSBnZXRJbihmb3JtU3RhdGUsICd3YXJuaW5nJyk7XFxuICAgICAgICB2YXIgdHJpZ2dlclN1Ym1pdCA9IGdldEluKGZvcm1TdGF0ZSwgJ3RyaWdnZXJTdWJtaXQnKTtcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgIGFueVRvdWNoZWQ6IGFueVRvdWNoZWQsXFxuICAgICAgICAgIGFzeW5jRXJyb3JzOiBhc3luY0Vycm9ycyxcXG4gICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY1ZhbGlkYXRpbmcnKSB8fCBmYWxzZSxcXG4gICAgICAgICAgZGlydHk6ICFwcmlzdGluZSxcXG4gICAgICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgICAgICBpbml0aWFsaXplZDogaW5pdGlhbGl6ZWQsXFxuICAgICAgICAgIGludmFsaWQ6ICF2YWxpZCxcXG4gICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICByZWdpc3RlcmVkRmllbGRzOiByZWdpc3RlcmVkRmllbGRzLFxcbiAgICAgICAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxcbiAgICAgICAgICBzdWJtaXRGYWlsZWQ6IHN1Ym1pdEZhaWxlZCxcXG4gICAgICAgICAgc3VibWl0U3VjY2VlZGVkOiBzdWJtaXRTdWNjZWVkZWQsXFxuICAgICAgICAgIHN5bmNFcnJvcnM6IHN5bmNFcnJvcnMsXFxuICAgICAgICAgIHN5bmNXYXJuaW5nczogc3luY1dhcm5pbmdzLFxcbiAgICAgICAgICB0cmlnZ2VyU3VibWl0OiB0cmlnZ2VyU3VibWl0LFxcbiAgICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcXG4gICAgICAgICAgdmFsaWQ6IHZhbGlkLFxcbiAgICAgICAgICB2YWxpZEV4Y2VwdFN1Ym1pdDogdmFsaWRFeGNlcHRTdWJtaXQsXFxuICAgICAgICAgIHdhcm5pbmc6IHdhcm5pbmdcXG4gICAgICAgIH07XFxuICAgICAgfSwgZnVuY3Rpb24gKGRpc3BhdGNoLCBpbml0aWFsUHJvcHMpIHtcXG4gICAgICAgIHZhciBiaW5kRm9ybSA9IGZ1bmN0aW9uIGJpbmRGb3JtKGFjdGlvbkNyZWF0b3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGFjdGlvbkNyZWF0b3IuYmluZChudWxsLCBpbml0aWFsUHJvcHMuZm9ybSk7XFxuICAgICAgICB9O1xcblxcbiAgICAgICAgLy8gQmluZCB0aGUgZmlyc3QgcGFyYW1ldGVyIG9uIGBwcm9wcy5mb3JtYFxcbiAgICAgICAgdmFyIGJvdW5kRm9ybUFDcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfbG9kYXNoX2VzX21hcFZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZm9ybUFjdGlvbnMsIGJpbmRGb3JtKTtcXG4gICAgICAgIHZhciBib3VuZEFycmF5QUNzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShhcnJheUFjdGlvbnMsIGJpbmRGb3JtKTtcXG4gICAgICAgIHZhciBib3VuZEJsdXIgPSBmdW5jdGlvbiBib3VuZEJsdXIoZmllbGQsIHZhbHVlKSB7XFxuICAgICAgICAgIHJldHVybiBibHVyKGluaXRpYWxQcm9wcy5mb3JtLCBmaWVsZCwgdmFsdWUsICEhaW5pdGlhbFByb3BzLnRvdWNoT25CbHVyKTtcXG4gICAgICAgIH07XFxuICAgICAgICB2YXIgYm91bmRDaGFuZ2UgPSBmdW5jdGlvbiBib3VuZENoYW5nZShmaWVsZCwgdmFsdWUpIHtcXG4gICAgICAgICAgcmV0dXJuIGNoYW5nZShpbml0aWFsUHJvcHMuZm9ybSwgZmllbGQsIHZhbHVlLCAhIWluaXRpYWxQcm9wcy50b3VjaE9uQ2hhbmdlLCAhIWluaXRpYWxQcm9wcy5wZXJzaXN0ZW50U3VibWl0RXJyb3JzKTtcXG4gICAgICAgIH07XFxuICAgICAgICB2YXIgYm91bmRGb2N1cyA9IGJpbmRGb3JtKGZvY3VzKTtcXG5cXG4gICAgICAgIC8vIFdyYXAgYWN0aW9uIGNyZWF0b3JzIHdpdGggYGRpc3BhdGNoYFxcbiAgICAgICAgdmFyIGNvbm5lY3RlZEZvcm1BQ3MgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kRm9ybUFDcywgZGlzcGF0Y2gpO1xcbiAgICAgICAgdmFyIGNvbm5lY3RlZEFycmF5QUNzID0ge1xcbiAgICAgICAgICBpbnNlcnQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheUluc2VydCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICBtb3ZlOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlNb3ZlLCBkaXNwYXRjaCksXFxuICAgICAgICAgIHBvcDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5UG9wLCBkaXNwYXRjaCksXFxuICAgICAgICAgIHB1c2g6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVB1c2gsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcmVtb3ZlOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlSZW1vdmUsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcmVtb3ZlQWxsOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlSZW1vdmVBbGwsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc2hpZnQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVNoaWZ0LCBkaXNwYXRjaCksXFxuICAgICAgICAgIHNwbGljZTogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U3BsaWNlLCBkaXNwYXRjaCksXFxuICAgICAgICAgIHN3YXA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVN3YXAsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgdW5zaGlmdDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5VW5zaGlmdCwgZGlzcGF0Y2gpXFxuICAgICAgICB9O1xcblxcbiAgICAgICAgdmFyIGNvbXB1dGVkQWN0aW9ucyA9IF9leHRlbmRzKHt9LCBjb25uZWN0ZWRGb3JtQUNzLCBib3VuZEFycmF5QUNzLCB7XFxuICAgICAgICAgIGJsdXI6IGJvdW5kQmx1cixcXG4gICAgICAgICAgY2hhbmdlOiBib3VuZENoYW5nZSxcXG4gICAgICAgICAgYXJyYXk6IGNvbm5lY3RlZEFycmF5QUNzLFxcbiAgICAgICAgICBmb2N1czogYm91bmRGb2N1cyxcXG4gICAgICAgICAgZGlzcGF0Y2g6IGRpc3BhdGNoXFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgIHJldHVybiBjb21wdXRlZEFjdGlvbnM7XFxuICAgICAgICB9O1xcbiAgICAgIH0sIHVuZGVmaW5lZCwgeyB3aXRoUmVmOiB0cnVlIH0pO1xcbiAgICAgIHZhciBDb25uZWN0ZWRGb3JtID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX19fZGVmYXVsdCgpKGNvbm5lY3RvcihGb3JtKSwgV3JhcHBlZENvbXBvbmVudCk7XFxuICAgICAgQ29ubmVjdGVkRm9ybS5kZWZhdWx0UHJvcHMgPSBjb25maWc7XFxuXFxuICAgICAgLy8gYnVpbGQgb3V0ZXIgY29tcG9uZW50IHRvIGV4cG9zZSBpbnN0YW5jZSBhcGlcXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKF9Db21wb25lbnQyKSB7XFxuICAgICAgICBfaW5oZXJpdHMoUmVkdXhGb3JtLCBfQ29tcG9uZW50Mik7XFxuXFxuICAgICAgICBmdW5jdGlvbiBSZWR1eEZvcm0oKSB7XFxuICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWR1eEZvcm0pO1xcblxcbiAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFJlZHV4Rm9ybS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKFJlZHV4Rm9ybSkpLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgX2NyZWF0ZUNsYXNzKFJlZHV4Rm9ybSwgW3tcXG4gICAgICAgICAga2V5OiAnc3VibWl0JyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuc3VibWl0KCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAncmVzZXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLnJlc2V0KCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzMTAgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gX3Byb3BzMTAuaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMxMCwgWydpbml0aWFsVmFsdWVzJ10pO1xcblxcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRm9ybSwgX2V4dGVuZHMoe30sIHJlc3QsIHtcXG4gICAgICAgICAgICAgIHJlZjogJ3dyYXBwZWQnLFxcbiAgICAgICAgICAgICAgLy8gY29udmVydCBpbml0aWFsVmFsdWVzIGlmIG5lZWQgdG9cXG4gICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXM6IGZyb21KUyhpbml0aWFsVmFsdWVzKVxcbiAgICAgICAgICAgIH0pKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd2YWxpZCcsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnMud3JhcHBlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5pc1ZhbGlkKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnaW52YWxpZCcsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy52YWxpZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnMud3JhcHBlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5pc1ByaXN0aW5lKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZGlydHknLFxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMucHJpc3RpbmU7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAndmFsdWVzJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlcygpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2ZpZWxkTGlzdCcsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIC8vIG1haW5seSBwcm92aWRlZCBmb3IgdGVzdGluZ1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnMud3JhcHBlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRGaWVsZExpc3QoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd3cmFwcGVkSW5zdGFuY2UnLFxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgICAgICAvLyBmb3IgdGVzdGluZVxcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnMud3JhcHBlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5yZWZzLndyYXBwZWQ7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1dKTtcXG5cXG4gICAgICAgIHJldHVybiBSZWR1eEZvcm07XFxuICAgICAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZVJlZHV4Rm9ybSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMTIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlTWVyZ2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19jcmVhdGVBc3NpZ25lcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDcpO1xcblxcblxcblxcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYXNzaWduYCBleGNlcHQgdGhhdCBpdCByZWN1cnNpdmVseSBtZXJnZXMgb3duIGFuZFxcbiAqIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0aWVzIG9mIHNvdXJjZSBvYmplY3RzIGludG8gdGhlXFxuICogZGVzdGluYXRpb24gb2JqZWN0LiBTb3VyY2UgcHJvcGVydGllcyB0aGF0IHJlc29sdmUgdG8gYHVuZGVmaW5lZGAgYXJlXFxuICogc2tpcHBlZCBpZiBhIGRlc3RpbmF0aW9uIHZhbHVlIGV4aXN0cy4gQXJyYXkgYW5kIHBsYWluIG9iamVjdCBwcm9wZXJ0aWVzXFxuICogYXJlIG1lcmdlZCByZWN1cnNpdmVseS4gT3RoZXIgb2JqZWN0cyBhbmQgdmFsdWUgdHlwZXMgYXJlIG92ZXJyaWRkZW4gYnlcXG4gKiBhc3NpZ25tZW50LiBTb3VyY2Ugb2JqZWN0cyBhcmUgYXBwbGllZCBmcm9tIGxlZnQgdG8gcmlnaHQuIFN1YnNlcXVlbnRcXG4gKiBzb3VyY2VzIG92ZXJ3cml0ZSBwcm9wZXJ0eSBhc3NpZ25tZW50cyBvZiBwcmV2aW91cyBzb3VyY2VzLlxcbiAqXFxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIG11dGF0ZXMgYG9iamVjdGAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC41LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxcbiAqIEBwYXJhbSB7Li4uT2JqZWN0fSBbc291cmNlc10gVGhlIHNvdXJjZSBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSB7XFxuICogICAnYSc6IFt7ICdiJzogMiB9LCB7ICdkJzogNCB9XVxcbiAqIH07XFxuICpcXG4gKiB2YXIgb3RoZXIgPSB7XFxuICogICAnYSc6IFt7ICdjJzogMyB9LCB7ICdlJzogNSB9XVxcbiAqIH07XFxuICpcXG4gKiBfLm1lcmdlKG9iamVjdCwgb3RoZXIpO1xcbiAqIC8vID0+IHsgJ2EnOiBbeyAnYic6IDIsICdjJzogMyB9LCB7ICdkJzogNCwgJ2UnOiA1IH1dIH1cXG4gKi9cXG52YXIgbWVyZ2UgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19jcmVhdGVBc3NpZ25lcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KSB7XFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlTWVyZ2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCk7XFxufSk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWVyZ2UpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Fzc2lnbk1lcmdlVmFsdWVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Jhc2VGb3JfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2Jhc2VNZXJnZURlZXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19rZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3NhZmVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjEpO1xcblxcblxcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1lcmdlYCB3aXRob3V0IHN1cHBvcnQgZm9yIG11bHRpcGxlIHNvdXJjZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIGRlc3RpbmF0aW9uIG9iamVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBzb3VyY2Ugb2JqZWN0LlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgbWVyZ2VkIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxcbiAqICBjb3VudGVycGFydHMuXFxuICovXFxuZnVuY3Rpb24gYmFzZU1lcmdlKG9iamVjdCwgc291cmNlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spIHtcXG4gIGlmIChvYmplY3QgPT09IHNvdXJjZSkge1xcbiAgICByZXR1cm47XFxuICB9XFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19iYXNlRm9yX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzb3VyY2UsIGZ1bmN0aW9uKHNyY1ZhbHVlLCBrZXkpIHtcXG4gICAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSkpIHtcXG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuICAgICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYmFzZU1lcmdlRGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBzb3VyY2UsIGtleSwgc3JjSW5kZXgsIGJhc2VNZXJnZSwgY3VzdG9taXplciwgc3RhY2spO1xcbiAgICB9XFxuICAgIGVsc2Uge1xcbiAgICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcXG4gICAgICAgID8gY3VzdG9taXplcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19zYWZlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSksIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXFxuICAgICAgICA6IHVuZGVmaW5lZDtcXG5cXG4gICAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgbmV3VmFsdWUgPSBzcmNWYWx1ZTtcXG4gICAgICB9XFxuICAgICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcXG4gICAgfVxcbiAgfSwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19rZXlzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlTWVyZ2UpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG5cXG5cXG4vKipcXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgU3RhY2tcXG4gKi9cXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0xpc3RDYWNoZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG4gIHRoaXMuc2l6ZSA9IDA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0YWNrQ2xlYXIpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBkZWxldGVcXG4gKiBAbWVtYmVyT2YgU3RhY2tcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XFxuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcXG5cXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0YWNrRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgZ2V0XFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0YWNrR2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcXG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdGFja0hhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTI3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fTWFwQ2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xcblxcblxcblxcblxcbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xcbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xcblxcbi8qKlxcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XFxuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XFxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSB7XFxuICAgIHZhciBwYWlycyA9IGRhdGEuX19kYXRhX187XFxuICAgIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19NYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcXG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcXG4gICAgICByZXR1cm4gdGhpcztcXG4gICAgfVxcbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX01hcENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKHBhaXJzKTtcXG4gIH1cXG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0YWNrU2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENyZWF0ZXMgYSBiYXNlIGZ1bmN0aW9uIGZvciBtZXRob2RzIGxpa2UgYF8uZm9ySW5gIGFuZCBgXy5mb3JPd25gLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBiYXNlIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGNyZWF0ZUJhc2VGb3IoZnJvbVJpZ2h0KSB7XFxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBpdGVyYXRlZSwga2V5c0Z1bmMpIHtcXG4gICAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChvYmplY3QpLFxcbiAgICAgICAgcHJvcHMgPSBrZXlzRnVuYyhvYmplY3QpLFxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xcblxcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcXG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XFxuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2tleV0sIGtleSwgaXRlcmFibGUpID09PSBmYWxzZSkge1xcbiAgICAgICAgYnJlYWs7XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBvYmplY3Q7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVCYXNlRm9yKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnbk1lcmdlVmFsdWVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Nsb25lQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY2xvbmVUeXBlZEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fY29weUFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pbml0Q2xvbmVPYmplY3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19pc0FycmF5TGlrZU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9faXNPYmplY3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX2lzUGxhaW5PYmplY3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19zYWZlR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fdG9QbGFpbk9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDEpO1xcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZU1lcmdlYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXFxuICogZGVlcCBtZXJnZXMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcXG4gKiByZWZlcmVuY2VzIHRvIGJlIG1lcmdlZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBtZXJnZS5cXG4gKiBAcGFyYW0ge251bWJlcn0gc3JjSW5kZXggVGhlIGluZGV4IG9mIGBzb3VyY2VgLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRnVuYyBUaGUgZnVuY3Rpb24gdG8gbWVyZ2UgdmFsdWVzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGFzc2lnbmVkIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIHNvdXJjZSB2YWx1ZXMgYW5kIHRoZWlyIG1lcmdlZFxcbiAqICBjb3VudGVycGFydHMuXFxuICovXFxuZnVuY3Rpb24gYmFzZU1lcmdlRGVlcChvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgbWVyZ2VGdW5jLCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgdmFyIG9ialZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5KSxcXG4gICAgICBzcmNWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX19zYWZlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzb3VyY2UsIGtleSksXFxuICAgICAgc3RhY2tlZCA9IHN0YWNrLmdldChzcmNWYWx1ZSk7XFxuXFxuICBpZiAoc3RhY2tlZCkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NpZ25NZXJnZVZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgc3RhY2tlZCk7XFxuICAgIHJldHVybjtcXG4gIH1cXG4gIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcXG4gICAgPyBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwgKGtleSArICcnKSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKVxcbiAgICA6IHVuZGVmaW5lZDtcXG5cXG4gIHZhciBpc0NvbW1vbiA9IG5ld1ZhbHVlID09PSB1bmRlZmluZWQ7XFxuXFxuICBpZiAoaXNDb21tb24pIHtcXG4gICAgdmFyIGlzQXJyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpLFxcbiAgICAgICAgaXNCdWZmID0gIWlzQXJyICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSksXFxuICAgICAgICBpc1R5cGVkID0gIWlzQXJyICYmICFpc0J1ZmYgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX2lzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpO1xcblxcbiAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xcbiAgICBpZiAoaXNBcnIgfHwgaXNCdWZmIHx8IGlzVHlwZWQpIHtcXG4gICAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IG9ialZhbHVlO1xcbiAgICAgIH1cXG4gICAgICBlbHNlIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19pc0FycmF5TGlrZU9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2NvcHlBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgICBlbHNlIGlmIChpc0J1ZmYpIHtcXG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XFxuICAgICAgICBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Nsb25lQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgdHJ1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKGlzVHlwZWQpIHtcXG4gICAgICAgIGlzQ29tbW9uID0gZmFsc2U7XFxuICAgICAgICBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Nsb25lVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUsIHRydWUpO1xcbiAgICAgIH1cXG4gICAgICBlbHNlIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gW107XFxuICAgICAgfVxcbiAgICB9XFxuICAgIGVsc2UgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19pc1BsYWluT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSkge1xcbiAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XFxuICAgICAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzQXJndW1lbnRzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX3RvUGxhaW5PYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlKTtcXG4gICAgICB9XFxuICAgICAgZWxzZSBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19pc09iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX2lzRnVuY3Rpb25fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlKSkge1xcbiAgICAgICAgbmV3VmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pbml0Q2xvbmVPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgaWYgKGlzQ29tbW9uKSB7XFxuICAgIC8vIFJlY3Vyc2l2ZWx5IG1lcmdlIG9iamVjdHMgYW5kIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxcbiAgICBzdGFjay5zZXQoc3JjVmFsdWUsIG5ld1ZhbHVlKTtcXG4gICAgbWVyZ2VGdW5jKG5ld1ZhbHVlLCBzcmNWYWx1ZSwgc3JjSW5kZXgsIGN1c3RvbWl6ZXIsIHN0YWNrKTtcXG4gICAgc3RhY2tbJ2RlbGV0ZSddKHNyY1ZhbHVlKTtcXG4gIH1cXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnbk1lcmdlVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5LCBuZXdWYWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNZXJnZURlZXApO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEzMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKG1vZHVsZSkgey8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xcbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XFxuXFxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgQnVmZmVyID0gbW9kdWxlRXhwb3J0cyA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5CdWZmZXIgOiB1bmRlZmluZWQsXFxuICAgIGFsbG9jVW5zYWZlID0gQnVmZmVyID8gQnVmZmVyLmFsbG9jVW5zYWZlIDogdW5kZWZpbmVkO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBjbG9uZSBvZiAgYGJ1ZmZlcmAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXIgVGhlIGJ1ZmZlciB0byBjbG9uZS5cXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0RlZXBdIFNwZWNpZnkgYSBkZWVwIGNsb25lLlxcbiAqIEByZXR1cm5zIHtCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBidWZmZXIuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyLCBpc0RlZXApIHtcXG4gIGlmIChpc0RlZXApIHtcXG4gICAgcmV0dXJuIGJ1ZmZlci5zbGljZSgpO1xcbiAgfVxcbiAgdmFyIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGgsXFxuICAgICAgcmVzdWx0ID0gYWxsb2NVbnNhZmUgPyBhbGxvY1Vuc2FmZShsZW5ndGgpIDogbmV3IGJ1ZmZlci5jb25zdHJ1Y3RvcihsZW5ndGgpO1xcblxcbiAgYnVmZmVyLmNvcHkocmVzdWx0KTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNsb25lQnVmZmVyKTtcXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygyMikobW9kdWxlKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMTMxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jbG9uZUFycmF5QnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzMik7XFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGB0eXBlZEFycmF5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHR5cGVkQXJyYXkgVGhlIHR5cGVkIGFycmF5IHRvIGNsb25lLlxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2xvbmVkIHR5cGVkIGFycmF5LlxcbiAqL1xcbmZ1bmN0aW9uIGNsb25lVHlwZWRBcnJheSh0eXBlZEFycmF5LCBpc0RlZXApIHtcXG4gIHZhciBidWZmZXIgPSBpc0RlZXAgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jbG9uZUFycmF5QnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjtcXG4gIHJldHVybiBuZXcgdHlwZWRBcnJheS5jb25zdHJ1Y3RvcihidWZmZXIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjbG9uZVR5cGVkQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEzMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fVWludDhBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1OCk7XFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGNsb25lIG9mIGBhcnJheUJ1ZmZlcmAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXlCdWZmZXJ9IGFycmF5QnVmZmVyIFRoZSBhcnJheSBidWZmZXIgdG8gY2xvbmUuXFxuICogQHJldHVybnMge0FycmF5QnVmZmVyfSBSZXR1cm5zIHRoZSBjbG9uZWQgYXJyYXkgYnVmZmVyLlxcbiAqL1xcbmZ1bmN0aW9uIGNsb25lQXJyYXlCdWZmZXIoYXJyYXlCdWZmZXIpIHtcXG4gIHZhciByZXN1bHQgPSBuZXcgYXJyYXlCdWZmZXIuY29uc3RydWN0b3IoYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCk7XFxuICBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19VaW50OEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKHJlc3VsdCkuc2V0KG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10oYXJyYXlCdWZmZXIpKTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNsb25lQXJyYXlCdWZmZXIpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEzMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUNyZWF0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFByb3RvdHlwZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNQcm90b3R5cGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIEluaXRpYWxpemVzIGFuIG9iamVjdCBjbG9uZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNsb25lLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGluaXRpYWxpemVkIGNsb25lLlxcbiAqL1xcbmZ1bmN0aW9uIGluaXRDbG9uZU9iamVjdChvYmplY3QpIHtcXG4gIHJldHVybiAodHlwZW9mIG9iamVjdC5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmICFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc1Byb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSlcXG4gICAgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQ3JlYXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpXFxuICAgIDoge307XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGluaXRDbG9uZU9iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTM0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXFxuICogcHJvcGVydGllcyB0byB0aGUgY3JlYXRlZCBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm90byBUaGUgb2JqZWN0IHRvIGluaGVyaXQgZnJvbS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxcbiAqL1xcbnZhciBiYXNlQ3JlYXRlID0gKGZ1bmN0aW9uKCkge1xcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cXG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xcbiAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwcm90bykpIHtcXG4gICAgICByZXR1cm4ge307XFxuICAgIH1cXG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xcbiAgICB9XFxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcXG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XFxuICAgIG9iamVjdC5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9O1xcbn0oKSk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUNyZWF0ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTM1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJztcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0FyZ3VtZW50c2AuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNBcmd1bWVudHModmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgPT0gYXJnc1RhZztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUlzQXJndW1lbnRzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5pc0FycmF5TGlrZWAgZXhjZXB0IHRoYXQgaXQgYWxzbyBjaGVja3MgaWYgYHZhbHVlYFxcbiAqIGlzIGFuIG9iamVjdC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXktbGlrZSBvYmplY3QsXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChbMSwgMiwgM10pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdCgnYWJjJyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2VPYmplY3QoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheUxpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcnJheUxpa2VPYmplY3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEzNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMTMuMFxcbiAqIEBjYXRlZ29yeSBVdGlsXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XFxuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cXG4gKi9cXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XFxuICByZXR1cm4gZmFsc2U7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0dWJGYWxzZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzTGVuZ3RoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc09iamVjdExpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcXG5cXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XFxuXFxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xcbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cXG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cXG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcXG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cXG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cXG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XFxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmXFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzTGVuZ3RoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpXTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUlzVHlwZWRBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTM5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcXG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlVW5hcnkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKG1vZHVsZSkgey8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2ZyZWVHbG9iYWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTEpO1xcblxcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXFxudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xcblxcbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXFxudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXFxudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2ZyZWVHbG9iYWxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ucHJvY2VzcztcXG5cXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XFxuICB0cnkge1xcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XFxuXFxuICAgIGlmICh0eXBlcykge1xcbiAgICAgIHJldHVybiB0eXBlcztcXG4gICAgfVxcblxcbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxcbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XFxuICB9IGNhdGNoIChlKSB7fVxcbn0oKSk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobm9kZVV0aWwpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxNDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcHlPYmplY3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19rZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjIpO1xcblxcblxcblxcbi8qKlxcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBwbGFpbiBvYmplY3QgZmxhdHRlbmluZyBpbmhlcml0ZWQgZW51bWVyYWJsZSBzdHJpbmdcXG4gKiBrZXllZCBwcm9wZXJ0aWVzIG9mIGB2YWx1ZWAgdG8gb3duIHByb3BlcnRpZXMgb2YgdGhlIHBsYWluIG9iamVjdC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAzLjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgcGxhaW4gb2JqZWN0LlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBGb28oKSB7XFxuICogICB0aGlzLmIgPSAyO1xcbiAqIH1cXG4gKlxcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XFxuICpcXG4gKiBfLmFzc2lnbih7ICdhJzogMSB9LCBuZXcgRm9vKTtcXG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyIH1cXG4gKlxcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIF8udG9QbGFpbk9iamVjdChuZXcgRm9vKSk7XFxuICogLy8gPT4geyAnYSc6IDEsICdiJzogMiwgJ2MnOiAzIH1cXG4gKi9cXG5mdW5jdGlvbiB0b1BsYWluT2JqZWN0KHZhbHVlKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29weU9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAodG9QbGFpbk9iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NpZ25WYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ29waWVzIHByb3BlcnRpZXMgb2YgYHNvdXJjZWAgdG8gYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbS5cXG4gKiBAcGFyYW0ge0FycmF5fSBwcm9wcyBUaGUgcHJvcGVydHkgaWRlbnRpZmllcnMgdG8gY29weS5cXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdD17fV0gVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgdG8uXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29waWVkIHZhbHVlcy5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxcbiAqL1xcbmZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7XFxuICB2YXIgaXNOZXcgPSAhb2JqZWN0O1xcbiAgb2JqZWN0IHx8IChvYmplY3QgPSB7fSk7XFxuXFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XFxuXFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICB2YXIga2V5ID0gcHJvcHNbaW5kZXhdO1xcblxcbiAgICB2YXIgbmV3VmFsdWUgPSBjdXN0b21pemVyXFxuICAgICAgPyBjdXN0b21pemVyKG9iamVjdFtrZXldLCBzb3VyY2Vba2V5XSwga2V5LCBvYmplY3QsIHNvdXJjZSlcXG4gICAgICA6IHVuZGVmaW5lZDtcXG5cXG4gICAgaWYgKG5ld1ZhbHVlID09PSB1bmRlZmluZWQpIHtcXG4gICAgICBuZXdWYWx1ZSA9IHNvdXJjZVtrZXldO1xcbiAgICB9XFxuICAgIGlmIChpc05ldykge1xcbiAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NpZ25WYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIG9iamVjdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY29weU9iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQXNzaWduVmFsdWVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcblxcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIEFzc2lnbnMgYHZhbHVlYCB0byBga2V5YCBvZiBgb2JqZWN0YCBpZiB0aGUgZXhpc3RpbmcgdmFsdWUgaXMgbm90IGVxdWl2YWxlbnRcXG4gKiB1c2luZyBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXFxuICovXFxuZnVuY3Rpb24gYXNzaWduVmFsdWUob2JqZWN0LCBrZXksIHZhbHVlKSB7XFxuICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XTtcXG4gIGlmICghKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2VxX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSwgdmFsdWUpKSB8fFxcbiAgICAgICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIHZhbHVlKTtcXG4gIH1cXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYXNzaWduVmFsdWUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udGltZXNgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kc1xcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiByZXN1bHRzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XFxuXFxuICB3aGlsZSAoKytpbmRleCA8IG4pIHtcXG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VUaW1lcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc1Byb3RvdHlwZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbmF0aXZlS2V5c0luX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Nik7XFxuXFxuXFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c0luYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VLZXlzSW4ob2JqZWN0KSB7XFxuICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19uYXRpdmVLZXlzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCk7XFxuICB9XFxuICB2YXIgaXNQcm90byA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzUHJvdG90eXBlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpLFxcbiAgICAgIHJlc3VsdCA9IFtdO1xcblxcbiAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xcbiAgICBpZiAoIShrZXkgPT0gJ2NvbnN0cnVjdG9yJyAmJiAoaXNQcm90byB8fCAhaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpKSkge1xcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VLZXlzSW4pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlXFxuICogW2BPYmplY3Qua2V5c2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxcbiAqIGV4Y2VwdCB0aGF0IGl0IGluY2x1ZGVzIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqL1xcbmZ1bmN0aW9uIG5hdGl2ZUtleXNJbihvYmplY3QpIHtcXG4gIHZhciByZXN1bHQgPSBbXTtcXG4gIGlmIChvYmplY3QgIT0gbnVsbCkge1xcbiAgICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChuYXRpdmVLZXlzSW4pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVJlc3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0l0ZXJhdGVlQ2FsbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTUpO1xcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiBsaWtlIGBfLmFzc2lnbmAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGFzc2lnbmVyIFRoZSBmdW5jdGlvbiB0byBhc3NpZ24gdmFsdWVzLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFzc2lnbmVyIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGNyZWF0ZUFzc2lnbmVyKGFzc2lnbmVyKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVJlc3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKG9iamVjdCwgc291cmNlcykge1xcbiAgICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICAgIGxlbmd0aCA9IHNvdXJjZXMubGVuZ3RoLFxcbiAgICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA+IDEgPyBzb3VyY2VzW2xlbmd0aCAtIDFdIDogdW5kZWZpbmVkLFxcbiAgICAgICAgZ3VhcmQgPSBsZW5ndGggPiAyID8gc291cmNlc1syXSA6IHVuZGVmaW5lZDtcXG5cXG4gICAgY3VzdG9taXplciA9IChhc3NpZ25lci5sZW5ndGggPiAzICYmIHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicpXFxuICAgICAgPyAobGVuZ3RoLS0sIGN1c3RvbWl6ZXIpXFxuICAgICAgOiB1bmRlZmluZWQ7XFxuXFxuICAgIGlmIChndWFyZCAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0l0ZXJhdGVlQ2FsbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc291cmNlc1swXSwgc291cmNlc1sxXSwgZ3VhcmQpKSB7XFxuICAgICAgY3VzdG9taXplciA9IGxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiBjdXN0b21pemVyO1xcbiAgICAgIGxlbmd0aCA9IDE7XFxuICAgIH1cXG4gICAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgICAgdmFyIHNvdXJjZSA9IHNvdXJjZXNbaW5kZXhdO1xcbiAgICAgIGlmIChzb3VyY2UpIHtcXG4gICAgICAgIGFzc2lnbmVyKG9iamVjdCwgc291cmNlLCBpbmRleCwgY3VzdG9taXplcik7XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBvYmplY3Q7XFxuICB9KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQXNzaWduZXIpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faWRlbnRpdHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX292ZXJSZXN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc2V0VG9TdHJpbmdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUxKTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VSZXN0KGZ1bmMsIHN0YXJ0KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc2V0VG9TdHJpbmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX292ZXJSZXN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCBzdGFydCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pZGVudGl0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSksIGZ1bmMgKyAnJyk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VSZXN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwcGx5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1MCk7XFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xcbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcXG5cXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VSZXN0YCB3aGljaCB0cmFuc2Zvcm1zIHRoZSByZXN0IGFycmF5LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhcHBseSBhIHJlc3QgcGFyYW1ldGVyIHRvLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIHJlc3QgYXJyYXkgdHJhbnNmb3JtLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCB0cmFuc2Zvcm0pIHtcXG4gIHN0YXJ0ID0gbmF0aXZlTWF4KHN0YXJ0ID09PSB1bmRlZmluZWQgPyAoZnVuYy5sZW5ndGggLSAxKSA6IHN0YXJ0LCAwKTtcXG4gIHJldHVybiBmdW5jdGlvbigpIHtcXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXFxuICAgICAgICBpbmRleCA9IC0xLFxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxcbiAgICAgICAgYXJyYXkgPSBBcnJheShsZW5ndGgpO1xcblxcbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICAgIGFycmF5W2luZGV4XSA9IGFyZ3Nbc3RhcnQgKyBpbmRleF07XFxuICAgIH1cXG4gICAgaW5kZXggPSAtMTtcXG4gICAgdmFyIG90aGVyQXJncyA9IEFycmF5KHN0YXJ0ICsgMSk7XFxuICAgIHdoaWxlICgrK2luZGV4IDwgc3RhcnQpIHtcXG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XFxuICAgIH1cXG4gICAgb3RoZXJBcmdzW3N0YXJ0XSA9IHRyYW5zZm9ybShhcnJheSk7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcHBseV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuYywgdGhpcywgb3RoZXJBcmdzKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG92ZXJSZXN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXFxuICogQHBhcmFtIHsqfSB0aGlzQXJnIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXFxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cXG4gKi9cXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XFxuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XFxuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnKTtcXG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XFxuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcHBseSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTUxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlU2V0VG9TdHJpbmdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zaG9ydE91dF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTQpO1xcblxcblxcblxcbi8qKlxcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXFxuICovXFxudmFyIHNldFRvU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc2hvcnRPdXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVNldFRvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRUb1N0cmluZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTUyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb25zdGFudF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pZGVudGl0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYHNldFRvU3RyaW5nYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxcbiAqL1xcbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faWRlbnRpdHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBmdW5jdGlvbihmdW5jLCBzdHJpbmcpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuYywgJ3RvU3RyaW5nJywge1xcbiAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcXG4gICAgJ2VudW1lcmFibGUnOiBmYWxzZSxcXG4gICAgJ3ZhbHVlJzogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29uc3RhbnRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cmluZyksXFxuICAgICd3cml0YWJsZSc6IHRydWVcXG4gIH0pO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVNldFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAyLjQuMFxcbiAqIEBjYXRlZ29yeSBVdGlsXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjb25zdGFudCBmdW5jdGlvbi5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdHMgPSBfLnRpbWVzKDIsIF8uY29uc3RhbnQoeyAnYSc6IDEgfSkpO1xcbiAqXFxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XFxuICogLy8gPT4gW3sgJ2EnOiAxIH0sIHsgJ2EnOiAxIH1dXFxuICpcXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcXG4gKiAvLyA9PiB0cnVlXFxuICovXFxuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcXG4gIHJldHVybiBmdW5jdGlvbigpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY29uc3RhbnQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xcbnZhciBIT1RfQ09VTlQgPSA4MDAsXFxuICAgIEhPVF9TUEFOID0gMTY7XFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xcbnZhciBuYXRpdmVOb3cgPSBEYXRlLm5vdztcXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCdsbCBzaG9ydCBvdXQgYW5kIGludm9rZSBgaWRlbnRpdHlgIGluc3RlYWRcXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcXG4gKiBtaWxsaXNlY29uZHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNob3J0YWJsZSBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XFxuICB2YXIgY291bnQgPSAwLFxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xcblxcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XFxuXFxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcXG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcXG4gICAgICBpZiAoKytjb3VudCA+PSBIT1RfQ09VTlQpIHtcXG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XFxuICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgIGNvdW50ID0gMDtcXG4gICAgfVxcbiAgICByZXR1cm4gZnVuYy5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cyk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzaG9ydE91dCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19lcV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FycmF5TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNJbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNPYmplY3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNCk7XFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIHRoZSBnaXZlbiBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIHZhbHVlIGFyZ3VtZW50LlxcbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXFxuICogQHBhcmFtIHsqfSBvYmplY3QgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBvYmplY3QgYXJndW1lbnQuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcmd1bWVudHMgYXJlIGZyb20gYW4gaXRlcmF0ZWUgY2FsbCxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGlzSXRlcmF0ZWVDYWxsKHZhbHVlLCBpbmRleCwgb2JqZWN0KSB7XFxuICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciB0eXBlID0gdHlwZW9mIGluZGV4O1xcbiAgaWYgKHR5cGUgPT0gJ251bWJlcidcXG4gICAgICAgID8gKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzSW5kZXhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGluZGV4LCBvYmplY3QubGVuZ3RoKSlcXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxcbiAgICAgICkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcXG4gIH1cXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNJdGVyYXRlZUNhbGwpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUZvcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MCk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yT3duYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGBvYmplY3RgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xcbiAgcmV0dXJuIG9iamVjdCAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlRm9yX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGl0ZXJhdGVlLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlRm9yT3duKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzUHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19uYXRpdmVLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1OCk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ua2V5c2Agd2hpY2ggZG9lc24ndCB0cmVhdCBzcGFyc2UgYXJyYXlzIGFzIGRlbnNlLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX25hdGl2ZUtleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCk7XFxuICB9XFxuICB2YXIgcmVzdWx0ID0gW107XFxuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcXG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XFxuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUtleXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fb3ZlckFyZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MCk7XFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xcbnZhciBuYXRpdmVLZXlzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fb3ZlckFyZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0LmtleXMsIE9iamVjdCk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobmF0aXZlS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlTWF0Y2hlc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VNYXRjaGVzUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pZGVudGl0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19wcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODkpO1xcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLml0ZXJhdGVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSBbdmFsdWU9Xy5pZGVudGl0eV0gVGhlIHZhbHVlIHRvIGNvbnZlcnQgdG8gYW4gaXRlcmF0ZWUuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBpdGVyYXRlZS5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXRlcmF0ZWUodmFsdWUpIHtcXG4gIC8vIERvbid0IHN0b3JlIHRoZSBgdHlwZW9mYCByZXN1bHQgaW4gYSB2YXJpYWJsZSB0byBhdm9pZCBhIEpJVCBidWcgaW4gU2FmYXJpIDkuXFxuICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjAzNCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnZnVuY3Rpb24nKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XFxuICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbiAgfVxcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpXFxuICAgICAgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlTWF0Y2hlc1Byb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZVswXSwgdmFsdWVbMV0pXFxuICAgICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlTWF0Y2hlc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3Byb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJdGVyYXRlZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNNYXRjaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldE1hdGNoRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY3KTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKSB7XFxuICB2YXIgbWF0Y2hEYXRhID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0TWF0Y2hEYXRhX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzb3VyY2UpO1xcbiAgaWYgKG1hdGNoRGF0YS5sZW5ndGggPT0gMSAmJiBtYXRjaERhdGFbMF1bMl0pIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShtYXRjaERhdGFbMF1bMF0sIG1hdGNoRGF0YVswXVsxXSk7XFxuICB9XFxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XFxuICAgIHJldHVybiBvYmplY3QgPT09IHNvdXJjZSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNNYXRjaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlTWF0Y2hlcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cXG4gKiBAcGFyYW0ge0FycmF5fSBtYXRjaERhdGEgVGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIHRvIG1hdGNoLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xcbiAgdmFyIGluZGV4ID0gbWF0Y2hEYXRhLmxlbmd0aCxcXG4gICAgICBsZW5ndGggPSBpbmRleCxcXG4gICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcXG5cXG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xcbiAgICByZXR1cm4gIWxlbmd0aDtcXG4gIH1cXG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xcbiAgd2hpbGUgKGluZGV4LS0pIHtcXG4gICAgdmFyIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xcbiAgICBpZiAoKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKVxcbiAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxcbiAgICAgICAgICA6ICEoZGF0YVswXSBpbiBvYmplY3QpXFxuICAgICAgICApIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xcbiAgICB2YXIga2V5ID0gZGF0YVswXSxcXG4gICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXFxuICAgICAgICBzcmNWYWx1ZSA9IGRhdGFbMV07XFxuXFxuICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkge1xcbiAgICAgIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgdmFyIHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcXG4gICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xcbiAgICAgIH1cXG4gICAgICBpZiAoIShyZXN1bHQgPT09IHVuZGVmaW5lZFxcbiAgICAgICAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUlzRXF1YWxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHLCBjdXN0b21pemVyLCBzdGFjaylcXG4gICAgICAgICAgICA6IHJlc3VsdFxcbiAgICAgICAgICApKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuICByZXR1cm4gdHJ1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUlzTWF0Y2gpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2VxdWFsQXJyYXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcXVhbEJ5VGFnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXF1YWxPYmplY3RzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fZ2V0VGFnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0J1ZmZlcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19faXNUeXBlZEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM3KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXFxuICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xcbiAgdmFyIG9iaklzQXJyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSxcXG4gICAgICBvdGhJc0FyciA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyKSxcXG4gICAgICBvYmpUYWcgPSBvYmpJc0FyciA/IGFycmF5VGFnIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fZ2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpLFxcbiAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyKTtcXG5cXG4gIG9ialRhZyA9IG9ialRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb2JqVGFnO1xcbiAgb3RoVGFnID0gb3RoVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvdGhUYWc7XFxuXFxuICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxcbiAgICAgIG90aElzT2JqID0gb3RoVGFnID09IG9iamVjdFRhZyxcXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xcblxcbiAgaWYgKGlzU2FtZVRhZyAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0J1ZmZlcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSkge1xcbiAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlcikpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gICAgb2JqSXNBcnIgPSB0cnVlO1xcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xcbiAgfVxcbiAgaWYgKGlzU2FtZVRhZyAmJiAhb2JqSXNPYmopIHtcXG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSlcXG4gICAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2VxdWFsQXJyYXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxcbiAgICAgIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fZXF1YWxCeVRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBvdGhlciwgb2JqVGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcXG4gIH1cXG4gIGlmICghKGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRykpIHtcXG4gICAgdmFyIG9iaklzV3JhcHBlZCA9IG9iaklzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnX193cmFwcGVkX18nKSxcXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xcblxcbiAgICBpZiAob2JqSXNXcmFwcGVkIHx8IG90aElzV3JhcHBlZCkge1xcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcXG4gICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xcblxcbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XFxuICAgIH1cXG4gIH1cXG4gIGlmICghaXNTYW1lVGFnKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19lcXVhbE9iamVjdHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNFcXVhbERlZXApO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3NldENhY2hlQWRkX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc2V0Q2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY1KTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIHVuaXF1ZSB2YWx1ZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBjb25zdHJ1Y3RvclxcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gU2V0Q2FjaGUodmFsdWVzKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX01hcENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBTZXRDYWNoZWAuXFxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zZXRDYWNoZUFkZF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRDYWNoZUhhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChTZXRDYWNoZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKlxcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGFkZFxcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxcbiAqIEBhbGlhcyBwdXNoXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY2FjaGUgaW5zdGFuY2UuXFxuICovXFxuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcXG4gIHRoaXMuX19kYXRhX18uc2V0KHZhbHVlLCBIQVNIX1VOREVGSU5FRCk7XFxuICByZXR1cm4gdGhpcztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2V0Q2FjaGVBZGQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBoYXNcXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBzZXRDYWNoZUhhcyh2YWx1ZSkge1xcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2V0Q2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxcbiAqIHNob3J0aGFuZHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XFxuXFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBpZiAocHJlZGljYXRlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSkge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gZmFsc2U7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5U29tZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcXG4gIHJldHVybiBjYWNoZS5oYXMoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19VaW50OEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19lcXVhbEFycmF5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fbWFwVG9BcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3NldFRvQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcwKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcXG5cXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XFxuXFxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXFxudmFyIHN5bWJvbFByb3RvID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5wcm90b3R5cGUgOiB1bmRlZmluZWQsXFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXFxuICpcXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXFxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xcbiAgc3dpdGNoICh0YWcpIHtcXG4gICAgY2FzZSBkYXRhVmlld1RhZzpcXG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XFxuICAgICAgICAgIChvYmplY3QuYnl0ZU9mZnNldCAhPSBvdGhlci5ieXRlT2Zmc2V0KSkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICBvYmplY3QgPSBvYmplY3QuYnVmZmVyO1xcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xcblxcbiAgICBjYXNlIGFycmF5QnVmZmVyVGFnOlxcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcXG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19VaW50OEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKG9iamVjdCksIG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ob3RoZXIpKSkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gdHJ1ZTtcXG5cXG4gICAgY2FzZSBib29sVGFnOlxcbiAgICBjYXNlIGRhdGVUYWc6XFxuICAgIGNhc2UgbnVtYmVyVGFnOlxcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXFxuICAgICAgLy8gSW52YWxpZCBkYXRlcyBhcmUgY29lcmNlZCB0byBgTmFOYC5cXG4gICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCtvYmplY3QsICtvdGhlcik7XFxuXFxuICAgIGNhc2UgZXJyb3JUYWc6XFxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcXG5cXG4gICAgY2FzZSByZWdleHBUYWc6XFxuICAgIGNhc2Ugc3RyaW5nVGFnOlxcbiAgICAgIC8vIENvZXJjZSByZWdleGVzIHRvIHN0cmluZ3MgYW5kIHRyZWF0IHN0cmluZ3MsIHByaW1pdGl2ZXMgYW5kIG9iamVjdHMsXFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXFxuICAgICAgcmV0dXJuIG9iamVjdCA9PSAob3RoZXIgKyAnJyk7XFxuXFxuICAgIGNhc2UgbWFwVGFnOlxcbiAgICAgIHZhciBjb252ZXJ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBUb0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbiAgICBjYXNlIHNldFRhZzpcXG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xcbiAgICAgIGNvbnZlcnQgfHwgKGNvbnZlcnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3NldFRvQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICB9XFxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxcbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XFxuICAgICAgaWYgKHN0YWNrZWQpIHtcXG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xcbiAgICAgIH1cXG4gICAgICBiaXRtYXNrIHw9IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUc7XFxuXFxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgICAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xcbiAgICAgIHZhciByZXN1bHQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19lcXVhbEFycmF5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XFxuICAgICAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XFxuICAgICAgcmV0dXJuIHJlc3VsdDtcXG5cXG4gICAgY2FzZSBzeW1ib2xUYWc6XFxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcXG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xcbiAgICAgIH1cXG4gIH1cXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZXF1YWxCeVRhZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cXG4gKi9cXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgcmVzdWx0ID0gQXJyYXkobWFwLnNpemUpO1xcblxcbiAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xcbiAgICByZXN1bHRbKytpbmRleF0gPSBba2V5LCB2YWx1ZV07XFxuICB9KTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcFRvQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB2YWx1ZXMuXFxuICovXFxuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcXG5cXG4gIHNldC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7XFxuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xcbiAgfSk7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRUb0FycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldEFsbEtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcyKTtcXG5cXG5cXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3Igb2JqZWN0cyB3aXRoIHN1cHBvcnQgZm9yXFxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcXG4gICAgICBvYmpQcm9wcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldEFsbEtleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxcbiAgICAgIG90aFByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpLFxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcXG5cXG4gIGlmIChvYmpMZW5ndGggIT0gb3RoTGVuZ3RoICYmICFpc1BhcnRpYWwpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgdmFyIGluZGV4ID0gb2JqTGVuZ3RoO1xcbiAgd2hpbGUgKGluZGV4LS0pIHtcXG4gICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcXG4gICAgaWYgKCEoaXNQYXJ0aWFsID8ga2V5IGluIG90aGVyIDogaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwga2V5KSkpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG4gIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cXG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XFxuICBpZiAoc3RhY2tlZCAmJiBzdGFjay5nZXQob3RoZXIpKSB7XFxuICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xcbiAgfVxcbiAgdmFyIHJlc3VsdCA9IHRydWU7XFxuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XFxuICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XFxuXFxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XFxuICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xcbiAgICBrZXkgPSBvYmpQcm9wc1tpbmRleF07XFxuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xcblxcbiAgICBpZiAoY3VzdG9taXplcikge1xcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBvYmpWYWx1ZSwga2V5LCBvdGhlciwgb2JqZWN0LCBzdGFjaylcXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xcbiAgICB9XFxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgb2JqZWN0cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxcbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXFxuICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXFxuICAgICAgICAgIDogY29tcGFyZWRcXG4gICAgICAgICkpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XFxuICB9XFxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xcbiAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcXG4gICAgICAgIG90aEN0b3IgPSBvdGhlci5jb25zdHJ1Y3RvcjtcXG5cXG4gICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXFxuICAgIGlmIChvYmpDdG9yICE9IG90aEN0b3IgJiZcXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxcbiAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXFxuICAgICAgICAgIHR5cGVvZiBvdGhDdG9yID09ICdmdW5jdGlvbicgJiYgb3RoQ3RvciBpbnN0YW5jZW9mIG90aEN0b3IpKSB7XFxuICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGVxdWFsT2JqZWN0cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0QWxsS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFN5bWJvbHNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19rZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzIG9mIGBvYmplY3RgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cXG4gKi9cXG5mdW5jdGlvbiBnZXRBbGxLZXlzKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRBbGxLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fa2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRTeW1ib2xzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0QWxsS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTczICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheVB1c2hfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xcbiAqIGBrZXlzRnVuY2AgYW5kIGBzeW1ib2xzRnVuY2AgdG8gZ2V0IHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIGFuZFxcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN5bWJvbHNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXNGdW5jLCBzeW1ib2xzRnVuYykge1xcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSA/IHJlc3VsdCA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5UHVzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUdldEFsbEtleXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcXG4gIH1cXG4gIHJldHVybiBhcnJheTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYXJyYXlQdXNoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5RmlsdGVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3R1YkFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3Nyk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xcbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxcbiAqL1xcbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IGZ1bmN0aW9uKG9iamVjdCkge1xcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XFxuICAgIHJldHVybiBbXTtcXG4gIH1cXG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5RmlsdGVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShuYXRpdmVHZXRTeW1ib2xzKG9iamVjdCksIGZ1bmN0aW9uKHN5bWJvbCkge1xcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XFxuICB9KTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFN5bWJvbHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXFxuICogaXRlcmF0ZWUgc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxcbiAqL1xcbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxcbiAgICAgIHJlc0luZGV4ID0gMCxcXG4gICAgICByZXN1bHQgPSBbXTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcXG4gICAgaWYgKHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgsIGFycmF5KSkge1xcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheUZpbHRlcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMTMuMFxcbiAqIEBjYXRlZ29yeSBVdGlsXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcXG4gKlxcbiAqIGNvbnNvbGUubG9nKGFycmF5cyk7XFxuICogLy8gPT4gW1tdLCBbXV1cXG4gKlxcbiAqIGNvbnNvbGUubG9nKGFycmF5c1swXSA9PT0gYXJyYXlzWzFdKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIHN0dWJBcnJheSgpIHtcXG4gIHJldHVybiBbXTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3R1YkFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGFWaWV3X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Qcm9taXNlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fU2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fV2Vha01hcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTMpO1xcblxcblxcblxcblxcblxcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcXG5cXG52YXIgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nO1xcblxcbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXFxudmFyIGRhdGFWaWV3Q3RvclN0cmluZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGFWaWV3X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgbWFwQ3RvclN0cmluZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSksXFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fUHJvbWlzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSksXFxuICAgIHNldEN0b3JTdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19TZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICB3ZWFrTWFwQ3RvclN0cmluZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qKlxcbiAqIEdldHMgdGhlIGB0b1N0cmluZ1RhZ2Agb2YgYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cXG4gKi9cXG52YXIgZ2V0VGFnID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cXG5pZiAoKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0RhdGFWaWV3X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKG5ldyBBcnJheUJ1ZmZlcigxKSkpICE9IGRhdGFWaWV3VGFnKSB8fFxcbiAgICAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19NYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkgIT0gbWFwVGFnKSB8fFxcbiAgICAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Qcm9taXNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dICYmIGdldFRhZyhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxcbiAgICAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19TZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkgIT0gc2V0VGFnKSB8fFxcbiAgICAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19XZWFrTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dICYmIGdldFRhZyhuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19XZWFrTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSB3ZWFrTWFwVGFnKSkge1xcbiAgZ2V0VGFnID0gZnVuY3Rpb24odmFsdWUpIHtcXG4gICAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSxcXG4gICAgICAgIEN0b3IgPSByZXN1bHQgPT0gb2JqZWN0VGFnID8gdmFsdWUuY29uc3RydWN0b3IgOiB1bmRlZmluZWQsXFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShDdG9yKSA6ICcnO1xcblxcbiAgICBpZiAoY3RvclN0cmluZykge1xcbiAgICAgIHN3aXRjaCAoY3RvclN0cmluZykge1xcbiAgICAgICAgY2FzZSBkYXRhVmlld0N0b3JTdHJpbmc6IHJldHVybiBkYXRhVmlld1RhZztcXG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcXG4gICAgICAgIGNhc2UgcHJvbWlzZUN0b3JTdHJpbmc6IHJldHVybiBwcm9taXNlVGFnO1xcbiAgICAgICAgY2FzZSBzZXRDdG9yU3RyaW5nOiByZXR1cm4gc2V0VGFnO1xcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRUYWcpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xcbnZhciBEYXRhVmlldyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnRGF0YVZpZXcnKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChEYXRhVmlldyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTgwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIFByb21pc2UgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1Byb21pc2UnKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChQcm9taXNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cXG52YXIgU2V0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sICdTZXQnKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xcbnZhciBXZWFrTWFwID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sICdXZWFrTWFwJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoV2Vha01hcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTgzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDApO1xcblxcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBtYXRjaCBkYXRhIG9mIGBvYmplY3RgLlxcbiAqL1xcbmZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcXG4gIHZhciByZXN1bHQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19rZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpLFxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XFxuXFxuICB3aGlsZSAobGVuZ3RoLS0pIHtcXG4gICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxcbiAgICAgICAgdmFsdWUgPSBvYmplY3Rba2V5XTtcXG5cXG4gICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSldO1xcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0TWF0Y2hEYXRhKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTg1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19oYXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b0tleV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXFxudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc1Byb3BlcnR5YCB3aGljaCBkb2Vzbid0IGNsb25lIGBzcmNWYWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNLZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9LZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpLCBzcmNWYWx1ZSk7XFxuICB9XFxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XFxuICAgIHZhciBvYmpWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBwYXRoKTtcXG4gICAgcmV0dXJuIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmIG9ialZhbHVlID09PSBzcmNWYWx1ZSlcXG4gICAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc0luX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpXFxuICAgICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZU1hdGNoZXNQcm9wZXJ0eSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY4KTtcXG5cXG5cXG4vKipcXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuNy4wXFxuICogQGNhdGVnb3J5IE9iamVjdFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xcbiAqXFxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcXG4gKiAvLyA9PiAzXFxuICpcXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcXG4gKiAvLyA9PiAzXFxuICpcXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XFxuICogLy8gPT4gJ2RlZmF1bHQnXFxuICovXFxuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XFxuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUhhc0luX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faGFzUGF0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODgpO1xcblxcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG9mIGBvYmplY3RgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IE9iamVjdFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0ID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xcbiAqXFxuICogXy5oYXNJbihvYmplY3QsICdhJyk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5oYXNJbihvYmplY3QsICdhLmInKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgWydhJywgJ2InXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5oYXNJbihvYmplY3QsICdiJyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBoYXNJbihvYmplY3QsIHBhdGgpIHtcXG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19oYXNQYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUhhc0luX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzSW4pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcXG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBrZXkgaW4gT2JqZWN0KG9iamVjdCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VIYXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jYXN0UGF0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcmd1bWVudHNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNJbmRleF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNMZW5ndGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIHByb3BlcnRpZXMuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgaGFzRnVuYykge1xcbiAgcGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwYXRoLCBvYmplY3QpO1xcblxcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXFxuICAgICAgcmVzdWx0ID0gZmFsc2U7XFxuXFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICB2YXIga2V5ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdG9LZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGhbaW5kZXhdKTtcXG4gICAgaWYgKCEocmVzdWx0ID0gb2JqZWN0ICE9IG51bGwgJiYgaGFzRnVuYyhvYmplY3QsIGtleSkpKSB7XFxuICAgICAgYnJlYWs7XFxuICAgIH1cXG4gICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XFxuICB9XFxuICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9XFxuICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xcbiAgcmV0dXJuICEhbGVuZ3RoICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzTGVuZ3RoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShsZW5ndGgpICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzSW5kZXhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGtleSwgbGVuZ3RoKSAmJlxcbiAgICAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FyZ3VtZW50c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc1BhdGgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVByb3BlcnR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVByb3BlcnR5RGVlcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX190b0tleV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMCk7XFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGEgZ2l2ZW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDIuNC4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0cyA9IFtcXG4gKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXFxuICogICB7ICdhJzogeyAnYic6IDEgfSB9XFxuICogXTtcXG4gKlxcbiAqIF8ubWFwKG9iamVjdHMsIF8ucHJvcGVydHkoJ2EuYicpKTtcXG4gKiAvLyA9PiBbMiwgMV1cXG4gKlxcbiAqIF8ubWFwKF8uc29ydEJ5KG9iamVjdHMsIF8ucHJvcGVydHkoWydhJywgJ2InXSkpLCAnYS5iJyk7XFxuICogLy8gPT4gWzEsIDJdXFxuICovXFxuZnVuY3Rpb24gcHJvcGVydHkocGF0aCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwYXRoKSA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9LZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpKSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VQcm9wZXJ0eURlZXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChwcm9wZXJ0eSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eWAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlUHJvcGVydHkoa2V5KSB7XFxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XFxuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVByb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjgpO1xcblxcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBwYXRoKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VQcm9wZXJ0eURlZXApO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE5MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vISBJbmMuXFxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxcbiAqL1xcblxcblxcbnZhciBSRUFDVF9TVEFUSUNTID0ge1xcbiAgICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcXG4gICAgY29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBkZWZhdWx0UHJvcHM6IHRydWUsXFxuICAgIGRpc3BsYXlOYW1lOiB0cnVlLFxcbiAgICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXFxuICAgIG1peGluczogdHJ1ZSxcXG4gICAgcHJvcFR5cGVzOiB0cnVlLFxcbiAgICB0eXBlOiB0cnVlXFxufTtcXG5cXG52YXIgS05PV05fU1RBVElDUyA9IHtcXG4gICAgbmFtZTogdHJ1ZSxcXG4gICAgbGVuZ3RoOiB0cnVlLFxcbiAgICBwcm90b3R5cGU6IHRydWUsXFxuICAgIGNhbGxlcjogdHJ1ZSxcXG4gICAgYXJndW1lbnRzOiB0cnVlLFxcbiAgICBhcml0eTogdHJ1ZVxcbn07XFxuXFxudmFyIGlzR2V0T3duUHJvcGVydHlTeW1ib2xzQXZhaWxhYmxlID0gdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09ICdmdW5jdGlvbic7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgY3VzdG9tU3RhdGljcykge1xcbiAgICBpZiAodHlwZW9mIHNvdXJjZUNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHsgLy8gZG9uJ3QgaG9pc3Qgb3ZlciBzdHJpbmcgKGh0bWwpIGNvbXBvbmVudHNcXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcXG5cXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXFxuICAgICAgICBpZiAoaXNHZXRPd25Qcm9wZXJ0eVN5bWJvbHNBdmFpbGFibGUpIHtcXG4gICAgICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xcbiAgICAgICAgICAgIGlmICghUkVBQ1RfU1RBVElDU1trZXlzW2ldXSAmJiAhS05PV05fU1RBVElDU1trZXlzW2ldXSAmJiAoIWN1c3RvbVN0YXRpY3MgfHwgIWN1c3RvbVN0YXRpY3Nba2V5c1tpXV0pKSB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXRDb21wb25lbnRba2V5c1tpXV0gPSBzb3VyY2VDb21wb25lbnRba2V5c1tpXV07XFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XFxuXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE5MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgY3JlYXRlUHJvdmlkZXIgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3Byb3BfdHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3Byb3BfdHlwZXNfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdXRpbHNfUHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcbnZhciBkaWRXYXJuQWJvdXRSZWNlaXZpbmdTdG9yZSA9IGZhbHNlO1xcbmZ1bmN0aW9uIHdhcm5BYm91dFJlY2VpdmluZ1N0b3JlKCkge1xcbiAgaWYgKGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG4gIGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlID0gdHJ1ZTtcXG5cXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCc8UHJvdmlkZXI+IGRvZXMgbm90IHN1cHBvcnQgY2hhbmdpbmcgYHN0b3JlYCBvbiB0aGUgZmx5LiAnICsgJ0l0IGlzIG1vc3QgbGlrZWx5IHRoYXQgeW91IHNlZSB0aGlzIGVycm9yIGJlY2F1c2UgeW91IHVwZGF0ZWQgdG8gJyArICdSZWR1eCAyLnggYW5kIFJlYWN0IFJlZHV4IDIueCB3aGljaCBubyBsb25nZXIgaG90IHJlbG9hZCByZWR1Y2VycyAnICsgJ2F1dG9tYXRpY2FsbHkuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC1yZWR1eC9yZWxlYXNlcy8nICsgJ3RhZy92Mi4wLjAgZm9yIHRoZSBtaWdyYXRpb24gaW5zdHJ1Y3Rpb25zLicpO1xcbn1cXG5cXG5mdW5jdGlvbiBjcmVhdGVQcm92aWRlcigpIHtcXG4gIHZhciBfUHJvdmlkZXIkY2hpbGRDb250ZXg7XFxuXFxuICB2YXIgc3RvcmVLZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdzdG9yZSc7XFxuICB2YXIgc3ViS2V5ID0gYXJndW1lbnRzWzFdO1xcblxcbiAgdmFyIHN1YnNjcmlwdGlvbktleSA9IHN1YktleSB8fCBzdG9yZUtleSArICdTdWJzY3JpcHRpb24nO1xcblxcbiAgdmFyIFByb3ZpZGVyID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKFByb3ZpZGVyLCBfQ29tcG9uZW50KTtcXG5cXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLmdldENoaWxkQ29udGV4dCA9IGZ1bmN0aW9uIGdldENoaWxkQ29udGV4dCgpIHtcXG4gICAgICB2YXIgX3JlZjtcXG5cXG4gICAgICByZXR1cm4gX3JlZiA9IHt9LCBfcmVmW3N0b3JlS2V5XSA9IHRoaXNbc3RvcmVLZXldLCBfcmVmW3N1YnNjcmlwdGlvbktleV0gPSBudWxsLCBfcmVmO1xcbiAgICB9O1xcblxcbiAgICBmdW5jdGlvbiBQcm92aWRlcihwcm9wcywgY29udGV4dCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQcm92aWRlcik7XFxuXFxuICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0NvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSk7XFxuXFxuICAgICAgX3RoaXNbc3RvcmVLZXldID0gcHJvcHMuc3RvcmU7XFxuICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuXFxuICAgIFByb3ZpZGVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDaGlsZHJlblxcXCJdLm9ubHkodGhpcy5wcm9wcy5jaGlsZHJlbik7XFxuICAgIH07XFxuXFxuICAgIHJldHVybiBQcm92aWRlcjtcXG4gIH0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIFByb3ZpZGVyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gKG5leHRQcm9wcykge1xcbiAgICAgIGlmICh0aGlzW3N0b3JlS2V5XSAhPT0gbmV4dFByb3BzLnN0b3JlKSB7XFxuICAgICAgICB3YXJuQWJvdXRSZWNlaXZpbmdTdG9yZSgpO1xcbiAgICAgIH1cXG4gICAgfTtcXG4gIH1cXG5cXG4gIFByb3ZpZGVyLnByb3BUeXBlcyA9IHtcXG4gICAgc3RvcmU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImFcXFwiIC8qIHN0b3JlU2hhcGUgKi9dLmlzUmVxdWlyZWQsXFxuICAgIGNoaWxkcmVuOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5lbGVtZW50LmlzUmVxdWlyZWRcXG4gIH07XFxuICBQcm92aWRlci5jaGlsZENvbnRleHRUeXBlcyA9IChfUHJvdmlkZXIkY2hpbGRDb250ZXggPSB7fSwgX1Byb3ZpZGVyJGNoaWxkQ29udGV4W3N0b3JlS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImFcXFwiIC8qIHN0b3JlU2hhcGUgKi9dLmlzUmVxdWlyZWQsIF9Qcm92aWRlciRjaGlsZENvbnRleFtzdWJzY3JpcHRpb25LZXldID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYlxcXCIgLyogc3Vic2NyaXB0aW9uU2hhcGUgKi9dLCBfUHJvdmlkZXIkY2hpbGRDb250ZXgpO1xcblxcbiAgcmV0dXJuIFByb3ZpZGVyO1xcbn1cXG5cXG4vKiB1bnVzZWQgaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyB2YXIgX3VudXNlZF93ZWJwYWNrX2RlZmF1bHRfZXhwb3J0ID0gKGNyZWF0ZVByb3ZpZGVyKCkpO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxOTQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihwcm9jZXNzKSB7LyoqXFxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXFxuICpcXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXFxuICovXFxuXFxuXFxuXFxudmFyIGFzc2lnbiA9IF9fd2VicGFja19yZXF1aXJlX18oMTk1KTtcXG5cXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcXG52YXIgY2hlY2tQcm9wVHlwZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5Nik7XFxuXFxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XFxuXFxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XFxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxcbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcXG4gICAgfSBjYXRjaCAoeCkge31cXG4gIH07XFxufVxcblxcbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwoKSB7XFxuICByZXR1cm4gbnVsbDtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xcbiAgdmFyIElURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXFxuXFxuICAvKipcXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cXG4gICAqXFxuICAgKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDpcXG4gICAqXFxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xcbiAgICogICAgIGlmIChpdGVyYXRvckZuKSB7XFxuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XFxuICAgKiAgICAgICAuLi5cXG4gICAqICAgICB9XFxuICAgKlxcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXFxuICAgKiBAcmV0dXJuIHs/ZnVuY3Rpb259XFxuICAgKi9cXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xcbiAgICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pO1xcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcXG4gICAgfVxcbiAgfVxcblxcbiAgLyoqXFxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcXG4gICAqXFxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XFxuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XFxuICAgKiAgICAgcHJvcFR5cGVzOiB7XFxuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcXFwiZGVzY3JpcHRpb25cXFwiLlxcbiAgICogICAgICAgZGVzY3JpcHRpb246IFByb3BzLnN0cmluZyxcXG4gICAqXFxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcXFwiY2F0ZWdvcnlcXFwiLlxcbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxcbiAgICpcXG4gICAqICAgICAgIC8vIEEgcHJvcCBuYW1lZCBcXFwiZGlhbG9nXFxcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcXG4gICAqICAgICB9LFxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XFxuICAgKiAgIH0pO1xcbiAgICpcXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcXG4gICAqXFxuICAgKiAgIHR5cGUgOj0gYXJyYXl8Ym9vbHxmdW5jfG9iamVjdHxudW1iZXJ8c3RyaW5nfG9uZU9mKFsuLi5dKXxpbnN0YW5jZU9mKC4uLilcXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xcbiAgICpcXG4gICAqIEVhY2ggYW5kIGV2ZXJ5IGRlY2xhcmF0aW9uIHByb2R1Y2VzIGEgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUuIFRoaXNcXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcXG4gICAqXFxuICAgKiAgdmFyIE15TGluayA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcXG4gICAqICAgIHByb3BUeXBlczoge1xcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXFxcImhyZWZcXFwiLlxcbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcXG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICogICAgICAgIGlmIChwcm9wVmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgcHJvcFZhbHVlICE9PSAnc3RyaW5nJyAmJlxcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcXG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXFxuICAgKiAgICAgICAgICAgICdFeHBlY3RlZCBhIHN0cmluZyBvciBhbiBVUkkgZm9yICcgKyBwcm9wTmFtZSArICcgaW4gJyArXFxuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcXG4gICAqICAgICAgICAgICk7XFxuICAgKiAgICAgICAgfVxcbiAgICogICAgICB9XFxuICAgKiAgICB9LFxcbiAgICogICAgcmVuZGVyOiBmdW5jdGlvbigpIHsuLi59XFxuICAgKiAgfSk7XFxuICAgKlxcbiAgICogQGludGVybmFsXFxuICAgKi9cXG5cXG4gIHZhciBBTk9OWU1PVVMgPSAnPDxhbm9ueW1vdXM+Pic7XFxuXFxuICAvLyBJbXBvcnRhbnQhXFxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qc2AuXFxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XFxuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcXG4gICAgYm9vbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Jvb2xlYW4nKSxcXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxcbiAgICBvYmplY3Q6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdvYmplY3QnKSxcXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxcblxcbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcXG4gICAgZWxlbWVudDogY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCksXFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXFxuICAgIG5vZGU6IGNyZWF0ZU5vZGVDaGVja2VyKCksXFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxcbiAgICBvbmVPZlR5cGU6IGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIsXFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcXG4gIH07XFxuXFxuICAvKipcXG4gICAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25cXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xcbiAgICovXFxuICAvKmVzbGludC1kaXNhYmxlIG5vLXNlbGYtY29tcGFyZSovXFxuICBmdW5jdGlvbiBpcyh4LCB5KSB7XFxuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cXG4gICAgaWYgKHggPT09IHkpIHtcXG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxcbiAgICAgIHJldHVybiB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxcbiAgICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XFxuICAgIH1cXG4gIH1cXG4gIC8qZXNsaW50LWVuYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xcblxcbiAgLyoqXFxuICAgKiBXZSB1c2UgYW4gRXJyb3ItbGlrZSBvYmplY3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYXMgcGVvcGxlIG1heSBjYWxsXFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxcbiAgICogaXMgcHJvaGliaXRpdmVseSBleHBlbnNpdmUgaWYgdGhleSBhcmUgY3JlYXRlZCB0b28gb2Z0ZW4sIHN1Y2ggYXMgd2hhdFxcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxcbiAgICovXFxuICBmdW5jdGlvbiBQcm9wVHlwZUVycm9yKG1lc3NhZ2UpIHtcXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcXG4gICAgdGhpcy5zdGFjayA9ICcnO1xcbiAgfVxcbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxcbiAgUHJvcFR5cGVFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9O1xcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XFxuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xcbiAgICAgIHByb3BGdWxsTmFtZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcXG5cXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xcbiAgICAgICAgaWYgKHRocm93T25EaXJlY3RBY2Nlc3MpIHtcXG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXFxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXFxuICAgICAgICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xcbiAgICAgICAgICApO1xcbiAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcXG4gICAgICAgICAgdGhyb3cgZXJyO1xcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xcbiAgICAgICAgICBpZiAoXFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50IDwgM1xcbiAgICAgICAgICApIHtcXG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXFxuICAgICAgICAgICAgICAnWW91IGFyZSBtYW51YWxseSBjYWxsaW5nIGEgUmVhY3QuUHJvcFR5cGVzIHZhbGlkYXRpb24gJyArXFxuICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJyArIHByb3BGdWxsTmFtZSArICdgIHByb3Agb24gYCcgKyBjb21wb25lbnROYW1lICArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXFxuICAgICAgICAgICAgICAnYW5kIHdpbGwgdGhyb3cgaW4gdGhlIHN0YW5kYWxvbmUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXFxuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xcbiAgICAgICAgICAgICk7XFxuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcXG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBudWxsO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XFxuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xcblxcbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xcbiAgICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnXFxuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cXG4gICAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7XFxuXFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSk7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBudWxsO1xcbiAgICB9XFxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpIHtcXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XFxuICAgICAgfVxcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBhcnJheS4nKSk7XFxuICAgICAgfVxcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnWycgKyBpICsgJ10nLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBudWxsO1xcbiAgICB9XFxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XFxuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYSBzaW5nbGUgUmVhY3RFbGVtZW50LicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcXG4gICAgICAgIHZhciBhY3R1YWxDbGFzc05hbWUgPSBnZXRDbGFzc05hbWUocHJvcHNbcHJvcE5hbWVdKTtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXhwZWN0ZWRWYWx1ZXMpKSB7XFxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XFxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBpZiAoaXMocHJvcFZhbHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHtcXG4gICAgICAgICAgcmV0dXJuIG51bGw7XFxuICAgICAgICB9XFxuICAgICAgfVxcblxcbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcyk7XFxuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIHByb3BWYWx1ZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xcbiAgICB9XFxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIG9iamVjdE9mLicpO1xcbiAgICAgIH1cXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcXG4gICAgICB9XFxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xcbiAgICAgICAgaWYgKHByb3BWYWx1ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XFxuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBudWxsO1xcbiAgICB9XFxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVVbmlvblR5cGVDaGVja2VyKGFycmF5T2ZUeXBlQ2hlY2tlcnMpIHtcXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7XFxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xcbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xcbiAgICB9XFxuXFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcXG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXFxuICAgICAgICApO1xcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xcbiAgICAgICAgaWYgKGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBSZWFjdFByb3BUeXBlc1NlY3JldCkgPT0gbnVsbCkge1xcbiAgICAgICAgICByZXR1cm4gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuXFxuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nKSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBudWxsO1xcbiAgICB9XFxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSBgJyArIHByb3BUeXBlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGBvYmplY3RgLicpKTtcXG4gICAgICB9XFxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcXG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XFxuICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xcbiAgICAgICAgaWYgKGVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0cmljdFNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xcbiAgICAgIH1cXG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbVxcbiAgICAgIC8vIHByb3BzLlxcbiAgICAgIHZhciBhbGxLZXlzID0gYXNzaWduKHt9LCBwcm9wc1twcm9wTmFtZV0sIHNoYXBlVHlwZXMpO1xcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XFxuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcXG4gICAgICAgIGlmICghY2hlY2tlcikge1xcbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xcbiAgICAgICAgICAgICdcXFxcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcXG4gICAgICAgICAgICAnXFxcXG5WYWxpZCBrZXlzOiAnICsgIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxcbiAgICAgICAgICApO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xcbiAgICAgICAgaWYgKGVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcXG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XFxuICAgICAgY2FzZSAnbnVtYmVyJzpcXG4gICAgICBjYXNlICdzdHJpbmcnOlxcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICBjYXNlICdib29sZWFuJzpcXG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xcbiAgICAgIGNhc2UgJ29iamVjdCc6XFxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XFxuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xcbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcXG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XFxuICAgICAgICAgIHZhciBzdGVwO1xcbiAgICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gcHJvcFZhbHVlLmVudHJpZXMpIHtcXG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XFxuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcXG4gICAgICAgICAgICAgIHZhciBlbnRyeSA9IHN0ZXAudmFsdWU7XFxuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcXG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICB9XFxuXFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICBkZWZhdWx0OlxcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9XFxuICB9XFxuXFxuICBmdW5jdGlvbiBpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSB7XFxuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXFxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcXG4gICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgfVxcblxcbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xcbiAgICBpZiAocHJvcFZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7XFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIH1cXG5cXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxcbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcXG4gICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuXFxuICAvLyBFcXVpdmFsZW50IG9mIGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuXFxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcXG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xcbiAgICAgIHJldHVybiAnYXJyYXknO1xcbiAgICB9XFxuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcXG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXFxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXFxuICAgICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuXFxuICAgICAgcmV0dXJuICdvYmplY3QnO1xcbiAgICB9XFxuICAgIGlmIChpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSkge1xcbiAgICAgIHJldHVybiAnc3ltYm9sJztcXG4gICAgfVxcbiAgICByZXR1cm4gcHJvcFR5cGU7XFxuICB9XFxuXFxuICAvLyBUaGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMuXFxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xcbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XFxuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xcbiAgICB9XFxuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcXG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xcbiAgICAgICAgcmV0dXJuICdkYXRlJztcXG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcHJvcFR5cGU7XFxuICB9XFxuXFxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXFxuICAvLyBGb3IgZXhhbXBsZSwgXFxcInVuZGVmaW5lZFxcXCIgb3IgXFxcIm9mIHR5cGUgYXJyYXlcXFwiXFxuICBmdW5jdGlvbiBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcodmFsdWUpIHtcXG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XFxuICAgIHN3aXRjaCAodHlwZSkge1xcbiAgICAgIGNhc2UgJ2FycmF5JzpcXG4gICAgICBjYXNlICdvYmplY3QnOlxcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcXG4gICAgICBjYXNlICdib29sZWFuJzpcXG4gICAgICBjYXNlICdkYXRlJzpcXG4gICAgICBjYXNlICdyZWdleHAnOlxcbiAgICAgICAgcmV0dXJuICdhICcgKyB0eXBlO1xcbiAgICAgIGRlZmF1bHQ6XFxuICAgICAgICByZXR1cm4gdHlwZTtcXG4gICAgfVxcbiAgfVxcblxcbiAgLy8gUmV0dXJucyBjbGFzcyBuYW1lIG9mIHRoZSBvYmplY3QsIGlmIGFueS5cXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcXG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XFxuICAgICAgcmV0dXJuIEFOT05ZTU9VUztcXG4gICAgfVxcbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XFxuICB9XFxuXFxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XFxuXFxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XFxufTtcXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMTk1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKlxcbm9iamVjdC1hc3NpZ25cXG4oYykgU2luZHJlIFNvcmh1c1xcbkBsaWNlbnNlIE1JVFxcbiovXFxuXFxuXFxuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcXG5cXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XFxuXFx0XFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcXG5cXHR9XFxuXFxuXFx0cmV0dXJuIE9iamVjdCh2YWwpO1xcbn1cXG5cXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XFxuXFx0dHJ5IHtcXG5cXHRcXHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcXG5cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXFx0XFx0fVxcblxcblxcdFxcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cXG5cXG5cXHRcXHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XFxuXFx0XFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xcblxcdFxcdHRlc3QxWzVdID0gJ2RlJztcXG5cXHRcXHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcXG5cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuXFx0XFx0fVxcblxcblxcdFxcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcXG5cXHRcXHR2YXIgdGVzdDIgPSB7fTtcXG5cXHRcXHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcXG5cXHRcXHRcXHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XFxuXFx0XFx0XFx0cmV0dXJuIHRlc3QyW25dO1xcblxcdFxcdH0pO1xcblxcdFxcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxcblxcdFxcdHZhciB0ZXN0MyA9IHt9O1xcblxcdFxcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xcblxcdFxcdFxcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XFxuXFx0XFx0fSk7XFxuXFx0XFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XFxuXFx0XFx0XFx0XFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0cmV0dXJuIHRydWU7XFxuXFx0fSBjYXRjaCAoZXJyKSB7XFxuXFx0XFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cXG5cXHRcXHRyZXR1cm4gZmFsc2U7XFxuXFx0fVxcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xcblxcdHZhciBmcm9tO1xcblxcdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XFxuXFx0dmFyIHN5bWJvbHM7XFxuXFxuXFx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcXG5cXHRcXHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XFxuXFxuXFx0XFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcXG5cXHRcXHRcXHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XFxuXFx0XFx0XFx0XFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcblxcdFxcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcXG5cXHRcXHRcXHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xcblxcdFxcdFxcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xcblxcdFxcdFxcdFxcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcXG5cXHRcXHRcXHRcXHRcXHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0fVxcblxcblxcdHJldHVybiB0bztcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE5NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgdmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7XFxuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XFxuXFxuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XFxuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XFxuICAgIH0gY2F0Y2ggKHgpIHt9XFxuICB9O1xcbn1cXG5cXG4vKipcXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXFxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXFxuICpcXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuIFxcXCJwcm9wXFxcIiwgXFxcImNvbnRleHRcXFwiLCBcXFwiY2hpbGQgY29udGV4dFxcXCJcXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxcbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXFxuICogQHByaXZhdGVcXG4gKi9cXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XFxuICAgICAgaWYgKHR5cGVTcGVjcy5oYXNPd25Qcm9wZXJ0eSh0eXBlU3BlY05hbWUpKSB7XFxuICAgICAgICB2YXIgZXJyb3I7XFxuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xcbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxcbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXFxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcihcXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArXFxuICAgICAgICAgICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nXFxuICAgICAgICAgICAgKTtcXG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcXG4gICAgICAgICAgICB0aHJvdyBlcnI7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XFxuICAgICAgICAgIGVycm9yID0gZXg7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xcbiAgICAgICAgICBwcmludFdhcm5pbmcoXFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJyArXFxuICAgICAgICAgICAgbG9jYXRpb24gKyAnIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICtcXG4gICAgICAgICAgICAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJyArIHR5cGVvZiBlcnJvciArICcuICcgK1xcbiAgICAgICAgICAgICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICtcXG4gICAgICAgICAgICAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICtcXG4gICAgICAgICAgICAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLidcXG4gICAgICAgICAgKVxcblxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcXG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXFxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXFxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XFxuXFxuICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xcblxcbiAgICAgICAgICBwcmludFdhcm5pbmcoXFxuICAgICAgICAgICAgJ0ZhaWxlZCAnICsgbG9jYXRpb24gKyAnIHR5cGU6ICcgKyBlcnJvci5tZXNzYWdlICsgKHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKVxcbiAgICAgICAgICApO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxOTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xcblxcbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKSB7fVxcblxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XFxuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XFxuICAgIGlmIChzZWNyZXQgPT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XFxuICAgICAgLy8gSXQgaXMgc3RpbGwgc2FmZSB3aGVuIGNhbGxlZCBmcm9tIFJlYWN0LlxcbiAgICAgIHJldHVybjtcXG4gICAgfVxcbiAgICB2YXIgZXJyID0gbmV3IEVycm9yKFxcbiAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXFxuICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXFxuICAgICk7XFxuICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICB0aHJvdyBlcnI7XFxuICB9O1xcbiAgc2hpbS5pc1JlcXVpcmVkID0gc2hpbTtcXG4gIGZ1bmN0aW9uIGdldFNoaW0oKSB7XFxuICAgIHJldHVybiBzaGltO1xcbiAgfTtcXG4gIC8vIEltcG9ydGFudCFcXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxcbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xcbiAgICBhcnJheTogc2hpbSxcXG4gICAgYm9vbDogc2hpbSxcXG4gICAgZnVuYzogc2hpbSxcXG4gICAgbnVtYmVyOiBzaGltLFxcbiAgICBvYmplY3Q6IHNoaW0sXFxuICAgIHN0cmluZzogc2hpbSxcXG4gICAgc3ltYm9sOiBzaGltLFxcblxcbiAgICBhbnk6IHNoaW0sXFxuICAgIGFycmF5T2Y6IGdldFNoaW0sXFxuICAgIGVsZW1lbnQ6IHNoaW0sXFxuICAgIGluc3RhbmNlT2Y6IGdldFNoaW0sXFxuICAgIG5vZGU6IHNoaW0sXFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxcbiAgICBvbmVPZjogZ2V0U2hpbSxcXG4gICAgb25lT2ZUeXBlOiBnZXRTaGltLFxcbiAgICBzaGFwZTogZ2V0U2hpbSxcXG4gICAgZXhhY3Q6IGdldFNoaW1cXG4gIH07XFxuXFxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGVtcHR5RnVuY3Rpb247XFxuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcXG5cXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE5OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuXFxuLyoqXFxuICogQ29weXJpZ2h0IDIwMTUsIFlhaG9vISBJbmMuXFxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxcbiAqL1xcbnZhciBSRUFDVF9TVEFUSUNTID0ge1xcbiAgICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcXG4gICAgY29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBkZWZhdWx0UHJvcHM6IHRydWUsXFxuICAgIGRpc3BsYXlOYW1lOiB0cnVlLFxcbiAgICBnZXREZWZhdWx0UHJvcHM6IHRydWUsXFxuICAgIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczogdHJ1ZSxcXG4gICAgbWl4aW5zOiB0cnVlLFxcbiAgICBwcm9wVHlwZXM6IHRydWUsXFxuICAgIHR5cGU6IHRydWVcXG59O1xcblxcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xcbiAgICBuYW1lOiB0cnVlLFxcbiAgICBsZW5ndGg6IHRydWUsXFxuICAgIHByb3RvdHlwZTogdHJ1ZSxcXG4gICAgY2FsbGVyOiB0cnVlLFxcbiAgICBjYWxsZWU6IHRydWUsXFxuICAgIGFyZ3VtZW50czogdHJ1ZSxcXG4gICAgYXJpdHk6IHRydWVcXG59O1xcblxcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcXG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzO1xcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xcbnZhciBnZXRQcm90b3R5cGVPZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcXG52YXIgb2JqZWN0UHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YgJiYgZ2V0UHJvdG90eXBlT2YoT2JqZWN0KTtcXG5cXG5mdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgYmxhY2tsaXN0KSB7XFxuICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykgeyAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xcblxcbiAgICAgICAgaWYgKG9iamVjdFByb3RvdHlwZSkge1xcbiAgICAgICAgICAgIHZhciBpbmhlcml0ZWRDb21wb25lbnQgPSBnZXRQcm90b3R5cGVPZihzb3VyY2VDb21wb25lbnQpO1xcbiAgICAgICAgICAgIGlmIChpbmhlcml0ZWRDb21wb25lbnQgJiYgaW5oZXJpdGVkQ29tcG9uZW50ICE9PSBvYmplY3RQcm90b3R5cGUpIHtcXG4gICAgICAgICAgICAgICAgaG9pc3ROb25SZWFjdFN0YXRpY3ModGFyZ2V0Q29tcG9uZW50LCBpbmhlcml0ZWRDb21wb25lbnQsIGJsYWNrbGlzdCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZUNvbXBvbmVudCk7XFxuXFxuICAgICAgICBpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XFxuICAgICAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KGdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xcbiAgICAgICAgICAgIGlmICghUkVBQ1RfU1RBVElDU1trZXldICYmICFLTk9XTl9TVEFUSUNTW2tleV0gJiYgKCFibGFja2xpc3QgfHwgIWJsYWNrbGlzdFtrZXldKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2VDb21wb25lbnQsIGtleSk7XFxuICAgICAgICAgICAgICAgIHRyeSB7IC8vIEF2b2lkIGZhaWx1cmVzIGZyb20gcmVhZC1vbmx5IHByb3BlcnRpZXNcXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldENvbXBvbmVudCwga2V5LCBkZXNjcmlwdG9yKTtcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xcbiAgICB9XFxuXFxuICAgIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gaG9pc3ROb25SZWFjdFN0YXRpY3M7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBTdWJzY3JpcHRpb247IH0pO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbi8vIGVuY2Fwc3VsYXRlcyB0aGUgc3Vic2NyaXB0aW9uIGxvZ2ljIGZvciBjb25uZWN0aW5nIGEgY29tcG9uZW50IHRvIHRoZSByZWR1eCBzdG9yZSwgYXNcXG4vLyB3ZWxsIGFzIG5lc3Rpbmcgc3Vic2NyaXB0aW9ucyBvZiBkZXNjZW5kYW50IGNvbXBvbmVudHMsIHNvIHRoYXQgd2UgY2FuIGVuc3VyZSB0aGVcXG4vLyBhbmNlc3RvciBjb21wb25lbnRzIHJlLXJlbmRlciBiZWZvcmUgZGVzY2VuZGFudHNcXG5cXG52YXIgQ0xFQVJFRCA9IG51bGw7XFxudmFyIG51bGxMaXN0ZW5lcnMgPSB7XFxuICBub3RpZnk6IGZ1bmN0aW9uIG5vdGlmeSgpIHt9XFxufTtcXG5cXG5mdW5jdGlvbiBjcmVhdGVMaXN0ZW5lckNvbGxlY3Rpb24oKSB7XFxuICAvLyB0aGUgY3VycmVudC9uZXh0IHBhdHRlcm4gaXMgY29waWVkIGZyb20gcmVkdXgncyBjcmVhdGVTdG9yZSBjb2RlLlxcbiAgLy8gVE9ETzogcmVmYWN0b3IrZXhwb3NlIHRoYXQgY29kZSB0byBiZSByZXVzYWJsZSBoZXJlP1xcbiAgdmFyIGN1cnJlbnQgPSBbXTtcXG4gIHZhciBuZXh0ID0gW107XFxuXFxuICByZXR1cm4ge1xcbiAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XFxuICAgICAgbmV4dCA9IENMRUFSRUQ7XFxuICAgICAgY3VycmVudCA9IENMRUFSRUQ7XFxuICAgIH0sXFxuICAgIG5vdGlmeTogZnVuY3Rpb24gbm90aWZ5KCkge1xcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBjdXJyZW50ID0gbmV4dDtcXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgbGlzdGVuZXJzW2ldKCk7XFxuICAgICAgfVxcbiAgICB9LFxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICByZXR1cm4gbmV4dDtcXG4gICAgfSxcXG4gICAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcXG4gICAgICB2YXIgaXNTdWJzY3JpYmVkID0gdHJ1ZTtcXG4gICAgICBpZiAobmV4dCA9PT0gY3VycmVudCkgbmV4dCA9IGN1cnJlbnQuc2xpY2UoKTtcXG4gICAgICBuZXh0LnB1c2gobGlzdGVuZXIpO1xcblxcbiAgICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcXG4gICAgICAgIGlmICghaXNTdWJzY3JpYmVkIHx8IGN1cnJlbnQgPT09IENMRUFSRUQpIHJldHVybjtcXG4gICAgICAgIGlzU3Vic2NyaWJlZCA9IGZhbHNlO1xcblxcbiAgICAgICAgaWYgKG5leHQgPT09IGN1cnJlbnQpIG5leHQgPSBjdXJyZW50LnNsaWNlKCk7XFxuICAgICAgICBuZXh0LnNwbGljZShuZXh0LmluZGV4T2YobGlzdGVuZXIpLCAxKTtcXG4gICAgICB9O1xcbiAgICB9XFxuICB9O1xcbn1cXG5cXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKCkge1xcbiAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uKHN0b3JlLCBwYXJlbnRTdWIsIG9uU3RhdGVDaGFuZ2UpIHtcXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN1YnNjcmlwdGlvbik7XFxuXFxuICAgIHRoaXMuc3RvcmUgPSBzdG9yZTtcXG4gICAgdGhpcy5wYXJlbnRTdWIgPSBwYXJlbnRTdWI7XFxuICAgIHRoaXMub25TdGF0ZUNoYW5nZSA9IG9uU3RhdGVDaGFuZ2U7XFxuICAgIHRoaXMudW5zdWJzY3JpYmUgPSBudWxsO1xcbiAgICB0aGlzLmxpc3RlbmVycyA9IG51bGxMaXN0ZW5lcnM7XFxuICB9XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZE5lc3RlZFN1YiA9IGZ1bmN0aW9uIGFkZE5lc3RlZFN1YihsaXN0ZW5lcikge1xcbiAgICB0aGlzLnRyeVN1YnNjcmliZSgpO1xcbiAgICByZXR1cm4gdGhpcy5saXN0ZW5lcnMuc3Vic2NyaWJlKGxpc3RlbmVyKTtcXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLm5vdGlmeU5lc3RlZFN1YnMgPSBmdW5jdGlvbiBub3RpZnlOZXN0ZWRTdWJzKCkge1xcbiAgICB0aGlzLmxpc3RlbmVycy5ub3RpZnkoKTtcXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmlzU3Vic2NyaWJlZCA9IGZ1bmN0aW9uIGlzU3Vic2NyaWJlZCgpIHtcXG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy51bnN1YnNjcmliZSk7XFxuICB9O1xcblxcbiAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS50cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiB0cnlTdWJzY3JpYmUoKSB7XFxuICAgIGlmICghdGhpcy51bnN1YnNjcmliZSkge1xcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUgPSB0aGlzLnBhcmVudFN1YiA/IHRoaXMucGFyZW50U3ViLmFkZE5lc3RlZFN1Yih0aGlzLm9uU3RhdGVDaGFuZ2UpIDogdGhpcy5zdG9yZS5zdWJzY3JpYmUodGhpcy5vblN0YXRlQ2hhbmdlKTtcXG5cXG4gICAgICB0aGlzLmxpc3RlbmVycyA9IGNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbigpO1xcbiAgICB9XFxuICB9O1xcblxcbiAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS50cnlVbnN1YnNjcmliZSA9IGZ1bmN0aW9uIHRyeVVuc3Vic2NyaWJlKCkge1xcbiAgICBpZiAodGhpcy51bnN1YnNjcmliZSkge1xcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcXG4gICAgICB0aGlzLnVuc3Vic2NyaWJlID0gbnVsbDtcXG4gICAgICB0aGlzLmxpc3RlbmVycy5jbGVhcigpO1xcbiAgICAgIHRoaXMubGlzdGVuZXJzID0gbnVsbExpc3RlbmVycztcXG4gICAgfVxcbiAgfTtcXG5cXG4gIHJldHVybiBTdWJzY3JpcHRpb247XFxufSgpO1xcblxcblxcblxcbi8qKiovIH0pLFxcbi8qIDIwMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGNyZWF0ZUNvbm5lY3QgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb25lbnRzX2Nvbm5lY3RBZHZhbmNlZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbHNfc2hhbGxvd0VxdWFsX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWFwRGlzcGF0Y2hUb1Byb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbWFwU3RhdGVUb1Byb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fbWVyZ2VQcm9wc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3NlbGVjdG9yRmFjdG9yeV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTApO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbi8qXFxuICBjb25uZWN0IGlzIGEgZmFjYWRlIG92ZXIgY29ubmVjdEFkdmFuY2VkLiBJdCB0dXJucyBpdHMgYXJncyBpbnRvIGEgY29tcGF0aWJsZVxcbiAgc2VsZWN0b3JGYWN0b3J5LCB3aGljaCBoYXMgdGhlIHNpZ25hdHVyZTpcXG5cXG4gICAgKGRpc3BhdGNoLCBvcHRpb25zKSA9PiAobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpID0+IG5leHRGaW5hbFByb3BzXFxuICBcXG4gIGNvbm5lY3QgcGFzc2VzIGl0cyBhcmdzIHRvIGNvbm5lY3RBZHZhbmNlZCBhcyBvcHRpb25zLCB3aGljaCB3aWxsIGluIHR1cm4gcGFzcyB0aGVtIHRvXFxuICBzZWxlY3RvckZhY3RvcnkgZWFjaCB0aW1lIGEgQ29ubmVjdCBjb21wb25lbnQgaW5zdGFuY2UgaXMgaW5zdGFudGlhdGVkIG9yIGhvdCByZWxvYWRlZC5cXG5cXG4gIHNlbGVjdG9yRmFjdG9yeSByZXR1cm5zIGEgZmluYWwgcHJvcHMgc2VsZWN0b3IgZnJvbSBpdHMgbWFwU3RhdGVUb1Byb3BzLFxcbiAgbWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcywgbWVyZ2VQcm9wcyxcXG4gIG1lcmdlUHJvcHNGYWN0b3JpZXMsIGFuZCBwdXJlIGFyZ3MuXFxuXFxuICBUaGUgcmVzdWx0aW5nIGZpbmFsIHByb3BzIHNlbGVjdG9yIGlzIGNhbGxlZCBieSB0aGUgQ29ubmVjdCBjb21wb25lbnQgaW5zdGFuY2Ugd2hlbmV2ZXJcXG4gIGl0IHJlY2VpdmVzIG5ldyBwcm9wcyBvciBzdG9yZSBzdGF0ZS5cXG4gKi9cXG5cXG5mdW5jdGlvbiBtYXRjaChhcmcsIGZhY3RvcmllcywgbmFtZSkge1xcbiAgZm9yICh2YXIgaSA9IGZhY3Rvcmllcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xcbiAgICB2YXIgcmVzdWx0ID0gZmFjdG9yaWVzW2ldKGFyZyk7XFxuICAgIGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQ7XFxuICB9XFxuXFxuICByZXR1cm4gZnVuY3Rpb24gKGRpc3BhdGNoLCBvcHRpb25zKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB2YWx1ZSBvZiB0eXBlICcgKyB0eXBlb2YgYXJnICsgJyBmb3IgJyArIG5hbWUgKyAnIGFyZ3VtZW50IHdoZW4gY29ubmVjdGluZyBjb21wb25lbnQgJyArIG9wdGlvbnMud3JhcHBlZENvbXBvbmVudE5hbWUgKyAnLicpO1xcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gc3RyaWN0RXF1YWwoYSwgYikge1xcbiAgcmV0dXJuIGEgPT09IGI7XFxufVxcblxcbi8vIGNyZWF0ZUNvbm5lY3Qgd2l0aCBkZWZhdWx0IGFyZ3MgYnVpbGRzIHRoZSAnb2ZmaWNpYWwnIGNvbm5lY3QgYmVoYXZpb3IuIENhbGxpbmcgaXQgd2l0aFxcbi8vIGRpZmZlcmVudCBvcHRpb25zIG9wZW5zIHVwIHNvbWUgdGVzdGluZyBhbmQgZXh0ZW5zaWJpbGl0eSBzY2VuYXJpb3NcXG5mdW5jdGlvbiBjcmVhdGVDb25uZWN0KCkge1xcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxcbiAgICAgIF9yZWYkY29ubmVjdEhPQyA9IF9yZWYuY29ubmVjdEhPQyxcXG4gICAgICBjb25uZWN0SE9DID0gX3JlZiRjb25uZWN0SE9DID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZiRjb25uZWN0SE9DLFxcbiAgICAgIF9yZWYkbWFwU3RhdGVUb1Byb3BzRiA9IF9yZWYubWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzLFxcbiAgICAgIG1hcFN0YXRlVG9Qcm9wc0ZhY3RvcmllcyA9IF9yZWYkbWFwU3RhdGVUb1Byb3BzRiA9PT0gdW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19tYXBTdGF0ZVRvUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJG1hcFN0YXRlVG9Qcm9wc0YsXFxuICAgICAgX3JlZiRtYXBEaXNwYXRjaFRvUHJvID0gX3JlZi5tYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMsXFxuICAgICAgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVzID0gX3JlZiRtYXBEaXNwYXRjaFRvUHJvID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcERpc3BhdGNoVG9Qcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYkbWFwRGlzcGF0Y2hUb1BybyxcXG4gICAgICBfcmVmJG1lcmdlUHJvcHNGYWN0b3IgPSBfcmVmLm1lcmdlUHJvcHNGYWN0b3JpZXMsXFxuICAgICAgbWVyZ2VQcm9wc0ZhY3RvcmllcyA9IF9yZWYkbWVyZ2VQcm9wc0ZhY3RvciA9PT0gdW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tZXJnZVByb3BzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZiRtZXJnZVByb3BzRmFjdG9yLFxcbiAgICAgIF9yZWYkc2VsZWN0b3JGYWN0b3J5ID0gX3JlZi5zZWxlY3RvckZhY3RvcnksXFxuICAgICAgc2VsZWN0b3JGYWN0b3J5ID0gX3JlZiRzZWxlY3RvckZhY3RvcnkgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2VsZWN0b3JGYWN0b3J5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZiRzZWxlY3RvckZhY3Rvcnk7XFxuXFxuICByZXR1cm4gZnVuY3Rpb24gY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcykge1xcbiAgICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHt9LFxcbiAgICAgICAgX3JlZjIkcHVyZSA9IF9yZWYyLnB1cmUsXFxuICAgICAgICBwdXJlID0gX3JlZjIkcHVyZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IF9yZWYyJHB1cmUsXFxuICAgICAgICBfcmVmMiRhcmVTdGF0ZXNFcXVhbCA9IF9yZWYyLmFyZVN0YXRlc0VxdWFsLFxcbiAgICAgICAgYXJlU3RhdGVzRXF1YWwgPSBfcmVmMiRhcmVTdGF0ZXNFcXVhbCA9PT0gdW5kZWZpbmVkID8gc3RyaWN0RXF1YWwgOiBfcmVmMiRhcmVTdGF0ZXNFcXVhbCxcXG4gICAgICAgIF9yZWYyJGFyZU93blByb3BzRXF1YSA9IF9yZWYyLmFyZU93blByb3BzRXF1YWwsXFxuICAgICAgICBhcmVPd25Qcm9wc0VxdWFsID0gX3JlZjIkYXJlT3duUHJvcHNFcXVhID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZU93blByb3BzRXF1YSxcXG4gICAgICAgIF9yZWYyJGFyZVN0YXRlUHJvcHNFcSA9IF9yZWYyLmFyZVN0YXRlUHJvcHNFcXVhbCxcXG4gICAgICAgIGFyZVN0YXRlUHJvcHNFcXVhbCA9IF9yZWYyJGFyZVN0YXRlUHJvcHNFcSA9PT0gdW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX191dGlsc19zaGFsbG93RXF1YWxfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmMiRhcmVTdGF0ZVByb3BzRXEsXFxuICAgICAgICBfcmVmMiRhcmVNZXJnZWRQcm9wc0UgPSBfcmVmMi5hcmVNZXJnZWRQcm9wc0VxdWFsLFxcbiAgICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbCA9IF9yZWYyJGFyZU1lcmdlZFByb3BzRSA9PT0gdW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX191dGlsc19zaGFsbG93RXF1YWxfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmMiRhcmVNZXJnZWRQcm9wc0UsXFxuICAgICAgICBleHRyYU9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFsncHVyZScsICdhcmVTdGF0ZXNFcXVhbCcsICdhcmVPd25Qcm9wc0VxdWFsJywgJ2FyZVN0YXRlUHJvcHNFcXVhbCcsICdhcmVNZXJnZWRQcm9wc0VxdWFsJ10pO1xcblxcbiAgICB2YXIgaW5pdE1hcFN0YXRlVG9Qcm9wcyA9IG1hdGNoKG1hcFN0YXRlVG9Qcm9wcywgbWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzLCAnbWFwU3RhdGVUb1Byb3BzJyk7XFxuICAgIHZhciBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzID0gbWF0Y2gobWFwRGlzcGF0Y2hUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMsICdtYXBEaXNwYXRjaFRvUHJvcHMnKTtcXG4gICAgdmFyIGluaXRNZXJnZVByb3BzID0gbWF0Y2gobWVyZ2VQcm9wcywgbWVyZ2VQcm9wc0ZhY3RvcmllcywgJ21lcmdlUHJvcHMnKTtcXG5cXG4gICAgcmV0dXJuIGNvbm5lY3RIT0Moc2VsZWN0b3JGYWN0b3J5LCBfZXh0ZW5kcyh7XFxuICAgICAgLy8gdXNlZCBpbiBlcnJvciBtZXNzYWdlc1xcbiAgICAgIG1ldGhvZE5hbWU6ICdjb25uZWN0JyxcXG5cXG4gICAgICAvLyB1c2VkIHRvIGNvbXB1dGUgQ29ubmVjdCdzIGRpc3BsYXlOYW1lIGZyb20gdGhlIHdyYXBwZWQgY29tcG9uZW50J3MgZGlzcGxheU5hbWUuXFxuICAgICAgZ2V0RGlzcGxheU5hbWU6IGZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKG5hbWUpIHtcXG4gICAgICAgIHJldHVybiAnQ29ubmVjdCgnICsgbmFtZSArICcpJztcXG4gICAgICB9LFxcblxcbiAgICAgIC8vIGlmIG1hcFN0YXRlVG9Qcm9wcyBpcyBmYWxzeSwgdGhlIENvbm5lY3QgY29tcG9uZW50IGRvZXNuJ3Qgc3Vic2NyaWJlIHRvIHN0b3JlIHN0YXRlIGNoYW5nZXNcXG4gICAgICBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXM6IEJvb2xlYW4obWFwU3RhdGVUb1Byb3BzKSxcXG5cXG4gICAgICAvLyBwYXNzZWQgdGhyb3VnaCB0byBzZWxlY3RvckZhY3RvcnlcXG4gICAgICBpbml0TWFwU3RhdGVUb1Byb3BzOiBpbml0TWFwU3RhdGVUb1Byb3BzLFxcbiAgICAgIGluaXRNYXBEaXNwYXRjaFRvUHJvcHM6IGluaXRNYXBEaXNwYXRjaFRvUHJvcHMsXFxuICAgICAgaW5pdE1lcmdlUHJvcHM6IGluaXRNZXJnZVByb3BzLFxcbiAgICAgIHB1cmU6IHB1cmUsXFxuICAgICAgYXJlU3RhdGVzRXF1YWw6IGFyZVN0YXRlc0VxdWFsLFxcbiAgICAgIGFyZU93blByb3BzRXF1YWw6IGFyZU93blByb3BzRXF1YWwsXFxuICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsOiBhcmVTdGF0ZVByb3BzRXF1YWwsXFxuICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbDogYXJlTWVyZ2VkUHJvcHNFcXVhbFxcblxcbiAgICB9LCBleHRyYU9wdGlvbnMpKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUNvbm5lY3QoKSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjAxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSBzaGFsbG93RXF1YWw7XFxudmFyIGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XFxuXFxuZnVuY3Rpb24gaXMoeCwgeSkge1xcbiAgaWYgKHggPT09IHkpIHtcXG4gICAgcmV0dXJuIHggIT09IDAgfHwgeSAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XFxuICB9IGVsc2Uge1xcbiAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xcbiAgfVxcbn1cXG5cXG5mdW5jdGlvbiBzaGFsbG93RXF1YWwob2JqQSwgb2JqQikge1xcbiAgaWYgKGlzKG9iakEsIG9iakIpKSByZXR1cm4gdHJ1ZTtcXG5cXG4gIGlmICh0eXBlb2Ygb2JqQSAhPT0gJ29iamVjdCcgfHwgb2JqQSA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqQiAhPT0gJ29iamVjdCcgfHwgb2JqQiA9PT0gbnVsbCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuXFxuICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcXG4gIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xcblxcbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSByZXR1cm4gZmFsc2U7XFxuXFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXNBLmxlbmd0aDsgaSsrKSB7XFxuICAgIGlmICghaGFzT3duLmNhbGwob2JqQiwga2V5c0FbaV0pIHx8ICFpcyhvYmpBW2tleXNBW2ldXSwgb2JqQltrZXlzQVtpXV0pKSB7XFxuICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9XFxuICB9XFxuXFxuICByZXR1cm4gdHJ1ZTtcXG59XFxuXFxuLyoqKi8gfSksXFxuLyogMjAyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzRnVuY3Rpb24gKi9cXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzTWlzc2luZyAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNPYmplY3QgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193cmFwTWFwVG9Qcm9wc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nik7XFxuXFxuXFxuXFxuZnVuY3Rpb24gd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzRnVuY3Rpb24obWFwRGlzcGF0Y2hUb1Byb3BzKSB7XFxuICByZXR1cm4gdHlwZW9mIG1hcERpc3BhdGNoVG9Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImJcXFwiIC8qIHdyYXBNYXBUb1Byb3BzRnVuYyAqL10pKG1hcERpc3BhdGNoVG9Qcm9wcywgJ21hcERpc3BhdGNoVG9Qcm9wcycpIDogdW5kZWZpbmVkO1xcbn1cXG5cXG5mdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nKG1hcERpc3BhdGNoVG9Qcm9wcykge1xcbiAgcmV0dXJuICFtYXBEaXNwYXRjaFRvUHJvcHMgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193cmFwTWFwVG9Qcm9wc19fW1xcXCJhXFxcIiAvKiB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50ICovXSkoZnVuY3Rpb24gKGRpc3BhdGNoKSB7XFxuICAgIHJldHVybiB7IGRpc3BhdGNoOiBkaXNwYXRjaCB9O1xcbiAgfSkgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc09iamVjdChtYXBEaXNwYXRjaFRvUHJvcHMpIHtcXG4gIHJldHVybiBtYXBEaXNwYXRjaFRvUHJvcHMgJiYgdHlwZW9mIG1hcERpc3BhdGNoVG9Qcm9wcyA9PT0gJ29iamVjdCcgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193cmFwTWFwVG9Qcm9wc19fW1xcXCJhXFxcIiAvKiB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50ICovXSkoZnVuY3Rpb24gKGRpc3BhdGNoKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKG1hcERpc3BhdGNoVG9Qcm9wcywgZGlzcGF0Y2gpO1xcbiAgfSkgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFt3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbiwgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzTWlzc2luZywgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzT2JqZWN0XSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjAzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsLCBtb2R1bGUpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19wb255ZmlsbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMDQpO1xcbi8qIGdsb2JhbCB3aW5kb3cgKi9cXG5cXG5cXG52YXIgcm9vdDtcXG5cXG5pZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XFxuICByb290ID0gc2VsZjtcXG59IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XFxuICByb290ID0gd2luZG93O1xcbn0gZWxzZSBpZiAodHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSBnbG9iYWw7XFxufSBlbHNlIGlmICh0cnVlKSB7XFxuICByb290ID0gbW9kdWxlO1xcbn0gZWxzZSB7XFxuICByb290ID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcXG59XFxuXFxudmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3BvbnlmaWxsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShyb290KTtcXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChyZXN1bHQpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI4KSwgX193ZWJwYWNrX3JlcXVpcmVfXygyMikobW9kdWxlKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMjA0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSBzeW1ib2xPYnNlcnZhYmxlUG9ueWZpbGw7XFxuZnVuY3Rpb24gc3ltYm9sT2JzZXJ2YWJsZVBvbnlmaWxsKHJvb3QpIHtcXG5cXHR2YXIgcmVzdWx0O1xcblxcdHZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcXG5cXG5cXHRpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJykge1xcblxcdFxcdGlmIChTeW1ib2wub2JzZXJ2YWJsZSkge1xcblxcdFxcdFxcdHJlc3VsdCA9IFN5bWJvbC5vYnNlcnZhYmxlO1xcblxcdFxcdH0gZWxzZSB7XFxuXFx0XFx0XFx0cmVzdWx0ID0gU3ltYm9sKCdvYnNlcnZhYmxlJyk7XFxuXFx0XFx0XFx0U3ltYm9sLm9ic2VydmFibGUgPSByZXN1bHQ7XFxuXFx0XFx0fVxcblxcdH0gZWxzZSB7XFxuXFx0XFx0cmVzdWx0ID0gJ0BAb2JzZXJ2YWJsZSc7XFxuXFx0fVxcblxcblxcdHJldHVybiByZXN1bHQ7XFxufTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihwcm9jZXNzKSB7LyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGRlZmF1bHQgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdXRpbHNfd2FybmluZ19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NCk7XFxuXFxuXFxuXFxuXFxuZnVuY3Rpb24gZ2V0VW5kZWZpbmVkU3RhdGVFcnJvck1lc3NhZ2Uoa2V5LCBhY3Rpb24pIHtcXG4gIHZhciBhY3Rpb25UeXBlID0gYWN0aW9uICYmIGFjdGlvbi50eXBlO1xcbiAgdmFyIGFjdGlvbk5hbWUgPSBhY3Rpb25UeXBlICYmICdcXFwiJyArIGFjdGlvblR5cGUudG9TdHJpbmcoKSArICdcXFwiJyB8fCAnYW4gYWN0aW9uJztcXG5cXG4gIHJldHVybiAnR2l2ZW4gYWN0aW9uICcgKyBhY3Rpb25OYW1lICsgJywgcmVkdWNlciBcXFwiJyArIGtleSArICdcXFwiIHJldHVybmVkIHVuZGVmaW5lZC4gJyArICdUbyBpZ25vcmUgYW4gYWN0aW9uLCB5b3UgbXVzdCBleHBsaWNpdGx5IHJldHVybiB0aGUgcHJldmlvdXMgc3RhdGUuICcgKyAnSWYgeW91IHdhbnQgdGhpcyByZWR1Y2VyIHRvIGhvbGQgbm8gdmFsdWUsIHlvdSBjYW4gcmV0dXJuIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQuJztcXG59XFxuXFxuZnVuY3Rpb24gZ2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShpbnB1dFN0YXRlLCByZWR1Y2VycywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpIHtcXG4gIHZhciByZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcXG4gIHZhciBhcmd1bWVudE5hbWUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGUgPT09IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlU3RvcmVfX1tcXFwiYVxcXCIgLyogQWN0aW9uVHlwZXMgKi9dLklOSVQgPyAncHJlbG9hZGVkU3RhdGUgYXJndW1lbnQgcGFzc2VkIHRvIGNyZWF0ZVN0b3JlJyA6ICdwcmV2aW91cyBzdGF0ZSByZWNlaXZlZCBieSB0aGUgcmVkdWNlcic7XFxuXFxuICBpZiAocmVkdWNlcktleXMubGVuZ3RoID09PSAwKSB7XFxuICAgIHJldHVybiAnU3RvcmUgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIHJlZHVjZXIuIE1ha2Ugc3VyZSB0aGUgYXJndW1lbnQgcGFzc2VkICcgKyAndG8gY29tYmluZVJlZHVjZXJzIGlzIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIHJlZHVjZXJzLic7XFxuICB9XFxuXFxuICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGlucHV0U3RhdGUpKSB7XFxuICAgIHJldHVybiAnVGhlICcgKyBhcmd1bWVudE5hbWUgKyAnIGhhcyB1bmV4cGVjdGVkIHR5cGUgb2YgXFxcIicgKyB7fS50b1N0cmluZy5jYWxsKGlucHV0U3RhdGUpLm1hdGNoKC9cXFxccyhbYS16fEEtWl0rKS8pWzFdICsgJ1xcXCIuIEV4cGVjdGVkIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgJyArICgna2V5czogXFxcIicgKyByZWR1Y2VyS2V5cy5qb2luKCdcXFwiLCBcXFwiJykgKyAnXFxcIicpO1xcbiAgfVxcblxcbiAgdmFyIHVuZXhwZWN0ZWRLZXlzID0gT2JqZWN0LmtleXMoaW5wdXRTdGF0ZSkuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgcmV0dXJuICFyZWR1Y2Vycy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmICF1bmV4cGVjdGVkS2V5Q2FjaGVba2V5XTtcXG4gIH0pO1xcblxcbiAgdW5leHBlY3RlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XFxuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldID0gdHJ1ZTtcXG4gIH0pO1xcblxcbiAgaWYgKHVuZXhwZWN0ZWRLZXlzLmxlbmd0aCA+IDApIHtcXG4gICAgcmV0dXJuICdVbmV4cGVjdGVkICcgKyAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMSA/ICdrZXlzJyA6ICdrZXknKSArICcgJyArICgnXFxcIicgKyB1bmV4cGVjdGVkS2V5cy5qb2luKCdcXFwiLCBcXFwiJykgKyAnXFxcIiBmb3VuZCBpbiAnICsgYXJndW1lbnROYW1lICsgJy4gJykgKyAnRXhwZWN0ZWQgdG8gZmluZCBvbmUgb2YgdGhlIGtub3duIHJlZHVjZXIga2V5cyBpbnN0ZWFkOiAnICsgKCdcXFwiJyArIHJlZHVjZXJLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiLiBVbmV4cGVjdGVkIGtleXMgd2lsbCBiZSBpZ25vcmVkLicpO1xcbiAgfVxcbn1cXG5cXG5mdW5jdGlvbiBhc3NlcnRSZWR1Y2VyU2hhcGUocmVkdWNlcnMpIHtcXG4gIE9iamVjdC5rZXlzKHJlZHVjZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgdmFyIHJlZHVjZXIgPSByZWR1Y2Vyc1trZXldO1xcbiAgICB2YXIgaW5pdGlhbFN0YXRlID0gcmVkdWNlcih1bmRlZmluZWQsIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fW1xcXCJhXFxcIiAvKiBBY3Rpb25UeXBlcyAqL10uSU5JVCB9KTtcXG5cXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkIGR1cmluZyBpbml0aWFsaXphdGlvbi4gJyArICdJZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VyIGlzIHVuZGVmaW5lZCwgeW91IG11c3QgJyArICdleHBsaWNpdGx5IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5ICcgKyAnbm90IGJlIHVuZGVmaW5lZC4gSWYgeW91IGRvblxcXFwndCB3YW50IHRvIHNldCBhIHZhbHVlIGZvciB0aGlzIHJlZHVjZXIsICcgKyAneW91IGNhbiB1c2UgbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC4nKTtcXG4gICAgfVxcblxcbiAgICB2YXIgdHlwZSA9ICdAQHJlZHV4L1BST0JFX1VOS05PV05fQUNUSU9OXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNykuc3BsaXQoJycpLmpvaW4oJy4nKTtcXG4gICAgaWYgKHR5cGVvZiByZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiB0eXBlIH0pID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVkdWNlciBcXFwiJyArIGtleSArICdcXFwiIHJldHVybmVkIHVuZGVmaW5lZCB3aGVuIHByb2JlZCB3aXRoIGEgcmFuZG9tIHR5cGUuICcgKyAoJ0RvblxcXFwndCB0cnkgdG8gaGFuZGxlICcgKyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX19bXFxcImFcXFwiIC8qIEFjdGlvblR5cGVzICovXS5JTklUICsgJyBvciBvdGhlciBhY3Rpb25zIGluIFxcXCJyZWR1eC8qXFxcIiAnKSArICduYW1lc3BhY2UuIFRoZXkgYXJlIGNvbnNpZGVyZWQgcHJpdmF0ZS4gSW5zdGVhZCwgeW91IG11c3QgcmV0dXJuIHRoZSAnICsgJ2N1cnJlbnQgc3RhdGUgZm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHVubGVzcyBpdCBpcyB1bmRlZmluZWQsICcgKyAnaW4gd2hpY2ggY2FzZSB5b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUsIHJlZ2FyZGxlc3Mgb2YgdGhlICcgKyAnYWN0aW9uIHR5cGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSBub3QgYmUgdW5kZWZpbmVkLCBidXQgY2FuIGJlIG51bGwuJyk7XFxuICAgIH1cXG4gIH0pO1xcbn1cXG5cXG4vKipcXG4gKiBUdXJucyBhbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBkaWZmZXJlbnQgcmVkdWNlciBmdW5jdGlvbnMsIGludG8gYSBzaW5nbGVcXG4gKiByZWR1Y2VyIGZ1bmN0aW9uLiBJdCB3aWxsIGNhbGwgZXZlcnkgY2hpbGQgcmVkdWNlciwgYW5kIGdhdGhlciB0aGVpciByZXN1bHRzXFxuICogaW50byBhIHNpbmdsZSBzdGF0ZSBvYmplY3QsIHdob3NlIGtleXMgY29ycmVzcG9uZCB0byB0aGUga2V5cyBvZiB0aGUgcGFzc2VkXFxuICogcmVkdWNlciBmdW5jdGlvbnMuXFxuICpcXG4gKiBAcGFyYW0ge09iamVjdH0gcmVkdWNlcnMgQW4gb2JqZWN0IHdob3NlIHZhbHVlcyBjb3JyZXNwb25kIHRvIGRpZmZlcmVudFxcbiAqIHJlZHVjZXIgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSBjb21iaW5lZCBpbnRvIG9uZS4gT25lIGhhbmR5IHdheSB0byBvYnRhaW5cXG4gKiBpdCBpcyB0byB1c2UgRVM2IGBpbXBvcnQgKiBhcyByZWR1Y2Vyc2Agc3ludGF4LiBUaGUgcmVkdWNlcnMgbWF5IG5ldmVyIHJldHVyblxcbiAqIHVuZGVmaW5lZCBmb3IgYW55IGFjdGlvbi4gSW5zdGVhZCwgdGhleSBzaG91bGQgcmV0dXJuIHRoZWlyIGluaXRpYWwgc3RhdGVcXG4gKiBpZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZW0gd2FzIHVuZGVmaW5lZCwgYW5kIHRoZSBjdXJyZW50IHN0YXRlIGZvciBhbnlcXG4gKiB1bnJlY29nbml6ZWQgYWN0aW9uLlxcbiAqXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHJlZHVjZXIgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGV2ZXJ5IHJlZHVjZXIgaW5zaWRlIHRoZVxcbiAqIHBhc3NlZCBvYmplY3QsIGFuZCBidWlsZHMgYSBzdGF0ZSBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzaGFwZS5cXG4gKi9cXG5mdW5jdGlvbiBjb21iaW5lUmVkdWNlcnMocmVkdWNlcnMpIHtcXG4gIHZhciByZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcXG4gIHZhciBmaW5hbFJlZHVjZXJzID0ge307XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IHJlZHVjZXJLZXlzLmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBrZXkgPSByZWR1Y2VyS2V5c1tpXTtcXG5cXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnTm8gcmVkdWNlciBwcm92aWRlZCBmb3Iga2V5IFxcXCInICsga2V5ICsgJ1xcXCInKTtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYgKHR5cGVvZiByZWR1Y2Vyc1trZXldID09PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgZmluYWxSZWR1Y2Vyc1trZXldID0gcmVkdWNlcnNba2V5XTtcXG4gICAgfVxcbiAgfVxcbiAgdmFyIGZpbmFsUmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhmaW5hbFJlZHVjZXJzKTtcXG5cXG4gIHZhciB1bmV4cGVjdGVkS2V5Q2FjaGUgPSB2b2lkIDA7XFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICB1bmV4cGVjdGVkS2V5Q2FjaGUgPSB7fTtcXG4gIH1cXG5cXG4gIHZhciBzaGFwZUFzc2VydGlvbkVycm9yID0gdm9pZCAwO1xcbiAgdHJ5IHtcXG4gICAgYXNzZXJ0UmVkdWNlclNoYXBlKGZpbmFsUmVkdWNlcnMpO1xcbiAgfSBjYXRjaCAoZSkge1xcbiAgICBzaGFwZUFzc2VydGlvbkVycm9yID0gZTtcXG4gIH1cXG5cXG4gIHJldHVybiBmdW5jdGlvbiBjb21iaW5hdGlvbigpIHtcXG4gICAgdmFyIHN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcXG4gICAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50c1sxXTtcXG5cXG4gICAgaWYgKHNoYXBlQXNzZXJ0aW9uRXJyb3IpIHtcXG4gICAgICB0aHJvdyBzaGFwZUFzc2VydGlvbkVycm9yO1xcbiAgICB9XFxuXFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgdmFyIHdhcm5pbmdNZXNzYWdlID0gZ2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShzdGF0ZSwgZmluYWxSZWR1Y2VycywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpO1xcbiAgICAgIGlmICh3YXJuaW5nTWVzc2FnZSkge1xcbiAgICAgICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fdXRpbHNfd2FybmluZ19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybmluZ01lc3NhZ2UpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICB2YXIgaGFzQ2hhbmdlZCA9IGZhbHNlO1xcbiAgICB2YXIgbmV4dFN0YXRlID0ge307XFxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBmaW5hbFJlZHVjZXJLZXlzLmxlbmd0aDsgX2krKykge1xcbiAgICAgIHZhciBfa2V5ID0gZmluYWxSZWR1Y2VyS2V5c1tfaV07XFxuICAgICAgdmFyIHJlZHVjZXIgPSBmaW5hbFJlZHVjZXJzW19rZXldO1xcbiAgICAgIHZhciBwcmV2aW91c1N0YXRlRm9yS2V5ID0gc3RhdGVbX2tleV07XFxuICAgICAgdmFyIG5leHRTdGF0ZUZvcktleSA9IHJlZHVjZXIocHJldmlvdXNTdGF0ZUZvcktleSwgYWN0aW9uKTtcXG4gICAgICBpZiAodHlwZW9mIG5leHRTdGF0ZUZvcktleSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSBnZXRVbmRlZmluZWRTdGF0ZUVycm9yTWVzc2FnZShfa2V5LCBhY3Rpb24pO1xcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XFxuICAgICAgfVxcbiAgICAgIG5leHRTdGF0ZVtfa2V5XSA9IG5leHRTdGF0ZUZvcktleTtcXG4gICAgICBoYXNDaGFuZ2VkID0gaGFzQ2hhbmdlZCB8fCBuZXh0U3RhdGVGb3JLZXkgIT09IHByZXZpb3VzU3RhdGVGb3JLZXk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGhhc0NoYW5nZWQgPyBuZXh0U3RhdGUgOiBzdGF0ZTtcXG4gIH07XFxufVxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IGJpbmRBY3Rpb25DcmVhdG9ycztcXG5mdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9yLCBkaXNwYXRjaCkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIGRpc3BhdGNoKGFjdGlvbkNyZWF0b3IuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpKTtcXG4gIH07XFxufVxcblxcbi8qKlxcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGFjdGlvbiBjcmVhdG9ycywgaW50byBhbiBvYmplY3Qgd2l0aCB0aGVcXG4gKiBzYW1lIGtleXMsIGJ1dCB3aXRoIGV2ZXJ5IGZ1bmN0aW9uIHdyYXBwZWQgaW50byBhIGBkaXNwYXRjaGAgY2FsbCBzbyB0aGV5XFxuICogbWF5IGJlIGludm9rZWQgZGlyZWN0bHkuIFRoaXMgaXMganVzdCBhIGNvbnZlbmllbmNlIG1ldGhvZCwgYXMgeW91IGNhbiBjYWxsXFxuICogYHN0b3JlLmRpc3BhdGNoKE15QWN0aW9uQ3JlYXRvcnMuZG9Tb21ldGhpbmcoKSlgIHlvdXJzZWxmIGp1c3QgZmluZS5cXG4gKlxcbiAqIEZvciBjb252ZW5pZW5jZSwgeW91IGNhbiBhbHNvIHBhc3MgYSBzaW5nbGUgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LFxcbiAqIGFuZCBnZXQgYSBmdW5jdGlvbiBpbiByZXR1cm4uXFxuICpcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdH0gYWN0aW9uQ3JlYXRvcnMgQW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgYWN0aW9uXFxuICogY3JlYXRvciBmdW5jdGlvbnMuIE9uZSBoYW5keSB3YXkgdG8gb2J0YWluIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzYFxcbiAqIHN5bnRheC4gWW91IG1heSBhbHNvIHBhc3MgYSBzaW5nbGUgZnVuY3Rpb24uXFxuICpcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBkaXNwYXRjaCBUaGUgYGRpc3BhdGNoYCBmdW5jdGlvbiBhdmFpbGFibGUgb24geW91ciBSZWR1eFxcbiAqIHN0b3JlLlxcbiAqXFxuICogQHJldHVybnMge0Z1bmN0aW9ufE9iamVjdH0gVGhlIG9iamVjdCBtaW1pY2tpbmcgdGhlIG9yaWdpbmFsIG9iamVjdCwgYnV0IHdpdGhcXG4gKiBldmVyeSBhY3Rpb24gY3JlYXRvciB3cmFwcGVkIGludG8gdGhlIGBkaXNwYXRjaGAgY2FsbC4gSWYgeW91IHBhc3NlZCBhXFxuICogZnVuY3Rpb24gYXMgYGFjdGlvbkNyZWF0b3JzYCwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGFsc28gYmUgYSBzaW5nbGVcXG4gKiBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcnMoYWN0aW9uQ3JlYXRvcnMsIGRpc3BhdGNoKSB7XFxuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzID09PSAnZnVuY3Rpb24nKSB7XFxuICAgIHJldHVybiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpO1xcbiAgfVxcblxcbiAgaWYgKHR5cGVvZiBhY3Rpb25DcmVhdG9ycyAhPT0gJ29iamVjdCcgfHwgYWN0aW9uQ3JlYXRvcnMgPT09IG51bGwpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWN0aW9uQ3JlYXRvcnMgZXhwZWN0ZWQgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb24sIGluc3RlYWQgcmVjZWl2ZWQgJyArIChhY3Rpb25DcmVhdG9ycyA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBhY3Rpb25DcmVhdG9ycykgKyAnLiAnICsgJ0RpZCB5b3Ugd3JpdGUgXFxcImltcG9ydCBBY3Rpb25DcmVhdG9ycyBmcm9tXFxcIiBpbnN0ZWFkIG9mIFxcXCJpbXBvcnQgKiBhcyBBY3Rpb25DcmVhdG9ycyBmcm9tXFxcIj8nKTtcXG4gIH1cXG5cXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoYWN0aW9uQ3JlYXRvcnMpO1xcbiAgdmFyIGJvdW5kQWN0aW9uQ3JlYXRvcnMgPSB7fTtcXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcXG4gICAgdmFyIGFjdGlvbkNyZWF0b3IgPSBhY3Rpb25DcmVhdG9yc1trZXldO1xcbiAgICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3IgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICBib3VuZEFjdGlvbkNyZWF0b3JzW2tleV0gPSBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9yLCBkaXNwYXRjaCk7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiBib3VuZEFjdGlvbkNyZWF0b3JzO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBkZWZhdWx0ICovXFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9zZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgc3RvcmUgZW5oYW5jZXIgdGhhdCBhcHBsaWVzIG1pZGRsZXdhcmUgdG8gdGhlIGRpc3BhdGNoIG1ldGhvZFxcbiAqIG9mIHRoZSBSZWR1eCBzdG9yZS4gVGhpcyBpcyBoYW5keSBmb3IgYSB2YXJpZXR5IG9mIHRhc2tzLCBzdWNoIGFzIGV4cHJlc3NpbmdcXG4gKiBhc3luY2hyb25vdXMgYWN0aW9ucyBpbiBhIGNvbmNpc2UgbWFubmVyLCBvciBsb2dnaW5nIGV2ZXJ5IGFjdGlvbiBwYXlsb2FkLlxcbiAqXFxuICogU2VlIGByZWR1eC10aHVua2AgcGFja2FnZSBhcyBhbiBleGFtcGxlIG9mIHRoZSBSZWR1eCBtaWRkbGV3YXJlLlxcbiAqXFxuICogQmVjYXVzZSBtaWRkbGV3YXJlIGlzIHBvdGVudGlhbGx5IGFzeW5jaHJvbm91cywgdGhpcyBzaG91bGQgYmUgdGhlIGZpcnN0XFxuICogc3RvcmUgZW5oYW5jZXIgaW4gdGhlIGNvbXBvc2l0aW9uIGNoYWluLlxcbiAqXFxuICogTm90ZSB0aGF0IGVhY2ggbWlkZGxld2FyZSB3aWxsIGJlIGdpdmVuIHRoZSBgZGlzcGF0Y2hgIGFuZCBgZ2V0U3RhdGVgIGZ1bmN0aW9uc1xcbiAqIGFzIG5hbWVkIGFyZ3VtZW50cy5cXG4gKlxcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IG1pZGRsZXdhcmVzIFRoZSBtaWRkbGV3YXJlIGNoYWluIHRvIGJlIGFwcGxpZWQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBBIHN0b3JlIGVuaGFuY2VyIGFwcGx5aW5nIHRoZSBtaWRkbGV3YXJlLlxcbiAqL1xcbmZ1bmN0aW9uIGFwcGx5TWlkZGxld2FyZSgpIHtcXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBtaWRkbGV3YXJlcyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICBtaWRkbGV3YXJlc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gIH1cXG5cXG4gIHJldHVybiBmdW5jdGlvbiAoY3JlYXRlU3RvcmUpIHtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpIHtcXG4gICAgICB2YXIgc3RvcmUgPSBjcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpO1xcbiAgICAgIHZhciBfZGlzcGF0Y2ggPSBzdG9yZS5kaXNwYXRjaDtcXG4gICAgICB2YXIgY2hhaW4gPSBbXTtcXG5cXG4gICAgICB2YXIgbWlkZGxld2FyZUFQSSA9IHtcXG4gICAgICAgIGdldFN0YXRlOiBzdG9yZS5nZXRTdGF0ZSxcXG4gICAgICAgIGRpc3BhdGNoOiBmdW5jdGlvbiBkaXNwYXRjaChhY3Rpb24pIHtcXG4gICAgICAgICAgcmV0dXJuIF9kaXNwYXRjaChhY3Rpb24pO1xcbiAgICAgICAgfVxcbiAgICAgIH07XFxuICAgICAgY2hhaW4gPSBtaWRkbGV3YXJlcy5tYXAoZnVuY3Rpb24gKG1pZGRsZXdhcmUpIHtcXG4gICAgICAgIHJldHVybiBtaWRkbGV3YXJlKG1pZGRsZXdhcmVBUEkpO1xcbiAgICAgIH0pO1xcbiAgICAgIF9kaXNwYXRjaCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9zZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5hcHBseSh1bmRlZmluZWQsIGNoYWluKShzdG9yZS5kaXNwYXRjaCk7XFxuXFxuICAgICAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdG9yZSwge1xcbiAgICAgICAgZGlzcGF0Y2g6IF9kaXNwYXRjaFxcbiAgICAgIH0pO1xcbiAgICB9O1xcbiAgfTtcXG59XFxuXFxuLyoqKi8gfSksXFxuLyogMjA4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd2hlbk1hcFN0YXRlVG9Qcm9wc0lzRnVuY3Rpb24gKi9cXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZyAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3dyYXBNYXBUb1Byb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2KTtcXG5cXG5cXG5mdW5jdGlvbiB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbihtYXBTdGF0ZVRvUHJvcHMpIHtcXG4gIHJldHVybiB0eXBlb2YgbWFwU3RhdGVUb1Byb3BzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYlxcXCIgLyogd3JhcE1hcFRvUHJvcHNGdW5jICovXSkobWFwU3RhdGVUb1Byb3BzLCAnbWFwU3RhdGVUb1Byb3BzJykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc01pc3NpbmcobWFwU3RhdGVUb1Byb3BzKSB7XFxuICByZXR1cm4gIW1hcFN0YXRlVG9Qcm9wcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoKSB7XFxuICAgIHJldHVybiB7fTtcXG4gIH0pIDogdW5kZWZpbmVkO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChbd2hlbk1hcFN0YXRlVG9Qcm9wc0lzRnVuY3Rpb24sIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc01pc3NpbmddKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihwcm9jZXNzKSB7LyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGRlZmF1bHRNZXJnZVByb3BzICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdyYXBNZXJnZVByb3BzRnVuYyAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWVyZ2VQcm9wc0lzRnVuY3Rpb24gKi9cXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd2hlbk1lcmdlUHJvcHNJc09taXR0ZWQgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc192ZXJpZnlQbGFpbk9iamVjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nyk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5cXG5cXG5mdW5jdGlvbiBkZWZhdWx0TWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcykge1xcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvd25Qcm9wcywgc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcyk7XFxufVxcblxcbmZ1bmN0aW9uIHdyYXBNZXJnZVByb3BzRnVuYyhtZXJnZVByb3BzKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gaW5pdE1lcmdlUHJvcHNQcm94eShkaXNwYXRjaCwgX3JlZikge1xcbiAgICB2YXIgZGlzcGxheU5hbWUgPSBfcmVmLmRpc3BsYXlOYW1lLFxcbiAgICAgICAgcHVyZSA9IF9yZWYucHVyZSxcXG4gICAgICAgIGFyZU1lcmdlZFByb3BzRXF1YWwgPSBfcmVmLmFyZU1lcmdlZFByb3BzRXF1YWw7XFxuXFxuICAgIHZhciBoYXNSdW5PbmNlID0gZmFsc2U7XFxuICAgIHZhciBtZXJnZWRQcm9wcyA9IHZvaWQgMDtcXG5cXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1lcmdlUHJvcHNQcm94eShzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcykge1xcbiAgICAgIHZhciBuZXh0TWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcXG5cXG4gICAgICBpZiAoaGFzUnVuT25jZSkge1xcbiAgICAgICAgaWYgKCFwdXJlIHx8ICFhcmVNZXJnZWRQcm9wc0VxdWFsKG5leHRNZXJnZWRQcm9wcywgbWVyZ2VkUHJvcHMpKSBtZXJnZWRQcm9wcyA9IG5leHRNZXJnZWRQcm9wcztcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgaGFzUnVuT25jZSA9IHRydWU7XFxuICAgICAgICBtZXJnZWRQcm9wcyA9IG5leHRNZXJnZWRQcm9wcztcXG5cXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc192ZXJpZnlQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkobWVyZ2VkUHJvcHMsIGRpc3BsYXlOYW1lLCAnbWVyZ2VQcm9wcycpO1xcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XFxuICAgIH07XFxuICB9O1xcbn1cXG5cXG5mdW5jdGlvbiB3aGVuTWVyZ2VQcm9wc0lzRnVuY3Rpb24obWVyZ2VQcm9wcykge1xcbiAgcmV0dXJuIHR5cGVvZiBtZXJnZVByb3BzID09PSAnZnVuY3Rpb24nID8gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIDogdW5kZWZpbmVkO1xcbn1cXG5cXG5mdW5jdGlvbiB3aGVuTWVyZ2VQcm9wc0lzT21pdHRlZChtZXJnZVByb3BzKSB7XFxuICByZXR1cm4gIW1lcmdlUHJvcHMgPyBmdW5jdGlvbiAoKSB7XFxuICAgIHJldHVybiBkZWZhdWx0TWVyZ2VQcm9wcztcXG4gIH0gOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFt3aGVuTWVyZ2VQcm9wc0lzRnVuY3Rpb24sIHdoZW5NZXJnZVByb3BzSXNPbWl0dGVkXSk7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDIxMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgaW1wdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeSAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBwdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeSAqL1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IGZpbmFsUHJvcHNTZWxlY3RvckZhY3Rvcnk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fdmVyaWZ5U3Vic2VsZWN0b3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMSk7XFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcbmZ1bmN0aW9uIGltcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIGRpc3BhdGNoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gaW1wdXJlRmluYWxQcm9wc1NlbGVjdG9yKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICByZXR1cm4gbWVyZ2VQcm9wcyhtYXBTdGF0ZVRvUHJvcHMoc3RhdGUsIG93blByb3BzKSwgbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyksIG93blByb3BzKTtcXG4gIH07XFxufVxcblxcbmZ1bmN0aW9uIHB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwYXRjaCwgX3JlZikge1xcbiAgdmFyIGFyZVN0YXRlc0VxdWFsID0gX3JlZi5hcmVTdGF0ZXNFcXVhbCxcXG4gICAgICBhcmVPd25Qcm9wc0VxdWFsID0gX3JlZi5hcmVPd25Qcm9wc0VxdWFsLFxcbiAgICAgIGFyZVN0YXRlUHJvcHNFcXVhbCA9IF9yZWYuYXJlU3RhdGVQcm9wc0VxdWFsO1xcblxcbiAgdmFyIGhhc1J1bkF0TGVhc3RPbmNlID0gZmFsc2U7XFxuICB2YXIgc3RhdGUgPSB2b2lkIDA7XFxuICB2YXIgb3duUHJvcHMgPSB2b2lkIDA7XFxuICB2YXIgc3RhdGVQcm9wcyA9IHZvaWQgMDtcXG4gIHZhciBkaXNwYXRjaFByb3BzID0gdm9pZCAwO1xcbiAgdmFyIG1lcmdlZFByb3BzID0gdm9pZCAwO1xcblxcbiAgZnVuY3Rpb24gaGFuZGxlRmlyc3RDYWxsKGZpcnN0U3RhdGUsIGZpcnN0T3duUHJvcHMpIHtcXG4gICAgc3RhdGUgPSBmaXJzdFN0YXRlO1xcbiAgICBvd25Qcm9wcyA9IGZpcnN0T3duUHJvcHM7XFxuICAgIHN0YXRlUHJvcHMgPSBtYXBTdGF0ZVRvUHJvcHMoc3RhdGUsIG93blByb3BzKTtcXG4gICAgZGlzcGF0Y2hQcm9wcyA9IG1hcERpc3BhdGNoVG9Qcm9wcyhkaXNwYXRjaCwgb3duUHJvcHMpO1xcbiAgICBtZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xcbiAgICBoYXNSdW5BdExlYXN0T25jZSA9IHRydWU7XFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZU5ld1Byb3BzQW5kTmV3U3RhdGUoKSB7XFxuICAgIHN0YXRlUHJvcHMgPSBtYXBTdGF0ZVRvUHJvcHMoc3RhdGUsIG93blByb3BzKTtcXG5cXG4gICAgaWYgKG1hcERpc3BhdGNoVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgZGlzcGF0Y2hQcm9wcyA9IG1hcERpc3BhdGNoVG9Qcm9wcyhkaXNwYXRjaCwgb3duUHJvcHMpO1xcblxcbiAgICBtZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xcbiAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBoYW5kbGVOZXdQcm9wcygpIHtcXG4gICAgaWYgKG1hcFN0YXRlVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcblxcbiAgICBpZiAobWFwRGlzcGF0Y2hUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuXFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZU5ld1N0YXRlKCkge1xcbiAgICB2YXIgbmV4dFN0YXRlUHJvcHMgPSBtYXBTdGF0ZVRvUHJvcHMoc3RhdGUsIG93blByb3BzKTtcXG4gICAgdmFyIHN0YXRlUHJvcHNDaGFuZ2VkID0gIWFyZVN0YXRlUHJvcHNFcXVhbChuZXh0U3RhdGVQcm9wcywgc3RhdGVQcm9wcyk7XFxuICAgIHN0YXRlUHJvcHMgPSBuZXh0U3RhdGVQcm9wcztcXG5cXG4gICAgaWYgKHN0YXRlUHJvcHNDaGFuZ2VkKSBtZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xcblxcbiAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBoYW5kbGVTdWJzZXF1ZW50Q2FsbHMobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpIHtcXG4gICAgdmFyIHByb3BzQ2hhbmdlZCA9ICFhcmVPd25Qcm9wc0VxdWFsKG5leHRPd25Qcm9wcywgb3duUHJvcHMpO1xcbiAgICB2YXIgc3RhdGVDaGFuZ2VkID0gIWFyZVN0YXRlc0VxdWFsKG5leHRTdGF0ZSwgc3RhdGUpO1xcbiAgICBzdGF0ZSA9IG5leHRTdGF0ZTtcXG4gICAgb3duUHJvcHMgPSBuZXh0T3duUHJvcHM7XFxuXFxuICAgIGlmIChwcm9wc0NoYW5nZWQgJiYgc3RhdGVDaGFuZ2VkKSByZXR1cm4gaGFuZGxlTmV3UHJvcHNBbmROZXdTdGF0ZSgpO1xcbiAgICBpZiAocHJvcHNDaGFuZ2VkKSByZXR1cm4gaGFuZGxlTmV3UHJvcHMoKTtcXG4gICAgaWYgKHN0YXRlQ2hhbmdlZCkgcmV0dXJuIGhhbmRsZU5ld1N0YXRlKCk7XFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIHJldHVybiBmdW5jdGlvbiBwdXJlRmluYWxQcm9wc1NlbGVjdG9yKG5leHRTdGF0ZSwgbmV4dE93blByb3BzKSB7XFxuICAgIHJldHVybiBoYXNSdW5BdExlYXN0T25jZSA/IGhhbmRsZVN1YnNlcXVlbnRDYWxscyhuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykgOiBoYW5kbGVGaXJzdENhbGwobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpO1xcbiAgfTtcXG59XFxuXFxuLy8gVE9ETzogQWRkIG1vcmUgY29tbWVudHNcXG5cXG4vLyBJZiBwdXJlIGlzIHRydWUsIHRoZSBzZWxlY3RvciByZXR1cm5lZCBieSBzZWxlY3RvckZhY3Rvcnkgd2lsbCBtZW1vaXplIGl0cyByZXN1bHRzLFxcbi8vIGFsbG93aW5nIGNvbm5lY3RBZHZhbmNlZCdzIHNob3VsZENvbXBvbmVudFVwZGF0ZSB0byByZXR1cm4gZmFsc2UgaWYgZmluYWxcXG4vLyBwcm9wcyBoYXZlIG5vdCBjaGFuZ2VkLiBJZiBmYWxzZSwgdGhlIHNlbGVjdG9yIHdpbGwgYWx3YXlzIHJldHVybiBhIG5ld1xcbi8vIG9iamVjdCBhbmQgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHdpbGwgYWx3YXlzIHJldHVybiB0cnVlLlxcblxcbmZ1bmN0aW9uIGZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkoZGlzcGF0Y2gsIF9yZWYyKSB7XFxuICB2YXIgaW5pdE1hcFN0YXRlVG9Qcm9wcyA9IF9yZWYyLmluaXRNYXBTdGF0ZVRvUHJvcHMsXFxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyA9IF9yZWYyLmluaXRNYXBEaXNwYXRjaFRvUHJvcHMsXFxuICAgICAgaW5pdE1lcmdlUHJvcHMgPSBfcmVmMi5pbml0TWVyZ2VQcm9wcyxcXG4gICAgICBvcHRpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBbJ2luaXRNYXBTdGF0ZVRvUHJvcHMnLCAnaW5pdE1hcERpc3BhdGNoVG9Qcm9wcycsICdpbml0TWVyZ2VQcm9wcyddKTtcXG5cXG4gIHZhciBtYXBTdGF0ZVRvUHJvcHMgPSBpbml0TWFwU3RhdGVUb1Byb3BzKGRpc3BhdGNoLCBvcHRpb25zKTtcXG4gIHZhciBtYXBEaXNwYXRjaFRvUHJvcHMgPSBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvcHRpb25zKTtcXG4gIHZhciBtZXJnZVByb3BzID0gaW5pdE1lcmdlUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcblxcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fdmVyaWZ5U3Vic2VsZWN0b3JzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgb3B0aW9ucy5kaXNwbGF5TmFtZSk7XFxuICB9XFxuXFxuICB2YXIgc2VsZWN0b3JGYWN0b3J5ID0gb3B0aW9ucy5wdXJlID8gcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkgOiBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5O1xcblxcbiAgcmV0dXJuIHNlbGVjdG9yRmFjdG9yeShtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbn1cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMjExICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB2ZXJpZnlTdWJzZWxlY3RvcnM7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fdXRpbHNfd2FybmluZ19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NCk7XFxuXFxuXFxuZnVuY3Rpb24gdmVyaWZ5KHNlbGVjdG9yLCBtZXRob2ROYW1lLCBkaXNwbGF5TmFtZSkge1xcbiAgaWYgKCFzZWxlY3Rvcikge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgdmFsdWUgZm9yICcgKyBtZXRob2ROYW1lICsgJyBpbiAnICsgZGlzcGxheU5hbWUgKyAnLicpO1xcbiAgfSBlbHNlIGlmIChtZXRob2ROYW1lID09PSAnbWFwU3RhdGVUb1Byb3BzJyB8fCBtZXRob2ROYW1lID09PSAnbWFwRGlzcGF0Y2hUb1Byb3BzJykge1xcbiAgICBpZiAoIXNlbGVjdG9yLmhhc093blByb3BlcnR5KCdkZXBlbmRzT25Pd25Qcm9wcycpKSB7XFxuICAgICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fdXRpbHNfd2FybmluZ19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoJ1RoZSBzZWxlY3RvciBmb3IgJyArIG1ldGhvZE5hbWUgKyAnIG9mICcgKyBkaXNwbGF5TmFtZSArICcgZGlkIG5vdCBzcGVjaWZ5IGEgdmFsdWUgZm9yIGRlcGVuZHNPbk93blByb3BzLicpO1xcbiAgICB9XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIHZlcmlmeVN1YnNlbGVjdG9ycyhtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgZGlzcGxheU5hbWUpIHtcXG4gIHZlcmlmeShtYXBTdGF0ZVRvUHJvcHMsICdtYXBTdGF0ZVRvUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxuICB2ZXJpZnkobWFwRGlzcGF0Y2hUb1Byb3BzLCAnbWFwRGlzcGF0Y2hUb1Byb3BzJywgZGlzcGxheU5hbWUpO1xcbiAgdmVyaWZ5KG1lcmdlUHJvcHMsICdtZXJnZVByb3BzJywgZGlzcGxheU5hbWUpO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBnZXREaXNwbGF5TmFtZSA9IGZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKENvbXApIHtcXG4gIHJldHVybiBDb21wLmRpc3BsYXlOYW1lIHx8IENvbXAubmFtZSB8fCAnQ29tcG9uZW50JztcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldERpc3BsYXlOYW1lKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19TdWJtaXNzaW9uRXJyb3JfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzkpO1xcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxcblxcblxcblxcblxcbnZhciBoYW5kbGVTdWJtaXQgPSBmdW5jdGlvbiBoYW5kbGVTdWJtaXQoc3VibWl0LCBwcm9wcywgdmFsaWQsIGFzeW5jVmFsaWRhdGUsIGZpZWxkcykge1xcbiAgdmFyIGRpc3BhdGNoID0gcHJvcHMuZGlzcGF0Y2gsXFxuICAgICAgb25TdWJtaXRGYWlsID0gcHJvcHMub25TdWJtaXRGYWlsLFxcbiAgICAgIG9uU3VibWl0U3VjY2VzcyA9IHByb3BzLm9uU3VibWl0U3VjY2VzcyxcXG4gICAgICBzdGFydFN1Ym1pdCA9IHByb3BzLnN0YXJ0U3VibWl0LFxcbiAgICAgIHN0b3BTdWJtaXQgPSBwcm9wcy5zdG9wU3VibWl0LFxcbiAgICAgIHNldFN1Ym1pdEZhaWxlZCA9IHByb3BzLnNldFN1Ym1pdEZhaWxlZCxcXG4gICAgICBzZXRTdWJtaXRTdWNjZWVkZWQgPSBwcm9wcy5zZXRTdWJtaXRTdWNjZWVkZWQsXFxuICAgICAgc3luY0Vycm9ycyA9IHByb3BzLnN5bmNFcnJvcnMsXFxuICAgICAgdG91Y2ggPSBwcm9wcy50b3VjaCxcXG4gICAgICB2YWx1ZXMgPSBwcm9wcy52YWx1ZXMsXFxuICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9ycyA9IHByb3BzLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnM7XFxuXFxuXFxuICB0b3VjaC5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShmaWVsZHMpKTsgLy8gbWFyayBhbGwgZmllbGRzIGFzIHRvdWNoZWRcXG5cXG4gIGlmICh2YWxpZCB8fCBwZXJzaXN0ZW50U3VibWl0RXJyb3JzKSB7XFxuICAgIHZhciBkb1N1Ym1pdCA9IGZ1bmN0aW9uIGRvU3VibWl0KCkge1xcbiAgICAgIHZhciByZXN1bHQgPSB2b2lkIDA7XFxuICAgICAgdHJ5IHtcXG4gICAgICAgIHJlc3VsdCA9IHN1Ym1pdCh2YWx1ZXMsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgfSBjYXRjaCAoc3VibWl0RXJyb3IpIHtcXG4gICAgICAgIHZhciBlcnJvciA9IHN1Ym1pdEVycm9yIGluc3RhbmNlb2YgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19TdWJtaXNzaW9uRXJyb3JfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gPyBzdWJtaXRFcnJvci5lcnJvcnMgOiB1bmRlZmluZWQ7XFxuICAgICAgICBzdG9wU3VibWl0KGVycm9yKTtcXG4gICAgICAgIHNldFN1Ym1pdEZhaWxlZC5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShmaWVsZHMpKTtcXG4gICAgICAgIGlmIChvblN1Ym1pdEZhaWwpIHtcXG4gICAgICAgICAgb25TdWJtaXRGYWlsKGVycm9yLCBkaXNwYXRjaCwgc3VibWl0RXJyb3IsIHByb3BzKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChlcnJvciB8fCBvblN1Ym1pdEZhaWwpIHtcXG4gICAgICAgICAgLy8gaWYgeW91J3ZlIHByb3ZpZGVkIGFuIG9uU3VibWl0RmFpbCBjYWxsYmFjaywgZG9uJ3QgcmUtdGhyb3cgdGhlIGVycm9yXFxuICAgICAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHRocm93IHN1Ym1pdEVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICBpZiAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0KCkocmVzdWx0KSkge1xcbiAgICAgICAgc3RhcnRTdWJtaXQoKTtcXG4gICAgICAgIHJldHVybiByZXN1bHQudGhlbihmdW5jdGlvbiAoc3VibWl0UmVzdWx0KSB7XFxuICAgICAgICAgIHN0b3BTdWJtaXQoKTtcXG4gICAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkKCk7XFxuICAgICAgICAgIGlmIChvblN1Ym1pdFN1Y2Nlc3MpIHtcXG4gICAgICAgICAgICBvblN1Ym1pdFN1Y2Nlc3Moc3VibWl0UmVzdWx0LCBkaXNwYXRjaCwgcHJvcHMpO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIHJldHVybiBzdWJtaXRSZXN1bHQ7XFxuICAgICAgICB9LCBmdW5jdGlvbiAoc3VibWl0RXJyb3IpIHtcXG4gICAgICAgICAgdmFyIGVycm9yID0gc3VibWl0RXJyb3IgaW5zdGFuY2VvZiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IHN1Ym1pdEVycm9yLmVycm9ycyA6IHVuZGVmaW5lZDtcXG4gICAgICAgICAgc3RvcFN1Ym1pdChlcnJvcik7XFxuICAgICAgICAgIHNldFN1Ym1pdEZhaWxlZC5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShmaWVsZHMpKTtcXG4gICAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICAgIG9uU3VibWl0RmFpbChlcnJvciwgZGlzcGF0Y2gsIHN1Ym1pdEVycm9yLCBwcm9wcyk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgaWYgKGVycm9yIHx8IG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICAgIC8vIGlmIHlvdSd2ZSBwcm92aWRlZCBhbiBvblN1Ym1pdEZhaWwgY2FsbGJhY2ssIGRvbid0IHJlLXRocm93IHRoZSBlcnJvclxcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB0aHJvdyBzdWJtaXRFcnJvcjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHNldFN1Ym1pdFN1Y2NlZWRlZCgpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0U3VjY2Vzcykge1xcbiAgICAgICAgICBvblN1Ym1pdFN1Y2Nlc3MocmVzdWx0LCBkaXNwYXRjaCwgcHJvcHMpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9O1xcblxcbiAgICB2YXIgYXN5bmNWYWxpZGF0ZVJlc3VsdCA9IGFzeW5jVmFsaWRhdGUgJiYgYXN5bmNWYWxpZGF0ZSgpO1xcbiAgICBpZiAoYXN5bmNWYWxpZGF0ZVJlc3VsdCkge1xcbiAgICAgIHJldHVybiBhc3luY1ZhbGlkYXRlUmVzdWx0LnRoZW4oZnVuY3Rpb24gKGFzeW5jRXJyb3JzKSB7XFxuICAgICAgICBpZiAoYXN5bmNFcnJvcnMpIHtcXG4gICAgICAgICAgdGhyb3cgYXN5bmNFcnJvcnM7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZG9TdWJtaXQoKTtcXG4gICAgICB9KS5jYXRjaChmdW5jdGlvbiAoYXN5bmNFcnJvcnMpIHtcXG4gICAgICAgIHNldFN1Ym1pdEZhaWxlZC5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShmaWVsZHMpKTtcXG4gICAgICAgIGlmIChvblN1Ym1pdEZhaWwpIHtcXG4gICAgICAgICAgb25TdWJtaXRGYWlsKGFzeW5jRXJyb3JzLCBkaXNwYXRjaCwgbnVsbCwgcHJvcHMpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGFzeW5jRXJyb3JzKTtcXG4gICAgICB9KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXR1cm4gZG9TdWJtaXQoKTtcXG4gICAgfVxcbiAgfSBlbHNlIHtcXG4gICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICBpZiAob25TdWJtaXRGYWlsKSB7XFxuICAgICAgb25TdWJtaXRGYWlsKHN5bmNFcnJvcnMsIGRpc3BhdGNoLCBudWxsLCBwcm9wcyk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHN5bmNFcnJvcnM7XFxuICB9XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYW5kbGVTdWJtaXQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5mdW5jdGlvbiBfZXh0ZW5kYWJsZUJ1aWx0aW4oY2xzKSB7XFxuICBmdW5jdGlvbiBFeHRlbmRhYmxlQnVpbHRpbigpIHtcXG4gICAgY2xzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XFxuICB9XFxuXFxuICBFeHRlbmRhYmxlQnVpbHRpbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNscy5wcm90b3R5cGUsIHtcXG4gICAgY29uc3RydWN0b3I6IHtcXG4gICAgICB2YWx1ZTogY2xzLFxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxcbiAgICB9XFxuICB9KTtcXG5cXG4gIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcXG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKEV4dGVuZGFibGVCdWlsdGluLCBjbHMpO1xcbiAgfSBlbHNlIHtcXG4gICAgRXh0ZW5kYWJsZUJ1aWx0aW4uX19wcm90b19fID0gY2xzO1xcbiAgfVxcblxcbiAgcmV0dXJuIEV4dGVuZGFibGVCdWlsdGluO1xcbn1cXG5cXG52YXIgRXh0ZW5kYWJsZUVycm9yID0gZnVuY3Rpb24gKF9leHRlbmRhYmxlQnVpbHRpbjIpIHtcXG4gIF9pbmhlcml0cyhFeHRlbmRhYmxlRXJyb3IsIF9leHRlbmRhYmxlQnVpbHRpbjIpO1xcblxcbiAgZnVuY3Rpb24gRXh0ZW5kYWJsZUVycm9yKCkge1xcbiAgICB2YXIgbWVzc2FnZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJyc7XFxuXFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBFeHRlbmRhYmxlRXJyb3IpO1xcblxcbiAgICAvLyBleHRlbmRpbmcgRXJyb3IgaXMgd2VpcmQgYW5kIGRvZXMgbm90IHByb3BhZ2F0ZSBgbWVzc2FnZWBcXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEV4dGVuZGFibGVFcnJvci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEV4dGVuZGFibGVFcnJvcikpLmNhbGwodGhpcywgbWVzc2FnZSkpO1xcblxcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICdtZXNzYWdlJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogbWVzc2FnZSxcXG4gICAgICB3cml0YWJsZTogdHJ1ZVxcbiAgICB9KTtcXG5cXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXFxuICAgICAgdmFsdWU6IF90aGlzLmNvbnN0cnVjdG9yLm5hbWUsXFxuICAgICAgd3JpdGFibGU6IHRydWVcXG4gICAgfSk7XFxuXFxuICAgIGlmIChFcnJvci5oYXNPd25Qcm9wZXJ0eSgnY2FwdHVyZVN0YWNrVHJhY2UnKSkge1xcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKF90aGlzLCBfdGhpcy5jb25zdHJ1Y3Rvcik7XFxuICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzKTtcXG4gICAgfVxcblxcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICdzdGFjaycsIHtcXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXFxuICAgICAgdmFsdWU6IG5ldyBFcnJvcihtZXNzYWdlKS5zdGFjayxcXG4gICAgICB3cml0YWJsZTogdHJ1ZVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIF90aGlzO1xcbiAgfVxcblxcbiAgcmV0dXJuIEV4dGVuZGFibGVFcnJvcjtcXG59KF9leHRlbmRhYmxlQnVpbHRpbihFcnJvcikpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKEV4dGVuZGFibGVFcnJvcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjE1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zaWxlbmNlRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODApO1xcblxcblxcbnZhciBzaWxlbmNlRXZlbnRzID0gZnVuY3Rpb24gc2lsZW5jZUV2ZW50cyhmbikge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc2lsZW5jZUV2ZW50X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCkgPyBmbi5hcHBseSh1bmRlZmluZWQsIGFyZ3MpIDogZm4uYXBwbHkodW5kZWZpbmVkLCBbZXZlbnRdLmNvbmNhdChhcmdzKSk7XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2lsZW5jZUV2ZW50cyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfXyk7XFxuXFxuXFxudmFyIGFzeW5jVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIGFzeW5jVmFsaWRhdGlvbihmbiwgc3RhcnQsIHN0b3AsIGZpZWxkKSB7XFxuICBzdGFydChmaWVsZCk7XFxuICB2YXIgcHJvbWlzZSA9IGZuKCk7XFxuICBpZiAoIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX19fZGVmYXVsdCgpKHByb21pc2UpKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignYXN5bmNWYWxpZGF0ZSBmdW5jdGlvbiBwYXNzZWQgdG8gcmVkdXhGb3JtIG11c3QgcmV0dXJuIGEgcHJvbWlzZScpO1xcbiAgfVxcbiAgdmFyIGhhbmRsZUVycm9ycyA9IGZ1bmN0aW9uIGhhbmRsZUVycm9ycyhyZWplY3RlZCkge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGVycm9ycykge1xcbiAgICAgIGlmIChlcnJvcnMgJiYgT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICAgIHN0b3AoZXJyb3JzKTtcXG4gICAgICAgIHJldHVybiBlcnJvcnM7XFxuICAgICAgfSBlbHNlIGlmIChyZWplY3RlZCkge1xcbiAgICAgICAgc3RvcCgpO1xcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc3luY2hyb25vdXMgdmFsaWRhdGlvbiBwcm9taXNlIHdhcyByZWplY3RlZCB3aXRob3V0IGVycm9ycy4nKTtcXG4gICAgICB9XFxuICAgICAgc3RvcCgpO1xcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcXG4gICAgfTtcXG4gIH07XFxuICByZXR1cm4gcHJvbWlzZS50aGVuKGhhbmRsZUVycm9ycyhmYWxzZSksIGhhbmRsZUVycm9ycyh0cnVlKSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3luY1ZhbGlkYXRpb24pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGRlZmF1bHRTaG91bGRBc3luY1ZhbGlkYXRlID0gZnVuY3Rpb24gZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUoX3JlZikge1xcbiAgdmFyIGluaXRpYWxpemVkID0gX3JlZi5pbml0aWFsaXplZCxcXG4gICAgICB0cmlnZ2VyID0gX3JlZi50cmlnZ2VyLFxcbiAgICAgIHByaXN0aW5lID0gX3JlZi5wcmlzdGluZSxcXG4gICAgICBzeW5jVmFsaWRhdGlvblBhc3NlcyA9IF9yZWYuc3luY1ZhbGlkYXRpb25QYXNzZXM7XFxuXFxuICBpZiAoIXN5bmNWYWxpZGF0aW9uUGFzc2VzKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHN3aXRjaCAodHJpZ2dlcikge1xcbiAgICBjYXNlICdibHVyJzpcXG4gICAgICAvLyBibHVycmluZ1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICBjYXNlICdzdWJtaXQnOlxcbiAgICAgIC8vIHN1Ym1pdHRpbmcsIHNvIG9ubHkgYXN5bmMgdmFsaWRhdGUgaWYgZm9ybSBpcyBkaXJ0eSBvciB3YXMgbmV2ZXIgaW5pdGlhbGl6ZWRcXG4gICAgICAvLyBjb252ZXJzZWx5LCBET04nVCBhc3luYyB2YWxpZGF0ZSBpZiB0aGUgZm9ybSBpcyBwcmlzdGluZSBqdXN0IGFzIGl0IHdhcyBpbml0aWFsaXplZFxcbiAgICAgIHJldHVybiAhcHJpc3RpbmUgfHwgIWluaXRpYWxpemVkO1xcbiAgICBkZWZhdWx0OlxcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGRlZmF1bHRTaG91bGRBc3luY1ZhbGlkYXRlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBkZWZhdWx0U2hvdWxkVmFsaWRhdGUgPSBmdW5jdGlvbiBkZWZhdWx0U2hvdWxkVmFsaWRhdGUoX3JlZikge1xcbiAgdmFyIHZhbHVlcyA9IF9yZWYudmFsdWVzLFxcbiAgICAgIG5leHRQcm9wcyA9IF9yZWYubmV4dFByb3BzLFxcbiAgICAgIGluaXRpYWxSZW5kZXIgPSBfcmVmLmluaXRpYWxSZW5kZXIsXFxuICAgICAgbGFzdEZpZWxkVmFsaWRhdG9yS2V5cyA9IF9yZWYubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyxcXG4gICAgICBmaWVsZFZhbGlkYXRvcktleXMgPSBfcmVmLmZpZWxkVmFsaWRhdG9yS2V5cyxcXG4gICAgICBzdHJ1Y3R1cmUgPSBfcmVmLnN0cnVjdHVyZTtcXG5cXG4gIGlmIChpbml0aWFsUmVuZGVyKSB7XFxuICAgIHJldHVybiB0cnVlO1xcbiAgfVxcbiAgcmV0dXJuICFzdHJ1Y3R1cmUuZGVlcEVxdWFsKHZhbHVlcywgbmV4dFByb3BzLnZhbHVlcykgfHwgIXN0cnVjdHVyZS5kZWVwRXF1YWwobGFzdEZpZWxkVmFsaWRhdG9yS2V5cywgZmllbGRWYWxpZGF0b3JLZXlzKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGRlZmF1bHRTaG91bGRWYWxpZGF0ZSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBBcnJheShhcnIubGVuZ3RoKTsgaSA8IGFyci5sZW5ndGg7IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9IGVsc2UgeyByZXR1cm4gQXJyYXkuZnJvbShhcnIpOyB9IH1cXG5cXG52YXIgc3BsaWNlID0gZnVuY3Rpb24gc3BsaWNlKGFycmF5LCBpbmRleCwgcmVtb3ZlTnVtLCB2YWx1ZSkge1xcbiAgYXJyYXkgPSBhcnJheSB8fCBbXTtcXG5cXG4gIGlmIChpbmRleCA8IGFycmF5Lmxlbmd0aCkge1xcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhcmVtb3ZlTnVtKSB7XFxuICAgICAgLy8gaW5zZXJ0aW5nIHVuZGVmaW5lZFxcbiAgICAgIHZhciBfY29weTIgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICAgICAgX2NvcHkyLnNwbGljZShpbmRleCwgMCwgbnVsbCk7XFxuICAgICAgX2NvcHkyW2luZGV4XSA9IHVuZGVmaW5lZDtcXG4gICAgICByZXR1cm4gX2NvcHkyO1xcbiAgICB9XFxuICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XFxuICAgICAgdmFyIF9jb3B5MyA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTtcXG4gICAgICBfY29weTMuc3BsaWNlKGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKTsgLy8gcmVtb3ZpbmcgYW5kIGFkZGluZ1xcbiAgICAgIHJldHVybiBfY29weTM7XFxuICAgIH1cXG4gICAgdmFyIF9jb3B5ID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhcnJheSkpO1xcbiAgICBfY29weS5zcGxpY2UoaW5kZXgsIHJlbW92ZU51bSk7IC8vIHJlbW92aW5nXFxuICAgIHJldHVybiBfY29weTtcXG4gIH1cXG4gIGlmIChyZW1vdmVOdW0pIHtcXG4gICAgLy8gdHJ5aW5nIHRvIHJlbW92ZSBub24tZXhpc3RhbnQgaXRlbTogcmV0dXJuIG9yaWdpbmFsIGFycmF5XFxuICAgIHJldHVybiBhcnJheTtcXG4gIH1cXG4gIC8vIHRyeWluZyB0byBhZGQgb3V0c2lkZSBvZiByYW5nZToganVzdCBzZXQgdmFsdWVcXG4gIHZhciBjb3B5ID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhcnJheSkpO1xcbiAgY29weVtpbmRleF0gPSB2YWx1ZTtcXG4gIHJldHVybiBjb3B5O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3BsaWNlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XFxuXFxuXFxuXFxudmFyIGdldEluID0gZnVuY3Rpb24gZ2V0SW4oc3RhdGUsIGZpZWxkKSB7XFxuICBpZiAoIXN0YXRlKSB7XFxuICAgIHJldHVybiBzdGF0ZTtcXG4gIH1cXG5cXG4gIHZhciBwYXRoID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmaWVsZCk7XFxuICB2YXIgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XFxuICBpZiAoIWxlbmd0aCkge1xcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xcbiAgfVxcblxcbiAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGggJiYgISFyZXN1bHQ7ICsraSkge1xcbiAgICByZXN1bHQgPSByZXN1bHRbcGF0aFtpXV07XFxuICB9XFxuXFxuICByZXR1cm4gcmVzdWx0O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0SW4pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxudmFyIHNldEluV2l0aFBhdGggPSBmdW5jdGlvbiBzZXRJbldpdGhQYXRoKHN0YXRlLCB2YWx1ZSwgcGF0aCwgcGF0aEluZGV4KSB7XFxuICBpZiAocGF0aEluZGV4ID49IHBhdGgubGVuZ3RoKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG5cXG4gIHZhciBmaXJzdCA9IHBhdGhbcGF0aEluZGV4XTtcXG4gIHZhciBuZXh0ID0gc2V0SW5XaXRoUGF0aChzdGF0ZSAmJiBzdGF0ZVtmaXJzdF0sIHZhbHVlLCBwYXRoLCBwYXRoSW5kZXggKyAxKTtcXG5cXG4gIGlmICghc3RhdGUpIHtcXG4gICAgdmFyIGluaXRpYWxpemVkID0gaXNOYU4oZmlyc3QpID8ge30gOiBbXTtcXG4gICAgaW5pdGlhbGl6ZWRbZmlyc3RdID0gbmV4dDtcXG4gICAgcmV0dXJuIGluaXRpYWxpemVkO1xcbiAgfVxcblxcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgIHZhciBjb3B5ID0gW10uY29uY2F0KHN0YXRlKTtcXG4gICAgY29weVtmaXJzdF0gPSBuZXh0O1xcbiAgICByZXR1cm4gY29weTtcXG4gIH1cXG5cXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgc3RhdGUsIF9kZWZpbmVQcm9wZXJ0eSh7fSwgZmlyc3QsIG5leHQpKTtcXG59O1xcblxcbnZhciBzZXRJbiA9IGZ1bmN0aW9uIHNldEluKHN0YXRlLCBmaWVsZCwgdmFsdWUpIHtcXG4gIHJldHVybiBzZXRJbldpdGhQYXRoKHN0YXRlLCB2YWx1ZSwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmaWVsZCksIDApO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2V0SW4pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODIpO1xcblxcblxcblxcbnZhciBjdXN0b21pemVyID0gZnVuY3Rpb24gY3VzdG9taXplcihvYmosIG90aGVyKSB7XFxuICBpZiAob2JqID09PSBvdGhlcikgcmV0dXJuIHRydWU7XFxuICBpZiAoKG9iaiA9PSBudWxsIHx8IG9iaiA9PT0gJycgfHwgb2JqID09PSBmYWxzZSkgJiYgKG90aGVyID09IG51bGwgfHwgb3RoZXIgPT09ICcnIHx8IG90aGVyID09PSBmYWxzZSkpIHJldHVybiB0cnVlO1xcblxcbiAgaWYgKG9iaiAmJiBvdGhlciAmJiBvYmouX2Vycm9yICE9PSBvdGhlci5fZXJyb3IpIHJldHVybiBmYWxzZTtcXG4gIGlmIChvYmogJiYgb3RoZXIgJiYgb2JqLl93YXJuaW5nICE9PSBvdGhlci5fd2FybmluZykgcmV0dXJuIGZhbHNlO1xcbn07XFxuXFxudmFyIGRlZXBFcXVhbCA9IGZ1bmN0aW9uIGRlZXBFcXVhbChhLCBiKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGEsIGIsIGN1c3RvbWl6ZXIpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVlcEVxdWFsKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNCk7XFxuXFxuXFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxcblxcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxcblxcbnZhciBkZWxldGVJbldpdGhQYXRoID0gZnVuY3Rpb24gZGVsZXRlSW5XaXRoUGF0aChzdGF0ZSwgZmlyc3QpIHtcXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICByZXN0W19rZXkgLSAyXSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gIH1cXG5cXG4gIGlmIChzdGF0ZSA9PT0gdW5kZWZpbmVkIHx8IGZpcnN0ID09PSB1bmRlZmluZWQpIHtcXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcbiAgaWYgKHJlc3QubGVuZ3RoKSB7XFxuICAgIGlmIChBcnJheS5pc0FycmF5KHN0YXRlKSkge1xcbiAgICAgIGlmIChmaXJzdCA8IHN0YXRlLmxlbmd0aCkge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGRlbGV0ZUluV2l0aFBhdGguYXBwbHkodW5kZWZpbmVkLCBbc3RhdGUgJiYgc3RhdGVbZmlyc3RdXS5jb25jYXQocmVzdCkpO1xcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gc3RhdGVbZmlyc3RdKSB7XFxuICAgICAgICAgIHZhciBjb3B5ID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShzdGF0ZSkpO1xcbiAgICAgICAgICBjb3B5W2ZpcnN0XSA9IHJlc3VsdDtcXG4gICAgICAgICAgcmV0dXJuIGNvcHk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBzdGF0ZTtcXG4gICAgfVxcbiAgICBpZiAoZmlyc3QgaW4gc3RhdGUpIHtcXG4gICAgICB2YXIgX3Jlc3VsdCA9IGRlbGV0ZUluV2l0aFBhdGguYXBwbHkodW5kZWZpbmVkLCBbc3RhdGUgJiYgc3RhdGVbZmlyc3RdXS5jb25jYXQocmVzdCkpO1xcbiAgICAgIHJldHVybiBzdGF0ZVtmaXJzdF0gPT09IF9yZXN1bHQgPyBzdGF0ZSA6IF9leHRlbmRzKHt9LCBzdGF0ZSwgX2RlZmluZVByb3BlcnR5KHt9LCBmaXJzdCwgX3Jlc3VsdCkpO1xcbiAgICB9XFxuICAgIHJldHVybiBzdGF0ZTtcXG4gIH1cXG4gIGlmIChBcnJheS5pc0FycmF5KHN0YXRlKSkge1xcbiAgICBpZiAoaXNOYU4oZmlyc3QpKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZGVsZXRlIG5vbi1udW1lcmljYWwgaW5kZXggZnJvbSBhbiBhcnJheScpO1xcbiAgICB9XFxuICAgIGlmIChmaXJzdCA8IHN0YXRlLmxlbmd0aCkge1xcbiAgICAgIHZhciBfY29weSA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoc3RhdGUpKTtcXG4gICAgICBfY29weS5zcGxpY2UoZmlyc3QsIDEpO1xcbiAgICAgIHJldHVybiBfY29weTtcXG4gICAgfVxcbiAgICByZXR1cm4gc3RhdGU7XFxuICB9XFxuICBpZiAoZmlyc3QgaW4gc3RhdGUpIHtcXG4gICAgdmFyIF9jb3B5MiA9IF9leHRlbmRzKHt9LCBzdGF0ZSk7XFxuICAgIGRlbGV0ZSBfY29weTJbZmlyc3RdO1xcbiAgICByZXR1cm4gX2NvcHkyO1xcbiAgfVxcbiAgcmV0dXJuIHN0YXRlO1xcbn07XFxuXFxudmFyIGRlbGV0ZUluID0gZnVuY3Rpb24gZGVsZXRlSW4oc3RhdGUsIGZpZWxkKSB7XFxuICByZXR1cm4gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKSkpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGRlbGV0ZUluKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBrZXlzID0gZnVuY3Rpb24ga2V5cyh2YWx1ZSkge1xcbiAgcmV0dXJuIHZhbHVlID8gT2JqZWN0LmtleXModmFsdWUpIDogW107XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChrZXlzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMjUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG5cXG5cXG52YXIgdG9BcnJheSA9IGZ1bmN0aW9uIHRvQXJyYXkodmFsdWUpIHtcXG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcXG59O1xcblxcbnZhciBnZXRFcnJvciA9IGZ1bmN0aW9uIGdldEVycm9yKHZhbHVlLCB2YWx1ZXMsIHByb3BzLCB2YWxpZGF0b3JzKSB7XFxuICB2YXIgYXJyYXkgPSB0b0FycmF5KHZhbGlkYXRvcnMpO1xcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xcbiAgICB2YXIgZXJyb3IgPSBhcnJheVtpXSh2YWx1ZSwgdmFsdWVzLCBwcm9wcyk7XFxuICAgIGlmIChlcnJvcikge1xcbiAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgfVxcbiAgfVxcbn07XFxuXFxudmFyIGdlbmVyYXRlVmFsaWRhdG9yID0gZnVuY3Rpb24gZ2VuZXJhdGVWYWxpZGF0b3IodmFsaWRhdG9ycywgX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWVzLCBwcm9wcykge1xcbiAgICB2YXIgZXJyb3JzID0ge307XFxuICAgIE9iamVjdC5rZXlzKHZhbGlkYXRvcnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICB2YXIgdmFsdWUgPSBnZXRJbih2YWx1ZXMsIG5hbWUpO1xcbiAgICAgIHZhciBlcnJvciA9IGdldEVycm9yKHZhbHVlLCB2YWx1ZXMsIHByb3BzLCB2YWxpZGF0b3JzW25hbWVdKTtcXG4gICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgIGVycm9ycyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGVycm9ycywgbmFtZSwgZXJyb3IpO1xcbiAgICAgIH1cXG4gICAgfSk7XFxuICAgIHJldHVybiBlcnJvcnM7XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2VuZXJhdGVWYWxpZGF0b3IpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGdldEVycm9yS2V5cyA9IGZ1bmN0aW9uIGdldEVycm9yS2V5cyhuYW1lLCB0eXBlKSB7XFxuICBzd2l0Y2ggKHR5cGUpIHtcXG4gICAgY2FzZSAnRmllbGQnOlxcbiAgICAgIHJldHVybiBbbmFtZSwgbmFtZSArICcuX2Vycm9yJ107XFxuICAgIGNhc2UgJ0ZpZWxkQXJyYXknOlxcbiAgICAgIHJldHVybiBbbmFtZSArICcuX2Vycm9yJ107XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGZpZWxkIHR5cGUnKTtcXG4gIH1cXG59O1xcblxcbnZhciBjcmVhdGVIYXNFcnJvciA9IGZ1bmN0aW9uIGNyZWF0ZUhhc0Vycm9yKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuXFxuICB2YXIgaGFzRXJyb3IgPSBmdW5jdGlvbiBoYXNFcnJvcihmaWVsZCwgc3luY0Vycm9ycywgYXN5bmNFcnJvcnMsIHN1Ym1pdEVycm9ycykge1xcbiAgICBpZiAoIXN5bmNFcnJvcnMgJiYgIWFzeW5jRXJyb3JzICYmICFzdWJtaXRFcnJvcnMpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG5cXG4gICAgdmFyIG5hbWUgPSBnZXRJbihmaWVsZCwgJ25hbWUnKTtcXG4gICAgdmFyIHR5cGUgPSBnZXRJbihmaWVsZCwgJ3R5cGUnKTtcXG4gICAgcmV0dXJuIGdldEVycm9yS2V5cyhuYW1lLCB0eXBlKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3luY0Vycm9ycywga2V5KSB8fCBnZXRJbihhc3luY0Vycm9ycywga2V5KSB8fCBnZXRJbihzdWJtaXRFcnJvcnMsIGtleSk7XFxuICAgIH0pO1xcbiAgfTtcXG4gIHJldHVybiBoYXNFcnJvcjtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUhhc0Vycm9yKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Db25uZWN0ZWRGaWVsZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcbnZhciBjcmVhdGVGaWVsZCA9IGZ1bmN0aW9uIGNyZWF0ZUZpZWxkKF9yZWYpIHtcXG4gIHZhciBkZWVwRXF1YWwgPSBfcmVmLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYuZ2V0SW4sXFxuICAgICAgc2V0SW4gPSBfcmVmLnNldEluLFxcbiAgICAgIHRvSlMgPSBfcmVmLnRvSlM7XFxuXFxuXFxuICB2YXIgQ29ubmVjdGVkRmllbGQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Db25uZWN0ZWRGaWVsZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoe1xcbiAgICBkZWVwRXF1YWw6IGRlZXBFcXVhbCxcXG4gICAgZ2V0SW46IGdldEluLFxcbiAgICB0b0pTOiB0b0pTXFxuICB9KTtcXG5cXG4gIHZhciBGaWVsZCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZCwgX0NvbXBvbmVudCk7XFxuXFxuICAgIGZ1bmN0aW9uIEZpZWxkKHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEZpZWxkKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGaWVsZCkpLmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWVsZCBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG5cXG4gICAgICBfdGhpcy5ub3JtYWxpemUgPSBfdGhpcy5ub3JtYWxpemUuYmluZChfdGhpcyk7XFxuICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuXFxuICAgIF9jcmVhdGVDbGFzcyhGaWVsZCwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsX3NoYWxsb3dDb21wYXJlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBuZXh0UHJvcHMsIG5leHRTdGF0ZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3Rlcih0aGlzLm5hbWUsICdGaWVsZCcsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5wcm9wcy52YWxpZGF0ZTtcXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzMi5wcm9wcy53YXJuO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XFxuICAgICAgICBpZiAodGhpcy5wcm9wcy5uYW1lICE9PSBuZXh0UHJvcHMubmFtZSkge1xcbiAgICAgICAgICAvLyB1bnJlZ2lzdGVyIG9sZCBuYW1lXFxuICAgICAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXIodGhpcy5uYW1lKTtcXG4gICAgICAgICAgLy8gcmVnaXN0ZXIgbmV3IG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0ucmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLmNvbnRleHQsIG5leHRQcm9wcy5uYW1lKSwgJ0ZpZWxkJyk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcXG4gICAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXIodGhpcy5uYW1lKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh0aGlzLnByb3BzLndpdGhSZWYsICdJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZ2V0UmVuZGVyZWRDb21wb25lbnQoKSwgJyArICd5b3UgbXVzdCBzcGVjaWZ5IGEgd2l0aFJlZiBwcm9wIHRvIEZpZWxkJyk7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRSZW5kZXJlZENvbXBvbmVudCgpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ25vcm1hbGl6ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIG5vcm1hbGl6ZShuYW1lLCB2YWx1ZSkge1xcbiAgICAgICAgdmFyIG5vcm1hbGl6ZSA9IHRoaXMucHJvcHMubm9ybWFsaXplO1xcblxcbiAgICAgICAgaWYgKCFub3JtYWxpemUpIHtcXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIHByZXZpb3VzVmFsdWVzID0gdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0uZ2V0VmFsdWVzKCk7XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IHRoaXMudmFsdWU7XFxuICAgICAgICB2YXIgbmV4dFZhbHVlcyA9IHNldEluKHByZXZpb3VzVmFsdWVzLCBuYW1lLCB2YWx1ZSk7XFxuICAgICAgICByZXR1cm4gbm9ybWFsaXplKHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBuZXh0VmFsdWVzLCBwcmV2aW91c1ZhbHVlcyk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShDb25uZWN0ZWRGaWVsZCwgX2V4dGVuZHMoe30sIHRoaXMucHJvcHMsIHtcXG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxcbiAgICAgICAgICBub3JtYWxpemU6IHRoaXMubm9ybWFsaXplLFxcbiAgICAgICAgICBfcmVkdXhGb3JtOiB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgcmVmOiAnY29ubmVjdGVkJ1xcbiAgICAgICAgfSkpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ25hbWUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcy5jb250ZXh0LCB0aGlzLnByb3BzLm5hbWUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2RpcnR5JyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiAhdGhpcy5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5pc1ByaXN0aW5lKCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAndmFsdWUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQgJiYgdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRWYWx1ZSgpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gRmllbGQ7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBGaWVsZC5wcm9wVHlwZXMgPSB7XFxuICAgIG5hbWU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIGZvcm1hdDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIG5vcm1hbGl6ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIG9uQmx1cjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIG9uQ2hhbmdlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25Gb2N1czogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIG9uRHJhZ1N0YXJ0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25Ecm9wOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgcGFyc2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwcm9wczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdCxcXG4gICAgdmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUoW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYXJyYXlPZihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyldKSxcXG4gICAgd2FybjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5hcnJheU9mKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jKV0pLFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkLmNvbnRleHRUeXBlcyA9IHtcXG4gICAgX3JlZHV4Rm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdFxcbiAgfTtcXG5cXG4gIHJldHVybiBGaWVsZDtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUZpZWxkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMjggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2V2ZW50c19vbkNoYW5nZVZhbHVlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX2V2ZW50Q29uc3RzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgcHJvcHNUb05vdFVwZGF0ZUZvciA9IFsnX3JlZHV4Rm9ybSddO1xcblxcbnZhciBjcmVhdGVDb25uZWN0ZWRGaWVsZCA9IGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3RlZEZpZWxkKF9yZWYpIHtcXG4gIHZhciBkZWVwRXF1YWwgPSBfcmVmLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYuZ2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYudG9KUztcXG5cXG5cXG4gIHZhciBnZXRTeW5jRXJyb3IgPSBmdW5jdGlvbiBnZXRTeW5jRXJyb3Ioc3luY0Vycm9ycywgbmFtZSkge1xcbiAgICB2YXIgZXJyb3IgPSBnZXRJbihzeW5jRXJyb3JzLCBuYW1lKTtcXG4gICAgLy8gQmVjYXVzZSB0aGUgZXJyb3IgZm9yIHRoaXMgZmllbGQgbWlnaHQgbm90IGJlIGF0IGEgbGV2ZWwgaW4gdGhlIGVycm9yIHN0cnVjdHVyZSB3aGVyZVxcbiAgICAvLyBpdCBjYW4gYmUgc2V0IGRpcmVjdGx5LCBpdCBtaWdodCBuZWVkIHRvIGJlIHVud3JhcHBlZCBmcm9tIHRoZSBfZXJyb3IgcHJvcGVydHlcXG4gICAgcmV0dXJuIGVycm9yICYmIGVycm9yLl9lcnJvciA/IGVycm9yLl9lcnJvciA6IGVycm9yO1xcbiAgfTtcXG5cXG4gIHZhciBnZXRTeW5jV2FybmluZyA9IGZ1bmN0aW9uIGdldFN5bmNXYXJuaW5nKHN5bmNXYXJuaW5ncywgbmFtZSkge1xcbiAgICB2YXIgd2FybmluZyA9IGdldEluKHN5bmNXYXJuaW5ncywgbmFtZSk7XFxuICAgIC8vIEJlY2F1c2UgdGhlIHdhcm5pbmcgZm9yIHRoaXMgZmllbGQgbWlnaHQgbm90IGJlIGF0IGEgbGV2ZWwgaW4gdGhlIHdhcm5pbmcgc3RydWN0dXJlIHdoZXJlXFxuICAgIC8vIGl0IGNhbiBiZSBzZXQgZGlyZWN0bHksIGl0IG1pZ2h0IG5lZWQgdG8gYmUgdW53cmFwcGVkIGZyb20gdGhlIF93YXJuaW5nIHByb3BlcnR5XFxuICAgIHJldHVybiB3YXJuaW5nICYmIHdhcm5pbmcuX3dhcm5pbmcgPyB3YXJuaW5nLl93YXJuaW5nIDogd2FybmluZztcXG4gIH07XFxuXFxuICB2YXIgQ29ubmVjdGVkRmllbGQgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICBfaW5oZXJpdHMoQ29ubmVjdGVkRmllbGQsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZChwcm9wcykge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb25uZWN0ZWRGaWVsZCk7XFxuXFxuICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKENvbm5lY3RlZEZpZWxkLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ29ubmVjdGVkRmllbGQpKS5jYWxsKHRoaXMsIHByb3BzKSk7XFxuXFxuICAgICAgX3RoaXMuaGFuZGxlQ2hhbmdlID0gX3RoaXMuaGFuZGxlQ2hhbmdlLmJpbmQoX3RoaXMpO1xcbiAgICAgIF90aGlzLmhhbmRsZUZvY3VzID0gX3RoaXMuaGFuZGxlRm9jdXMuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlQmx1ciA9IF90aGlzLmhhbmRsZUJsdXIuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRHJhZ1N0YXJ0ID0gX3RoaXMuaGFuZGxlRHJhZ1N0YXJ0LmJpbmQoX3RoaXMpO1xcbiAgICAgIF90aGlzLmhhbmRsZURyb3AgPSBfdGhpcy5oYW5kbGVEcm9wLmJpbmQoX3RoaXMpO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGQsIFt7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICB2YXIgbmV4dFByb3BzS2V5cyA9IE9iamVjdC5rZXlzKG5leHRQcm9wcyk7XFxuICAgICAgICB2YXIgdGhpc1Byb3BzS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucHJvcHMpO1xcbiAgICAgICAgcmV0dXJuIG5leHRQcm9wc0tleXMubGVuZ3RoICE9PSB0aGlzUHJvcHNLZXlzLmxlbmd0aCB8fCBuZXh0UHJvcHNLZXlzLnNvbWUoZnVuY3Rpb24gKHByb3ApIHtcXG4gICAgICAgICAgcmV0dXJuICF+cHJvcHNUb05vdFVwZGF0ZUZvci5pbmRleE9mKHByb3ApICYmICFkZWVwRXF1YWwoX3RoaXMyLnByb3BzW3Byb3BdLCBuZXh0UHJvcHNbcHJvcF0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaXNQcmlzdGluZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzUHJpc3RpbmUoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRWYWx1ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudmFsdWU7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0UmVuZGVyZWRDb21wb25lbnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZW5kZXJlZENvbXBvbmVudCgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMucmVuZGVyZWRDb21wb25lbnQ7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlQ2hhbmdlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlKGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICBuYW1lID0gX3Byb3BzLm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgcGFyc2UgPSBfcHJvcHMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBvbkNoYW5nZSA9IF9wcm9wcy5vbkNoYW5nZSxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzLl9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IF9wcm9wcy52YWx1ZTtcXG5cXG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2V2ZW50c19vbkNoYW5nZVZhbHVlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCwgeyBuYW1lOiBuYW1lLCBwYXJzZTogcGFyc2UsIG5vcm1hbGl6ZTogbm9ybWFsaXplIH0pO1xcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkNoYW5nZSkge1xcbiAgICAgICAgICBvbkNoYW5nZShfZXh0ZW5kcyh7fSwgZXZlbnQsIHtcXG4gICAgICAgICAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gcHJldmVudERlZmF1bHQoKSB7XFxuICAgICAgICAgICAgICBkZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcXG4gICAgICAgICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfSksIG5ld1ZhbHVlLCBwcmV2aW91c1ZhbHVlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCkge1xcbiAgICAgICAgICAvLyBkaXNwYXRjaCBjaGFuZ2UgYWN0aW9uXFxuICAgICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uY2hhbmdlKG5hbWUsIG5ld1ZhbHVlKSk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRm9jdXMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMyLm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMyLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIG9uRm9jdXMgPSBfcHJvcHMyLm9uRm9jdXMsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczIuX3JlZHV4Rm9ybTtcXG5cXG5cXG4gICAgICAgIHZhciBkZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XFxuICAgICAgICBpZiAob25Gb2N1cykge1xcbiAgICAgICAgICBvbkZvY3VzKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoIWRlZmF1bHRQcmV2ZW50ZWQpIHtcXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5mb2N1cyhuYW1lKSk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlQmx1cicsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUJsdXIoZXZlbnQpIHtcXG4gICAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICBuYW1lID0gX3Byb3BzMy5uYW1lLFxcbiAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzMy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wczMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzMy5ub3JtYWxpemUsXFxuICAgICAgICAgICAgb25CbHVyID0gX3Byb3BzMy5vbkJsdXIsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICBfdmFsdWUgPSBfcHJvcHMzLl92YWx1ZSxcXG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlID0gX3Byb3BzMy52YWx1ZTtcXG5cXG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2V2ZW50c19vbkNoYW5nZVZhbHVlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCwgeyBuYW1lOiBuYW1lLCBwYXJzZTogcGFyc2UsIG5vcm1hbGl6ZTogbm9ybWFsaXplIH0pO1xcblxcbiAgICAgICAgLy8gZm9yIGNoZWNrYm94IGFuZCByYWRpbywgaWYgdGhlIHZhbHVlIHByb3BlcnR5IG9mIGNoZWNrYm94IG9yIHJhZGlvIGVxdWFsc1xcbiAgICAgICAgLy8gdGhlIHZhbHVlIHBhc3NlZCBieSBibHVyIGV2ZW50LCB0aGVuIGZpcmUgYmx1ciBhY3Rpb24gd2l0aCBwcmV2aW91c1ZhbHVlLlxcbiAgICAgICAgaWYgKG5ld1ZhbHVlID09PSBfdmFsdWUgJiYgX3ZhbHVlICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICAgICAgbmV3VmFsdWUgPSBwcmV2aW91c1ZhbHVlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkJsdXIpIHtcXG4gICAgICAgICAgb25CbHVyKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGJsdXIgYWN0aW9uXFxuICAgICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uYmx1cihuYW1lLCBuZXdWYWx1ZSkpO1xcblxcbiAgICAgICAgICAvLyBjYWxsIHBvc3QtYmx1ciBjYWxsYmFja1xcbiAgICAgICAgICBpZiAoX3JlZHV4Rm9ybS5hc3luY1ZhbGlkYXRlKSB7XFxuICAgICAgICAgICAgX3JlZHV4Rm9ybS5hc3luY1ZhbGlkYXRlKG5hbWUsIG5ld1ZhbHVlKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2hhbmRsZURyYWdTdGFydCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZURyYWdTdGFydChldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczQgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG9uRHJhZ1N0YXJ0ID0gX3Byb3BzNC5vbkRyYWdTdGFydCxcXG4gICAgICAgICAgICB2YWx1ZSA9IF9wcm9wczQudmFsdWU7XFxuXFxuICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfX1tcXFwiYVxcXCIgLyogZGF0YUtleSAqL10sIHZhbHVlID09IG51bGwgPyAnJyA6IHZhbHVlKTtcXG5cXG4gICAgICAgIGlmIChvbkRyYWdTdGFydCkge1xcbiAgICAgICAgICBvbkRyYWdTdGFydChldmVudCk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRHJvcCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZURyb3AoZXZlbnQpIHtcXG4gICAgICAgIHZhciBfcHJvcHM1ID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICBuYW1lID0gX3Byb3BzNS5uYW1lLFxcbiAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzNS5kaXNwYXRjaCxcXG4gICAgICAgICAgICBvbkRyb3AgPSBfcHJvcHM1Lm9uRHJvcCxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzNS5fcmVkdXhGb3JtLFxcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSBfcHJvcHM1LnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gZXZlbnQuZGF0YVRyYW5zZmVyLmdldERhdGEoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX2V2ZW50Q29uc3RzX19bXFxcImFcXFwiIC8qIGRhdGFLZXkgKi9dKTtcXG5cXG4gICAgICAgIHZhciBkZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XFxuICAgICAgICBpZiAob25Ecm9wKSB7XFxuICAgICAgICAgIG9uRHJvcChfZXh0ZW5kcyh7fSwgZXZlbnQsIHtcXG4gICAgICAgICAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gcHJldmVudERlZmF1bHQoKSB7XFxuICAgICAgICAgICAgICBkZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcXG4gICAgICAgICAgICAgIHJldHVybiBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfSksIG5ld1ZhbHVlLCBwcmV2aW91c1ZhbHVlKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCkge1xcbiAgICAgICAgICAvLyBkaXNwYXRjaCBjaGFuZ2UgYWN0aW9uXFxuICAgICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uY2hhbmdlKG5hbWUsIG5ld1ZhbHVlKSk7XFxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIF9wcm9wczYgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIGNvbXBvbmVudCA9IF9wcm9wczYuY29tcG9uZW50LFxcbiAgICAgICAgICAgIHdpdGhSZWYgPSBfcHJvcHM2LndpdGhSZWYsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wczYubmFtZSxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzNi5fcmVkdXhGb3JtLFxcbiAgICAgICAgICAgIG5vcm1hbGl6ZSA9IF9wcm9wczYubm9ybWFsaXplLFxcbiAgICAgICAgICAgIG9uQmx1ciA9IF9wcm9wczYub25CbHVyLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlID0gX3Byb3BzNi5vbkNoYW5nZSxcXG4gICAgICAgICAgICBvbkZvY3VzID0gX3Byb3BzNi5vbkZvY3VzLFxcbiAgICAgICAgICAgIG9uRHJhZ1N0YXJ0ID0gX3Byb3BzNi5vbkRyYWdTdGFydCxcXG4gICAgICAgICAgICBvbkRyb3AgPSBfcHJvcHM2Lm9uRHJvcCxcXG4gICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczYsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnbmFtZScsICdfcmVkdXhGb3JtJywgJ25vcm1hbGl6ZScsICdvbkJsdXInLCAnb25DaGFuZ2UnLCAnb25Gb2N1cycsICdvbkRyYWdTdGFydCcsICdvbkRyb3AnXSk7XFxuXFxuICAgICAgICB2YXIgX2NyZWF0ZUZpZWxkUHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jcmVhdGVGaWVsZFByb3BzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7IGdldEluOiBnZXRJbiwgdG9KUzogdG9KUyB9LCBuYW1lLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgICBmb3JtOiBfcmVkdXhGb3JtLmZvcm0sXFxuICAgICAgICAgIG9uQmx1cjogdGhpcy5oYW5kbGVCbHVyLFxcbiAgICAgICAgICBvbkNoYW5nZTogdGhpcy5oYW5kbGVDaGFuZ2UsXFxuICAgICAgICAgIG9uRHJvcDogdGhpcy5oYW5kbGVEcm9wLFxcbiAgICAgICAgICBvbkRyYWdTdGFydDogdGhpcy5oYW5kbGVEcmFnU3RhcnQsXFxuICAgICAgICAgIG9uRm9jdXM6IHRoaXMuaGFuZGxlRm9jdXNcXG4gICAgICAgIH0pKSxcXG4gICAgICAgICAgICBjdXN0b20gPSBfY3JlYXRlRmllbGRQcm9wcy5jdXN0b20sXFxuICAgICAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX2NyZWF0ZUZpZWxkUHJvcHMsIFsnY3VzdG9tJ10pO1xcblxcbiAgICAgICAgaWYgKHdpdGhSZWYpIHtcXG4gICAgICAgICAgY3VzdG9tLnJlZiA9ICdyZW5kZXJlZENvbXBvbmVudCc7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudCA9PT0gJ3N0cmluZycpIHtcXG4gICAgICAgICAgdmFyIGlucHV0ID0gcHJvcHMuaW5wdXQsXFxuICAgICAgICAgICAgICBtZXRhID0gcHJvcHMubWV0YTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xcbiAgICAgICAgICAvLyBmbGF0dGVuIGlucHV0IGludG8gb3RoZXIgcHJvcHNcXG5cXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShjb21wb25lbnQsIF9leHRlbmRzKHt9LCBpbnB1dCwgY3VzdG9tKSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKGNvbXBvbmVudCwgX2V4dGVuZHMoe30sIHByb3BzLCBjdXN0b20pKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIENvbm5lY3RlZEZpZWxkO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgQ29ubmVjdGVkRmllbGQucHJvcFR5cGVzID0ge1xcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUoW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nXSkuaXNSZXF1aXJlZCxcXG4gICAgcHJvcHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZSA9IG93blByb3BzLm5hbWUsXFxuICAgICAgICBfb3duUHJvcHMkX3JlZHV4Rm9ybSA9IG93blByb3BzLl9yZWR1eEZvcm0sXFxuICAgICAgICBpbml0aWFsVmFsdWVzID0gX293blByb3BzJF9yZWR1eEZvcm0uaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9vd25Qcm9wcyRfcmVkdXhGb3JtLmdldEZvcm1TdGF0ZTtcXG5cXG4gICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgIHZhciBpbml0aWFsU3RhdGUgPSBnZXRJbihmb3JtU3RhdGUsICdpbml0aWFsLicgKyBuYW1lKTtcXG4gICAgdmFyIGluaXRpYWwgPSBpbml0aWFsU3RhdGUgIT09IHVuZGVmaW5lZCA/IGluaXRpYWxTdGF0ZSA6IGluaXRpYWxWYWx1ZXMgJiYgZ2V0SW4oaW5pdGlhbFZhbHVlcywgbmFtZSk7XFxuICAgIHZhciB2YWx1ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ3ZhbHVlcy4nICsgbmFtZSk7XFxuICAgIHZhciBzdWJtaXR0aW5nID0gZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0dGluZycpO1xcbiAgICB2YXIgc3luY0Vycm9yID0gZ2V0U3luY0Vycm9yKGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNFcnJvcnMnKSwgbmFtZSk7XFxuICAgIHZhciBzeW5jV2FybmluZyA9IGdldFN5bmNXYXJuaW5nKGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNXYXJuaW5ncycpLCBuYW1lKTtcXG4gICAgdmFyIHByaXN0aW5lID0gZGVlcEVxdWFsKHZhbHVlLCBpbml0aWFsKTtcXG4gICAgcmV0dXJuIHtcXG4gICAgICBhc3luY0Vycm9yOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY0Vycm9ycy4nICsgbmFtZSksXFxuICAgICAgYXN5bmNWYWxpZGF0aW5nOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY1ZhbGlkYXRpbmcnKSA9PT0gbmFtZSxcXG4gICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICBzdWJtaXRFcnJvcjogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEZhaWxlZCcpLFxcbiAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgc3luY0Vycm9yOiBzeW5jRXJyb3IsXFxuICAgICAgc3luY1dhcm5pbmc6IHN5bmNXYXJuaW5nLFxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICBfdmFsdWU6IG93blByb3BzLnZhbHVlIC8vIHNhdmUgdmFsdWUgcGFzc2VkIGluIChmb3IgY2hlY2tib3hlcylcXG4gICAgfTtcXG4gIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICByZXR1cm4gY29ubmVjdG9yKENvbm5lY3RlZEZpZWxkKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUNvbm5lY3RlZEZpZWxkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODEpO1xcblxcblxcbnZhciBnZXRTZWxlY3RlZFZhbHVlcyA9IGZ1bmN0aW9uIGdldFNlbGVjdGVkVmFsdWVzKG9wdGlvbnMpIHtcXG4gIHZhciByZXN1bHQgPSBbXTtcXG4gIGlmIChvcHRpb25zKSB7XFxuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBvcHRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xcbiAgICAgIHZhciBvcHRpb24gPSBvcHRpb25zW2luZGV4XTtcXG4gICAgICBpZiAob3B0aW9uLnNlbGVjdGVkKSB7XFxuICAgICAgICByZXN1bHQucHVzaChvcHRpb24udmFsdWUpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59O1xcblxcbnZhciBnZXRWYWx1ZSA9IGZ1bmN0aW9uIGdldFZhbHVlKGV2ZW50LCBpc1JlYWN0TmF0aXZlKSB7XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNFdmVudF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQpKSB7XFxuICAgIGlmICghaXNSZWFjdE5hdGl2ZSAmJiBldmVudC5uYXRpdmVFdmVudCAmJiBldmVudC5uYXRpdmVFdmVudC50ZXh0ICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICByZXR1cm4gZXZlbnQubmF0aXZlRXZlbnQudGV4dDtcXG4gICAgfVxcbiAgICBpZiAoaXNSZWFjdE5hdGl2ZSAmJiBldmVudC5uYXRpdmVFdmVudCAhPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgcmV0dXJuIGV2ZW50Lm5hdGl2ZUV2ZW50LnRleHQ7XFxuICAgIH1cXG4gICAgdmFyIF9ldmVudCR0YXJnZXQgPSBldmVudC50YXJnZXQsXFxuICAgICAgICB0eXBlID0gX2V2ZW50JHRhcmdldC50eXBlLFxcbiAgICAgICAgdmFsdWUgPSBfZXZlbnQkdGFyZ2V0LnZhbHVlLFxcbiAgICAgICAgY2hlY2tlZCA9IF9ldmVudCR0YXJnZXQuY2hlY2tlZCxcXG4gICAgICAgIGZpbGVzID0gX2V2ZW50JHRhcmdldC5maWxlcyxcXG4gICAgICAgIGRhdGFUcmFuc2ZlciA9IGV2ZW50LmRhdGFUcmFuc2ZlcjtcXG5cXG4gICAgaWYgKHR5cGUgPT09ICdjaGVja2JveCcpIHtcXG4gICAgICByZXR1cm4gY2hlY2tlZDtcXG4gICAgfVxcbiAgICBpZiAodHlwZSA9PT0gJ2ZpbGUnKSB7XFxuICAgICAgcmV0dXJuIGZpbGVzIHx8IGRhdGFUcmFuc2ZlciAmJiBkYXRhVHJhbnNmZXIuZmlsZXM7XFxuICAgIH1cXG4gICAgaWYgKHR5cGUgPT09ICdzZWxlY3QtbXVsdGlwbGUnKSB7XFxuICAgICAgcmV0dXJuIGdldFNlbGVjdGVkVmFsdWVzKGV2ZW50LnRhcmdldC5vcHRpb25zKTtcXG4gICAgfVxcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9XFxuICByZXR1cm4gZXZlbnQ7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRWYWx1ZSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjMwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgaXNSZWFjdE5hdGl2ZSA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5uYXZpZ2F0b3IgJiYgd2luZG93Lm5hdmlnYXRvci5wcm9kdWN0ICYmIHdpbmRvdy5uYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJztcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1JlYWN0TmF0aXZlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGRhdGFLZXk7IH0pO1xcbnZhciBkYXRhS2V5ID0gJ3RleHQnO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X191dGlsX3ByZWZpeE5hbWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgdmFsaWRhdGVOYW1lUHJvcCA9IGZ1bmN0aW9uIHZhbGlkYXRlTmFtZVByb3AocHJvcCkge1xcbiAgaWYgKCFwcm9wKSB7XFxuICAgIHJldHVybiBuZXcgRXJyb3IoJ05vIFxcXCJuYW1lc1xcXCIgcHJvcCB3YXMgc3BlY2lmaWVkIDxGaWVsZHMvPicpO1xcbiAgfVxcbiAgaWYgKCFBcnJheS5pc0FycmF5KHByb3ApICYmICFwcm9wLl9pc0ZpZWxkQXJyYXkpIHtcXG4gICAgcmV0dXJuIG5ldyBFcnJvcignSW52YWxpZCBwcm9wIFxcXCJuYW1lc1xcXCIgc3VwcGxpZWQgdG8gPEZpZWxkcy8+LiBNdXN0IGJlIGVpdGhlciBhbiBhcnJheSBvZiBzdHJpbmdzIG9yIHRoZSBmaWVsZHMgYXJyYXkgZ2VuZXJhdGVkIGJ5IEZpZWxkQXJyYXkuJyk7XFxuICB9XFxufTtcXG5cXG52YXIgY3JlYXRlRmllbGRzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRzKF9yZWYpIHtcXG4gIHZhciBkZWVwRXF1YWwgPSBfcmVmLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYuZ2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYudG9KUyxcXG4gICAgICBzaXplID0gX3JlZi5zaXplO1xcblxcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoe1xcbiAgICBkZWVwRXF1YWw6IGRlZXBFcXVhbCxcXG4gICAgZ2V0SW46IGdldEluLFxcbiAgICB0b0pTOiB0b0pTLFxcbiAgICBzaXplOiBzaXplXFxuICB9KTtcXG5cXG4gIHZhciBGaWVsZHMgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICBfaW5oZXJpdHMoRmllbGRzLCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGRzKHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEZpZWxkcyk7XFxuXFxuICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZpZWxkcy5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkcykpLmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaWVsZHMgbXVzdCBiZSBpbnNpZGUgYSBjb21wb25lbnQgZGVjb3JhdGVkIHdpdGggcmVkdXhGb3JtKCknKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuXFxuICAgIF9jcmVhdGVDbGFzcyhGaWVsZHMsIFt7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywgbmV4dFByb3BzLCBuZXh0U3RhdGUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxNb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgIHZhciBlcnJvciA9IHZhbGlkYXRlTmFtZVByb3AodGhpcy5wcm9wcy5uYW1lcyk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgIHZhciByZWdpc3RlciA9IGNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcjtcXG5cXG4gICAgICAgIHRoaXMubmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICByZXR1cm4gcmVnaXN0ZXIobmFtZSwgJ0ZpZWxkJyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKHRoaXMucHJvcHMubmFtZXMsIG5leHRQcm9wcy5uYW1lcykpIHtcXG4gICAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XFxuICAgICAgICAgIHZhciBfY29udGV4dCRfcmVkdXhGb3JtID0gY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICAgICAgcmVnaXN0ZXIgPSBfY29udGV4dCRfcmVkdXhGb3JtLnJlZ2lzdGVyLFxcbiAgICAgICAgICAgICAgdW5yZWdpc3RlciA9IF9jb250ZXh0JF9yZWR1eEZvcm0udW5yZWdpc3RlcjtcXG4gICAgICAgICAgLy8gdW5yZWdpc3RlciBvbGQgbmFtZVxcblxcbiAgICAgICAgICB0aGlzLnByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gdW5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGNvbnRleHQsIG5hbWUpKTtcXG4gICAgICAgICAgfSk7XFxuICAgICAgICAgIC8vIHJlZ2lzdGVyIG5ldyBuYW1lXFxuICAgICAgICAgIG5leHRQcm9wcy5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHJlZ2lzdGVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSksICdGaWVsZCcpO1xcbiAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XFxuICAgICAgICB2YXIgdW5yZWdpc3RlciA9IGNvbnRleHQuX3JlZHV4Rm9ybS51bnJlZ2lzdGVyO1xcblxcbiAgICAgICAgdGhpcy5wcm9wcy5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiB1bnJlZ2lzdGVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSkpO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0UmVuZGVyZWRDb21wb25lbnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZW5kZXJlZENvbXBvbmVudCgpIHtcXG4gICAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0KCkodGhpcy5wcm9wcy53aXRoUmVmLCAnSWYgeW91IHdhbnQgdG8gYWNjZXNzIGdldFJlbmRlcmVkQ29tcG9uZW50KCksICcgKyAneW91IG11c3Qgc3BlY2lmeSBhIHdpdGhSZWYgcHJvcCB0byBGaWVsZHMnKTtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFJlbmRlcmVkQ29tcG9uZW50KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XFxuXFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKENvbm5lY3RlZEZpZWxkcywgX2V4dGVuZHMoe30sIHRoaXMucHJvcHMsIHtcXG4gICAgICAgICAgbmFtZXM6IHRoaXMucHJvcHMubmFtZXMubWFwKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSk7XFxuICAgICAgICAgIH0pLFxcbiAgICAgICAgICBfcmVkdXhGb3JtOiB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgcmVmOiAnY29ubmVjdGVkJ1xcbiAgICAgICAgfSkpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ25hbWVzJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xcblxcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMubmFtZXMubWFwKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGNvbnRleHQsIG5hbWUpO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZGlydHknLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuaXNEaXJ0eSgpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiAhdGhpcy5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZXMnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQgJiYgdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRWYWx1ZXMoKTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIEZpZWxkcztcXG4gIH0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG4gIEZpZWxkcy5wcm9wVHlwZXMgPSB7XFxuICAgIG5hbWVzOiBmdW5jdGlvbiBuYW1lcyhwcm9wcywgcHJvcE5hbWUpIHtcXG4gICAgICByZXR1cm4gdmFsaWRhdGVOYW1lUHJvcChwcm9wc1twcm9wTmFtZV0pO1xcbiAgICB9LFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUoW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nXSkuaXNSZXF1aXJlZCxcXG4gICAgZm9ybWF0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgcGFyc2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwcm9wczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdCxcXG4gICAgd2l0aFJlZjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2xcXG4gIH07XFxuICBGaWVsZHMuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkcztcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUZpZWxkcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjMzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jcmVhdGVGaWVsZFByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdHJ1Y3R1cmVfcGxhaW5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fZXZlbnRzX29uQ2hhbmdlVmFsdWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODQpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHByb3BzVG9Ob3RVcGRhdGVGb3IgPSBbJ19yZWR1eEZvcm0nXTtcXG5cXG52YXIgY3JlYXRlQ29ubmVjdGVkRmllbGRzID0gZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGVkRmllbGRzKF9yZWYpIHtcXG4gIHZhciBkZWVwRXF1YWwgPSBfcmVmLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYuZ2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYudG9KUyxcXG4gICAgICBzaXplID0gX3JlZi5zaXplO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIHZhciBlcnJvciA9IGdldEluKHN5bmNFcnJvcnMsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSBlcnJvciBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgZXJyb3Igc3RydWN0dXJlIHdoZXJlXFxuICAgIC8vIGl0IGNhbiBiZSBzZXQgZGlyZWN0bHksIGl0IG1pZ2h0IG5lZWQgdG8gYmUgdW53cmFwcGVkIGZyb20gdGhlIF9lcnJvciBwcm9wZXJ0eVxcbiAgICByZXR1cm4gZXJyb3IgJiYgZXJyb3IuX2Vycm9yID8gZXJyb3IuX2Vycm9yIDogZXJyb3I7XFxuICB9O1xcblxcbiAgdmFyIGdldFN5bmNXYXJuaW5nID0gZnVuY3Rpb24gZ2V0U3luY1dhcm5pbmcoc3luY1dhcm5pbmdzLCBuYW1lKSB7XFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lKTtcXG4gICAgLy8gQmVjYXVzZSB0aGUgd2FybmluZyBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgd2FybmluZyBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX3dhcm5pbmcgcHJvcGVydHlcXG4gICAgcmV0dXJuIHdhcm5pbmcgJiYgd2FybmluZy5fd2FybmluZyA/IHdhcm5pbmcuX3dhcm5pbmcgOiB3YXJuaW5nO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZHMgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICBfaW5oZXJpdHMoQ29ubmVjdGVkRmllbGRzLCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gQ29ubmVjdGVkRmllbGRzKHByb3BzKSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbm5lY3RlZEZpZWxkcyk7XFxuXFxuICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKENvbm5lY3RlZEZpZWxkcy5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKENvbm5lY3RlZEZpZWxkcykpLmNhbGwodGhpcywgcHJvcHMpKTtcXG5cXG4gICAgICBfdGhpcy5oYW5kbGVDaGFuZ2UgPSBfdGhpcy5oYW5kbGVDaGFuZ2UuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRm9jdXMgPSBfdGhpcy5oYW5kbGVGb2N1cy5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVCbHVyID0gX3RoaXMuaGFuZGxlQmx1ci5iaW5kKF90aGlzKTtcXG5cXG4gICAgICBfdGhpcy5vbkNoYW5nZUZucyA9IHByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUNoYW5nZShuYW1lLCBldmVudCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIGFjYztcXG4gICAgICB9LCB7fSk7XFxuXFxuICAgICAgX3RoaXMub25Gb2N1c0ZucyA9IHByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVGb2N1cyhuYW1lKTtcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgIH0sIHt9KTtcXG5cXG4gICAgICBfdGhpcy5vbkJsdXJGbnMgPSBwcm9wcy5uYW1lcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbmFtZSkge1xcbiAgICAgICAgYWNjW25hbWVdID0gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICAgICAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVCbHVyKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgIH0sIHt9KTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKENvbm5lY3RlZEZpZWxkcywgW3tcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xcblxcbiAgICAgICAgaWYgKHRoaXMucHJvcHMubmFtZXMgIT09IG5leHRQcm9wcy5uYW1lcyAmJiAoc2l6ZSh0aGlzLnByb3BzLm5hbWVzKSAhPT0gc2l6ZShuZXh0UHJvcHMubmFtZXMpIHx8IG5leHRQcm9wcy5uYW1lcy5zb21lKGZ1bmN0aW9uIChuZXh0TmFtZSkge1xcbiAgICAgICAgICByZXR1cm4gIV90aGlzMi5wcm9wcy5fZmllbGRzW25leHROYW1lXTtcXG4gICAgICAgIH0pKSkge1xcblxcbiAgICAgICAgICAvLyBuYW1lcyBpcyBjaGFuZ2VkLiBUaGUgY2FjaGVkIGV2ZW50IGhhbmRsZXJzIG5lZWQgdG8gYmUgdXBkYXRlZFxcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlRm5zID0gbmV4dFByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICAgICAgYWNjW25hbWVdID0gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLmhhbmRsZUNoYW5nZShuYW1lLCBldmVudCk7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgICAgICB9LCB7fSk7XFxuXFxuICAgICAgICAgIHRoaXMub25Gb2N1c0ZucyA9IG5leHRQcm9wcy5uYW1lcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbmFtZSkge1xcbiAgICAgICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlRm9jdXMobmFtZSk7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgICAgICB9LCB7fSk7XFxuXFxuICAgICAgICAgIHRoaXMub25CbHVyRm5zID0gbmV4dFByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICAgICAgYWNjW25hbWVdID0gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLmhhbmRsZUJsdXIobmFtZSwgZXZlbnQpO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgcmV0dXJuIGFjYztcXG4gICAgICAgICAgfSwge30pO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3Nob3VsZENvbXBvbmVudFVwZGF0ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMpIHtcXG4gICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xcblxcbiAgICAgICAgdmFyIG5leHRQcm9wc0tleXMgPSBPYmplY3Qua2V5cyhuZXh0UHJvcHMpO1xcbiAgICAgICAgdmFyIHRoaXNQcm9wc0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BzKTtcXG4gICAgICAgIHJldHVybiBuZXh0UHJvcHNLZXlzLmxlbmd0aCAhPT0gdGhpc1Byb3BzS2V5cy5sZW5ndGggfHwgbmV4dFByb3BzS2V5cy5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgIHJldHVybiAhfnByb3BzVG9Ob3RVcGRhdGVGb3IuaW5kZXhPZihwcm9wKSAmJiAhZGVlcEVxdWFsKF90aGlzMy5wcm9wc1twcm9wXSwgbmV4dFByb3BzW3Byb3BdKTtcXG4gICAgICAgIH0pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2lzRGlydHknLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc0RpcnR5KCkge1xcbiAgICAgICAgdmFyIF9maWVsZHMgPSB0aGlzLnByb3BzLl9maWVsZHM7XFxuXFxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX2ZpZWxkcykuc29tZShmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICByZXR1cm4gX2ZpZWxkc1tuYW1lXS5kaXJ0eTtcXG4gICAgICAgIH0pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFZhbHVlcycsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlcygpIHtcXG4gICAgICAgIHZhciBfZmllbGRzID0gdGhpcy5wcm9wcy5fZmllbGRzO1xcblxcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKF9maWVsZHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBuYW1lLCBfZmllbGRzW25hbWVdLnZhbHVlKTtcXG4gICAgICAgIH0sIHt9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVDaGFuZ2UnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UobmFtZSwgZXZlbnQpIHtcXG4gICAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIHBhcnNlID0gX3Byb3BzLnBhcnNlLFxcbiAgICAgICAgICAgIG5vcm1hbGl6ZSA9IF9wcm9wcy5ub3JtYWxpemUsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wcy5fcmVkdXhGb3JtO1xcblxcbiAgICAgICAgdmFyIHZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmNoYW5nZShuYW1lLCB2YWx1ZSkpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2hhbmRsZUZvY3VzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRm9jdXMobmFtZSkge1xcbiAgICAgICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzMi5kaXNwYXRjaCxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMi5fcmVkdXhGb3JtO1xcblxcbiAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5mb2N1cyhuYW1lKSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlQmx1cicsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUJsdXIobmFtZSwgZXZlbnQpIHtcXG4gICAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wczMuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgcGFyc2UgPSBfcHJvcHMzLnBhcnNlLFxcbiAgICAgICAgICAgIG5vcm1hbGl6ZSA9IF9wcm9wczMubm9ybWFsaXplLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMzLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIHsgbmFtZTogbmFtZSwgcGFyc2U6IHBhcnNlLCBub3JtYWxpemU6IG5vcm1hbGl6ZSB9KTtcXG5cXG4gICAgICAgIC8vIGRpc3BhdGNoIGJsdXIgYWN0aW9uXFxuICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmJsdXIobmFtZSwgdmFsdWUpKTtcXG5cXG4gICAgICAgIC8vIGNhbGwgcG9zdC1ibHVyIGNhbGxiYWNrXFxuICAgICAgICBpZiAoX3JlZHV4Rm9ybS5hc3luY1ZhbGlkYXRlKSB7XFxuICAgICAgICAgIF9yZWR1eEZvcm0uYXN5bmNWYWxpZGF0ZShuYW1lLCB2YWx1ZSk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XFxuXFxuICAgICAgICB2YXIgX3Byb3BzNCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzNC5jb21wb25lbnQsXFxuICAgICAgICAgICAgd2l0aFJlZiA9IF9wcm9wczQud2l0aFJlZixcXG4gICAgICAgICAgICBfZmllbGRzID0gX3Byb3BzNC5fZmllbGRzLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHM0LCBbJ2NvbXBvbmVudCcsICd3aXRoUmVmJywgJ19maWVsZHMnLCAnX3JlZHV4Rm9ybSddKTtcXG5cXG4gICAgICAgIHZhciBzZWN0aW9uUHJlZml4ID0gX3JlZHV4Rm9ybS5zZWN0aW9uUHJlZml4O1xcblxcbiAgICAgICAgdmFyIF9PYmplY3Qka2V5cyRyZWR1Y2UgPSBPYmplY3Qua2V5cyhfZmllbGRzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBuYW1lKSB7XFxuICAgICAgICAgIHZhciBjb25uZWN0ZWRQcm9wcyA9IF9maWVsZHNbbmFtZV07XFxuXFxuICAgICAgICAgIHZhciBfY3JlYXRlRmllbGRQcm9wcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHsgZ2V0SW46IGdldEluLCB0b0pTOiB0b0pTIH0sIG5hbWUsIF9leHRlbmRzKHt9LCBjb25uZWN0ZWRQcm9wcywgcmVzdCwge1xcbiAgICAgICAgICAgIG9uQmx1cjogX3RoaXM0Lm9uQmx1ckZuc1tuYW1lXSxcXG4gICAgICAgICAgICBvbkNoYW5nZTogX3RoaXM0Lm9uQ2hhbmdlRm5zW25hbWVdLFxcbiAgICAgICAgICAgIG9uRm9jdXM6IF90aGlzNC5vbkZvY3VzRm5zW25hbWVdXFxuICAgICAgICAgIH0pKSxcXG4gICAgICAgICAgICAgIGN1c3RvbSA9IF9jcmVhdGVGaWVsZFByb3BzLmN1c3RvbSxcXG4gICAgICAgICAgICAgIGZpZWxkUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX2NyZWF0ZUZpZWxkUHJvcHMsIFsnY3VzdG9tJ10pO1xcblxcbiAgICAgICAgICBhY2N1bXVsYXRvci5jdXN0b20gPSBjdXN0b207XFxuICAgICAgICAgIHZhciBmaWVsZE5hbWUgPSBzZWN0aW9uUHJlZml4ID8gbmFtZS5yZXBsYWNlKHNlY3Rpb25QcmVmaXggKyAnLicsICcnKSA6IG5hbWU7XFxuICAgICAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5zZXRJbihhY2N1bXVsYXRvciwgZmllbGROYW1lLCBmaWVsZFByb3BzKTtcXG4gICAgICAgIH0sIHt9KSxcXG4gICAgICAgICAgICBjdXN0b20gPSBfT2JqZWN0JGtleXMkcmVkdWNlLmN1c3RvbSxcXG4gICAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfT2JqZWN0JGtleXMkcmVkdWNlLCBbJ2N1c3RvbSddKTtcXG5cXG4gICAgICAgIGlmICh3aXRoUmVmKSB7XFxuICAgICAgICAgIHByb3BzLnJlZiA9ICdyZW5kZXJlZENvbXBvbmVudCc7XFxuICAgICAgICB9XFxuXFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKGNvbXBvbmVudCwgX2V4dGVuZHMoe30sIHByb3BzLCBjdXN0b20pKTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIENvbm5lY3RlZEZpZWxkcztcXG4gIH0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG4gIENvbm5lY3RlZEZpZWxkcy5wcm9wVHlwZXMgPSB7XFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBfZmllbGRzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgdmFyIGNvbm5lY3RvciA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfcmVkdXhfX1tcXFwiYVxcXCIgLyogY29ubmVjdCAqL10pKGZ1bmN0aW9uIChzdGF0ZSwgb3duUHJvcHMpIHtcXG4gICAgdmFyIG5hbWVzID0gb3duUHJvcHMubmFtZXMsXFxuICAgICAgICBfb3duUHJvcHMkX3JlZHV4Rm9ybSA9IG93blByb3BzLl9yZWR1eEZvcm0sXFxuICAgICAgICBpbml0aWFsVmFsdWVzID0gX293blByb3BzJF9yZWR1eEZvcm0uaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9vd25Qcm9wcyRfcmVkdXhGb3JtLmdldEZvcm1TdGF0ZTtcXG5cXG4gICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgIHJldHVybiB7XFxuICAgICAgX2ZpZWxkczogbmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgbmFtZSkge1xcbiAgICAgICAgdmFyIGluaXRpYWxTdGF0ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ2luaXRpYWwuJyArIG5hbWUpO1xcbiAgICAgICAgdmFyIGluaXRpYWwgPSBpbml0aWFsU3RhdGUgIT09IHVuZGVmaW5lZCA/IGluaXRpYWxTdGF0ZSA6IGluaXRpYWxWYWx1ZXMgJiYgZ2V0SW4oaW5pdGlhbFZhbHVlcywgbmFtZSk7XFxuICAgICAgICB2YXIgdmFsdWUgPSBnZXRJbihmb3JtU3RhdGUsICd2YWx1ZXMuJyArIG5hbWUpO1xcbiAgICAgICAgdmFyIHN5bmNFcnJvciA9IGdldFN5bmNFcnJvcihnZXRJbihmb3JtU3RhdGUsICdzeW5jRXJyb3JzJyksIG5hbWUpO1xcbiAgICAgICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgICAgICB2YXIgcHJpc3RpbmUgPSB2YWx1ZSA9PT0gaW5pdGlhbDtcXG4gICAgICAgIGFjY3VtdWxhdG9yW25hbWVdID0ge1xcbiAgICAgICAgICBhc3luY0Vycm9yOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY0Vycm9ycy4nICsgbmFtZSksXFxuICAgICAgICAgIGFzeW5jVmFsaWRhdGluZzogZ2V0SW4oZm9ybVN0YXRlLCAnYXN5bmNWYWxpZGF0aW5nJykgPT09IG5hbWUsXFxuICAgICAgICAgIGRpcnR5OiAhcHJpc3RpbmUsXFxuICAgICAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICAgICAgc3RhdGU6IGdldEluKGZvcm1TdGF0ZSwgJ2ZpZWxkcy4nICsgbmFtZSksXFxuICAgICAgICAgIHN1Ym1pdEVycm9yOiBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRFcnJvcnMuJyArIG5hbWUpLFxcbiAgICAgICAgICBzdWJtaXRGYWlsZWQ6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEZhaWxlZCcpLFxcbiAgICAgICAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxcbiAgICAgICAgICBzeW5jRXJyb3I6IHN5bmNFcnJvcixcXG4gICAgICAgICAgc3luY1dhcm5pbmc6IHN5bmNXYXJuaW5nLFxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXFxuICAgICAgICAgIF92YWx1ZTogb3duUHJvcHMudmFsdWUgLy8gc2F2ZSB2YWx1ZSBwYXNzZWQgaW4gKGZvciBjaGVja2JveGVzKVxcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjtcXG4gICAgICB9LCB7fSlcXG4gICAgfTtcXG4gIH0sIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICByZXR1cm4gY29ubmVjdG9yKENvbm5lY3RlZEZpZWxkcyk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVDb25uZWN0ZWRGaWVsZHMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkQXJyYXlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjM1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsX3NoYWxsb3dDb21wYXJlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxcblxcblxcblxcblxcblxcblxcblxcbnZhciB0b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xcbn07XFxuXFxudmFyIHdyYXBFcnJvciA9IGZ1bmN0aW9uIHdyYXBFcnJvcihmbiwga2V5KSB7XFxuICByZXR1cm4gZm4gJiYgZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgdmFsaWRhdG9ycyA9IHRvQXJyYXkoZm4pO1xcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbGlkYXRvcnMubGVuZ3RoOyBpKyspIHtcXG4gICAgICB2YXIgcmVzdWx0ID0gdmFsaWRhdG9yc1tpXS5hcHBseSh2YWxpZGF0b3JzLCBhcmd1bWVudHMpO1xcbiAgICAgIGlmIChyZXN1bHQpIHtcXG4gICAgICAgIHJldHVybiBfZGVmaW5lUHJvcGVydHkoe30sIGtleSwgcmVzdWx0KTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH07XFxufTtcXG5cXG52YXIgY3JlYXRlRmllbGRBcnJheSA9IGZ1bmN0aW9uIGNyZWF0ZUZpZWxkQXJyYXkoX3JlZjIpIHtcXG4gIHZhciBkZWVwRXF1YWwgPSBfcmVmMi5kZWVwRXF1YWwsXFxuICAgICAgZ2V0SW4gPSBfcmVmMi5nZXRJbixcXG4gICAgICBzaXplID0gX3JlZjIuc2l6ZTtcXG5cXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZEFycmF5ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRBcnJheV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoeyBkZWVwRXF1YWw6IGRlZXBFcXVhbCwgZ2V0SW46IGdldEluLCBzaXplOiBzaXplIH0pO1xcblxcbiAgdmFyIEZpZWxkQXJyYXkgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICBfaW5oZXJpdHMoRmllbGRBcnJheSwgX0NvbXBvbmVudCk7XFxuXFxuICAgIGZ1bmN0aW9uIEZpZWxkQXJyYXkocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGRBcnJheSk7XFxuXFxuICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZpZWxkQXJyYXkuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGaWVsZEFycmF5KSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkQXJyYXkgbXVzdCBiZSBpbnNpZGUgYSBjb21wb25lbnQgZGVjb3JhdGVkIHdpdGggcmVkdXhGb3JtKCknKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuXFxuICAgIF9jcmVhdGVDbGFzcyhGaWVsZEFycmF5LCBbe1xcbiAgICAgIGtleTogJ3Nob3VsZENvbXBvbmVudFVwZGF0ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIG5leHRQcm9wcywgbmV4dFN0YXRlKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyKHRoaXMubmFtZSwgJ0ZpZWxkQXJyYXknLCBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgIHJldHVybiB3cmFwRXJyb3IoX3RoaXMyLnByb3BzLnZhbGlkYXRlLCAnX2Vycm9yJyk7XFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgIHJldHVybiB3cmFwRXJyb3IoX3RoaXMyLnByb3BzLndhcm4sICdfd2FybmluZycpO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XFxuICAgICAgICBpZiAodGhpcy5wcm9wcy5uYW1lICE9PSBuZXh0UHJvcHMubmFtZSkge1xcbiAgICAgICAgICAvLyB1bnJlZ2lzdGVyIG9sZCBuYW1lXFxuICAgICAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXIodGhpcy5uYW1lKTtcXG4gICAgICAgICAgLy8gcmVnaXN0ZXIgbmV3IG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0ucmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLmNvbnRleHQsIG5leHRQcm9wcy5uYW1lKSwgJ0ZpZWxkQXJyYXknKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHRoaXMucHJvcHMud2l0aFJlZiwgJ0lmIHlvdSB3YW50IHRvIGFjY2VzcyBnZXRSZW5kZXJlZENvbXBvbmVudCgpLCAnICsgJ3lvdSBtdXN0IHNwZWNpZnkgYSB3aXRoUmVmIHByb3AgdG8gRmllbGRBcnJheScpO1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0UmVuZGVyZWRDb21wb25lbnQoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKENvbm5lY3RlZEZpZWxkQXJyYXksIF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCB7XFxuICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcXG4gICAgICAgICAgc3luY0Vycm9yOiB0aGlzLnN5bmNFcnJvcixcXG4gICAgICAgICAgc3luY1dhcm5pbmc6IHRoaXMuc3luY1dhcm5pbmcsXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLmNvbnRleHQsIHRoaXMucHJvcHMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZGlydHknLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZGlydHk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncHJpc3RpbmUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkucHJpc3RpbmU7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAndmFsdWUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkudmFsdWU7XFxuICAgICAgfVxcbiAgICB9XSk7XFxuXFxuICAgIHJldHVybiBGaWVsZEFycmF5O1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgRmllbGRBcnJheS5wcm9wVHlwZXMgPSB7XFxuICAgIG5hbWU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYy5pc1JlcXVpcmVkLFxcbiAgICBwcm9wczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdCxcXG4gICAgdmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICB3YXJuOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgd2l0aFJlZjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2xcXG4gIH07XFxuICBGaWVsZEFycmF5LmNvbnRleHRUeXBlcyA9IHtcXG4gICAgX3JlZHV4Rm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdFxcbiAgfTtcXG5cXG4gIHJldHVybiBGaWVsZEFycmF5O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRBcnJheSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19tYXBWYWx1ZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2NyZWF0ZUZpZWxkQXJyYXlQcm9wc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzYpO1xcblxcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gWydfcmVkdXhGb3JtJywgJ3ZhbHVlJ107XFxuXFxudmFyIGNyZWF0ZUNvbm5lY3RlZEZpZWxkQXJyYXkgPSBmdW5jdGlvbiBjcmVhdGVDb25uZWN0ZWRGaWVsZEFycmF5KF9yZWYpIHtcXG4gIHZhciBkZWVwRXF1YWwgPSBfcmVmLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYuZ2V0SW4sXFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZTtcXG5cXG5cXG4gIHZhciBnZXRTeW5jRXJyb3IgPSBmdW5jdGlvbiBnZXRTeW5jRXJyb3Ioc3luY0Vycm9ycywgbmFtZSkge1xcbiAgICAvLyBGb3IgYW4gYXJyYXksIHRoZSBlcnJvciBjYW4gX09OTFlfIGJlIHVuZGVyIF9lcnJvci5cXG4gICAgLy8gVGhpcyBpcyB3aHkgdGhpcyBnZXRTeW5jRXJyb3IgaXMgbm90IHRoZSBzYW1lIGFzIHRoZVxcbiAgICAvLyBvbmUgaW4gRmllbGQuXFxuICAgIHJldHVybiBnZXRJbihzeW5jRXJyb3JzLCBuYW1lICsgJy5fZXJyb3InKTtcXG4gIH07XFxuXFxuICB2YXIgZ2V0U3luY1dhcm5pbmcgPSBmdW5jdGlvbiBnZXRTeW5jV2FybmluZyhzeW5jV2FybmluZ3MsIG5hbWUpIHtcXG4gICAgLy8gRm9yIGFuIGFycmF5LCB0aGUgd2FybmluZyBjYW4gX09OTFlfIGJlIHVuZGVyIF93YXJuaW5nLlxcbiAgICAvLyBUaGlzIGlzIHdoeSB0aGlzIGdldFN5bmNFcnJvciBpcyBub3QgdGhlIHNhbWUgYXMgdGhlXFxuICAgIC8vIG9uZSBpbiBGaWVsZC5cXG4gICAgcmV0dXJuIGdldEluKHN5bmNXYXJuaW5ncywgbmFtZSArICcuX3dhcm5pbmcnKTtcXG4gIH07XFxuXFxuICB2YXIgQ29ubmVjdGVkRmllbGRBcnJheSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZEFycmF5LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gQ29ubmVjdGVkRmllbGRBcnJheSgpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdGVkRmllbGRBcnJheSk7XFxuXFxuICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKENvbm5lY3RlZEZpZWxkQXJyYXkuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihDb25uZWN0ZWRGaWVsZEFycmF5KSkuY2FsbCh0aGlzKSk7XFxuXFxuICAgICAgX3RoaXMuZ2V0VmFsdWUgPSBfdGhpcy5nZXRWYWx1ZS5iaW5kKF90aGlzKTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKENvbm5lY3RlZEZpZWxkQXJyYXksIFt7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICAvLyBVcGRhdGUgaWYgdGhlIGVsZW1lbnRzIG9mIHRoZSB2YWx1ZSBhcnJheSB3YXMgdXBkYXRlZC5cXG4gICAgICAgIHZhciB0aGlzVmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlO1xcbiAgICAgICAgdmFyIG5leHRWYWx1ZSA9IG5leHRQcm9wcy52YWx1ZTtcXG5cXG4gICAgICAgIGlmICh0aGlzVmFsdWUgJiYgbmV4dFZhbHVlKSB7XFxuICAgICAgICAgIGlmICh0aGlzVmFsdWUubGVuZ3RoICE9PSBuZXh0VmFsdWUubGVuZ3RoIHx8IHRoaXNWYWx1ZS5ldmVyeShmdW5jdGlvbiAodmFsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG5leHRWYWx1ZS5zb21lKGZ1bmN0aW9uIChuZXh0KSB7XFxuICAgICAgICAgICAgICByZXR1cm4gZGVlcEVxdWFsKHZhbCwgbmV4dCk7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgIH0pKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHZhciBuZXh0UHJvcHNLZXlzID0gT2JqZWN0LmtleXMobmV4dFByb3BzKTtcXG4gICAgICAgIHZhciB0aGlzUHJvcHNLZXlzID0gT2JqZWN0LmtleXModGhpcy5wcm9wcyk7XFxuICAgICAgICByZXR1cm4gbmV4dFByb3BzS2V5cy5sZW5ndGggIT09IHRoaXNQcm9wc0tleXMubGVuZ3RoIHx8IG5leHRQcm9wc0tleXMuc29tZShmdW5jdGlvbiAocHJvcCkge1xcbiAgICAgICAgICAvLyB1c2VmdWwgdG8gZGVidWcgcmVyZW5kZXJzXFxuICAgICAgICAgIC8vIGlmICghcGxhaW4uZGVlcEVxdWFsKHRoaXMucHJvcHNbIHByb3AgXSwgbmV4dFByb3BzWyBwcm9wIF0pKSB7XFxuICAgICAgICAgIC8vICAgY29uc29sZS5pbmZvKHByb3AsICdjaGFuZ2VkJywgdGhpcy5wcm9wc1sgcHJvcCBdLCAnPT0+JywgbmV4dFByb3BzWyBwcm9wIF0pXFxuICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgcmV0dXJuICF+cHJvcHNUb05vdFVwZGF0ZUZvci5pbmRleE9mKHByb3ApICYmICFkZWVwRXF1YWwoX3RoaXMyLnByb3BzW3Byb3BdLCBuZXh0UHJvcHNbcHJvcF0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0UmVuZGVyZWRDb21wb25lbnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZW5kZXJlZENvbXBvbmVudCgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMucmVuZGVyZWRDb21wb25lbnQ7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0VmFsdWUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWx1ZShpbmRleCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudmFsdWUgJiYgZ2V0SW4odGhpcy5wcm9wcy52YWx1ZSwgaW5kZXgpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3JlbmRlcicsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIGNvbXBvbmVudCA9IF9wcm9wcy5jb21wb25lbnQsXFxuICAgICAgICAgICAgd2l0aFJlZiA9IF9wcm9wcy53aXRoUmVmLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMubmFtZSxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzLl9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgdmFsaWRhdGUgPSBfcHJvcHMudmFsaWRhdGUsXFxuICAgICAgICAgICAgd2FybiA9IF9wcm9wcy53YXJuLFxcbiAgICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzLCBbJ2NvbXBvbmVudCcsICd3aXRoUmVmJywgJ25hbWUnLCAnX3JlZHV4Rm9ybScsICd2YWxpZGF0ZScsICd3YXJuJ10pO1xcblxcbiAgICAgICAgdmFyIHByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY3JlYXRlRmllbGRBcnJheVByb3BzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShnZXRJbiwgbmFtZSwgX3JlZHV4Rm9ybS5mb3JtLCBfcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXgsIHRoaXMuZ2V0VmFsdWUsIHJlc3QpO1xcbiAgICAgICAgaWYgKHdpdGhSZWYpIHtcXG4gICAgICAgICAgcHJvcHMucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBwcm9wcyk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZGlydHknLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMuZGlydHk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncHJpc3RpbmUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMucHJpc3RpbmU7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAndmFsdWUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMudmFsdWU7XFxuICAgICAgfVxcbiAgICB9XSk7XFxuXFxuICAgIHJldHVybiBDb25uZWN0ZWRGaWVsZEFycmF5O1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgQ29ubmVjdGVkRmllbGRBcnJheS5wcm9wVHlwZXMgPSB7XFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBwcm9wczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdFxcbiAgfTtcXG5cXG4gIENvbm5lY3RlZEZpZWxkQXJyYXkuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgdmFyIGNvbm5lY3RvciA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfcmVkdXhfX1tcXFwiYVxcXCIgLyogY29ubmVjdCAqL10pKGZ1bmN0aW9uIChzdGF0ZSwgb3duUHJvcHMpIHtcXG4gICAgdmFyIG5hbWUgPSBvd25Qcm9wcy5uYW1lLFxcbiAgICAgICAgX293blByb3BzJF9yZWR1eEZvcm0gPSBvd25Qcm9wcy5fcmVkdXhGb3JtLFxcbiAgICAgICAgaW5pdGlhbFZhbHVlcyA9IF9vd25Qcm9wcyRfcmVkdXhGb3JtLmluaXRpYWxWYWx1ZXMsXFxuICAgICAgICBnZXRGb3JtU3RhdGUgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5nZXRGb3JtU3RhdGU7XFxuXFxuICAgIHZhciBmb3JtU3RhdGUgPSBnZXRGb3JtU3RhdGUoc3RhdGUpO1xcbiAgICB2YXIgaW5pdGlhbCA9IGdldEluKGZvcm1TdGF0ZSwgJ2luaXRpYWwuJyArIG5hbWUpIHx8IGluaXRpYWxWYWx1ZXMgJiYgZ2V0SW4oaW5pdGlhbFZhbHVlcywgbmFtZSk7XFxuICAgIHZhciB2YWx1ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ3ZhbHVlcy4nICsgbmFtZSk7XFxuICAgIHZhciBzdWJtaXR0aW5nID0gZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0dGluZycpO1xcbiAgICB2YXIgc3luY0Vycm9yID0gZ2V0U3luY0Vycm9yKGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNFcnJvcnMnKSwgbmFtZSk7XFxuICAgIHZhciBzeW5jV2FybmluZyA9IGdldFN5bmNXYXJuaW5nKGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNXYXJuaW5ncycpLCBuYW1lKTtcXG4gICAgdmFyIHByaXN0aW5lID0gZGVlcEVxdWFsKHZhbHVlLCBpbml0aWFsKTtcXG4gICAgcmV0dXJuIHtcXG4gICAgICBhc3luY0Vycm9yOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY0Vycm9ycy4nICsgbmFtZSArICcuX2Vycm9yJyksXFxuICAgICAgZGlydHk6ICFwcmlzdGluZSxcXG4gICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgc3RhdGU6IGdldEluKGZvcm1TdGF0ZSwgJ2ZpZWxkcy4nICsgbmFtZSksXFxuICAgICAgc3VibWl0RXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEVycm9ycy4nICsgbmFtZSArICcuX2Vycm9yJyksXFxuICAgICAgc3VibWl0RmFpbGVkOiBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRGYWlsZWQnKSxcXG4gICAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxcbiAgICAgIHN5bmNFcnJvcjogc3luY0Vycm9yLFxcbiAgICAgIHN5bmNXYXJuaW5nOiBzeW5jV2FybmluZyxcXG4gICAgICB2YWx1ZTogdmFsdWUsXFxuICAgICAgbGVuZ3RoOiBzaXplKHZhbHVlKVxcbiAgICB9O1xcbiAgfSwgZnVuY3Rpb24gKGRpc3BhdGNoLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZSA9IG93blByb3BzLm5hbWUsXFxuICAgICAgICBfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybTtcXG4gICAgdmFyIGFycmF5SW5zZXJ0ID0gX3JlZHV4Rm9ybS5hcnJheUluc2VydCxcXG4gICAgICAgIGFycmF5TW92ZSA9IF9yZWR1eEZvcm0uYXJyYXlNb3ZlLFxcbiAgICAgICAgYXJyYXlQb3AgPSBfcmVkdXhGb3JtLmFycmF5UG9wLFxcbiAgICAgICAgYXJyYXlQdXNoID0gX3JlZHV4Rm9ybS5hcnJheVB1c2gsXFxuICAgICAgICBhcnJheVJlbW92ZSA9IF9yZWR1eEZvcm0uYXJyYXlSZW1vdmUsXFxuICAgICAgICBhcnJheVJlbW92ZUFsbCA9IF9yZWR1eEZvcm0uYXJyYXlSZW1vdmVBbGwsXFxuICAgICAgICBhcnJheVNoaWZ0ID0gX3JlZHV4Rm9ybS5hcnJheVNoaWZ0LFxcbiAgICAgICAgYXJyYXlTcGxpY2UgPSBfcmVkdXhGb3JtLmFycmF5U3BsaWNlLFxcbiAgICAgICAgYXJyYXlTd2FwID0gX3JlZHV4Rm9ybS5hcnJheVN3YXAsXFxuICAgICAgICBhcnJheVVuc2hpZnQgPSBfcmVkdXhGb3JtLmFycmF5VW5zaGlmdDtcXG5cXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21hcFZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoe1xcbiAgICAgIGFycmF5SW5zZXJ0OiBhcnJheUluc2VydCxcXG4gICAgICBhcnJheU1vdmU6IGFycmF5TW92ZSxcXG4gICAgICBhcnJheVBvcDogYXJyYXlQb3AsXFxuICAgICAgYXJyYXlQdXNoOiBhcnJheVB1c2gsXFxuICAgICAgYXJyYXlSZW1vdmU6IGFycmF5UmVtb3ZlLFxcbiAgICAgIGFycmF5UmVtb3ZlQWxsOiBhcnJheVJlbW92ZUFsbCxcXG4gICAgICBhcnJheVNoaWZ0OiBhcnJheVNoaWZ0LFxcbiAgICAgIGFycmF5U3BsaWNlOiBhcnJheVNwbGljZSxcXG4gICAgICBhcnJheVN3YXA6IGFycmF5U3dhcCxcXG4gICAgICBhcnJheVVuc2hpZnQ6IGFycmF5VW5zaGlmdFxcbiAgICB9LCBmdW5jdGlvbiAoYWN0aW9uQ3JlYXRvcikge1xcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGFjdGlvbkNyZWF0b3IuYmluZChudWxsLCBuYW1lKSwgZGlzcGF0Y2gpO1xcbiAgICB9KTtcXG4gIH0sIHVuZGVmaW5lZCwgeyB3aXRoUmVmOiB0cnVlIH0pO1xcbiAgcmV0dXJuIGNvbm5lY3RvcihDb25uZWN0ZWRGaWVsZEFycmF5KTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUNvbm5lY3RlZEZpZWxkQXJyYXkpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxudmFyIGNyZWF0ZUZpZWxkQXJyYXlQcm9wcyA9IGZ1bmN0aW9uIGNyZWF0ZUZpZWxkQXJyYXlQcm9wcyhnZXRJbiwgbmFtZSwgZm9ybSwgc2VjdGlvblByZWZpeCwgZ2V0VmFsdWUsIF9yZWYpIHtcXG4gIHZhciBhcnJheUluc2VydCA9IF9yZWYuYXJyYXlJbnNlcnQsXFxuICAgICAgYXJyYXlNb3ZlID0gX3JlZi5hcnJheU1vdmUsXFxuICAgICAgYXJyYXlQb3AgPSBfcmVmLmFycmF5UG9wLFxcbiAgICAgIGFycmF5UHVzaCA9IF9yZWYuYXJyYXlQdXNoLFxcbiAgICAgIGFycmF5UmVtb3ZlID0gX3JlZi5hcnJheVJlbW92ZSxcXG4gICAgICBhcnJheVJlbW92ZUFsbCA9IF9yZWYuYXJyYXlSZW1vdmVBbGwsXFxuICAgICAgYXJyYXlTaGlmdCA9IF9yZWYuYXJyYXlTaGlmdCxcXG4gICAgICBhcnJheVNwbGljZSA9IF9yZWYuYXJyYXlTcGxpY2UsXFxuICAgICAgYXJyYXlTd2FwID0gX3JlZi5hcnJheVN3YXAsXFxuICAgICAgYXJyYXlVbnNoaWZ0ID0gX3JlZi5hcnJheVVuc2hpZnQsXFxuICAgICAgYXN5bmNFcnJvciA9IF9yZWYuYXN5bmNFcnJvcixcXG4gICAgICBkaXJ0eSA9IF9yZWYuZGlydHksXFxuICAgICAgbGVuZ3RoID0gX3JlZi5sZW5ndGgsXFxuICAgICAgcHJpc3RpbmUgPSBfcmVmLnByaXN0aW5lLFxcbiAgICAgIHN1Ym1pdEVycm9yID0gX3JlZi5zdWJtaXRFcnJvcixcXG4gICAgICBzdGF0ZSA9IF9yZWYuc3RhdGUsXFxuICAgICAgc3VibWl0RmFpbGVkID0gX3JlZi5zdWJtaXRGYWlsZWQsXFxuICAgICAgc3VibWl0dGluZyA9IF9yZWYuc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3IgPSBfcmVmLnN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZyA9IF9yZWYuc3luY1dhcm5pbmcsXFxuICAgICAgdmFsdWUgPSBfcmVmLnZhbHVlLFxcbiAgICAgIHByb3BzID0gX3JlZi5wcm9wcyxcXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFsnYXJyYXlJbnNlcnQnLCAnYXJyYXlNb3ZlJywgJ2FycmF5UG9wJywgJ2FycmF5UHVzaCcsICdhcnJheVJlbW92ZScsICdhcnJheVJlbW92ZUFsbCcsICdhcnJheVNoaWZ0JywgJ2FycmF5U3BsaWNlJywgJ2FycmF5U3dhcCcsICdhcnJheVVuc2hpZnQnLCAnYXN5bmNFcnJvcicsICdkaXJ0eScsICdsZW5ndGgnLCAncHJpc3RpbmUnLCAnc3VibWl0RXJyb3InLCAnc3RhdGUnLCAnc3VibWl0RmFpbGVkJywgJ3N1Ym1pdHRpbmcnLCAnc3luY0Vycm9yJywgJ3N5bmNXYXJuaW5nJywgJ3ZhbHVlJywgJ3Byb3BzJ10pO1xcblxcbiAgdmFyIGVycm9yID0gc3luY0Vycm9yIHx8IGFzeW5jRXJyb3IgfHwgc3VibWl0RXJyb3I7XFxuICB2YXIgd2FybmluZyA9IHN5bmNXYXJuaW5nO1xcbiAgdmFyIGZpZWxkTmFtZSA9IHNlY3Rpb25QcmVmaXggPyBuYW1lLnJlcGxhY2Uoc2VjdGlvblByZWZpeCArICcuJywgJycpIDogbmFtZTtcXG4gIHZhciBmaW5hbFByb3BzID0gX2V4dGVuZHMoe1xcbiAgICBmaWVsZHM6IHtcXG4gICAgICBfaXNGaWVsZEFycmF5OiB0cnVlLFxcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2spIHtcXG4gICAgICAgIHJldHVybiAodmFsdWUgfHwgW10pLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4KSB7XFxuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhmaWVsZE5hbWUgKyAnWycgKyBpbmRleCArICddJywgaW5kZXgsIGZpbmFsUHJvcHMuZmllbGRzKTtcXG4gICAgICAgIH0pO1xcbiAgICAgIH0sXFxuICAgICAgZ2V0OiBnZXRWYWx1ZSxcXG4gICAgICBnZXRBbGw6IGZ1bmN0aW9uIGdldEFsbCgpIHtcXG4gICAgICAgIHJldHVybiB2YWx1ZTtcXG4gICAgICB9LFxcbiAgICAgIGluc2VydDogYXJyYXlJbnNlcnQsXFxuICAgICAgbGVuZ3RoOiBsZW5ndGgsXFxuICAgICAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2spIHtcXG4gICAgICAgIHJldHVybiAodmFsdWUgfHwgW10pLm1hcChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGZpZWxkTmFtZSArICdbJyArIGluZGV4ICsgJ10nLCBpbmRleCwgZmluYWxQcm9wcy5maWVsZHMpO1xcbiAgICAgICAgfSk7XFxuICAgICAgfSxcXG4gICAgICBtb3ZlOiBhcnJheU1vdmUsXFxuICAgICAgbmFtZTogbmFtZSxcXG4gICAgICBwb3A6IGZ1bmN0aW9uIHBvcCgpIHtcXG4gICAgICAgIGFycmF5UG9wKCk7XFxuICAgICAgICByZXR1cm4gZ2V0SW4odmFsdWUsIGxlbmd0aCAtIDEpO1xcbiAgICAgIH0sXFxuICAgICAgcHVzaDogYXJyYXlQdXNoLFxcbiAgICAgIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrLCBpbml0aWFsKSB7XFxuICAgICAgICByZXR1cm4gKHZhbHVlIHx8IFtdKS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBpdGVtLCBpbmRleCkge1xcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soYWNjdW11bGF0b3IsIGZpZWxkTmFtZSArICdbJyArIGluZGV4ICsgJ10nLCBpbmRleCwgZmluYWxQcm9wcy5maWVsZHMpO1xcbiAgICAgICAgfSwgaW5pdGlhbCk7XFxuICAgICAgfSxcXG4gICAgICByZW1vdmU6IGFycmF5UmVtb3ZlLFxcbiAgICAgIHJlbW92ZUFsbDogYXJyYXlSZW1vdmVBbGwsXFxuICAgICAgc2hpZnQ6IGZ1bmN0aW9uIHNoaWZ0KCkge1xcbiAgICAgICAgYXJyYXlTaGlmdCgpO1xcbiAgICAgICAgcmV0dXJuIGdldEluKHZhbHVlLCAwKTtcXG4gICAgICB9LFxcbiAgICAgIHN3YXA6IGFycmF5U3dhcCxcXG4gICAgICB1bnNoaWZ0OiBhcnJheVVuc2hpZnRcXG4gICAgfSxcXG4gICAgbWV0YToge1xcbiAgICAgIGRpcnR5OiBkaXJ0eSxcXG4gICAgICBlcnJvcjogZXJyb3IsXFxuICAgICAgZm9ybTogZm9ybSxcXG4gICAgICB3YXJuaW5nOiB3YXJuaW5nLFxcbiAgICAgIGludmFsaWQ6ICEhZXJyb3IsXFxuICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgc3VibWl0RmFpbGVkOiBzdWJtaXRGYWlsZWQsXFxuICAgICAgdG91Y2hlZDogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICd0b3VjaGVkJykpLFxcbiAgICAgIHZhbGlkOiAhZXJyb3JcXG4gICAgfVxcbiAgfSwgcHJvcHMsIHJlc3QpO1xcbiAgcmV0dXJuIGZpbmFsUHJvcHM7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGaWVsZEFycmF5UHJvcHMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaW52YXJpYW50X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaW52YXJpYW50X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG5cXG5cXG5cXG52YXIgY3JlYXRlRm9ybVZhbHVlU2VsZWN0b3IgPSBmdW5jdGlvbiBjcmVhdGVGb3JtVmFsdWVTZWxlY3RvcihfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG5cXG4gICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fX2RlZmF1bHQoKShmb3JtLCAnRm9ybSB2YWx1ZSBtdXN0IGJlIHNwZWNpZmllZCcpO1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZpZWxkcyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgICAgIGZpZWxkc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XFxuICAgICAgfVxcblxcbiAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfX19kZWZhdWx0KCkoZmllbGRzLmxlbmd0aCwgJ05vIGZpZWxkcyBzcGVjaWZpZWQnKTtcXG4gICAgICByZXR1cm4gZmllbGRzLmxlbmd0aCA9PT0gMSA/XFxuICAgICAgLy8gb25seSBzZWxlY3Rpbmcgb25lIGZpZWxkLCBzbyByZXR1cm4gaXRzIHZhbHVlXFxuICAgICAgZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcudmFsdWVzLicgKyBmaWVsZHNbMF0pIDpcXG4gICAgICAvLyBzZWxlY3RpbmcgbWFueSBmaWVsZHMsIHNvIHJldHVybiBhbiBvYmplY3Qgb2YgZmllbGQgdmFsdWVzXFxuICAgICAgZmllbGRzLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIGZpZWxkKSB7XFxuICAgICAgICB2YXIgdmFsdWUgPSBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gYWNjdW11bGF0b3IgOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5zZXRJbihhY2N1bXVsYXRvciwgZmllbGQsIHZhbHVlKTtcXG4gICAgICB9LCB7fSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRm9ybVZhbHVlU2VsZWN0b3IpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxcblxcblxcblxcbnZhciBjcmVhdGVWYWx1ZXMgPSBmdW5jdGlvbiBjcmVhdGVWYWx1ZXMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoY29uZmlnKSB7XFxuICAgIHZhciBfcHJvcCRnZXRGb3JtU3RhdGUkY28gPSBfZXh0ZW5kcyh7XFxuICAgICAgcHJvcDogJ3ZhbHVlcycsXFxuICAgICAgZ2V0Rm9ybVN0YXRlOiBmdW5jdGlvbiBnZXRGb3JtU3RhdGUoc3RhdGUpIHtcXG4gICAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgICB9XFxuICAgIH0sIGNvbmZpZyksXFxuICAgICAgICBmb3JtID0gX3Byb3AkZ2V0Rm9ybVN0YXRlJGNvLmZvcm0sXFxuICAgICAgICBwcm9wID0gX3Byb3AkZ2V0Rm9ybVN0YXRlJGNvLnByb3AsXFxuICAgICAgICBnZXRGb3JtU3RhdGUgPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwgcHJvcCwgZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcudmFsdWVzJykpO1xcbiAgICB9LCBmdW5jdGlvbiAoKSB7XFxuICAgICAgcmV0dXJuIHt9O1xcbiAgICB9IC8vIGlnbm9yZSBkaXNwYXRjaFxcbiAgICApO1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZVZhbHVlcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybU5hbWVzID0gZnVuY3Rpb24gY3JlYXRlR2V0Rm9ybU5hbWVzKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW4sXFxuICAgICAga2V5cyA9IF9yZWYua2V5cztcXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBrZXlzKGdldEZvcm1TdGF0ZShzdGF0ZSkpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUdldEZvcm1OYW1lcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1WYWx1ZXMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcudmFsdWVzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVZhbHVlcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybUluaXRpYWxWYWx1ZXMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5pbml0aWFsJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybUluaXRpYWxWYWx1ZXMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUdldEZvcm1TeW5jRXJyb3JzID0gZnVuY3Rpb24gY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3luY0Vycm9ycycpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUdldEZvcm1TeW5jRXJyb3JzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtQXN5bmNFcnJvcnMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtQXN5bmNFcnJvcnMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuYXN5bmNFcnJvcnMnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtQXN5bmNFcnJvcnMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUdldEZvcm1TeW5jV2FybmluZ3MgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtU3luY1dhcm5pbmdzKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLnN5bmNXYXJuaW5ncycpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUdldEZvcm1TeW5jV2FybmluZ3MpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUdldEZvcm1TdWJtaXRFcnJvcnMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtU3VibWl0RXJyb3JzKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLnN1Ym1pdEVycm9ycycpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUdldEZvcm1TdWJtaXRFcnJvcnMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNQcmlzdGluZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NSk7XFxuXFxuXFxudmFyIGNyZWF0ZUlzRGlydHkgPSBmdW5jdGlvbiBjcmVhdGVJc0RpcnR5KHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtLCBnZXRGb3JtU3RhdGUpIHtcXG4gICAgdmFyIGlzUHJpc3RpbmUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ByaXN0aW5lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpKGZvcm0sIGdldEZvcm1TdGF0ZSk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gIWlzUHJpc3RpbmUoc3RhdGUpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzRGlydHkpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNWYWxpZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nyk7XFxuXFxuXFxudmFyIGNyZWF0ZUlzSW52YWxpZCA9IGZ1bmN0aW9uIGNyZWF0ZUlzSW52YWxpZChzdHJ1Y3R1cmUpIHtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSwgZ2V0Rm9ybVN0YXRlKSB7XFxuICAgIHZhciBpc1ZhbGlkID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNWYWxpZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKShmb3JtLCBnZXRGb3JtU3RhdGUpO1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuICFpc1ZhbGlkKHN0YXRlKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVJc0ludmFsaWQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUlzU3VibWl0dGluZyA9IGZ1bmN0aW9uIGNyZWF0ZUlzU3VibWl0dGluZyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHZhciBmb3JtU3RhdGUgPSBnZXRGb3JtU3RhdGUoc3RhdGUpO1xcbiAgICAgIHJldHVybiBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnN1Ym1pdHRpbmcnKSB8fCBmYWxzZTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVJc1N1Ym1pdHRpbmcpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUhhc1N1Ym1pdFN1Y2NlZWRlZCA9IGZ1bmN0aW9uIGNyZWF0ZUhhc1N1Ym1pdFN1Y2NlZWRlZChfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHZhciBmb3JtU3RhdGUgPSBnZXRGb3JtU3RhdGUoc3RhdGUpO1xcbiAgICAgIHJldHVybiBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnN1Ym1pdFN1Y2NlZWRlZCcpIHx8IGZhbHNlO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUhhc1N1Ym1pdFN1Y2NlZWRlZCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjUwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSGFzU3VibWl0RmFpbGVkID0gZnVuY3Rpb24gY3JlYXRlSGFzU3VibWl0RmFpbGVkKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0RmFpbGVkJykgfHwgZmFsc2U7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzU3VibWl0RmFpbGVkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxudmFyIEZvcm0gPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgX2luaGVyaXRzKEZvcm0sIF9Db21wb25lbnQpO1xcblxcbiAgZnVuY3Rpb24gRm9ybShwcm9wcywgY29udGV4dCkge1xcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRm9ybSk7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGb3JtLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRm9ybSkpLmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgaWYgKCFjb250ZXh0Ll9yZWR1eEZvcm0pIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Zvcm0gbXVzdCBiZSBpbnNpZGUgYSBjb21wb25lbnQgZGVjb3JhdGVkIHdpdGggcmVkdXhGb3JtKCknKTtcXG4gICAgfVxcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICBfY3JlYXRlQ2xhc3MoRm9ybSwgW3tcXG4gICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcklubmVyT25TdWJtaXQodGhpcy5wcm9wcy5vblN1Ym1pdCk7XFxuICAgIH1cXG4gIH0sIHtcXG4gICAga2V5OiAncmVuZGVyJyxcXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdC5hLmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nLCB0aGlzLnByb3BzKTtcXG4gICAgfVxcbiAgfV0pO1xcblxcbiAgcmV0dXJuIEZvcm07XFxufShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbkZvcm0ucHJvcFR5cGVzID0ge1xcbiAgb25TdWJtaXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLmlzUmVxdWlyZWRcXG59O1xcbkZvcm0uY29udGV4dFR5cGVzID0ge1xcbiAgX3JlZHV4Rm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdFxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoRm9ybSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjUyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX191dGlsX3ByZWZpeE5hbWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxudmFyIEZvcm1TZWN0aW9uID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gIF9pbmhlcml0cyhGb3JtU2VjdGlvbiwgX0NvbXBvbmVudCk7XFxuXFxuICBmdW5jdGlvbiBGb3JtU2VjdGlvbihwcm9wcywgY29udGV4dCkge1xcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRm9ybVNlY3Rpb24pO1xcblxcbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRm9ybVNlY3Rpb24uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtU2VjdGlvbikpLmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgaWYgKCFjb250ZXh0Ll9yZWR1eEZvcm0pIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Zvcm1TZWN0aW9uIG11c3QgYmUgaW5zaWRlIGEgY29tcG9uZW50IGRlY29yYXRlZCB3aXRoIHJlZHV4Rm9ybSgpJyk7XFxuICAgIH1cXG4gICAgcmV0dXJuIF90aGlzO1xcbiAgfVxcblxcbiAgX2NyZWF0ZUNsYXNzKEZvcm1TZWN0aW9uLCBbe1xcbiAgICBrZXk6ICdnZXRDaGlsZENvbnRleHQnLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xcbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0LFxcbiAgICAgICAgICBuYW1lID0gdGhpcy5wcm9wcy5uYW1lO1xcblxcbiAgICAgIHJldHVybiB7XFxuICAgICAgICBfcmVkdXhGb3JtOiBfZXh0ZW5kcyh7fSwgY29udGV4dC5fcmVkdXhGb3JtLCB7XFxuICAgICAgICAgIHNlY3Rpb25QcmVmaXg6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSlcXG4gICAgICAgIH0pXFxuICAgICAgfTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6ICdyZW5kZXInLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICBjaGlsZHJlbiA9IF9wcm9wcy5jaGlsZHJlbixcXG4gICAgICAgICAgbmFtZSA9IF9wcm9wcy5uYW1lLFxcbiAgICAgICAgICBjb21wb25lbnQgPSBfcHJvcHMuY29tcG9uZW50LFxcbiAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wcywgWydjaGlsZHJlbicsICduYW1lJywgJ2NvbXBvbmVudCddKTtcXG5cXG4gICAgICBpZiAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdC5hLmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKGNvbXBvbmVudCwgX2V4dGVuZHMoe30sIHJlc3QsIHtcXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxcbiAgICAgIH0pKTtcXG4gICAgfVxcbiAgfV0pO1xcblxcbiAgcmV0dXJuIEZvcm1TZWN0aW9uO1xcbn0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG5Gb3JtU2VjdGlvbi5wcm9wVHlwZXMgPSB7XFxuICBuYW1lOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nLmlzUmVxdWlyZWQsXFxuICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUoW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nXSlcXG59O1xcblxcbkZvcm1TZWN0aW9uLmRlZmF1bHRQcm9wcyA9IHtcXG4gIGNvbXBvbmVudDogJ2RpdidcXG59O1xcblxcbkZvcm1TZWN0aW9uLmNoaWxkQ29udGV4dFR5cGVzID0ge1xcbiAgX3JlZHV4Rm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdC5pc1JlcXVpcmVkXFxufTtcXG5cXG5Gb3JtU2VjdGlvbi5jb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChGb3JtU2VjdGlvbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjUzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG5cXG52YXIgYW55ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmFueSxcXG4gICAgYm9vbCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICBmdW5jID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHNoYXBlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnNoYXBlLFxcbiAgICBzdHJpbmcgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nLFxcbiAgICBvbmVPZlR5cGUgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlLFxcbiAgICBvYmplY3QgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0O1xcblxcblxcbnZhciBwcm9wVHlwZXMgPSB7XFxuICAvLyBTdGF0ZTpcXG4gIGFueVRvdWNoZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiBhbnkgb2YgdGhlIGZpZWxkcyBoYXZlIGJlZW4gbWFya2VkIGFzIHRvdWNoZWRcXG4gIGFzeW5jVmFsaWRhdGluZzogb25lT2ZUeXBlKFtib29sLCBzdHJpbmddKS5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFzeW5jIHZhbGlkYXRpb24gaXMgcnVubmluZywgYSBzdHJpbmcgaWYgYSBmaWVsZCB0cmlnZ2VyZWQgYXN5bmMgdmFsaWRhdGlvblxcbiAgZGlydHk6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiBhbnkgdmFsdWVzIGFyZSBkaWZmZXJlbnQgZnJvbSBpbml0aWFsVmFsdWVzXFxuICBlcnJvcjogYW55LCAvLyBmb3JtLXdpZGUgZXJyb3IgZnJvbSAnX2Vycm9yJyBrZXkgaW4gdmFsaWRhdGlvbiByZXN1bHRcXG4gIGZvcm06IHN0cmluZy5pc1JlcXVpcmVkLCAvLyB0aGUgbmFtZSBvZiB0aGUgZm9ybVxcbiAgaW52YWxpZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZXJlIGFyZSBhbnkgdmFsaWRhdGlvbiBlcnJvcnNcXG4gIGluaXRpYWxpemVkOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlIGZvcm0gaGFzIGJlZW4gaW5pdGlhbGl6ZWRcXG4gIGluaXRpYWxWYWx1ZXM6IG9iamVjdCwgLy8gdGhlIGluaXRpYWxWYWx1ZXMgb2JqZWN0IHBhc3NlZCB0byByZWR1eEZvcm1cXG4gIHByaXN0aW5lOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlIHZhbHVlcyBhcmUgdGhlIHNhbWUgYXMgaW5pdGlhbFZhbHVlc1xcbiAgcHVyZTogYm9vbC5pc1JlcXVpcmVkLCAvLyBpZiB0cnVlLCBpbXBsZW1lbnRzIHNob3VsZENvbXBvbmVudFVwZGF0ZVxcbiAgc3VibWl0dGluZzogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZSBmb3JtIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN1Ym1pdHRlZFxcbiAgc3VibWl0RmFpbGVkOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlIGZvcm0gd2FzIHN1Ym1pdHRlZCBhbmQgZmFpbGVkIGZvciBhbnkgcmVhc29uXFxuICBzdWJtaXRTdWNjZWVkZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSB3YXMgc3VjY2Vzc2Z1bGx5IHN1Ym1pdHRlZFxcbiAgdmFsaWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGVyZSBhcmUgbm8gdmFsaWRhdGlvbiBlcnJvcnNcXG4gIHdhcm5pbmc6IGFueSwgLy8gZm9ybS13aWRlIHdhcm5pbmcgZnJvbSAnX3dhcm5pbmcnIGtleSBpbiB2YWxpZGF0aW9uIHJlc3VsdFxcbiAgLy8gQWN0aW9uczpcXG4gIGFycmF5OiBzaGFwZSh7XFxuICAgIGluc2VydDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBpbnNlcnQgYSB2YWx1ZSBpbnRvIGFuIGFycmF5IGZpZWxkXFxuICAgIG1vdmU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gbW92ZSBhIHZhbHVlIHdpdGhpbiBhbiBhcnJheSBmaWVsZFxcbiAgICBwb3A6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcG9wIGEgdmFsdWUgb2ZmIG9mIGFuIGFycmF5IGZpZWxkXFxuICAgIHB1c2g6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcHVzaCBhIHZhbHVlIG9udG8gYW4gYXJyYXkgZmllbGRcXG4gICAgcmVtb3ZlOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIHJlbW92ZSBhIHZhbHVlIGZyb20gYW4gYXJyYXkgZmllbGRcXG4gICAgcmVtb3ZlQWxsOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIHJlbW92ZSBhbGwgdGhlIHZhbHVlcyBmcm9tIGFuIGFycmF5IGZpZWxkXFxuICAgIHNoaWZ0OiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIHNoaWZ0IGEgdmFsdWUgb3V0IG9mIGFuIGFycmF5IGZpZWxkXFxuICAgIHNwbGljZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzcGxpY2UgYSB2YWx1ZSBpbnRvIGFuIGFycmF5IGZpZWxkXFxuICAgIHN3YXA6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gc3dhcCB2YWx1ZXMgaW4gYW4gYXJyYXkgZmllbGRcXG4gICAgdW5zaGlmdDogZnVuYy5pc1JlcXVpcmVkIC8vIGZ1bmN0aW9uIHRvIHVuc2hpZnQgYSB2YWx1ZSBpbnRvIGFuIGFycmF5IGZpZWxkXFxuICB9KSxcXG4gIGFzeW5jVmFsaWRhdGU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gdHJpZ2dlciBhc3luYyB2YWxpZGF0aW9uXFxuICBhdXRvZmlsbDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gc2V0IGEgdmFsdWUgb2YgYSBmaWVsZCBhbmQgbWFyayBpdCBhcyBhdXRvZmlsbGVkXFxuICBibHVyOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBtYXJrIGEgZmllbGQgYXMgYmx1cnJlZFxcbiAgY2hhbmdlOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIGEgZmllbGRcXG4gIGNsZWFyQXN5bmNFcnJvcjogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gY2xlYXIgdGhlIGFzeW5jIGVycm9yIG9mIGEgZmllbGRcXG4gIGRlc3Ryb3k6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGRlc3Ryb3kgdGhlIGZvcm0ncyBkYXRhIGluIFJlZHV4XFxuICBkaXNwYXRjaDogZnVuYy5pc1JlcXVpcmVkLCAvLyB0aGUgUmVkdXggZGlzcGF0Y2ggYWN0aW9uXFxuICBoYW5kbGVTdWJtaXQ6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gc3VibWl0IHRoZSBmb3JtXFxuICBpbml0aWFsaXplOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBpbml0aWFsaXplIGZvcm0gZGF0YVxcbiAgcmVzZXQ6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIHJlc2V0IHRoZSBmb3JtIGRhdGEgdG8gcHJldmlvdXNseSBpbml0aWFsaXplZCB2YWx1ZXNcXG4gIHRvdWNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBtYXJrIGZpZWxkcyBhcyB0b3VjaGVkXFxuICBzdWJtaXQ6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIHRyaWdnZXIgYSBzdWJtaXNzaW9uIG9mIHRoZSBzcGVjaWZpZWQgZm9ybVxcbiAgdW50b3VjaDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gbWFyayBmaWVsZHMgYXMgdW50b3VjaGVkXFxuXFxuICAvLyB0cmlnZ2VyU3VibWl0XFxuICB0cmlnZ2VyU3VibWl0OiBib29sLCAvLyBpZiB0cnVlLCBzdWJtaXRzIHRoZSBmb3JtIG9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNcXG4gIGNsZWFyU3VibWl0OiBmdW5jLmlzUmVxdWlyZWQgLy8gY2FsbGVkIGJlZm9yZSBhIHRyaWdnZXJlZCBzdWJtaXQsIGJ5IGRlZmF1bHQgY2xlYXJzIHRyaWdnZXJTdWJtaXRcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHByb3BUeXBlcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjU0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbm1vZHVsZS5leHBvcnRzID0gcGxhdGZvcm02O1xcblxcbi8qKiovIH0pLFxcbi8qIDI1NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XFxuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcXG4gICAgICAgICAgICB0W3BdID0gc1twXTtcXG4gICAgfVxcbiAgICByZXR1cm4gdDtcXG59O1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgdXVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oMjU2KTtcXG52YXIgcmVkdXhfZm9ybV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7XFxudmFyIGhlbHBfMSA9IF9fd2VicGFja19yZXF1aXJlX18oODgpO1xcbnZhciBjbGFzc05hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XFxudmFyIFRleHRJbnB1dCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhUZXh0SW5wdXQsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFRleHRJbnB1dChwcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5yZW5kZXJUZXh0ID0gZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMucHJvcHMsIGxhYmVsID0gX2EubGFiZWwsIGRpc2FibGVkID0gX2EuZGlzYWJsZWQsIGF1dG9mb2N1cyA9IF9hLmF1dG9mb2N1cywgaGVscCA9IF9hLmhlbHAsIGNvbnRhaW5lckNsYXNzID0gX2EuY29udGFpbmVyQ2xhc3MsIGlucHV0Q2xhc3MgPSBfYS5pbnB1dENsYXNzLCB0eXBlID0gX2EudHlwZSwgc3RlcCA9IF9hLnN0ZXAsIHJhbmRvbUdlbmVyYXRvciA9IF9hLnJhbmRvbUdlbmVyYXRvciwgcGxhY2Vob2xkZXIgPSBfYS5wbGFjZWhvbGRlciwgY29sbGFwc2VFcnJvclNwYWNlID0gX2EuY29sbGFwc2VFcnJvclNwYWNlO1xcbiAgICAgICAgICAgIHZhciBpbnB1dCA9IGZpZWxkLmlucHV0LCBtZXRhID0gZmllbGQubWV0YTtcXG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWdyb3VwJywgY29udGFpbmVyQ2xhc3MsIHtcXG4gICAgICAgICAgICAgICAgICAgICdpbnZhbGlkJzogbWV0YS50b3VjaGVkICYmICEhbWV0YS5lcnJvclxcbiAgICAgICAgICAgICAgICB9KSB9LFxcbiAgICAgICAgICAgICAgICBsYWJlbCA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImxhYmVsXFxcIiwgbnVsbCxcXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsLFxcbiAgICAgICAgICAgICAgICAgICAgaGVscCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KGhlbHBfMS5kZWZhdWx0LCB7IHRleHQ6IGhlbHAgfSkpIDogbnVsbCxcXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiaW5wdXRcXFwiLCBfX2Fzc2lnbih7fSwgaW5wdXQsIHsga2V5OiBpbnB1dC5uYW1lLCB0eXBlOiB0eXBlIHx8ICd0ZXh0Jywgc3RlcDogIXR5cGUgfHwgdHlwZSAhPT0gJ251bWJlcicgPyB1bmRlZmluZWQgOiBzdGVwLCBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsIGRpc2FibGVkOiBkaXNhYmxlZCwgYXV0b0ZvY3VzOiBhdXRvZm9jdXMsIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1jb250cm9sIGlucHV0LWJsb2NrJywgaW5wdXRDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdidG4tcHJlZml4JzogcmFuZG9tR2VuZXJhdG9yXFxuICAgICAgICAgICAgICAgICAgICB9KSB9KSksXFxuICAgICAgICAgICAgICAgIHJhbmRvbUdlbmVyYXRvciA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJidXR0b25cXFwiLCB7IHR5cGU6IFxcXCJidXR0b25cXFwiLCBjbGFzc05hbWU6IFxcXCJidG4gYnRuLWluZm8gaW5wdXQtc3VmZml4XFxcIiwgb25DbGljazogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIF90aGlzLmdlbmVyYXRlQ2xpZW50U2VjcmV0KGZpZWxkKTsgfSB9LFxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwic3BhblxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiZmFzIGZhLXJhbmRvbVxcXCIgfSkpKSA6IG51bGwsXFxuICAgICAgICAgICAgICAgIChtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yKSA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgbWV0YS5lcnJvcikgOiAoY29sbGFwc2VFcnJvclNwYWNlID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgXFxcIlxcXFx1MDBBMFxcXCIpKSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLmdlbmVyYXRlQ2xpZW50U2VjcmV0ID0gZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgICAgICAgZmllbGQuaW5wdXQub25DaGFuZ2UodXVpZC52MSgpLCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7fTtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBUZXh0SW5wdXQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgIHZhciBfYSA9IHRoaXMucHJvcHMsIG5hbWUgPSBfYS5uYW1lLCBsYWJlbCA9IF9hLmxhYmVsLCBmb3JtYXQgPSBfYS5mb3JtYXQsIG5vcm1hbGl6ZSA9IF9hLm5vcm1hbGl6ZSwgcGFyc2UgPSBfYS5wYXJzZSwgdmFsaWRhdGUgPSBfYS52YWxpZGF0ZSwgd2FybiA9IF9hLndhcm47XFxuICAgICAgICB2YXIgYmFzZUZpZWxkUHJvcHMgPSB7XFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcXG4gICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcXG4gICAgICAgICAgICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBwYXJzZTogcGFyc2UsXFxuICAgICAgICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlLFxcbiAgICAgICAgICAgIHdhcm46IHdhcm5cXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChyZWR1eF9mb3JtXzEuRmllbGQsIF9fYXNzaWduKHt9LCBiYXNlRmllbGRQcm9wcywgeyBjb21wb25lbnQ6IHRoaXMucmVuZGVyVGV4dCB9KSk7XFxuICAgIH07XFxuICAgIHJldHVybiBUZXh0SW5wdXQ7XFxufShSZWFjdC5Db21wb25lbnQpKTtcXG5leHBvcnRzLmRlZmF1bHQgPSBUZXh0SW5wdXQ7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjU2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbnZhciB2MSA9IF9fd2VicGFja19yZXF1aXJlX18oMjU3KTtcXG52YXIgdjQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1OCk7XFxuXFxudmFyIHV1aWQgPSB2NDtcXG51dWlkLnYxID0gdjE7XFxudXVpZC52NCA9IHY0O1xcblxcbm1vZHVsZS5leHBvcnRzID0gdXVpZDtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHJuZyA9IF9fd2VicGFja19yZXF1aXJlX18oODYpO1xcbnZhciBieXRlc1RvVXVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oODcpO1xcblxcbi8vICoqYHYxKClgIC0gR2VuZXJhdGUgdGltZS1iYXNlZCBVVUlEKipcXG4vL1xcbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9MaW9zSy9VVUlELmpzXFxuLy8gYW5kIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS91dWlkLmh0bWxcXG5cXG52YXIgX25vZGVJZDtcXG52YXIgX2Nsb2Nrc2VxO1xcblxcbi8vIFByZXZpb3VzIHV1aWQgY3JlYXRpb24gdGltZVxcbnZhciBfbGFzdE1TZWNzID0gMDtcXG52YXIgX2xhc3ROU2VjcyA9IDA7XFxuXFxuLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9icm9vZmEvbm9kZS11dWlkIGZvciBBUEkgZGV0YWlsc1xcbmZ1bmN0aW9uIHYxKG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcXG4gIHZhciBiID0gYnVmIHx8IFtdO1xcblxcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XFxuICB2YXIgbm9kZSA9IG9wdGlvbnMubm9kZSB8fCBfbm9kZUlkO1xcbiAgdmFyIGNsb2Nrc2VxID0gb3B0aW9ucy5jbG9ja3NlcSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5jbG9ja3NlcSA6IF9jbG9ja3NlcTtcXG5cXG4gIC8vIG5vZGUgYW5kIGNsb2Nrc2VxIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gcmFuZG9tIHZhbHVlcyBpZiB0aGV5J3JlIG5vdFxcbiAgLy8gc3BlY2lmaWVkLiAgV2UgZG8gdGhpcyBsYXppbHkgdG8gbWluaW1pemUgaXNzdWVzIHJlbGF0ZWQgdG8gaW5zdWZmaWNpZW50XFxuICAvLyBzeXN0ZW0gZW50cm9weS4gIFNlZSAjMTg5XFxuICBpZiAobm9kZSA9PSBudWxsIHx8IGNsb2Nrc2VxID09IG51bGwpIHtcXG4gICAgdmFyIHNlZWRCeXRlcyA9IHJuZygpO1xcbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XFxuICAgICAgLy8gUGVyIDQuNSwgY3JlYXRlIGFuZCA0OC1iaXQgbm9kZSBpZCwgKDQ3IHJhbmRvbSBiaXRzICsgbXVsdGljYXN0IGJpdCA9IDEpXFxuICAgICAgbm9kZSA9IF9ub2RlSWQgPSBbXFxuICAgICAgICBzZWVkQnl0ZXNbMF0gfCAweDAxLFxcbiAgICAgICAgc2VlZEJ5dGVzWzFdLCBzZWVkQnl0ZXNbMl0sIHNlZWRCeXRlc1szXSwgc2VlZEJ5dGVzWzRdLCBzZWVkQnl0ZXNbNV1cXG4gICAgICBdO1xcbiAgICB9XFxuICAgIGlmIChjbG9ja3NlcSA9PSBudWxsKSB7XFxuICAgICAgLy8gUGVyIDQuMi4yLCByYW5kb21pemUgKDE0IGJpdCkgY2xvY2tzZXFcXG4gICAgICBjbG9ja3NlcSA9IF9jbG9ja3NlcSA9IChzZWVkQnl0ZXNbNl0gPDwgOCB8IHNlZWRCeXRlc1s3XSkgJiAweDNmZmY7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC8vIFVVSUQgdGltZXN0YW1wcyBhcmUgMTAwIG5hbm8tc2Vjb25kIHVuaXRzIHNpbmNlIHRoZSBHcmVnb3JpYW4gZXBvY2gsXFxuICAvLyAoMTU4Mi0xMC0xNSAwMDowMCkuICBKU051bWJlcnMgYXJlbid0IHByZWNpc2UgZW5vdWdoIGZvciB0aGlzLCBzb1xcbiAgLy8gdGltZSBpcyBoYW5kbGVkIGludGVybmFsbHkgYXMgJ21zZWNzJyAoaW50ZWdlciBtaWxsaXNlY29uZHMpIGFuZCAnbnNlY3MnXFxuICAvLyAoMTAwLW5hbm9zZWNvbmRzIG9mZnNldCBmcm9tIG1zZWNzKSBzaW5jZSB1bml4IGVwb2NoLCAxOTcwLTAxLTAxIDAwOjAwLlxcbiAgdmFyIG1zZWNzID0gb3B0aW9ucy5tc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5tc2VjcyA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xcblxcbiAgLy8gUGVyIDQuMi4xLjIsIHVzZSBjb3VudCBvZiB1dWlkJ3MgZ2VuZXJhdGVkIGR1cmluZyB0aGUgY3VycmVudCBjbG9ja1xcbiAgLy8gY3ljbGUgdG8gc2ltdWxhdGUgaGlnaGVyIHJlc29sdXRpb24gY2xvY2tcXG4gIHZhciBuc2VjcyA9IG9wdGlvbnMubnNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNlY3MgOiBfbGFzdE5TZWNzICsgMTtcXG5cXG4gIC8vIFRpbWUgc2luY2UgbGFzdCB1dWlkIGNyZWF0aW9uIChpbiBtc2VjcylcXG4gIHZhciBkdCA9IChtc2VjcyAtIF9sYXN0TVNlY3MpICsgKG5zZWNzIC0gX2xhc3ROU2VjcykvMTAwMDA7XFxuXFxuICAvLyBQZXIgNC4yLjEuMiwgQnVtcCBjbG9ja3NlcSBvbiBjbG9jayByZWdyZXNzaW9uXFxuICBpZiAoZHQgPCAwICYmIG9wdGlvbnMuY2xvY2tzZXEgPT09IHVuZGVmaW5lZCkge1xcbiAgICBjbG9ja3NlcSA9IGNsb2Nrc2VxICsgMSAmIDB4M2ZmZjtcXG4gIH1cXG5cXG4gIC8vIFJlc2V0IG5zZWNzIGlmIGNsb2NrIHJlZ3Jlc3NlcyAobmV3IGNsb2Nrc2VxKSBvciB3ZSd2ZSBtb3ZlZCBvbnRvIGEgbmV3XFxuICAvLyB0aW1lIGludGVydmFsXFxuICBpZiAoKGR0IDwgMCB8fCBtc2VjcyA+IF9sYXN0TVNlY3MpICYmIG9wdGlvbnMubnNlY3MgPT09IHVuZGVmaW5lZCkge1xcbiAgICBuc2VjcyA9IDA7XFxuICB9XFxuXFxuICAvLyBQZXIgNC4yLjEuMiBUaHJvdyBlcnJvciBpZiB0b28gbWFueSB1dWlkcyBhcmUgcmVxdWVzdGVkXFxuICBpZiAobnNlY3MgPj0gMTAwMDApIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCd1dWlkLnYxKCk6IENhblxcXFwndCBjcmVhdGUgbW9yZSB0aGFuIDEwTSB1dWlkcy9zZWMnKTtcXG4gIH1cXG5cXG4gIF9sYXN0TVNlY3MgPSBtc2VjcztcXG4gIF9sYXN0TlNlY3MgPSBuc2VjcztcXG4gIF9jbG9ja3NlcSA9IGNsb2Nrc2VxO1xcblxcbiAgLy8gUGVyIDQuMS40IC0gQ29udmVydCBmcm9tIHVuaXggZXBvY2ggdG8gR3JlZ29yaWFuIGVwb2NoXFxuICBtc2VjcyArPSAxMjIxOTI5MjgwMDAwMDtcXG5cXG4gIC8vIGB0aW1lX2xvd2BcXG4gIHZhciB0bCA9ICgobXNlY3MgJiAweGZmZmZmZmYpICogMTAwMDAgKyBuc2VjcykgJSAweDEwMDAwMDAwMDtcXG4gIGJbaSsrXSA9IHRsID4+PiAyNCAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCA+Pj4gMTYgJiAweGZmO1xcbiAgYltpKytdID0gdGwgPj4+IDggJiAweGZmO1xcbiAgYltpKytdID0gdGwgJiAweGZmO1xcblxcbiAgLy8gYHRpbWVfbWlkYFxcbiAgdmFyIHRtaCA9IChtc2VjcyAvIDB4MTAwMDAwMDAwICogMTAwMDApICYgMHhmZmZmZmZmO1xcbiAgYltpKytdID0gdG1oID4+PiA4ICYgMHhmZjtcXG4gIGJbaSsrXSA9IHRtaCAmIDB4ZmY7XFxuXFxuICAvLyBgdGltZV9oaWdoX2FuZF92ZXJzaW9uYFxcbiAgYltpKytdID0gdG1oID4+PiAyNCAmIDB4ZiB8IDB4MTA7IC8vIGluY2x1ZGUgdmVyc2lvblxcbiAgYltpKytdID0gdG1oID4+PiAxNiAmIDB4ZmY7XFxuXFxuICAvLyBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGAgKFBlciA0LjIuMiAtIGluY2x1ZGUgdmFyaWFudClcXG4gIGJbaSsrXSA9IGNsb2Nrc2VxID4+PiA4IHwgMHg4MDtcXG5cXG4gIC8vIGBjbG9ja19zZXFfbG93YFxcbiAgYltpKytdID0gY2xvY2tzZXEgJiAweGZmO1xcblxcbiAgLy8gYG5vZGVgXFxuICBmb3IgKHZhciBuID0gMDsgbiA8IDY7ICsrbikge1xcbiAgICBiW2kgKyBuXSA9IG5vZGVbbl07XFxuICB9XFxuXFxuICByZXR1cm4gYnVmID8gYnVmIDogYnl0ZXNUb1V1aWQoYik7XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gdjE7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjU4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbnZhciBybmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg2KTtcXG52YXIgYnl0ZXNUb1V1aWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg3KTtcXG5cXG5mdW5jdGlvbiB2NChvcHRpb25zLCBidWYsIG9mZnNldCkge1xcbiAgdmFyIGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XFxuXFxuICBpZiAodHlwZW9mKG9wdGlvbnMpID09ICdzdHJpbmcnKSB7XFxuICAgIGJ1ZiA9IG9wdGlvbnMgPT09ICdiaW5hcnknID8gbmV3IEFycmF5KDE2KSA6IG51bGw7XFxuICAgIG9wdGlvbnMgPSBudWxsO1xcbiAgfVxcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XFxuXFxuICB2YXIgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7XFxuXFxuICAvLyBQZXIgNC40LCBzZXQgYml0cyBmb3IgdmVyc2lvbiBhbmQgYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgXFxuICBybmRzWzZdID0gKHJuZHNbNl0gJiAweDBmKSB8IDB4NDA7XFxuICBybmRzWzhdID0gKHJuZHNbOF0gJiAweDNmKSB8IDB4ODA7XFxuXFxuICAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcXG4gIGlmIChidWYpIHtcXG4gICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IDE2OyArK2lpKSB7XFxuICAgICAgYnVmW2kgKyBpaV0gPSBybmRzW2lpXTtcXG4gICAgfVxcbiAgfVxcblxcbiAgcmV0dXJuIGJ1ZiB8fCBieXRlc1RvVXVpZChybmRzKTtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB2NDtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XFxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcXG4gICAgfTtcXG59KSgpO1xcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcXG4gICAgICAgIHMgPSBhcmd1bWVudHNbaV07XFxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXFxuICAgICAgICAgICAgdFtwXSA9IHNbcF07XFxuICAgIH1cXG4gICAgcmV0dXJuIHQ7XFxufTtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbnZhciBSZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxudmFyIHJlZHV4X2Zvcm1fMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYpO1xcbnZhciBjbGFzc05hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XFxudmFyIGhlbHBfMSA9IF9fd2VicGFja19yZXF1aXJlX18oODgpO1xcbnZhciBTZWxlY3RJbnB1dCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhTZWxlY3RJbnB1dCwgX3N1cGVyKTtcXG4gICAgZnVuY3Rpb24gU2VsZWN0SW5wdXQocHJvcHMpIHtcXG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xcbiAgICAgICAgX3RoaXMucmVuZGVyU2VsZWN0ID0gZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMucHJvcHMsIGxhYmVsID0gX2EubGFiZWwsIG9wdGlvbnMgPSBfYS5vcHRpb25zLCBkaXNhYmxlZCA9IF9hLmRpc2FibGVkLCBoZWxwID0gX2EuaGVscCwgY29udGFpbmVyQ2xhc3MgPSBfYS5jb250YWluZXJDbGFzcywgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3MsIGhpZGVFbXB0eU9wdGlvbiA9IF9hLmhpZGVFbXB0eU9wdGlvbiwgY29sbGFwc2VFcnJvclNwYWNlID0gX2EuY29sbGFwc2VFcnJvclNwYWNlO1xcbiAgICAgICAgICAgIHZhciBpbnB1dCA9IGZpZWxkLmlucHV0LCBtZXRhID0gZmllbGQubWV0YTtcXG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWdyb3VwJywgY29udGFpbmVyQ2xhc3MsIHtcXG4gICAgICAgICAgICAgICAgICAgICdpbnZhbGlkJzogbWV0YS50b3VjaGVkICYmICEhbWV0YS5lcnJvclxcbiAgICAgICAgICAgICAgICB9KSB9LFxcbiAgICAgICAgICAgICAgICBsYWJlbCA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImxhYmVsXFxcIiwgbnVsbCxcXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsLFxcbiAgICAgICAgICAgICAgICAgICAgaGVscCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KGhlbHBfMS5kZWZhdWx0LCB7IHRleHQ6IGhlbHAgfSkpIDogbnVsbCxcXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwic2VsZWN0XFxcIiwgX19hc3NpZ24oe30sIGlucHV0LCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1jb250cm9sJywgaW5wdXRDbGFzcyksIGRpc2FibGVkOiBkaXNhYmxlZCB9KSxcXG4gICAgICAgICAgICAgICAgICAgIGhpZGVFbXB0eU9wdGlvbiA/IG51bGwgOiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJvcHRpb25cXFwiLCB7IHZhbHVlOiBcXFwiXFxcIiB9KSxcXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubWFwKGZ1bmN0aW9uIChvcHQsIGlkeCkgeyByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwib3B0aW9uXFxcIiwgeyBrZXk6IGlkeCwgdmFsdWU6IG9wdC52YWx1ZSwgZGlzYWJsZWQ6IG9wdC5kaXNhYmxlZCB9LCBvcHQubGFiZWwgfHwgb3B0LnZhbHVlKTsgfSkpLFxcbiAgICAgICAgICAgICAgICAobWV0YS50b3VjaGVkICYmICEhbWV0YS5lcnJvcikgPyBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJwXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJ2YWxpZGF0aW9uLWVycm9yLW1lc3NhZ2VcXFwiIH0sIG1ldGEuZXJyb3IpIDogKGNvbGxhcHNlRXJyb3JTcGFjZSA/IG51bGwgOiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJwXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJ2YWxpZGF0aW9uLWVycm9yLW1lc3NhZ2VcXFwiIH0sIFxcXCJcXFxcdTAwQTBcXFwiKSkpKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5zdGF0ZSA9IHt9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFNlbGVjdElucHV0LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX2EgPSB0aGlzLnByb3BzLCBvcHRpb25zID0gX2Eub3B0aW9ucywgbmFtZSA9IF9hLm5hbWUsIGZvcm1hdCA9IF9hLmZvcm1hdCwgbm9ybWFsaXplID0gX2Eubm9ybWFsaXplLCBwYXJzZSA9IF9hLnBhcnNlLCB2YWxpZGF0ZSA9IF9hLnZhbGlkYXRlLCB3YXJuID0gX2Eud2FybiwgY29udGFpbmVyQ2xhc3MgPSBfYS5jb250YWluZXJDbGFzcywgaGVscCA9IF9hLmhlbHAsIGxhYmVsID0gX2EubGFiZWwsIGlucHV0Q2xhc3MgPSBfYS5pbnB1dENsYXNzO1xcbiAgICAgICAgdmFyIGJhc2VGaWVsZFByb3BzID0ge1xcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXFxuICAgICAgICAgICAgZm9ybWF0OiBmb3JtYXQsXFxuICAgICAgICAgICAgbm9ybWFsaXplOiBub3JtYWxpemUsXFxuICAgICAgICAgICAgcGFyc2U6IHBhcnNlLFxcbiAgICAgICAgICAgIHZhbGlkYXRlOiB2YWxpZGF0ZSxcXG4gICAgICAgICAgICB3YXJuOiB3YXJuXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGggPyAoUmVhY3QuY3JlYXRlRWxlbWVudChyZWR1eF9mb3JtXzEuRmllbGQsIF9fYXNzaWduKHt9LCBiYXNlRmllbGRQcm9wcywgeyBjb21wb25lbnQ6IHRoaXMucmVuZGVyU2VsZWN0IH0pKSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcykgfSxcXG4gICAgICAgICAgICBsYWJlbCA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImxhYmVsXFxcIiwgbnVsbCxcXG4gICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgIGhlbHAgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChoZWxwXzEuZGVmYXVsdCwgeyB0ZXh0OiBoZWxwIH0pKSA6IG51bGwsXFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwic2VsZWN0XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tY29udHJvbCcsIGlucHV0Q2xhc3MpLCBkaXNhYmxlZDogdHJ1ZSB9KSkpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gU2VsZWN0SW5wdXQ7XFxufShSZWFjdC5Db21wb25lbnQpKTtcXG5leHBvcnRzLmRlZmF1bHQgPSBTZWxlY3RJbnB1dDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XFxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcXG4gICAgfTtcXG59KSgpO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgY2xhc3NOYW1lcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMpO1xcbnZhciBzcGlubmVyXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2MSk7XFxudmFyIFRvZ2dsZVBhbmVsID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFRvZ2dsZVBhbmVsLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBUb2dnbGVQYW5lbChwcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy50b2dnbGVQYW5lbENvbnRlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMudG9nZ2xhYmxlICE9PSBmYWxzZSkge1xcbiAgICAgICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XFxuICAgICAgICAgICAgICAgICAgICBvcGVuZWQ6ICFfdGhpcy5zdGF0ZS5vcGVuZWRcXG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLnByb3BzLnRvZ2dsZUNhbGxiYWNrKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucHJvcHMudG9nZ2xlQ2FsbGJhY2soX3RoaXMuc3RhdGUub3BlbmVkKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0ge1xcbiAgICAgICAgICAgIG9wZW5lZDogX3RoaXMucHJvcHMuZGVmYXVsdE9wZW5lZFxcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBUb2dnbGVQYW5lbC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIHRpdGxlU3Bpbm5lciA9IHRoaXMucHJvcHMuc2hvd1NwaW5uZXIgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJzcGlubmVyLWNvbnRhaW5lclxcXCIgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KHNwaW5uZXJfMS5kZWZhdWx0LCBudWxsKSkpIDogbnVsbDtcXG4gICAgICAgIHZhciBsQ3VzdG9tQ29udHJvbHMgPSB0aGlzLnByb3BzLmxlZnRDdXN0b21Db250cm9scyA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInBhbmVsLWhlYWRpbmctY29udHJvbHNcXFwiIH0sIHRoaXMucHJvcHMubGVmdEN1c3RvbUNvbnRyb2xzKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIHJDdXN0b21Db250cm9scyA9IHRoaXMucHJvcHMucmlnaHRDdXN0b21Db250cm9scyA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInBhbmVsLWhlYWRpbmctY29udHJvbHNcXFwiLCBzdHlsZTogeyByaWdodDogMCB9IH0sIHRoaXMucHJvcHMucmlnaHRDdXN0b21Db250cm9scykpIDogbnVsbDtcXG4gICAgICAgIHZhciBjYW5jZWxCdG4gPSAodGhpcy5wcm9wcy5jYW5jZWxCdG4gJiYgdGhpcy5wcm9wcy5jYW5jZWxCdG4ubGFiZWwgJiYgdGhpcy5wcm9wcy5jYW5jZWxCdG4uYWN0aW9uKSA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJidXR0b25cXFwiLCB7IHR5cGU6IFxcXCJidXR0b25cXFwiLCBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2J0bicsIHRoaXMucHJvcHMuY2FuY2VsQnRuLmNzc0NsYXNzLCB7XFxuICAgICAgICAgICAgICAgICdidG4tZm9udCBidG4tdHJhbnMnOiAhdGhpcy5wcm9wcy5jYW5jZWxCdG4uY3NzQ2xhc3NcXG4gICAgICAgICAgICB9KSwgb25DbGljazogdGhpcy5wcm9wcy5jYW5jZWxCdG4uYWN0aW9uIH0sIHRoaXMucHJvcHMuY2FuY2VsQnRuLmxhYmVsKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIHN1Ym1pdEJ0biA9ICh0aGlzLnByb3BzLnN1Ym1pdEJ0biAmJiB0aGlzLnByb3BzLnN1Ym1pdEJ0bi5sYWJlbCAmJiB0aGlzLnByb3BzLnN1Ym1pdEJ0bi5hY3Rpb24pID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnYnRuIHB1bGwtcmlnaHQnLCB0aGlzLnByb3BzLnN1Ym1pdEJ0bi5jc3NDbGFzcywge1xcbiAgICAgICAgICAgICAgICAnYnRuLXN1Y2Nlc3MnOiAhdGhpcy5wcm9wcy5zdWJtaXRCdG4uY3NzQ2xhc3NcXG4gICAgICAgICAgICB9KSwgb25DbGljazogdGhpcy5wcm9wcy5zdWJtaXRCdG4uYWN0aW9uIH0sIHRoaXMucHJvcHMuc3VibWl0QnRuLmxhYmVsKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIHBhbmVsRm9vdGVyID0gKGNhbmNlbEJ0biB8fCBzdWJtaXRCdG4pID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtZm9vdGVyXFxcIiB9LFxcbiAgICAgICAgICAgIGNhbmNlbEJ0bixcXG4gICAgICAgICAgICBzdWJtaXRCdG4pKSA6IG51bGw7XFxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwgcGFuZWwtZGVmYXVsdFxcXCIsIHN0eWxlOiB0aGlzLnByb3BzLmN1c3RvbVN0eWxlIH0sXFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoXFxcInBhbmVsLWhlYWRpbmcgXFxcIiArIHRoaXMucHJvcHMuaGVhZGVyQ3VzdG9tQ1NTLCB7XFxuICAgICAgICAgICAgICAgICAgICAnY2xpY2stcG9pbnRlcic6IHRoaXMucHJvcHMudG9nZ2xhYmxlICE9PSBmYWxzZSxcXG4gICAgICAgICAgICAgICAgICAgICdoaWRkZW4nOiAhIXRoaXMucHJvcHMuaGlkZVRpdGxlXFxuICAgICAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnRvZ2dsZVBhbmVsQ29udGVudCB9LFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJoM1xcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdwYW5lbC10aXRsZScsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAnaGFzLXNwaW5uZXInOiB0aGlzLnByb3BzLnNob3dTcGlubmVyXFxuICAgICAgICAgICAgICAgICAgICB9KSB9LCB0aGlzLnByb3BzLnBhbmVsVGl0bGUpLFxcbiAgICAgICAgICAgICAgICB0aXRsZVNwaW5uZXIsXFxuICAgICAgICAgICAgICAgIGxDdXN0b21Db250cm9scyxcXG4gICAgICAgICAgICAgICAgckN1c3RvbUNvbnRyb2xzLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnYWN0aW9ucycsIHsgJ2hpZGRlbic6IHRoaXMucHJvcHMudG9nZ2xhYmxlID09PSBmYWxzZSB9KSB9LFxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwic3BhblxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmYXMnLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYS1jaGV2cm9uLWRvd24nOiAhdGhpcy5zdGF0ZS5vcGVuZWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYS1jaGV2cm9uLXVwJzogdGhpcy5zdGF0ZS5vcGVuZWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSB9KSkpLFxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdwYW5lbC1ib2R5Jywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2hpZGRlbic6ICF0aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICB9KSB9LCB0aGlzLnByb3BzLmNoaWxkcmVuKSxcXG4gICAgICAgICAgICBwYW5lbEZvb3RlcikpO1xcbiAgICB9O1xcbiAgICBUb2dnbGVQYW5lbC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9IGZ1bmN0aW9uIChuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmRlZmF1bHRPcGVuZWQgIT09IG5leHRQcm9wcy5kZWZhdWx0T3BlbmVkKSB7XFxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XFxuICAgICAgICAgICAgICAgIG9wZW5lZDogbmV4dFByb3BzLmRlZmF1bHRPcGVuZWRcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfTtcXG4gICAgcmV0dXJuIFRvZ2dsZVBhbmVsO1xcbn0oUmVhY3QuQ29tcG9uZW50KSk7XFxuZXhwb3J0cy5kZWZhdWx0ID0gVG9nZ2xlUGFuZWw7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjYxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbnZhciBSZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxudmFyIHNwaW5uZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYyKTtcXG52YXIgU3Bpbm5lciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhTcGlubmVyLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBTcGlubmVyKHByb3BzKSB7XFxuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XFxuICAgIH1cXG4gICAgU3Bpbm5lci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgdG9wID0gX2EudG9wLCBib3R0b20gPSBfYS5ib3R0b20sIHJpZ2h0ID0gX2EucmlnaHQsIGxlZnQgPSBfYS5sZWZ0LCBzaXplID0gX2Euc2l6ZTtcXG4gICAgICAgIHZhciBzcGlubmVyU3R5bGUgPSB7XFxuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXFxuICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcXG4gICAgICAgICAgICBtYXJnaW46ICdhdXRvJyxcXG4gICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxcbiAgICAgICAgICAgIHRvcDogdG9wLFxcbiAgICAgICAgICAgIGJvdHRvbTogYm90dG9tLFxcbiAgICAgICAgICAgIHJpZ2h0OiByaWdodCxcXG4gICAgICAgICAgICBsZWZ0OiBsZWZ0XFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogJ3NwaW5uZXInLCBzdHlsZTogc3Bpbm5lclN0eWxlIH0sXFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiaW1nXFxcIiwgeyBzcmM6IHNwaW5uZXJfMS5zcGlubmVyLCBhbHQ6ICdMb2FkaW5nLi4uJywgd2lkdGg6IHRoaXMucHJvcHMuc2l6ZSB8fCAzMiwgaGVpZ2h0OiB0aGlzLnByb3BzLnNpemUgfHwgMzIgfSkpKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIFNwaW5uZXI7XFxufShSZWFjdC5Db21wb25lbnQpKTtcXG5leHBvcnRzLmRlZmF1bHQgPSBTcGlubmVyO1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI2MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5leHBvcnRzLnNwaW5uZXIgPSAnZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoUUFCQUFQSUFBUHlsYmYybWJ2MjZqLzNPci83aTBQN3Q0djI3a0FBQUFDSC9DMDVGVkZORFFWQkZNaTR3QXdFQUFBQWgvaG9pUTNKbFlYUmxaQ0IzYVhSb0lFTm9hVzF3YkhrdVkyOXRJZ0FoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTa21xdmZpcXdidi9uaUtNWkdtV1M2Wm1HK2grNGltYjZXb1Q3YXZIYzEvZnFwek94ZXZKZmtDTWNBZ0RHSDJLWkJEQWZCV2ZxS2hVU2EyQ3J0Z1Jjb3ZyZWtQT01FMUxyaXpQNFBCNCsvYkdzWE5wdlhwLzVwTjdUSDFHZjBDQlE0TlFBRzBXaHp0cGFpU0ZONDVXa0pFQ2t6YVZSSmVSbWl1Y1g1NXFvRk5uVFppU2JHMmlxYXFaRTdLenRMVzJ0N2kwQmJ1OHZiNjl1UXdCdzhURnhzVUx2OHEvd1F2SHo4Zkp5OU1GelFyUTJNUFMxTXJXQU5uWTI5eSszdURRNHVPODVlYlJDdW5NMXV6dEFPL2s4ZkxJN3ZYcTkvamErdnVxOWZPSDd0MDZmd0VLcGp0SUVPQStodmdVam9Nb1R5STNpdXdzVXNOb1RucmpOSTdnUEM0RG1VMWt0NEVSdmFsY3liSmxnNEM3SE5hVGFaRG1Rbm93YlU3VWVSRm5RSjRiZ1g3MCtaRG9US0VqamRhRUtWRHBUYVpJVHpyZENYVnFUNnRCcTFiRk9sUnJ6cWp3dlA0RWEwOXNVYTVKelI1RmUxSnRUYlpodjI1MSsvUXIzTEp5N2RLbHFqZnYyTGwraTI1MVNiaXc0UWdKQUFBaCtRUUpDZ0FBQUN3QUFBQUFRQUJBQUFBRC93aTYzUDR3U2xtcXZmZ3F3cnYvbmpLTVpHbVdTNlptRytoKzRpbWI2V29YN2F2SGMxL2ZxcHpPeGV2SmZrQ01jQWdER0gyS1pCREFmQldmcUtoVVNhMkNydGdSY292cmVrUE9NRTFMcml6UDRQQjQrL2JHc1hOcHZYcC81cE43VEgxR2YwQ0JRNE5RQUcwV2h6dHBhaVNGTjQ1V2tKRURremFWUkplUm1pdWNYNTVxb0ZOblRaaVNiRzJpcWFxWkU3S3p0TFcydDdpMGpHNjVDd0svd01IQ3dhWXN2UXJEeWNQRlhNZkt6Ny9NR3NjQTBNL1NqZFRXeXRpOHp0dkxyR1RVMWVEQzNXWGY1c0RvNU92RTRuVGE3OUh4ZXZQMDdmanYrdXI4OW9EMnJldlhpMTY5UmJ2Y0dTU1l5NkFBaHJnY1Fyd2xrWnpGaXhnek50aFZobkdqZ2dBZ1E0b2NLVktmUndBa1U1STBtUkNseXBjQldETDZDRk9sekZZdWE2NEVhQWpoekp3NlMvS2s1Qk5uMEoxRnh5V1ZkM1RrVGFWTmhTNjlkekpxeUtkTXJjWWN1bWxxUUsxYnZmYXNxaFhyUGJCbXY1YmxHa29zVWJSc3A1QzFtclluWExkZDUwYlZ5TGV2WDFrSkFBQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NsbXF2ZmlxekxNaVlDaU80dEtkMVlaMkgrbU81c3FwTXRhK2VGeHJ3RzREdUtET1Y2QVJiMEhTMEdka0FwT3U1YTQ1ZlVKaDFGcFdocnlDcE5vZU1XWDFmcmNyTktyckJYUEZZL2JWbllZZnkyYjYydTQwbDlRbmdDeDRiWUl6ZkZWK0lYcUJpR0dLWjQ1dlkyU1FCSXlEbEVXRWM0WWVrbldXRTZPa3BhYW5xS21tbXFvTUE2K3dzYkt4bUlldEFMTzVzN1dmdDdxL3I3dy92c0M2d2p6RXhidWV3NjNLdWNjV3R3clB5NkI3eWRYQnpNak8yckRSWk5uYTRadmoxZVhUdU4vYjE0M256K25UN08yczgvVHk4TXI1M3V6OHF2UUcvRXNWVUozQmd3Z1RPckFYb0tIRGh4QWZLakJBc2FMRml4YmxSZHdZY1hNaXhvOFhOWEljR2NBanlKTWlTVzQwZWZKalNwVVFXYllNeVUwYUFKZ3JBY3dFK1JKblE1azdLZmIwQ1RUb1VKeEZkeDZGbVhUbVVwVk5XejRsR1JWbFRUSStZK29NU3RQZG9Ld1N0M0t0T0hWa1ZaNVhONEYxZU5abFdnVnJmNG9kYTZBc3g3WVk3ZWFrUzFhaDM3K0FKeVFBQUNINUJBa0tBQUFBTEFBQUFBQkFBRUFBQUFQL0NMcmMvakJLV2FxOStLck04KzVnc1lUZ1IzckF5WTBxWnJiVkM3TnduTlkyYnQrNDNQb3FXZzE0SXBLRU05NVFtV1QrbkVGbzBSaWlscVJIYTBlN3dsYTVLSjNJZXlWdnpWMHg4cWxHbzl3dXVFWnVXVWZiYlhwT0I0N3J4M2g4ZlhPQlBZTjFmNGM3RTR5TmpvK1FrWktNZVpNQUJKaVptcHVhZGxPV2w1eWltNTVab0tPb21LVmZwNm1qcTJXV3JxK0tZNjJ6cExXZ0NyaWNzR2UzdmFxNnU4S2R4TUhDdjEzSnZjdHZzc2JEaWNYU0JNOSswZExZYzgyNDNJamVzK0NMazliWHlOckc1TGJxeXJ2dzhmTHpFZ0gyOS9qNStBb0MvZjcvQVA4cEdFQ3dvTUdEQmhmb1c2aVBYOENIQUFjaW5IaFFJY09MQVJ4QzNDaVJpcUpIaXhnWGF0ejRzS1BIaVNCRDVodEpNaUtBa3g4VnFCUUpvQ1ZFa3pBVHlweTVzcWJOZ0RoekVrekpNNlBQbndKZkNxMjRzNmc5bGtpRENpWEtFK3BQcVRtcHpyUnFFeXRNclNxNXR2UjZFbXhJc1NUSnhnVGc5QjVhamtxWEZqU0w4ZTNOdUhJSDBMMW90eVJldVhzWjlnWDZkMmxnbWtoZDVwM2IxT2xneFl2MTBwdE11ZktqQkFBaCtRUUpDZ0FBQUN3QUFBQUFRQUJBQUFBRC93aTYzUDR3U2xtcXZmaXF6UFB1WUxHRTRFZDZ3TW1OS21hMjFRdXpjSnpXTm03ZnVOejZLbG9OZUNLU2hEUGVVSmxrL3B4QmFORVlvcGFrUjJ0SHU4Sld1U2lkeUhzbGI4MWRNZktwUnFQY0xyaEdibGxIMjIxNlRnZU82OGQ0ZkgxemdUMkRkWCtIT3hPTWpZNlBrSkdTakFHVmxwZVlsNU1NZVptZW1adDJVd0NmcFpXaGltT2twcCtvaVFxc3JhaWRzYUN6Z3F1MW1yZUd1YnFudkV1K3Y2NjB2OENoeHNmRnVNZVd6TDNPeUp2S3hNRk4wZ0hRd3RuYjJOTGVUOE82NFZIanRlV2pydXZzN2U0TEF2SHk4L1R6Q2dQNCtmcjcrZ29FL3dBRENnd0lyNTVCZXZmNEtkem5iNkJEZ1FVUFNreTRzR0xEaHhnalNqUklzWWFpd29zWUhXcmNpQkNBUjRzQVFtWlVRUEpneDVQOVVxb1V5YkpsdlpjdzhZR2NDWENrVFFFNGMrN2tTY0NuemFBd2gvSTAyaExwU2FVem1aSjA2aEdxU3FrYnFhSWtDckhtVDNsYUYxb05pWFdpeVp3TVpYTDlWOWJsV2JUNXhxNEU4TlhlVzdnRDVENXN5L0V1WEwwMDZkYU5GL2FqMnJWOGIvcEZDM2pndThlUUl6TktBQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTaG1xdmZpcXdydi8zZ2FPMzVLZG1VaXU2anFhYUJ5MGJnblVKQ3lmTk03MVB0ME9BOFFWYThLaDVlaGlzaFRLMU0xbm85b0FVZUxVK3R0eWsxRm56bXNGSzhVdk10VThSSVBjMTZ4R0hhUWJvZklLUEdSSDR2TjdIWUZkV0hremZVMklUNFdBaW1OY2duOXlnd1dVYkR1V2ptbU1rNXB2bmxjVG9xT2twYWFucUtJQ3E2eXRycTJwREpDRXI3V3ZzUXV6bFFxMnZhdTRtUUMrdmNDZ2ZNTER0Y1c2QzhuS3dNeTh6cTdMczgzVHNORFcwdGkvMnBEWDNRTFY0TnpkNUYvbTJPaGw2dFBzYSs3TzhIWEk0dlIzOXVmZjZmcnIvTzM4dlFNWVQrQThndldLS1Z6SXNPR0NBUkFqU3B3b1VRR0JpeGd6YXN3WWpIdWlSNG9XTjRyVTJQR2p5UUVoUjZvc2VkSmpTcFVpV2JhYytCSW1TV09SQU14MENjRG1TSms3SWRiMGVSRm8wS0ZFamU1RTZsUHBUS1kybmJhRUNsUHFTYW9yY1JJS1NyTW4wWnZSZEhLTmlQV24xbDFpeDZMMCtoV2pWWk5sWTU1OXFIWnRXNDV6RmRTMWU3ZG8zclJqNDI0TTVyQ3c0Y01SRWdBQUlma0VDUW9BQUFBc0FBQUFBRUFBUUFBQUEvOEl1dHorTUVvcHFyMzRxc0M3LzU1U2pHUnBsa3VtWmh2b2Z1SXBtK2xxQysycngzTmYzNnFjenNYcnlYNUFqSEFJQXhoOWltUVF3SHdWbjZpb1ZFbXRncTdZRVhLTDYzcER6akJOUzY0c3orRHdlUHYyeHJGemFiMTZmK2FUZTB4OVJuOUFnVU9EVUFCdEZvYzdhV29raFRlT1ZwQ1JCWk0ybFVTWGtab3JuRitlYXFCVFowMllrbXh0b3FtcW1ST3lzN1MxdHJlNHRBTzd2TDIrdmJrTXNMRUF2OGEvd1F2REM4Zk51OG1KTTh6T3g5Q2tjZ3JVMWRETDJkckkzTERUMzhEaHF1UGt6K2FZNk9uVzNjWHB2Ty9pM3ZJRDlPZjI4dm5zKys3clB2MGoxMDlndkhzRlN3MzhsaERiUVg0QkZUNEVtQXplUFhVVjYxbmJ5TEYzbzBjR0JFS0tIRWx5WkxRajEvQW9LTW15NU1rVEw5Y0FhRWt6Wk13czhHclN2TGtxcDA2V1BNV2s5TFB5cDh1aGhKQXFNbnEwbTArbUlvUEdlZ3FWZ05TclJhdGFWU3FOSzhxWldyYzYxUmhXYkQycVVMR2laYXFXYk5pMitzQnFoZXRQYmxXNkJzdmlsYWpYSzB5L01qOEtIa3c0UWdJQUlma0VDUW9BQUFBc0FBQUFBRUFBUUFBQUEvOEl1dHorTUVvNXFyMzRLc0c3LzU0U2pHUnBsa3VtWmh2b2Z1SXBtK2xxRCsycngzTmYzNnFjenNYcnlYNUFqSEFJQXhoOWltUVF3SHdWbjZpb1ZFbXRncTdZRVhLTDYzcER6akJOUzY0c3orRHdlUHYyeHJGemFiMTZmK2FUZTB4OVJuOUFnVU9EVUFCdEZvYzdhV29raFRlT1ZwQ1JBWk0ybFVTWGtab3JuRitlYXFCVFowMllrbXh0b3FtcW1ST3lzN1MxdHJlNHRBUzd2TDIrdmJrTUJjUEV4Y2JGQzcvS3Y4RUx4OC9IeWN2VEJNMEswTmpEMHRUSzFnRFoyTnZjdnQ3ZzBPTGp2T1htMFFycHpOYnM3UUR2NVBIeXlPNzE2dmY0MnZyN3F2WHpoKzdkT244RkNxWTdTQkRnUG9iNEZJNkRLRThpTjRyc0xGTERhRTUzNHpTTzREd3VBNWxOWkxlQkViMnBYTW15WlFPRS8yQW0vQWJUV1UyYUNLL2R4TmxRcHM2Y1AzdmU5QmswSlZHaVBJME8zWGwwS2RDa0ZhRm1sTnF4YU5TbVQ3RUt6ZXAwYTBPcUljR1dGQnZPNmxTdEtjbWVVL3ZNYkZXMjdkQkdoV3ZNYlZpa2NzOHk3YXFVSzlDOGIxMEtIa3c0UWdJQU93PT0nO1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNwaW5uZXIuanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjYzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbnZhciBtZDVfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjY0KTtcXG52YXIgYmFzZTY0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjcpO1xcbnZhciBjbGFzc05hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XFxudmFyIHdvcmRpbmdzXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2OSk7XFxudmFyIENvbmZpZ18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNzApO1xcbnZhciBEYXRhXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3MSk7XFxuZXhwb3J0cy5FTUFJTF9SRUdFWCA9IC9eXFxcXFMrQFxcXFxTK1xcXFwuXFxcXFMrJC87XFxuZXhwb3J0cy5DT0xPUl9DT0RFX1JFR0VYID0gL14jKFtBLUZhLWYwLTldezZ9fFtBLUZhLWYwLTldezN9KSQvO1xcbmV4cG9ydHMuU0NPUEVfS0VZV09SRF9SRUdFWCA9IC9eW2EtekEtWjAtOS1ffkAkwqN84oKswqXCpyZdKyQvO1xcbmV4cG9ydHMuTUFQX1BST1BFUlRZX0tFWV9SRUdFWCA9IC9eW2EtekEtWjAtOS1fXSskLztcXG5leHBvcnRzLlhNTF9UQUdfUkVHRVggPSAvXlthLXpBLVpfOl1bYS16QS1aMC05XzpcXFxcLVxcXFwuXSokLztcXG5leHBvcnRzLkhUVFBTX1VSTF9SRUdFWCA9IC9odHRwczpcXFxcL1xcXFwvKHd3d1xcXFwuKT9bLWEtekEtWjAtOUA6JS5fXFxcXCt+Iz1dezIsMjU2fVxcXFwuW2Etel17Miw2fVxcXFxiKFstYS16QS1aMC05QDolX1xcXFwrLn4jPyZcXFxcLz1dKikvO1xcbmZ1bmN0aW9uIGdldFdvcmRpbmdzKHdvcmRpbmdzLCBsb2NhbGUpIHtcXG4gICAgdmFyIGNvbWJpbmVkV29yZGluZ3MgPSBkZWVwQ29weSh3b3JkaW5nc18xLk1VTFRJTEFOR1VBR0VfV09SRElOR1MsIHdvcmRpbmdzKTtcXG4gICAgdmFyIHJlcyA9IE9iamVjdC5rZXlzKGNvbWJpbmVkV29yZGluZ3MpLnJlZHVjZShmdW5jdGlvbiAoZGljLCBrZXkpIHtcXG4gICAgICAgIGRpY1trZXldID0gY29tYmluZWRXb3JkaW5nc1trZXldW2xvY2FsZV07XFxuICAgICAgICByZXR1cm4gZGljO1xcbiAgICB9LCB7fSk7XFxuICAgIHJldHVybiByZXM7XFxufVxcbmV4cG9ydHMuZ2V0V29yZGluZ3MgPSBnZXRXb3JkaW5ncztcXG5mdW5jdGlvbiBjb21waWxlV29yZGluZ3Mod29yZGluZ3MsIGxvY2FsZSkge1xcbiAgICBsb2NhbGUgPSBsb2NhbGUgfHwgXFxcImVuLVVTXFxcIjtcXG4gICAgdmFyIHJlcyA9IE9iamVjdC5rZXlzKHdvcmRpbmdzKS5yZWR1Y2UoZnVuY3Rpb24gKGRpYywga2V5KSB7XFxuICAgICAgICBkaWNba2V5XSA9IHdvcmRpbmdzW2tleV1bbG9jYWxlXTtcXG4gICAgICAgIHJldHVybiBkaWM7XFxuICAgIH0sIHt9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5jb21waWxlV29yZGluZ3MgPSBjb21waWxlV29yZGluZ3M7XFxuZnVuY3Rpb24gZ2V0R3JhdmF0YXJVcmwoZW1haWwpIHtcXG4gICAgdmFyIGJhc2VVcmwgPSAnaHR0cHM6Ly9zZWN1cmUuZ3JhdmF0YXIuY29tL2F2YXRhci8nO1xcbiAgICB2YXIgcXVlcnlQYXJhbXMgPSAnP3M9MjAwJmQ9bW0nO1xcbiAgICByZXR1cm4gYmFzZVVybCArIG1kNV8xLmRlZmF1bHQoZW1haWwudHJpbSgpLnRvTG93ZXJDYXNlKCkpICsgcXVlcnlQYXJhbXM7XFxufVxcbmV4cG9ydHMuZ2V0R3JhdmF0YXJVcmwgPSBnZXRHcmF2YXRhclVybDtcXG5mdW5jdGlvbiBpc1ZhbGlkUGFzc3dvcmQocGFzc3dvcmQpIHtcXG4gICAgdmFyIG1pbk1heExlbmd0aCA9IC9eW1xcXFxzXFxcXFNdezgsMzJ9JC8sIHVwcGVyID0gL1tBLVpdLywgbG93ZXIgPSAvW2Etel0vLCBudW1iZXIgPSAvWzAtOV0vLCBjb3VudCA9IDA7XFxuICAgIGlmIChtaW5NYXhMZW5ndGgudGVzdChwYXNzd29yZCkpIHtcXG4gICAgICAgIGlmICh1cHBlci50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgICAgIGNvdW50Kys7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobG93ZXIudGVzdChwYXNzd29yZCkpIHtcXG4gICAgICAgICAgICBjb3VudCsrO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKG51bWJlci50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgICAgIGNvdW50Kys7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIGNvdW50ID49IDI7XFxufVxcbmV4cG9ydHMuaXNWYWxpZFBhc3N3b3JkID0gaXNWYWxpZFBhc3N3b3JkO1xcbmZ1bmN0aW9uIGlzVmFsaWRFbWFpbChlbWFpbCkge1xcbiAgICByZXR1cm4gZXhwb3J0cy5FTUFJTF9SRUdFWC50ZXN0KGVtYWlsKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkRW1haWwgPSBpc1ZhbGlkRW1haWw7XFxuZnVuY3Rpb24gaXNWYWxpZENvbG9yQ29kZShjb2xvcikge1xcbiAgICByZXR1cm4gZXhwb3J0cy5DT0xPUl9DT0RFX1JFR0VYLnRlc3QoY29sb3IpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRDb2xvckNvZGUgPSBpc1ZhbGlkQ29sb3JDb2RlO1xcbmZ1bmN0aW9uIGlzTm90RW1wdHkodmFsdWUpIHtcXG4gICAgcmV0dXJuICEhdmFsdWUgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA+IDA7XFxufVxcbmV4cG9ydHMuaXNOb3RFbXB0eSA9IGlzTm90RW1wdHk7XFxuZnVuY3Rpb24gaXNWYWxpZFNjb3BlS2V5d29yZCh2YWx1ZSkge1xcbiAgICByZXR1cm4gZXhwb3J0cy5TQ09QRV9LRVlXT1JEX1JFR0VYLnRlc3QodmFsdWUpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRTY29wZUtleXdvcmQgPSBpc1ZhbGlkU2NvcGVLZXl3b3JkO1xcbmZ1bmN0aW9uIGlzVmFsaWRLZXlDaGFyKHZhbHVlKSB7XFxuICAgIHJldHVybiBleHBvcnRzLk1BUF9QUk9QRVJUWV9LRVlfUkVHRVgudGVzdCh2YWx1ZSk7XFxufVxcbmV4cG9ydHMuaXNWYWxpZEtleUNoYXIgPSBpc1ZhbGlkS2V5Q2hhcjtcXG5mdW5jdGlvbiBpc1ZhbGlkWE1MVGFnKHZhbHVlKSB7XFxuICAgIHJldHVybiBleHBvcnRzLlhNTF9UQUdfUkVHRVgudGVzdCh2YWx1ZSk7XFxufVxcbmV4cG9ydHMuaXNWYWxpZFhNTFRhZyA9IGlzVmFsaWRYTUxUYWc7XFxuZnVuY3Rpb24gaXNWYWxpZEh0dHBzVXJsKHZhbHVlKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkhUVFBTX1VSTF9SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkSHR0cHNVcmwgPSBpc1ZhbGlkSHR0cHNVcmw7XFxuZnVuY3Rpb24gZXNjYXBlWG1sKHhtbCkge1xcbiAgICByZXR1cm4geG1sLnJlcGxhY2UoL1s8PiYnXFxcIl0vZywgZnVuY3Rpb24gKGMpIHtcXG4gICAgICAgIHN3aXRjaCAoYykge1xcbiAgICAgICAgICAgIGNhc2UgJzwnOlxcbiAgICAgICAgICAgICAgICByZXR1cm4gJyZsdCc7XFxuICAgICAgICAgICAgY2FzZSAnPic6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJmd0JztcXG4gICAgICAgICAgICBjYXNlICcmJzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmYW1wJztcXG4gICAgICAgICAgICBjYXNlICdcXFxcJyc6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJmFwb3MnO1xcbiAgICAgICAgICAgIGNhc2UgJ1xcXCInOlxcbiAgICAgICAgICAgICAgICByZXR1cm4gJyZxdW90JztcXG4gICAgICAgIH1cXG4gICAgfSk7XFxufVxcbmV4cG9ydHMuZXNjYXBlWG1sID0gZXNjYXBlWG1sO1xcbmZ1bmN0aW9uIHV0ZjhKU09OX3RvX2I2NFVSSShqc29uKSB7XFxuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoYmFzZTY0LmVuY29kZShkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGpzb24pKSkpKTtcXG59XFxuZXhwb3J0cy51dGY4SlNPTl90b19iNjRVUkkgPSB1dGY4SlNPTl90b19iNjRVUkk7XFxuZnVuY3Rpb24gVVJJYjY0X3RvX3V0ZjhKU09OKHN0cikge1xcbiAgICB0cnkge1xcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChiYXNlNjQuZGVjb2RlKGRlY29kZVVSSUNvbXBvbmVudChzdHIpKSkpKTtcXG4gICAgfVxcbiAgICBjYXRjaCAoZXJyb3IpIHtcXG4gICAgICAgIGNvbnNvbGUubG9nKCdKU09OIHBhcnNpbmcgZXJyb3I6ICcsIGVycm9yKTtcXG4gICAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbn1cXG5leHBvcnRzLlVSSWI2NF90b191dGY4SlNPTiA9IFVSSWI2NF90b191dGY4SlNPTjtcXG5mdW5jdGlvbiBhcnJheU1pbihhcnIpIHtcXG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIG5leHQpIHtcXG4gICAgICAgIHJldHVybiAocHJldiA8IG5leHQgPyBwcmV2IDogbmV4dCk7XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmFycmF5TWluID0gYXJyYXlNaW47XFxuZnVuY3Rpb24gYXJyYXlNYXgoYXJyKSB7XFxuICAgIHJldHVybiBhcnIucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBuZXh0KSB7XFxuICAgICAgICByZXR1cm4gKHByZXYgPiBuZXh0ID8gcHJldiA6IG5leHQpO1xcbiAgICB9KTtcXG59XFxuZXhwb3J0cy5hcnJheU1heCA9IGFycmF5TWF4O1xcbmZ1bmN0aW9uIGZvcm1hdEZpbGVTaXplKHNpemUpIHtcXG4gICAgaWYgKCFzaXplKSB7XFxuICAgICAgICByZXR1cm4gJzAgQic7XFxuICAgIH1cXG4gICAgdmFyIGsgPSAxMDAwO1xcbiAgICB2YXIgc2l6ZXMgPSBbJ0InLCAnS0InLCAnTUInLCAnR0InLCAnVEInXTtcXG4gICAgdmFyIGkgPSBNYXRoLmZsb29yKE1hdGgubG9nKHNpemUpIC8gTWF0aC5sb2coaykpO1xcbiAgICB2YXIgdW5pdCA9IGkgPCA1ID8gc2l6ZXNbaV0gOiBzaXplc1s0XTtcXG4gICAgcmV0dXJuIChzaXplIC8gTWF0aC5wb3coaywgaSkpLnRvRml4ZWQoMSkgKyAnICcgKyB1bml0O1xcbn1cXG5leHBvcnRzLmZvcm1hdEZpbGVTaXplID0gZm9ybWF0RmlsZVNpemU7XFxuZnVuY3Rpb24gZ2V0UXVlcnlQYXJhbXMoc2VhcmNoU3RyaW5nKSB7XFxuICAgIGlmICghc2VhcmNoU3RyaW5nKSB7XFxuICAgICAgICByZXR1cm4ge307XFxuICAgIH1cXG4gICAgdmFyIHF1ZXJ5U3RyaW5nUGFyYW1zID0gc2VhcmNoU3RyaW5nLnN1YnN0cigxKS5zcGxpdCgnJicpO1xcbiAgICB2YXIgcXVlcnlQYXJhbXMgPSBxdWVyeVN0cmluZ1BhcmFtcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcXVlcnlTdHJQYXJhbSkge1xcbiAgICAgICAgdmFyIGtleVZhbHVlID0gcXVlcnlTdHJQYXJhbS5zcGxpdCgnPScpO1xcbiAgICAgICAgaWYgKGtleVZhbHVlLmxlbmd0aCA9PT0gMikge1xcbiAgICAgICAgICAgIGFjY1trZXlWYWx1ZVswXV0gPSBkZWNvZGVVUklDb21wb25lbnQoa2V5VmFsdWVbMV0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGFjYztcXG4gICAgfSwge30pO1xcbiAgICByZXR1cm4gcXVlcnlQYXJhbXM7XFxufVxcbmV4cG9ydHMuZ2V0UXVlcnlQYXJhbXMgPSBnZXRRdWVyeVBhcmFtcztcXG5mdW5jdGlvbiBhZGRRdWVyeVBhcmFtKHVyaSwga2V5LCB2YWx1ZSkge1xcbiAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcXG4gICAgbGluay5ocmVmID0gdXJpO1xcbiAgICBpZiAobGluay5zZWFyY2gpIHtcXG4gICAgICAgIGxpbmsuc2VhcmNoICs9ICgnJicgKyBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xcbiAgICB9XFxuICAgIGVsc2Uge1xcbiAgICAgICAgbGluay5zZWFyY2ggPSAoJz8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcXG4gICAgfVxcbiAgICByZXR1cm4gbGluaztcXG59XFxuZXhwb3J0cy5hZGRRdWVyeVBhcmFtID0gYWRkUXVlcnlQYXJhbTtcXG5mdW5jdGlvbiBvcmRlckFzYyhvYmplY3QpIHtcXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xcbiAgICBPYmplY3Qua2V5cyhvYmplY3QpLnNvcnQoKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgICAgIHJlc3VsdFtrZXldID0gb2JqZWN0W2tleV07XFxuICAgIH0pO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbn1cXG5leHBvcnRzLm9yZGVyQXNjID0gb3JkZXJBc2M7XFxuZnVuY3Rpb24gb3JkZXJEZXNjKG9iamVjdCkge1xcbiAgICB2YXIgcmVzdWx0ID0ge307XFxuICAgIE9iamVjdC5rZXlzKG9iamVjdCkuc29ydCgpLnJldmVyc2UoKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgICAgIHJlc3VsdFtrZXldID0gb2JqZWN0W2tleV07XFxuICAgIH0pO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbn1cXG5leHBvcnRzLm9yZGVyRGVzYyA9IG9yZGVyRGVzYztcXG5mdW5jdGlvbiBzYXZlRGF0YUFzSlNPTkZpbGUoZGF0YSwgZmlsZU5hbWUsIGV4dGVuc2lvbikge1xcbiAgICB2YXIganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsICdcXFxcdCcpO1xcbiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtqc29uXSwge1xcbiAgICAgICAgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nXFxuICAgIH0pO1xcbiAgICB0cmlnZ2VyRGF0YURvd25sb2FkKGJsb2IsIGZpbGVOYW1lICsgXFxcIl9cXFwiICsgbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnN1YnN0cigwLCAxOSkgKyAoZXh0ZW5zaW9uIHx8ICcuanNvbicpKTtcXG59XFxuZXhwb3J0cy5zYXZlRGF0YUFzSlNPTkZpbGUgPSBzYXZlRGF0YUFzSlNPTkZpbGU7XFxuZnVuY3Rpb24gZG93bmxvYWREYXRhRmlsZShiYXNlNjREYXRhU3RyaW5nLCBjb250ZW50VHlwZSwgZmlsZU5hbWUpIHtcXG4gICAgdmFyIGI2NFN0cmluZyA9ICdkYXRhOicgKyBjb250ZW50VHlwZSArICc7YmFzZTY0LCcgKyBiYXNlNjREYXRhU3RyaW5nO1xcbiAgICB0cmlnZ2VyRGF0YURvd25sb2FkKGI2NFN0cmluZywgZmlsZU5hbWUsIHRydWUpO1xcbn1cXG5leHBvcnRzLmRvd25sb2FkRGF0YUZpbGUgPSBkb3dubG9hZERhdGFGaWxlO1xcbmZ1bmN0aW9uIHRyaWdnZXJEYXRhRG93bmxvYWQoZGF0YSwgZmlsZU5hbWUsIGRhdGFVcmwpIHtcXG4gICAgdmFyIHVybCA9IGRhdGFVcmwgPyBkYXRhIDogVVJMLmNyZWF0ZU9iamVjdFVSTChkYXRhKTtcXG4gICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XFxuICAgIGxpbmsuaHJlZiA9IHVybDtcXG4gICAgbGlua1snZG93bmxvYWQnXSA9IGZpbGVOYW1lO1xcbiAgICBsaW5rLmNsaWNrKCk7XFxuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcXG59XFxuZnVuY3Rpb24gaGFzUmVxdWlyZWRSZXNvdXJjZShhcHBFbmRwb2ludHMsIGFwcEluc3RhbmNlTmFtZSwgZmVhdHVyZUlkKSB7XFxuICAgIGlmIChhcHBFbmRwb2ludHMgJiYgYXBwRW5kcG9pbnRzW2FwcEluc3RhbmNlTmFtZV0pIHtcXG4gICAgICAgIGlmIChhcHBFbmRwb2ludHNbYXBwSW5zdGFuY2VOYW1lXVtmZWF0dXJlSWRdKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIGZhbHNlO1xcbn1cXG5leHBvcnRzLmhhc1JlcXVpcmVkUmVzb3VyY2UgPSBoYXNSZXF1aXJlZFJlc291cmNlO1xcbmZ1bmN0aW9uIHJlcGxhY2VUZW1wbGF0ZVZpZXdOYW1lKHRlbXBsYXRlZEh0bWwsIHZpZXdOYW1lKSB7XFxuICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sLnJlcGxhY2UoL3t7VklFV05BTUV9fS9nLCB2aWV3TmFtZSk7XFxufVxcbmV4cG9ydHMucmVwbGFjZVRlbXBsYXRlVmlld05hbWUgPSByZXBsYWNlVGVtcGxhdGVWaWV3TmFtZTtcXG5mdW5jdGlvbiByZXBsYWNlVGVtcGxhdGVGbGFncyh0ZW1wbGF0ZWRIdG1sLCBsb2NhbGUpIHtcXG4gICAgdmFyIGZsYWdzUmVnZXggPSAve3tGTEFHU1xcXFw9KC4qKX19L2c7XFxuICAgIHZhciBtYXRjaFJlcyA9IGZsYWdzUmVnZXguZXhlYyh0ZW1wbGF0ZWRIdG1sKTtcXG4gICAgaWYgKG1hdGNoUmVzICYmIG1hdGNoUmVzLmxlbmd0aCA9PT0gMikge1xcbiAgICAgICAgdmFyIGZsYWdzID0gbWF0Y2hSZXNbMV0uc3BsaXQoJywnKTtcXG4gICAgICAgIHZhciBmbGFnc0h0bWwgPSAnJztcXG4gICAgICAgIGZvciAodmFyIGZsYWdOYW1lIGluIERhdGFfMS5mbGFnc0RlZikge1xcbiAgICAgICAgICAgIHZhciBmbGFnRGVmID0gRGF0YV8xLmZsYWdzRGVmW2ZsYWdOYW1lXTtcXG4gICAgICAgICAgICBpZiAoZmxhZ05hbWUgIT09ICdldW5yZWFkJykge1xcbiAgICAgICAgICAgICAgICBpZiAoKGZsYWdEZWYuaW52ZXJzZWQgJiYgZmxhZ3MuaW5kZXhPZihmbGFnTmFtZSkgPT09IC0xKSB8fCAoIWZsYWdEZWYuaW52ZXJzZWQgJiYgZmxhZ3MuaW5kZXhPZihmbGFnTmFtZSkgIT09IC0xKSkge1xcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3NIdG1sICs9ICc8c3BhbiBjbGFzcz1cXFwiZmEtZncgcmlnaHQtc3BhY2VkIHRleHQteGxhcmdlICcgKyBmbGFnRGVmLmljb25Db2xvciArICcgJyArIGZsYWdEZWYuaWNvblNoYXBlICsgJ1xcXCIgdGl0bGU9XFxcIicgKyBmbGFnRGVmLmZsYWdMYWJlbFtsb2NhbGVdICsgJ1xcXCI+PC9zcGFuPic7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gdGVtcGxhdGVkSHRtbC5yZXBsYWNlKGZsYWdzUmVnZXgsIGZsYWdzSHRtbCk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgICByZXR1cm4gdGVtcGxhdGVkSHRtbDtcXG4gICAgfVxcbn1cXG5leHBvcnRzLnJlcGxhY2VUZW1wbGF0ZUZsYWdzID0gcmVwbGFjZVRlbXBsYXRlRmxhZ3M7XFxuZnVuY3Rpb24gZ2V0U3R5bGVEZWYoc3R5bGVDb25mKSB7XFxuICAgIHZhciBzdHlsZXMgPSBzdHlsZUNvbmYuc3BsaXQoJywnKTtcXG4gICAgdmFyIHJlcyA9IHtcXG4gICAgICAgIGljb246IG51bGwsXFxuICAgICAgICBidG46IG51bGwsXFxuICAgICAgICBjb2xvcjogbnVsbFxcbiAgICB9O1xcbiAgICBzdHlsZXMuZm9yRWFjaChmdW5jdGlvbiAoc3R5bGUpIHtcXG4gICAgICAgIGlmIChzdHlsZS5pbmRleE9mKCdpY29uOicpICE9PSAtMSkge1xcbiAgICAgICAgICAgIHJlcy5pY29uID0gc3R5bGUucmVwbGFjZSgnaWNvbjonLCAnJyk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoc3R5bGUuaW5kZXhPZignYnRuOicpICE9PSAtMSkge1xcbiAgICAgICAgICAgIHJlcy5idG4gPSBzdHlsZS5yZXBsYWNlKCdidG46JywgJycpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHN0eWxlLmluZGV4T2YoJ2NvbG9yOicpICE9PSAtMSkge1xcbiAgICAgICAgICAgIHJlcy5jb2xvciA9IHN0eWxlLnJlcGxhY2UoJ2NvbG9yOicsICcnKTtcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIHJldHVybiByZXM7XFxufVxcbmV4cG9ydHMuZ2V0U3R5bGVEZWYgPSBnZXRTdHlsZURlZjtcXG5mdW5jdGlvbiBnZXRBY2NlcHRMYW5ndWFnZUhlYWRlcihsb2NhbGUpIHtcXG4gICAgdmFyIG5vdFNlbGVjdGVkID0gQ29uZmlnXzEuQVZBSUxBQkxFX0xBTkdVQUdFUy5maWx0ZXIoZnVuY3Rpb24gKGxhbmd1YWdlLCBpZHgpIHtcXG4gICAgICAgIHJldHVybiBsYW5ndWFnZS5sb2NhbGUgIT09IGxvY2FsZSAmJiBpZHggPCAzO1xcbiAgICB9KS5tYXAoZnVuY3Rpb24gKGxhbmd1YWdlLCBpZHgpIHtcXG4gICAgICAgIHJldHVybiBsYW5ndWFnZS5sb2NhbGUuc3Vic3RyKDAsIDIpLnRvTG93ZXJDYXNlKCkgKyAnO3E9JyArICgwLjggLSAoaWR4IC8gMTApKS50b1N0cmluZygpO1xcbiAgICB9KTtcXG4gICAgcmV0dXJuIGxvY2FsZS5zdWJzdHIoMCwgMikudG9Mb3dlckNhc2UoKSArICcsJyArIG5vdFNlbGVjdGVkLmpvaW4oJywnKTtcXG59XFxuZXhwb3J0cy5nZXRBY2NlcHRMYW5ndWFnZUhlYWRlciA9IGdldEFjY2VwdExhbmd1YWdlSGVhZGVyO1xcbmZ1bmN0aW9uIGdldEkxOG5MYWJlbChsb2NhbGUsIGxhYmVsTWFwLCBub1JlZ2lvbiwgdXBwZXIpIHtcXG4gICAgdmFyIHJlcyA9IG51bGw7XFxuICAgIHZhciBsYW5ndWFnZSA9IGxvY2FsZTtcXG4gICAgaWYgKG5vUmVnaW9uKSB7XFxuICAgICAgICBsYW5ndWFnZSA9IGxhbmd1YWdlLnN1YnN0cigwLCAyKTtcXG4gICAgfVxcbiAgICBpZiAodXBwZXIpIHtcXG4gICAgICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2UudG9VcHBlckNhc2UoKTtcXG4gICAgfVxcbiAgICBpZiAobGFiZWxNYXApIHtcXG4gICAgICAgIGlmIChsYWJlbE1hcFtsYW5ndWFnZV0pIHtcXG4gICAgICAgICAgICByZXMgPSBsYWJlbE1hcFtsYW5ndWFnZV07XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXJlcyAmJiBsYW5ndWFnZSAhPT0gJ0VOJykge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwWydFTiddO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFyZXMgJiYgbGFuZ3VhZ2UgIT09ICdlbicpIHtcXG4gICAgICAgICAgICByZXMgPSBsYWJlbE1hcFsnZW4nXTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghcmVzICYmIGxhbmd1YWdlICE9PSAnZW4tVVMnKSB7XFxuICAgICAgICAgICAgcmVzID0gbGFiZWxNYXBbJ2VuLVVTJ107XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRJMThuTGFiZWwgPSBnZXRJMThuTGFiZWw7XFxuZnVuY3Rpb24gZ2V0SlNUcmVlRGF0YShvcmdUcmVlRGF0YSwgb3BlbmVkTm9kZXMpIHtcXG4gICAgcmV0dXJuIG9yZ1RyZWVEYXRhID8ge1xcbiAgICAgICAgaWQ6IG9yZ1RyZWVEYXRhLmlkLFxcbiAgICAgICAgdGV4dDogb3JnVHJlZURhdGEuaWQgPT09ICcwJyA/ICcnIDogb3JnVHJlZURhdGEuZWxlbWVudE5hbWUsXFxuICAgICAgICBkYXRhOiB7XFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IG9yZ1RyZWVEYXRhLmRlc2NyaXB0aW9uLFxcbiAgICAgICAgICAgIHByb3BlcnRpZXNNYXA6IG9yZ1RyZWVEYXRhLnByb3BlcnRpZXNNYXAsXFxuICAgICAgICAgICAgcGFyZW50SWQ6IG9yZ1RyZWVEYXRhLnBhcmVudElkLFxcbiAgICAgICAgICAgIGNoaWxkTmFtZXM6IG9yZ1RyZWVEYXRhLmNoaWxkcmVuID8gb3JnVHJlZURhdGEuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uIChjaGlsZCkgeyByZXR1cm4gY2hpbGQuZWxlbWVudE5hbWU7IH0pIDogW11cXG4gICAgICAgIH0sXFxuICAgICAgICBjaGlsZHJlbjogb3JnVHJlZURhdGEuY2hpbGRyZW4gPyBvcmdUcmVlRGF0YS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGdldEpTVHJlZURhdGEoY2hpbGQsIG9wZW5lZE5vZGVzKTtcXG4gICAgICAgIH0pIDogbnVsbCxcXG4gICAgICAgIGljb246IGNsYXNzTmFtZXMoJ2ZhcyBmYS1mdycsIHtcXG4gICAgICAgICAgICAnZmEtdGgtbGFyZ2UgZm9udC1jb2xvci1saWdodGVyJzogb3JnVHJlZURhdGEuaWQgIT09ICcwJyxcXG4gICAgICAgICAgICAnZmEtdGVybWluYWwgYmxhY2stY29sb3InOiBvcmdUcmVlRGF0YS5pZCA9PT0gJzAnLFxcbiAgICAgICAgfSksXFxuICAgICAgICBzdGF0ZToge1xcbiAgICAgICAgICAgIG9wZW5lZDogb3BlbmVkTm9kZXMgPyBvcGVuZWROb2Rlcy5pbmRleE9mKG9yZ1RyZWVEYXRhLmlkKSAhPT0gLTEgOiBmYWxzZSxcXG4gICAgICAgICAgICBkaXNhYmxlZDogb3JnVHJlZURhdGEuaWQgPT09ICctMSdcXG4gICAgICAgIH1cXG4gICAgfSA6IG51bGw7XFxufVxcbmV4cG9ydHMuZ2V0SlNUcmVlRGF0YSA9IGdldEpTVHJlZURhdGE7XFxuZnVuY3Rpb24gbG9hZFRvb2x0aXBzKGVsZW1lbnQpIHtcXG4gICAgaWYgKCFNb2Rlcm5penIudG91Y2hldmVudHMpIHtcXG4gICAgICAgIHZhciAkZWxlbWVudFRvb2x0aXBzXzEgPSAkKGVsZW1lbnQpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cXFwidG9vbHRpcFxcXCJdJyk7XFxuICAgICAgICAkZWxlbWVudFRvb2x0aXBzXzEudG9vbHRpcCh7XFxuICAgICAgICAgICAgY29udGFpbmVyOiAnYm9keScsXFxuICAgICAgICAgICAgcGxhY2VtZW50OiAnYXV0byB0b3AnXFxuICAgICAgICB9KTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHNfMS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgJGVsZW1lbnRUb29sdGlwc18xLnRvb2x0aXAoJ2hpZGUnKTtcXG4gICAgICAgIH0pO1xcbiAgICB9XFxufVxcbmV4cG9ydHMubG9hZFRvb2x0aXBzID0gbG9hZFRvb2x0aXBzO1xcbmZ1bmN0aW9uIHVubG9hZFRvb2x0aXBzKGVsZW1lbnQpIHtcXG4gICAgaWYgKCFNb2Rlcm5penIudG91Y2hldmVudHMpIHtcXG4gICAgICAgIHZhciAkZWxlbWVudFRvb2x0aXBzID0gJChlbGVtZW50KS5maW5kKCdbZGF0YS10b2dnbGU9XFxcInRvb2x0aXBcXFwiXScpO1xcbiAgICAgICAgJGVsZW1lbnRUb29sdGlwcy50b29sdGlwKCdoaWRlJyk7XFxuICAgICAgICAkZWxlbWVudFRvb2x0aXBzLnRvb2x0aXAoJ2Rlc3Ryb3knKTtcXG4gICAgICAgICQoJ2Rpdi50b29sdGlwJykucmVtb3ZlKCk7XFxuICAgIH1cXG59XFxuZXhwb3J0cy51bmxvYWRUb29sdGlwcyA9IHVubG9hZFRvb2x0aXBzO1xcbmZ1bmN0aW9uIGdyb3VwQnlQcm9wZXJ0eShsaXN0LCBwcm9wZXJ0eU5hbWUpIHtcXG4gICAgcmV0dXJuIGxpc3QucmVkdWNlKGZ1bmN0aW9uIChncm91cGVkLCBpdGVtKSB7XFxuICAgICAgICB2YXIga2V5ID0gaXRlbVtwcm9wZXJ0eU5hbWVdO1xcbiAgICAgICAgZ3JvdXBlZFtrZXldID0gZ3JvdXBlZFtrZXldIHx8IFtdO1xcbiAgICAgICAgZ3JvdXBlZFtrZXldLnB1c2goaXRlbSk7XFxuICAgICAgICByZXR1cm4gZ3JvdXBlZDtcXG4gICAgfSwge30pO1xcbn1cXG5leHBvcnRzLmdyb3VwQnlQcm9wZXJ0eSA9IGdyb3VwQnlQcm9wZXJ0eTtcXG5mdW5jdGlvbiBhZGRWYWxUb0FycmF5Tm9EdXAoYXJyYXksIHZhbHVlKSB7XFxuICAgIGlmIChhcnJheS5pbmRleE9mKHZhbHVlKSA9PT0gLTEpIHtcXG4gICAgICAgIHJldHVybiBhcnJheS5jb25jYXQodmFsdWUpO1xcbiAgICB9XFxuICAgIHJldHVybiBhcnJheS5zbGljZSgpO1xcbn1cXG5leHBvcnRzLmFkZFZhbFRvQXJyYXlOb0R1cCA9IGFkZFZhbFRvQXJyYXlOb0R1cDtcXG5mdW5jdGlvbiByZW1vdmVWYWxGcm9tQXJyYXlOb0R1cChhcnJheSwgdmFsdWUpIHtcXG4gICAgcmV0dXJuIGFycmF5LmZpbHRlcihmdW5jdGlvbiAoZWxlbWVudCkgeyByZXR1cm4gZWxlbWVudCAhPT0gdmFsdWU7IH0pO1xcbn1cXG5leHBvcnRzLnJlbW92ZVZhbEZyb21BcnJheU5vRHVwID0gcmVtb3ZlVmFsRnJvbUFycmF5Tm9EdXA7XFxuZnVuY3Rpb24gZ2V0TmVzdGVkVmFsdWUob2JqLCBrZXlQYXRoKSB7XFxuICAgIGlmICghb2JqKSB7XFxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xcbiAgICB9XFxuICAgIHZhciBwcm9wcyA9IGtleVBhdGguc3BsaXQoJy4nKTtcXG4gICAgaWYgKHByb3BzLmxlbmd0aCA9PT0gMSkge1xcbiAgICAgICAgcmV0dXJuIG9ialtwcm9wc1swXV07XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgICByZXR1cm4gZ2V0TmVzdGVkVmFsdWUob2JqW3Byb3BzWzBdXSwgcHJvcHMuc2xpY2UoMSkuam9pbignLicpKTtcXG4gICAgfVxcbn1cXG5leHBvcnRzLmdldE5lc3RlZFZhbHVlID0gZ2V0TmVzdGVkVmFsdWU7XFxuZnVuY3Rpb24gZmlsdGVyQ29sbGVjdGlvbihjb2xsZWN0aW9uLCBwcm9wZXJ0aWVzLCBzZWFyY2hTdHJpbmcpIHtcXG4gICAgdmFyIHNlYXJjaEVsZW1lbnRzID0gc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCkuc3BsaXQoJyAnKTtcXG4gICAgdmFyIGZpbHRlcmVkQ29sbGVjdGlvbiA9IHNlYXJjaFN0cmluZyA/IGNvbGxlY3Rpb24uZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICB2YXIgZGF0YSA9IHByb3BlcnRpZXMubWFwKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5zcGxpdCgnLicpLmxlbmd0aCA+IDEpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldE5lc3RlZFZhbHVlKGl0ZW0sIHByb3BlcnR5KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtW3Byb3BlcnR5XTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KS5qb2luKCkudG9Mb3dlckNhc2UoKTtcXG4gICAgICAgIHZhciBtYXRjaGVzID0gc2VhcmNoRWxlbWVudHMubWFwKGZ1bmN0aW9uIChzZWFyY2gpIHsgcmV0dXJuIGRhdGEuaW5kZXhPZihzZWFyY2gpICE9PSAtMTsgfSk7XFxuICAgICAgICByZXR1cm4gbWF0Y2hlcy5maWx0ZXIoZnVuY3Rpb24gKG1hdGNoZWQpIHsgcmV0dXJuICFtYXRjaGVkOyB9KS5sZW5ndGggPT09IDA7XFxuICAgIH0pIDogY29sbGVjdGlvbjtcXG4gICAgcmV0dXJuIGZpbHRlcmVkQ29sbGVjdGlvbjtcXG59XFxuZXhwb3J0cy5maWx0ZXJDb2xsZWN0aW9uID0gZmlsdGVyQ29sbGVjdGlvbjtcXG5mdW5jdGlvbiBiYXNlNjREZWNvZGUoZW5jb2RlZERhdGEpIHtcXG4gICAgcmV0dXJuIGJhc2U2NC5kZWNvZGUoZW5jb2RlZERhdGEpO1xcbn1cXG5leHBvcnRzLmJhc2U2NERlY29kZSA9IGJhc2U2NERlY29kZTtcXG5mdW5jdGlvbiBkZWVwQ29weShkYXRhLCBleHRlbnNpb25zKSB7XFxuICAgIHJldHVybiAhZXh0ZW5zaW9ucyA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSB8fCB7fSkpIDogJC5leHRlbmQoe30sIGRhdGEsIGV4dGVuc2lvbnMpO1xcbn1cXG5leHBvcnRzLmRlZXBDb3B5ID0gZGVlcENvcHk7XFxuZnVuY3Rpb24gaGFuZGxlRHVwbGljYXRlTmFtZUZyb21BcnJheShuYW1lLCBjb250YWluZXIpIHtcXG4gICAgdmFyIGZpcnN0VGltZSA9IHRydWU7XFxuICAgIHZhciByZXMgPSBuYW1lO1xcbiAgICB2YXIgaWR4ID0gMTtcXG4gICAgd2hpbGUgKGNvbnRhaW5lci5zb21lKGZ1bmN0aW9uIChjKSB7IHJldHVybiByZXMgPT09IGM7IH0pKSB7XFxuICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XFxuICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdChcXFwiX1xcXCIgKyBpZHgpO1xcbiAgICAgICAgfVxcbiAgICAgICAgZWxzZSB7XFxuICAgICAgICAgICAgcmVzID0gcmVzLnJlcGxhY2UoL19bXFxcXGRdKyQvLCBcXFwiX1xcXCIgKyBpZHgpO1xcbiAgICAgICAgfVxcbiAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7XFxuICAgICAgICBpZHgrKztcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmhhbmRsZUR1cGxpY2F0ZU5hbWVGcm9tQXJyYXkgPSBoYW5kbGVEdXBsaWNhdGVOYW1lRnJvbUFycmF5O1xcbmZ1bmN0aW9uIGRhdGVCeUxvY2FsVG9TdHJpbmcobG9jYWxlLCBkYXRlLCBvcHRpb25zKSB7XFxuICAgIHJldHVybiBuZXcgRGF0ZShkYXRlKS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIGRlZXBDb3B5KHtcXG4gICAgICAgIG1vbnRoOiAnbnVtZXJpYycsXFxuICAgICAgICBkYXk6ICdudW1lcmljJyxcXG4gICAgICAgIHllYXI6ICdudW1lcmljJyxcXG4gICAgICAgIGhvdXI6ICdudW1lcmljJyxcXG4gICAgICAgIG1pbnV0ZTogJ251bWVyaWMnXFxuICAgIH0sIG9wdGlvbnMpKTtcXG59XFxuZXhwb3J0cy5kYXRlQnlMb2NhbFRvU3RyaW5nID0gZGF0ZUJ5TG9jYWxUb1N0cmluZztcXG5mdW5jdGlvbiBnZXRJdGVtc0J5SWR4KGNvbGxlY3Rpb24sIGluZGV4ZXMpIHtcXG4gICAgcmV0dXJuIGluZGV4ZXMubWFwKGZ1bmN0aW9uIChpZHgpIHsgcmV0dXJuIGNvbGxlY3Rpb25baWR4XTsgfSk7XFxufVxcbmV4cG9ydHMuZ2V0SXRlbXNCeUlkeCA9IGdldEl0ZW1zQnlJZHg7XFxuZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHRleHQpIHtcXG4gICAgcmV0dXJuIHRleHQucmVwbGFjZSgvWy1bXFxcXF17fSgpKis/LixcXFxcXFxcXF4kfCNdL2csICdcXFxcXFxcXCQmJyk7XFxufVxcbmV4cG9ydHMuZXNjYXBlUmVnRXhwID0gZXNjYXBlUmVnRXhwO1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI2NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4oZnVuY3Rpb24oKXtcXG4gIHZhciBjcnlwdCA9IF9fd2VicGFja19yZXF1aXJlX18oMjY1KSxcXG4gICAgICB1dGY4ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OSkudXRmOCxcXG4gICAgICBpc0J1ZmZlciA9IF9fd2VicGFja19yZXF1aXJlX18oMjY2KSxcXG4gICAgICBiaW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg5KS5iaW4sXFxuXFxuICAvLyBUaGUgY29yZVxcbiAgbWQ1ID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG9wdGlvbnMpIHtcXG4gICAgLy8gQ29udmVydCB0byBieXRlIGFycmF5XFxuICAgIGlmIChtZXNzYWdlLmNvbnN0cnVjdG9yID09IFN0cmluZylcXG4gICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmVuY29kaW5nID09PSAnYmluYXJ5JylcXG4gICAgICAgIG1lc3NhZ2UgPSBiaW4uc3RyaW5nVG9CeXRlcyhtZXNzYWdlKTtcXG4gICAgICBlbHNlXFxuICAgICAgICBtZXNzYWdlID0gdXRmOC5zdHJpbmdUb0J5dGVzKG1lc3NhZ2UpO1xcbiAgICBlbHNlIGlmIChpc0J1ZmZlcihtZXNzYWdlKSlcXG4gICAgICBtZXNzYWdlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobWVzc2FnZSwgMCk7XFxuICAgIGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KG1lc3NhZ2UpKVxcbiAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnRvU3RyaW5nKCk7XFxuICAgIC8vIGVsc2UsIGFzc3VtZSBieXRlIGFycmF5IGFscmVhZHlcXG5cXG4gICAgdmFyIG0gPSBjcnlwdC5ieXRlc1RvV29yZHMobWVzc2FnZSksXFxuICAgICAgICBsID0gbWVzc2FnZS5sZW5ndGggKiA4LFxcbiAgICAgICAgYSA9ICAxNzMyNTg0MTkzLFxcbiAgICAgICAgYiA9IC0yNzE3MzM4NzksXFxuICAgICAgICBjID0gLTE3MzI1ODQxOTQsXFxuICAgICAgICBkID0gIDI3MTczMzg3ODtcXG5cXG4gICAgLy8gU3dhcCBlbmRpYW5cXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgbVtpXSA9ICgobVtpXSA8PCAgOCkgfCAobVtpXSA+Pj4gMjQpKSAmIDB4MDBGRjAwRkYgfFxcbiAgICAgICAgICAgICAoKG1baV0gPDwgMjQpIHwgKG1baV0gPj4+ICA4KSkgJiAweEZGMDBGRjAwO1xcbiAgICB9XFxuXFxuICAgIC8vIFBhZGRpbmdcXG4gICAgbVtsID4+PiA1XSB8PSAweDgwIDw8IChsICUgMzIpO1xcbiAgICBtWygoKGwgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTRdID0gbDtcXG5cXG4gICAgLy8gTWV0aG9kIHNob3J0Y3V0c1xcbiAgICB2YXIgRkYgPSBtZDUuX2ZmLFxcbiAgICAgICAgR0cgPSBtZDUuX2dnLFxcbiAgICAgICAgSEggPSBtZDUuX2hoLFxcbiAgICAgICAgSUkgPSBtZDUuX2lpO1xcblxcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpICs9IDE2KSB7XFxuXFxuICAgICAgdmFyIGFhID0gYSxcXG4gICAgICAgICAgYmIgPSBiLFxcbiAgICAgICAgICBjYyA9IGMsXFxuICAgICAgICAgIGRkID0gZDtcXG5cXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKyAwXSwgIDcsIC02ODA4NzY5MzYpO1xcbiAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW2krIDFdLCAxMiwgLTM4OTU2NDU4Nik7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsgMl0sIDE3LCAgNjA2MTA1ODE5KTtcXG4gICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtpKyAzXSwgMjIsIC0xMDQ0NTI1MzMwKTtcXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKyA0XSwgIDcsIC0xNzY0MTg4OTcpO1xcbiAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW2krIDVdLCAxMiwgIDEyMDAwODA0MjYpO1xcbiAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBtW2krIDZdLCAxNywgLTE0NzMyMzEzNDEpO1xcbiAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBtW2krIDddLCAyMiwgLTQ1NzA1OTgzKTtcXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKyA4XSwgIDcsICAxNzcwMDM1NDE2KTtcXG4gICAgICBkID0gRkYoZCwgYSwgYiwgYywgbVtpKyA5XSwgMTIsIC0xOTU4NDE0NDE3KTtcXG4gICAgICBjID0gRkYoYywgZCwgYSwgYiwgbVtpKzEwXSwgMTcsIC00MjA2Myk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsxMV0sIDIyLCAtMTk5MDQwNDE2Mik7XFxuICAgICAgYSA9IEZGKGEsIGIsIGMsIGQsIG1baSsxMl0sICA3LCAgMTgwNDYwMzY4Mik7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsxM10sIDEyLCAtNDAzNDExMDEpO1xcbiAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBtW2krMTRdLCAxNywgLTE1MDIwMDIyOTApO1xcbiAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBtW2krMTVdLCAyMiwgIDEyMzY1MzUzMjkpO1xcblxcbiAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBtW2krIDFdLCAgNSwgLTE2NTc5NjUxMCk7XFxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsgNl0sICA5LCAtMTA2OTUwMTYzMik7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsxMV0sIDE0LCAgNjQzNzE3NzEzKTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyAwXSwgMjAsIC0zNzM4OTczMDIpO1xcbiAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBtW2krIDVdLCAgNSwgLTcwMTU1ODY5MSk7XFxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsxMF0sICA5LCAgMzgwMTYwODMpO1xcbiAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBtW2krMTVdLCAxNCwgLTY2MDQ3ODMzNSk7XFxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsgNF0sIDIwLCAtNDA1NTM3ODQ4KTtcXG4gICAgICBhID0gR0coYSwgYiwgYywgZCwgbVtpKyA5XSwgIDUsICA1Njg0NDY0MzgpO1xcbiAgICAgIGQgPSBHRyhkLCBhLCBiLCBjLCBtW2krMTRdLCAgOSwgLTEwMTk4MDM2OTApO1xcbiAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBtW2krIDNdLCAxNCwgLTE4NzM2Mzk2MSk7XFxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsgOF0sIDIwLCAgMTE2MzUzMTUwMSk7XFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsxM10sICA1LCAtMTQ0NDY4MTQ2Nyk7XFxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsgMl0sICA5LCAtNTE0MDM3ODQpO1xcbiAgICAgIGMgPSBHRyhjLCBkLCBhLCBiLCBtW2krIDddLCAxNCwgIDE3MzUzMjg0NzMpO1xcbiAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBtW2krMTJdLCAyMCwgLTE5MjY2MDc3MzQpO1xcblxcbiAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBtW2krIDVdLCAgNCwgLTM3ODU1OCk7XFxuICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1baSsgOF0sIDExLCAtMjAyMjU3NDQ2Myk7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsxMV0sIDE2LCAgMTgzOTAzMDU2Mik7XFxuICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1baSsxNF0sIDIzLCAtMzUzMDk1NTYpO1xcbiAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBtW2krIDFdLCAgNCwgLTE1MzA5OTIwNjApO1xcbiAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBtW2krIDRdLCAxMSwgIDEyNzI4OTMzNTMpO1xcbiAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBtW2krIDddLCAxNiwgLTE1NTQ5NzYzMik7XFxuICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1baSsxMF0sIDIzLCAtMTA5NDczMDY0MCk7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsxM10sICA0LCAgNjgxMjc5MTc0KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKyAwXSwgMTEsIC0zNTg1MzcyMjIpO1xcbiAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBtW2krIDNdLCAxNiwgLTcyMjUyMTk3OSk7XFxuICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1baSsgNl0sIDIzLCAgNzYwMjkxODkpO1xcbiAgICAgIGEgPSBISChhLCBiLCBjLCBkLCBtW2krIDldLCAgNCwgLTY0MDM2NDQ4Nyk7XFxuICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1baSsxMl0sIDExLCAtNDIxODE1ODM1KTtcXG4gICAgICBjID0gSEgoYywgZCwgYSwgYiwgbVtpKzE1XSwgMTYsICA1MzA3NDI1MjApO1xcbiAgICAgIGIgPSBISChiLCBjLCBkLCBhLCBtW2krIDJdLCAyMywgLTk5NTMzODY1MSk7XFxuXFxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsgMF0sICA2LCAtMTk4NjMwODQ0KTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKyA3XSwgMTAsICAxMTI2ODkxNDE1KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKzE0XSwgMTUsIC0xNDE2MzU0OTA1KTtcXG4gICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtpKyA1XSwgMjEsIC01NzQzNDA1NSk7XFxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsxMl0sICA2LCAgMTcwMDQ4NTU3MSk7XFxuICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIG1baSsgM10sIDEwLCAtMTg5NDk4NjYwNik7XFxuICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIG1baSsxMF0sIDE1LCAtMTA1MTUyMyk7XFxuICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIG1baSsgMV0sIDIxLCAtMjA1NDkyMjc5OSk7XFxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsgOF0sICA2LCAgMTg3MzMxMzM1OSk7XFxuICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIG1baSsxNV0sIDEwLCAtMzA2MTE3NDQpO1xcbiAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBtW2krIDZdLCAxNSwgLTE1NjAxOTgzODApO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krMTNdLCAyMSwgIDEzMDkxNTE2NDkpO1xcbiAgICAgIGEgPSBJSShhLCBiLCBjLCBkLCBtW2krIDRdLCAgNiwgLTE0NTUyMzA3MCk7XFxuICAgICAgZCA9IElJKGQsIGEsIGIsIGMsIG1baSsxMV0sIDEwLCAtMTEyMDIxMDM3OSk7XFxuICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIG1baSsgMl0sIDE1LCAgNzE4Nzg3MjU5KTtcXG4gICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtpKyA5XSwgMjEsIC0zNDM0ODU1NTEpO1xcblxcbiAgICAgIGEgPSAoYSArIGFhKSA+Pj4gMDtcXG4gICAgICBiID0gKGIgKyBiYikgPj4+IDA7XFxuICAgICAgYyA9IChjICsgY2MpID4+PiAwO1xcbiAgICAgIGQgPSAoZCArIGRkKSA+Pj4gMDtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gY3J5cHQuZW5kaWFuKFthLCBiLCBjLCBkXSk7XFxuICB9O1xcblxcbiAgLy8gQXV4aWxpYXJ5IGZ1bmN0aW9uc1xcbiAgbWQ1Ll9mZiAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYiAmIGMgfCB+YiAmIGQpICsgKHggPj4+IDApICsgdDtcXG4gICAgcmV0dXJuICgobiA8PCBzKSB8IChuID4+PiAoMzIgLSBzKSkpICsgYjtcXG4gIH07XFxuICBtZDUuX2dnICA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XFxuICAgIHZhciBuID0gYSArIChiICYgZCB8IGMgJiB+ZCkgKyAoeCA+Pj4gMCkgKyB0O1xcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xcbiAgfTtcXG4gIG1kNS5faGggID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcXG4gICAgdmFyIG4gPSBhICsgKGIgXiBjIF4gZCkgKyAoeCA+Pj4gMCkgKyB0O1xcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xcbiAgfTtcXG4gIG1kNS5faWkgID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcXG4gICAgdmFyIG4gPSBhICsgKGMgXiAoYiB8IH5kKSkgKyAoeCA+Pj4gMCkgKyB0O1xcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xcbiAgfTtcXG5cXG4gIC8vIFBhY2thZ2UgcHJpdmF0ZSBibG9ja3NpemVcXG4gIG1kNS5fYmxvY2tzaXplID0gMTY7XFxuICBtZDUuX2RpZ2VzdHNpemUgPSAxNjtcXG5cXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG9wdGlvbnMpIHtcXG4gICAgaWYgKG1lc3NhZ2UgPT09IHVuZGVmaW5lZCB8fCBtZXNzYWdlID09PSBudWxsKVxcbiAgICAgIHRocm93IG5ldyBFcnJvcignSWxsZWdhbCBhcmd1bWVudCAnICsgbWVzc2FnZSk7XFxuXFxuICAgIHZhciBkaWdlc3RieXRlcyA9IGNyeXB0LndvcmRzVG9CeXRlcyhtZDUobWVzc2FnZSwgb3B0aW9ucykpO1xcbiAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLmFzQnl0ZXMgPyBkaWdlc3RieXRlcyA6XFxuICAgICAgICBvcHRpb25zICYmIG9wdGlvbnMuYXNTdHJpbmcgPyBiaW4uYnl0ZXNUb1N0cmluZyhkaWdlc3RieXRlcykgOlxcbiAgICAgICAgY3J5cHQuYnl0ZXNUb0hleChkaWdlc3RieXRlcyk7XFxuICB9O1xcblxcbn0pKCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjY1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbihmdW5jdGlvbigpIHtcXG4gIHZhciBiYXNlNjRtYXBcXG4gICAgICA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJyxcXG5cXG4gIGNyeXB0ID0ge1xcbiAgICAvLyBCaXQtd2lzZSByb3RhdGlvbiBsZWZ0XFxuICAgIHJvdGw6IGZ1bmN0aW9uKG4sIGIpIHtcXG4gICAgICByZXR1cm4gKG4gPDwgYikgfCAobiA+Pj4gKDMyIC0gYikpO1xcbiAgICB9LFxcblxcbiAgICAvLyBCaXQtd2lzZSByb3RhdGlvbiByaWdodFxcbiAgICByb3RyOiBmdW5jdGlvbihuLCBiKSB7XFxuICAgICAgcmV0dXJuIChuIDw8ICgzMiAtIGIpKSB8IChuID4+PiBiKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gU3dhcCBiaWctZW5kaWFuIHRvIGxpdHRsZS1lbmRpYW4gYW5kIHZpY2UgdmVyc2FcXG4gICAgZW5kaWFuOiBmdW5jdGlvbihuKSB7XFxuICAgICAgLy8gSWYgbnVtYmVyIGdpdmVuLCBzd2FwIGVuZGlhblxcbiAgICAgIGlmIChuLmNvbnN0cnVjdG9yID09IE51bWJlcikge1xcbiAgICAgICAgcmV0dXJuIGNyeXB0LnJvdGwobiwgOCkgJiAweDAwRkYwMEZGIHwgY3J5cHQucm90bChuLCAyNCkgJiAweEZGMDBGRjAwO1xcbiAgICAgIH1cXG5cXG4gICAgICAvLyBFbHNlLCBhc3N1bWUgYXJyYXkgYW5kIHN3YXAgYWxsIGl0ZW1zXFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuLmxlbmd0aDsgaSsrKVxcbiAgICAgICAgbltpXSA9IGNyeXB0LmVuZGlhbihuW2ldKTtcXG4gICAgICByZXR1cm4gbjtcXG4gICAgfSxcXG5cXG4gICAgLy8gR2VuZXJhdGUgYW4gYXJyYXkgb2YgYW55IGxlbmd0aCBvZiByYW5kb20gYnl0ZXNcXG4gICAgcmFuZG9tQnl0ZXM6IGZ1bmN0aW9uKG4pIHtcXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdOyBuID4gMDsgbi0tKVxcbiAgICAgICAgYnl0ZXMucHVzaChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyNTYpKTtcXG4gICAgICByZXR1cm4gYnl0ZXM7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBieXRlIGFycmF5IHRvIGJpZy1lbmRpYW4gMzItYml0IHdvcmRzXFxuICAgIGJ5dGVzVG9Xb3JkczogZnVuY3Rpb24oYnl0ZXMpIHtcXG4gICAgICBmb3IgKHZhciB3b3JkcyA9IFtdLCBpID0gMCwgYiA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKywgYiArPSA4KVxcbiAgICAgICAgd29yZHNbYiA+Pj4gNV0gfD0gYnl0ZXNbaV0gPDwgKDI0IC0gYiAlIDMyKTtcXG4gICAgICByZXR1cm4gd29yZHM7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYmlnLWVuZGlhbiAzMi1iaXQgd29yZHMgdG8gYSBieXRlIGFycmF5XFxuICAgIHdvcmRzVG9CeXRlczogZnVuY3Rpb24od29yZHMpIHtcXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBiID0gMDsgYiA8IHdvcmRzLmxlbmd0aCAqIDMyOyBiICs9IDgpXFxuICAgICAgICBieXRlcy5wdXNoKCh3b3Jkc1tiID4+PiA1XSA+Pj4gKDI0IC0gYiAlIDMyKSkgJiAweEZGKTtcXG4gICAgICByZXR1cm4gYnl0ZXM7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBieXRlIGFycmF5IHRvIGEgaGV4IHN0cmluZ1xcbiAgICBieXRlc1RvSGV4OiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIGhleCA9IFtdLCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBoZXgucHVzaCgoYnl0ZXNbaV0gPj4+IDQpLnRvU3RyaW5nKDE2KSk7XFxuICAgICAgICBoZXgucHVzaCgoYnl0ZXNbaV0gJiAweEYpLnRvU3RyaW5nKDE2KSk7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBoZXguam9pbignJyk7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBoZXggc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBoZXhUb0J5dGVzOiBmdW5jdGlvbihoZXgpIHtcXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBjID0gMDsgYyA8IGhleC5sZW5ndGg7IGMgKz0gMilcXG4gICAgICAgIGJ5dGVzLnB1c2gocGFyc2VJbnQoaGV4LnN1YnN0cihjLCAyKSwgMTYpKTtcXG4gICAgICByZXR1cm4gYnl0ZXM7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBieXRlIGFycmF5IHRvIGEgYmFzZS02NCBzdHJpbmdcXG4gICAgYnl0ZXNUb0Jhc2U2NDogZnVuY3Rpb24oYnl0ZXMpIHtcXG4gICAgICBmb3IgKHZhciBiYXNlNjQgPSBbXSwgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMykge1xcbiAgICAgICAgdmFyIHRyaXBsZXQgPSAoYnl0ZXNbaV0gPDwgMTYpIHwgKGJ5dGVzW2kgKyAxXSA8PCA4KSB8IGJ5dGVzW2kgKyAyXTtcXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgNDsgaisrKVxcbiAgICAgICAgICBpZiAoaSAqIDggKyBqICogNiA8PSBieXRlcy5sZW5ndGggKiA4KVxcbiAgICAgICAgICAgIGJhc2U2NC5wdXNoKGJhc2U2NG1hcC5jaGFyQXQoKHRyaXBsZXQgPj4+IDYgKiAoMyAtIGopKSAmIDB4M0YpKTtcXG4gICAgICAgICAgZWxzZVxcbiAgICAgICAgICAgIGJhc2U2NC5wdXNoKCc9Jyk7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBiYXNlNjQuam9pbignJyk7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBiYXNlLTY0IHN0cmluZyB0byBhIGJ5dGUgYXJyYXlcXG4gICAgYmFzZTY0VG9CeXRlczogZnVuY3Rpb24oYmFzZTY0KSB7XFxuICAgICAgLy8gUmVtb3ZlIG5vbi1iYXNlLTY0IGNoYXJhY3RlcnNcXG4gICAgICBiYXNlNjQgPSBiYXNlNjQucmVwbGFjZSgvW15BLVowLTkrXFxcXC9dL2lnLCAnJyk7XFxuXFxuICAgICAgZm9yICh2YXIgYnl0ZXMgPSBbXSwgaSA9IDAsIGltb2Q0ID0gMDsgaSA8IGJhc2U2NC5sZW5ndGg7XFxuICAgICAgICAgIGltb2Q0ID0gKytpICUgNCkge1xcbiAgICAgICAgaWYgKGltb2Q0ID09IDApIGNvbnRpbnVlO1xcbiAgICAgICAgYnl0ZXMucHVzaCgoKGJhc2U2NG1hcC5pbmRleE9mKGJhc2U2NC5jaGFyQXQoaSAtIDEpKVxcbiAgICAgICAgICAgICYgKE1hdGgucG93KDIsIC0yICogaW1vZDQgKyA4KSAtIDEpKSA8PCAoaW1vZDQgKiAyKSlcXG4gICAgICAgICAgICB8IChiYXNlNjRtYXAuaW5kZXhPZihiYXNlNjQuY2hhckF0KGkpKSA+Pj4gKDYgLSBpbW9kNCAqIDIpKSk7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfVxcbiAgfTtcXG5cXG4gIG1vZHVsZS5leHBvcnRzID0gY3J5cHQ7XFxufSkoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuLyohXFxuICogRGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIEJ1ZmZlclxcbiAqXFxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cXG4gKiBAbGljZW5zZSAgTUlUXFxuICovXFxuXFxuLy8gVGhlIF9pc0J1ZmZlciBjaGVjayBpcyBmb3IgU2FmYXJpIDUtNyBzdXBwb3J0LCBiZWNhdXNlIGl0J3MgbWlzc2luZ1xcbi8vIE9iamVjdC5wcm90b3R5cGUuY29uc3RydWN0b3IuIFJlbW92ZSB0aGlzIGV2ZW50dWFsbHlcXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcXG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiAoaXNCdWZmZXIob2JqKSB8fCBpc1Nsb3dCdWZmZXIob2JqKSB8fCAhIW9iai5faXNCdWZmZXIpXFxufVxcblxcbmZ1bmN0aW9uIGlzQnVmZmVyIChvYmopIHtcXG4gIHJldHVybiAhIW9iai5jb25zdHJ1Y3RvciAmJiB0eXBlb2Ygb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihvYmopXFxufVxcblxcbi8vIEZvciBOb2RlIHYwLjEwIHN1cHBvcnQuIFJlbW92ZSB0aGlzIGV2ZW50dWFsbHkuXFxuZnVuY3Rpb24gaXNTbG93QnVmZmVyIChvYmopIHtcXG4gIHJldHVybiB0eXBlb2Ygb2JqLnJlYWRGbG9hdExFID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouc2xpY2UgPT09ICdmdW5jdGlvbicgJiYgaXNCdWZmZXIob2JqLnNsaWNlKDAsIDApKVxcbn1cXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKG1vZHVsZSwgZ2xvYmFsKSB7dmFyIF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fOy8qISBodHRwOi8vbXRocy5iZS9iYXNlNjQgdjAuMS4wIGJ5IEBtYXRoaWFzIHwgTUlUIGxpY2Vuc2UgKi9cXG47KGZ1bmN0aW9uKHJvb3QpIHtcXG5cXG5cXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZXMgYGV4cG9ydHNgLlxcblxcdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHM7XFxuXFxuXFx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuXFxuXFx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxcblxcdFxcdG1vZHVsZS5leHBvcnRzID09IGZyZWVFeHBvcnRzICYmIG1vZHVsZTtcXG5cXG5cXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCwgZnJvbSBOb2RlLmpzIG9yIEJyb3dzZXJpZmllZCBjb2RlLCBhbmQgdXNlXFxuXFx0Ly8gaXQgYXMgYHJvb3RgLlxcblxcdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XFxuXFx0aWYgKGZyZWVHbG9iYWwuZ2xvYmFsID09PSBmcmVlR2xvYmFsIHx8IGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsKSB7XFxuXFx0XFx0cm9vdCA9IGZyZWVHbG9iYWw7XFxuXFx0fVxcblxcblxcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xcblxcblxcdHZhciBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XFxuXFx0XFx0dGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcXG5cXHR9O1xcblxcdEludmFsaWRDaGFyYWN0ZXJFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3I7XFxuXFx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0ludmFsaWRDaGFyYWN0ZXJFcnJvcic7XFxuXFxuXFx0dmFyIGVycm9yID0gZnVuY3Rpb24obWVzc2FnZSkge1xcblxcdFxcdC8vIE5vdGU6IHRoZSBlcnJvciBtZXNzYWdlcyB1c2VkIHRocm91Z2hvdXQgdGhpcyBmaWxlIG1hdGNoIHRob3NlIHVzZWQgYnlcXG5cXHRcXHQvLyB0aGUgbmF0aXZlIGBhdG9iYC9gYnRvYWAgaW1wbGVtZW50YXRpb24gaW4gQ2hyb21pdW0uXFxuXFx0XFx0dGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvcihtZXNzYWdlKTtcXG5cXHR9O1xcblxcblxcdHZhciBUQUJMRSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcXG5cXHQvLyBodHRwOi8vd2hhdHdnLm9yZy9odG1sL2NvbW1vbi1taWNyb3N5bnRheGVzLmh0bWwjc3BhY2UtY2hhcmFjdGVyXFxuXFx0dmFyIFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMgPSAvW1xcXFx0XFxcXG5cXFxcZlxcXFxyIF0vZztcXG5cXG5cXHQvLyBgZGVjb2RlYCBpcyBkZXNpZ25lZCB0byBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGggYGF0b2JgIGFzIGRlc2NyaWJlZCBpbiB0aGVcXG5cXHQvLyBIVE1MIFN0YW5kYXJkLiBodHRwOi8vd2hhdHdnLm9yZy9odG1sL3dlYmFwcGFwaXMuaHRtbCNkb20td2luZG93YmFzZTY0LWF0b2JcXG5cXHQvLyBUaGUgb3B0aW1pemVkIGJhc2U2NC1kZWNvZGluZyBhbGdvcml0aG0gdXNlZCBpcyBiYXNlZCBvbiBAYXRr4oCZcyBleGNlbGxlbnRcXG5cXHQvLyBpbXBsZW1lbnRhdGlvbi4gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vYXRrLzEwMjAzOTZcXG5cXHR2YXIgZGVjb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcXG5cXHRcXHRpbnB1dCA9IFN0cmluZyhpbnB1dClcXG5cXHRcXHRcXHQucmVwbGFjZShSRUdFWF9TUEFDRV9DSEFSQUNURVJTLCAnJyk7XFxuXFx0XFx0dmFyIGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcXG5cXHRcXHRpZiAobGVuZ3RoICUgNCA9PSAwKSB7XFxuXFx0XFx0XFx0aW5wdXQgPSBpbnB1dC5yZXBsYWNlKC89PT8kLywgJycpO1xcblxcdFxcdFxcdGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcXG5cXHRcXHR9XFxuXFx0XFx0aWYgKFxcblxcdFxcdFxcdGxlbmd0aCAlIDQgPT0gMSB8fFxcblxcdFxcdFxcdC8vIGh0dHA6Ly93aGF0d2cub3JnL0MjYWxwaGFudW1lcmljLWFzY2lpLWNoYXJhY3RlcnNcXG5cXHRcXHRcXHQvW14rYS16QS1aMC05L10vLnRlc3QoaW5wdXQpXFxuXFx0XFx0KSB7XFxuXFx0XFx0XFx0ZXJyb3IoXFxuXFx0XFx0XFx0XFx0J0ludmFsaWQgY2hhcmFjdGVyOiB0aGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLidcXG5cXHRcXHRcXHQpO1xcblxcdFxcdH1cXG5cXHRcXHR2YXIgYml0Q291bnRlciA9IDA7XFxuXFx0XFx0dmFyIGJpdFN0b3JhZ2U7XFxuXFx0XFx0dmFyIGJ1ZmZlcjtcXG5cXHRcXHR2YXIgb3V0cHV0ID0gJyc7XFxuXFx0XFx0dmFyIHBvc2l0aW9uID0gLTE7XFxuXFx0XFx0d2hpbGUgKCsrcG9zaXRpb24gPCBsZW5ndGgpIHtcXG5cXHRcXHRcXHRidWZmZXIgPSBUQUJMRS5pbmRleE9mKGlucHV0LmNoYXJBdChwb3NpdGlvbikpO1xcblxcdFxcdFxcdGJpdFN0b3JhZ2UgPSBiaXRDb3VudGVyICUgNCA/IGJpdFN0b3JhZ2UgKiA2NCArIGJ1ZmZlciA6IGJ1ZmZlcjtcXG5cXHRcXHRcXHQvLyBVbmxlc3MgdGhpcyBpcyB0aGUgZmlyc3Qgb2YgYSBncm91cCBvZiA0IGNoYXJhY3RlcnPigKZcXG5cXHRcXHRcXHRpZiAoYml0Q291bnRlcisrICUgNCkge1xcblxcdFxcdFxcdFxcdC8vIOKApmNvbnZlcnQgdGhlIGZpcnN0IDggYml0cyB0byBhIHNpbmdsZSBBU0NJSSBjaGFyYWN0ZXIuXFxuXFx0XFx0XFx0XFx0b3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoXFxuXFx0XFx0XFx0XFx0XFx0MHhGRiAmIGJpdFN0b3JhZ2UgPj4gKC0yICogYml0Q291bnRlciAmIDYpXFxuXFx0XFx0XFx0XFx0KTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fVxcblxcdFxcdHJldHVybiBvdXRwdXQ7XFxuXFx0fTtcXG5cXG5cXHQvLyBgZW5jb2RlYCBpcyBkZXNpZ25lZCB0byBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGggYGJ0b2FgIGFzIGRlc2NyaWJlZCBpbiB0aGVcXG5cXHQvLyBIVE1MIFN0YW5kYXJkOiBodHRwOi8vd2hhdHdnLm9yZy9odG1sL3dlYmFwcGFwaXMuaHRtbCNkb20td2luZG93YmFzZTY0LWJ0b2FcXG5cXHR2YXIgZW5jb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcXG5cXHRcXHRpbnB1dCA9IFN0cmluZyhpbnB1dCk7XFxuXFx0XFx0aWYgKC9bXlxcXFwwLVxcXFx4RkZdLy50ZXN0KGlucHV0KSkge1xcblxcdFxcdFxcdC8vIE5vdGU6IG5vIG5lZWQgdG8gc3BlY2lhbC1jYXNlIGFzdHJhbCBzeW1ib2xzIGhlcmUsIGFzIHN1cnJvZ2F0ZXMgYXJlXFxuXFx0XFx0XFx0Ly8gbWF0Y2hlZCwgYW5kIHRoZSBpbnB1dCBpcyBzdXBwb3NlZCB0byBvbmx5IGNvbnRhaW4gQVNDSUkgYW55d2F5LlxcblxcdFxcdFxcdGVycm9yKFxcblxcdFxcdFxcdFxcdCdUaGUgc3RyaW5nIHRvIGJlIGVuY29kZWQgY29udGFpbnMgY2hhcmFjdGVycyBvdXRzaWRlIG9mIHRoZSAnICtcXG5cXHRcXHRcXHRcXHQnTGF0aW4xIHJhbmdlLidcXG5cXHRcXHRcXHQpO1xcblxcdFxcdH1cXG5cXHRcXHR2YXIgcGFkZGluZyA9IGlucHV0Lmxlbmd0aCAlIDM7XFxuXFx0XFx0dmFyIG91dHB1dCA9ICcnO1xcblxcdFxcdHZhciBwb3NpdGlvbiA9IC0xO1xcblxcdFxcdHZhciBhO1xcblxcdFxcdHZhciBiO1xcblxcdFxcdHZhciBjO1xcblxcdFxcdHZhciBkO1xcblxcdFxcdHZhciBidWZmZXI7XFxuXFx0XFx0Ly8gTWFrZSBzdXJlIGFueSBwYWRkaW5nIGlzIGhhbmRsZWQgb3V0c2lkZSBvZiB0aGUgbG9vcC5cXG5cXHRcXHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoIC0gcGFkZGluZztcXG5cXG5cXHRcXHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xcblxcdFxcdFxcdC8vIFJlYWQgdGhyZWUgYnl0ZXMsIGkuZS4gMjQgYml0cy5cXG5cXHRcXHRcXHRhID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbikgPDwgMTY7XFxuXFx0XFx0XFx0YiA9IGlucHV0LmNoYXJDb2RlQXQoKytwb3NpdGlvbikgPDwgODtcXG5cXHRcXHRcXHRjID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKTtcXG5cXHRcXHRcXHRidWZmZXIgPSBhICsgYiArIGM7XFxuXFx0XFx0XFx0Ly8gVHVybiB0aGUgMjQgYml0cyBpbnRvIGZvdXIgY2h1bmtzIG9mIDYgYml0cyBlYWNoLCBhbmQgYXBwZW5kIHRoZVxcblxcdFxcdFxcdC8vIG1hdGNoaW5nIGNoYXJhY3RlciBmb3IgZWFjaCBvZiB0aGVtIHRvIHRoZSBvdXRwdXQuXFxuXFx0XFx0XFx0b3V0cHV0ICs9IChcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDE4ICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTIgJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiA2ICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgJiAweDNGKVxcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcblxcdFxcdGlmIChwYWRkaW5nID09IDIpIHtcXG5cXHRcXHRcXHRhID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbikgPDwgODtcXG5cXHRcXHRcXHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKTtcXG5cXHRcXHRcXHRidWZmZXIgPSBhICsgYjtcXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTApICtcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA+PiA0KSAmIDB4M0YpICtcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA8PCAyKSAmIDB4M0YpICtcXG5cXHRcXHRcXHRcXHQnPSdcXG5cXHRcXHRcXHQpO1xcblxcdFxcdH0gZWxzZSBpZiAocGFkZGluZyA9PSAxKSB7XFxuXFx0XFx0XFx0YnVmZmVyID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbik7XFxuXFx0XFx0XFx0b3V0cHV0ICs9IChcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDIpICtcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA8PCA0KSAmIDB4M0YpICtcXG5cXHRcXHRcXHRcXHQnPT0nXFxuXFx0XFx0XFx0KTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0cmV0dXJuIG91dHB1dDtcXG5cXHR9O1xcblxcblxcdHZhciBiYXNlNjQgPSB7XFxuXFx0XFx0J2VuY29kZSc6IGVuY29kZSxcXG5cXHRcXHQnZGVjb2RlJzogZGVjb2RlLFxcblxcdFxcdCd2ZXJzaW9uJzogJzAuMS4wJ1xcblxcdH07XFxuXFxuXFx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXFxuXFx0Ly8gbGlrZSB0aGUgZm9sbG93aW5nOlxcblxcdGlmIChcXG5cXHRcXHR0cnVlXFxuXFx0KSB7XFxuXFx0XFx0IShfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyA9IChmdW5jdGlvbigpIHtcXG5cXHRcXHRcXHRyZXR1cm4gYmFzZTY0O1xcblxcdFxcdH0pLmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXywgZXhwb3J0cywgbW9kdWxlKSxcXG5cXHRcXHRcXHRcXHRfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyAhPT0gdW5kZWZpbmVkICYmIChtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fKSk7XFxuXFx0fVxcdGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmICFmcmVlRXhwb3J0cy5ub2RlVHlwZSkge1xcblxcdFxcdGlmIChmcmVlTW9kdWxlKSB7IC8vIGluIE5vZGUuanMgb3IgUmluZ29KUyB2MC44LjArXFxuXFx0XFx0XFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gYmFzZTY0O1xcblxcdFxcdH0gZWxzZSB7IC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXFxuXFx0XFx0XFx0Zm9yICh2YXIga2V5IGluIGJhc2U2NCkge1xcblxcdFxcdFxcdFxcdGJhc2U2NC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gYmFzZTY0W2tleV0pO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0fSBlbHNlIHsgLy8gaW4gUmhpbm8gb3IgYSB3ZWIgYnJvd3NlclxcblxcdFxcdHJvb3QuYmFzZTY0ID0gYmFzZTY0O1xcblxcdH1cXG5cXG59KHRoaXMpKTtcXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXygyNjgpKG1vZHVsZSksIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcXG5cXHRpZighbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xcblxcdFxcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xcblxcdFxcdG1vZHVsZS5wYXRocyA9IFtdO1xcblxcdFxcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxcblxcdFxcdGlmKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xcblxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFxcXCJsb2FkZWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUubDtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImlkXFxcIiwge1xcblxcdFxcdFxcdGVudW1lcmFibGU6IHRydWUsXFxuXFx0XFx0XFx0Z2V0OiBmdW5jdGlvbigpIHtcXG5cXHRcXHRcXHRcXHRyZXR1cm4gbW9kdWxlLmk7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH0pO1xcblxcdFxcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xcblxcdH1cXG5cXHRyZXR1cm4gbW9kdWxlO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjY5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbmV4cG9ydHMuTVVMVElMQU5HVUFHRV9XT1JESU5HUyA9IHtcXG4gICAgc2F2ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VucmVnaXN0cmVyJ1xcbiAgICB9LFxcbiAgICBzYXZlQ2hhbmdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgY2hhbmdlcycsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZXIgbW9kaWZpY2F0aW9ucydcXG4gICAgfSxcXG4gICAgY2FuY2VsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2FuY2VsJyxcXG4gICAgICAgICdmci1GUic6ICdBbm51bGVyJ1xcbiAgICB9LFxcbiAgICBlbWFpbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VtYWlsJyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCdcXG4gICAgfSxcXG4gICAgc3VibWl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VibWl0JyxcXG4gICAgICAgICdmci1GUic6ICdWYWxpZGVyJ1xcbiAgICB9LFxcbiAgICBjb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29uZmlybScsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlybWVyJ1xcbiAgICB9LFxcbiAgICBkZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lcidcXG4gICAgfSxcXG4gICAgZW5hYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VuYWJsZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FjdGlmJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Blcm1pc3Npb25zJyxcXG4gICAgICAgICdmci1GUic6ICdQZXJtaXNzaW9ucydcXG4gICAgfSxcXG4gICAgZGVzY3JpcHRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZXNjcmlwdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRGVzY3JpcHRpb24nXFxuICAgIH0sXFxuICAgIG5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdOb20nXFxuICAgIH0sXFxuICAgIG5vRGF0YUZvdW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gZGF0YSBmb3VuZCcsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIGRvbm7DqWUnXFxuICAgIH0sXFxuICAgIGZpcnN0bmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpcnN0IG5hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byw6lub20nXFxuICAgIH0sXFxuICAgIGxvYWRpbmdFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xvYWRpbmcgZXJyb3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VycmV1ciBkZSBjaGFyZ2VtZW50J1xcbiAgICB9LFxcbiAgICBkZXRhaWxzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGV0YWlscycsXFxuICAgICAgICAnZnItRlInOiAnRMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIGxhc3RuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFzdCBuYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdOb20nXFxuICAgIH0sXFxuICAgIGVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXJyb3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VycmV1cidcXG4gICAgfSxcXG4gICAgcmVnaXN0ZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RlcicsXFxuICAgICAgICAnZnItRlInOiAnU1xcXFwnZW5yZWdpc3RyZXInXFxuICAgIH0sXFxuICAgIGluc3RhbmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luc3RhbmNlJ1xcbiAgICB9LFxcbiAgICBtZXNzYWdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lc3NhZ2VzJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlcydcXG4gICAgfSxcXG4gICAgdGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaXRsZScsXFxuICAgICAgICAnZnItRlInOiAnVGl0cmUnXFxuICAgIH0sXFxuICAgIHVzZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgbXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNci4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ00uJ1xcbiAgICB9LFxcbiAgICBtcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNcnMuJyxcXG4gICAgICAgICdmci1GUic6ICdNbWUnXFxuICAgIH0sXFxuICAgIG1zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTXMuJyxcXG4gICAgICAgICdmci1GUic6ICdNZWxsZSdcXG4gICAgfSxcXG4gICAgcHJvZjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Byb2YuJyxcXG4gICAgICAgICdmci1GUic6ICdQcidcXG4gICAgfSxcXG4gICAgZHI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEci4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RyJ1xcbiAgICB9LFxcbiAgICBzYWx1dGF0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2FsdXRhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnU2FsdXRhdGlvbidcXG4gICAgfSxcXG4gICAgY29tcGFueToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbXBhbnknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1NvY2nDqXTDqSdcXG4gICAgfSxcXG4gICAgY29tcGFueU5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb21wYW55IG5hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSBkZSBsYSBzb2Npw6l0w6knXFxuICAgIH0sXFxuICAgIGFkZHJlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGRyZXNzJyxcXG4gICAgICAgICdmci1GUic6ICdBZHJlc3NlJ1xcbiAgICB9LFxcbiAgICBjaXR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2l0eScsXFxuICAgICAgICAnZnItRlInOiAnVmlsbGUnXFxuICAgIH0sXFxuICAgIHN0YXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RhdGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJdGF0J1xcbiAgICB9LFxcbiAgICBjb3VudHJ5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ291bnRyeScsXFxuICAgICAgICAnZnItRlInOiAnUGF5cydcXG4gICAgfSxcXG4gICAgemlwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWmlwJyxcXG4gICAgICAgICdmci1GUic6ICdDb2RlIHBvc3RhbCdcXG4gICAgfSxcXG4gICAgcGhvbmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQaG9uZScsXFxuICAgICAgICAnZnItRlInOiAnVMOpbMOpcGhvbmUnXFxuICAgIH0sXFxuICAgIG1vYmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vYmlsZScsXFxuICAgICAgICAnZnItRlInOiAnTW9iaWxlJ1xcbiAgICB9LFxcbiAgICB3ZWJzaXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2Vic2l0ZScsXFxuICAgICAgICAnZnItRlInOiAnU2l0ZSB3ZWInXFxuICAgIH0sXFxuICAgIHN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RhcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqW1hcnJlcidcXG4gICAgfSxcXG4gICAgc3RvcDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N0b3AnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FycsOqdGVyJ1xcbiAgICB9LFxcbiAgICByZXNldDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc2V0JyxcXG4gICAgICAgICdmci1GUic6ICdSw6lpbml0aWFsaXNlcidcXG4gICAgfSxcXG4gICAgZWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VkaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXInXFxuICAgIH0sXFxuICAgIGNyZWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyJ1xcbiAgICB9LFxcbiAgICBhY3Rpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWN0aW9ucycsXFxuICAgICAgICAnZnItRlInOiAnQWN0aW9ucydcXG4gICAgfSxcXG4gICAgaW5mbzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0luZm8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm8nXFxuICAgIH0sXFxuICAgIHNlYXJjaFBsYWNlaG9sZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VhcmNoLi4uJyxcXG4gICAgICAgICdmci1GUic6ICdSZWNoZXJjaGVyLi4uJ1xcbiAgICB9LFxcbiAgICBrZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nsw6knXFxuICAgIH0sXFxuICAgIHZhbHVlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmFsdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGV1cidcXG4gICAgfSxcXG4gICAgZmllbGRSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcXVpcmVkIGZpZWxkJyxcXG4gICAgICAgICdmci1GUic6ICdDaGFtcCBvYmxpZ2F0b2lyZSdcXG4gICAgfSxcXG4gICAgc2hvd0RldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaG93IGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGVzIGTDqXRhaWxzJ1xcbiAgICB9LFxcbiAgICBjbG9zZURldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDbG9zZSBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdGZXJtZXIgbGVzIGTDqXRhaWxzJ1xcbiAgICB9LFxcbiAgICBzZWFyY2g6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWFyY2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hlcmNoZXInXFxuICAgIH0sXFxuICAgIGFkbWluaXN0cmF0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRtaW5pc3RyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FkbWluaXN0cmF0aW9uJ1xcbiAgICB9LFxcbiAgICBpdGVtQ3JlYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gY3JlYXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IGNyw6nDqSdcXG4gICAgfSxcXG4gICAgaXRlbVVwZGF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIHVwZGF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBtb2RpZmnDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbmFtZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIHJlbmFtZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSBkZSBsXFxcXCfDqWzDqW1lbnQgbW9kaWZpw6knXFxuICAgIH0sXFxuICAgIGl0ZW1EZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBkZWxldGVkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnQgc3VwcHJpbcOpJ1xcbiAgICB9LFxcbiAgICBjb25maXJtRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGl0ZW0/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgY2V0IMOpbMOpbWVudCA/J1xcbiAgICB9LFxcbiAgICBpdGVtc0ltcG9ydGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbXMgaW1wb3J0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudHMgaW1wb3J0w6lzJ1xcbiAgICB9LFxcbiAgICBjb25maXJtSXRlbXNEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZXNlIGl0ZW1zPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlcyDDqWzDqW1lbnRzID8nXFxuICAgIH0sXFxuICAgIGl0ZW1zRGVsZXRlSW1wb3NzaWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBjYW5cXFxcJ3QgZGVsZXRlIHRoZXNlIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdJbXBvc3NpYmxlIGRlIHN1cHByaW1lciBjZXMgw6lsw6ltZW50cydcXG4gICAgfSxcXG4gICAgd2FybmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dhcm5pbmcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F0dGVudGlvbidcXG4gICAgfSxcXG4gICAgZXhwb3J0SlNPTjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0V4cG9ydCBhcyBKU09OJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciAoSlNPTiknXFxuICAgIH0sXFxuICAgIHByb2ZpbGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9maWxlJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9maWwnXFxuICAgIH0sXFxuICAgIHRhcmdldDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhcmdldCcsXFxuICAgICAgICAnZnItRlInOiAnQ2libGUnXFxuICAgIH0sXFxuICAgIGJ5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnYnknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3BhcidcXG4gICAgfSxcXG4gICAgaW52YWxpZEVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBlbWFpbCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgaW52YWxpZGUnXFxuICAgIH0sXFxuICAgIGludmFsaWROdW1iZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNdXN0IGJlIGEgbnVtYmVyJyxcXG4gICAgICAgICdmci1GUic6ICdEb2l0IMOqdHJlIHVuIG5vbWJyZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZFVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgaHR0cHMgdXJsJyxcXG4gICAgICAgICdmci1GUic6ICdVcmwgaHR0cHMgaW52YWxpZCdcXG4gICAgfSxcXG4gICAgc3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N1Y2Nlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1Y2PDqHMnXFxuICAgIH0sXFxuICAgIHRhYkxpc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMaXN0ICh7dG90YWx9KScsXFxuICAgICAgICAnZnItRlInOiAnTGlzdGUgKHt0b3RhbH0pJ1xcbiAgICB9LFxcbiAgICB0YWJFZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlciAtIHtuYW1lfSdcXG4gICAgfSxcXG4gICAgdGFiQWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIC0gTmV3IGl0ZW0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgLSBOb3V2ZWwgw6lsw6ltZW50J1xcbiAgICB9LFxcbiAgICB0YWJSdW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdSdW4gLSB7bmFtZX0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4w6ljdXRlciAtIHtuYW1lfSdcXG4gICAgfSxcXG4gICAgdGFiVmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcgLSB7bmFtZX0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICBzZWxlY3RBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHRvdXQnXFxuICAgIH0sXFxuICAgIHVuc2VsZWN0QWxsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVW5zZWxlY3QgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdEw6lzw6lsZWN0aW9ubmVyIHRvdXQnXFxuICAgIH0sXFxuICAgIGFkZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCcsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlcidcXG4gICAgfSxcXG4gICAgaW1wb3J0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0JyxcXG4gICAgICAgICdmci1GUic6ICdJbXBvcnRlcidcXG4gICAgfSxcXG4gICAgZXhwb3J0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0JyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlcidcXG4gICAgfSxcXG4gICAgZXhwb3J0QWxsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IGFsbCcsXFxuICAgICAgICAnZnItRlInOiAnRXhwb3J0ZXIgdG91dCdcXG4gICAgfSxcXG4gICAgZGVsZXRlQWxsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGFsbCcsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIHRvdXQnXFxuICAgIH0sXFxuICAgIHNhdmVBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTYXZlIGFsbCcsXFxuICAgICAgICAnZnItRlInOiAnU2F1dmVnYXJkZXIgdG91dCdcXG4gICAgfSxcXG4gICAgcnVuOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVuJyxcXG4gICAgICAgICdmci1GUic6ICdFeMOpY3V0ZXInXFxuICAgIH0sXFxuICAgIHJlbmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnUmVub21tZXInXFxuICAgIH0sXFxuICAgIGR1cGxpY2F0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0R1cGxpY2F0ZScsXFxuICAgICAgICAnZnItRlInOiAnRHVwbGlxdWVyJ1xcbiAgICB9LFxcbiAgICB0eXBlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1R5cGVzJyxcXG4gICAgICAgICdmci1GUic6ICdUeXBlcydcXG4gICAgfSxcXG4gICAgZnVsbHNjcmVlbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Z1bGwtc2NyZWVuJyxcXG4gICAgICAgICdmci1GUic6ICdQbGVpbiDDqWNyYW4nXFxuICAgIH0sXFxuICAgIHJlZHVjZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZHVjZScsXFxuICAgICAgICAnZnItRlInOiAnUsOpZHVpcmUnXFxuICAgIH0sXFxuICAgIGFwcEtleToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FwcGxpY2F0aW9uIGtleScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqSBkXFxcXCdhcHBsaWNhdGlvbidcXG4gICAgfSxcXG4gICAgYXBwSW5mbzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FwcGxpY2F0aW9uIGluZm8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm9ybWF0aW9uIHN1ciBsXFxcXCdhcHBsaWNhdGlvbidcXG4gICAgfSxcXG4gICAgbGFzdE1vZGlmaWNhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3QgbW9kaWZpY2F0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXJuacOocmUgbW9kaWZpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0TW9kaWZpY2F0aW9uQnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IG1vZGlmaWNhdGlvbiBtYWRlIGJ5IHtuYW1lfSBvbiB7ZGF0ZX0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlcm5pw6hyZSBtb2RpZmljYXRpb24gZmFpdGUgcGFyIHtuYW1lfSBsZSB7ZGF0ZX0nXFxuICAgIH0sXFxuICAgIGtleUV4aXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnS2V5IGFscmVhZHkgZXhpc3QuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSBjbMOpIGV4aXN0ZSBkw6lqw6AuJ1xcbiAgICB9LFxcbiAgICBzaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2l6ZScsXFxuICAgICAgICAnZnItRlInOiAnVGFpbGxlJ1xcbiAgICB9LFxcbiAgICB0YWJDbG9zZVVuc2F2ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjbG9zZSB0aGlzIHRhYiBhbmQgbG9zZSB5b3VyIHVwZGF0ZXM/JyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIGF2ZXogZWZmZWN0dcOpIGRlcyBtb2RpZmljYXRpb25zIHNhbnMgbGVzIGVucmVnaXN0cmVyLiDDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBmZXJtZXIgY2V0IG9uZ2xldCBldCBwZXJkcmUgbGVzIGRvbm7DqWVzIG5vbiBzYXV2ZWdhcmTDqWVzID8nXFxuICAgIH0sXFxuICAgIG5hbWVBbHJlYWR5VGFrZW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdOYW1lIGFscmVhZHkgdGFrZW4uJyxcXG4gICAgICAgICdmci1GUic6ICdOb20gZMOpasOgIHV0aWxpc8OpLidcXG4gICAgfSxcXG4gICAgbmFtZU5vRG90OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIG5hbWUgY2Fubm90IGNvbnRhaW4gYSBcXFxcJy5cXFxcJycsXFxuICAgICAgICAnZnItRlInOiAnTGUgbm9tIG5lIHBldXQgcGFzIGNvbnRlbmlyIGRlIFxcXFwnLlxcXFwnJ1xcbiAgICB9LFxcbiAgICByZXNvdXJjZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc291cmNlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXNzb3VyY2UnXFxuICAgIH0sXFxuICAgIHRhcmdldFJvb3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYXJnZXQgcm9vdCcsXFxuICAgICAgICAnZnItRlInOiAnUmFjaW5lIGRlIGxhIGNpYmxlJ1xcbiAgICB9LFxcbiAgICB0YXJnZXRQYXRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGFyZ2V0IHBhdGgnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoZW1pbiB2ZXJzIGxhIGNpYmxlJ1xcbiAgICB9LFxcbiAgICBwcm9wZXJ0aWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvcGVydGllcycsXFxuICAgICAgICAnZnItRlInOiAnUHJvcHJpw6l0w6lzJ1xcbiAgICB9LFxcbiAgICBwcm9wZXJ0aWVzRW1wdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3UgZG9uXFxcXCd0IGhhdmUgYW55IHByb3BlcnR5JyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYXVjdW5lIHByb3ByacOpdMOpJ1xcbiAgICB9LFxcbiAgICBrZXlVbmlxdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUga2V5IG11c3QgYmUgdW5pcXVlLicsXFxuICAgICAgICAnZnItRlInOiAnTGEgY2zDqSBkb2l0IMOqdHJlIHVuaXF1ZS4nXFxuICAgIH0sXFxuICAgIHByb3BlcnR5QWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIHByb3BlcnR5JyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSBwcm9wcmnDqXTDqSdcXG4gICAgfSxcXG4gICAgbXVsdGlsYW5ndWFnZUZpZWxkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBpcyBhIG11bHRpbGluZ3VhbCBmaWVsZC4gRW5nbGlzaCBpcyByZXF1aXJlZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlY2kgZXN0IHVuIGNoYW1wIG11bHRpbGluZ3VlLiBMXFxcXCdhbmdsYWlzIGVzdCBvYmxpZ2F0b2lyZS4nXFxuICAgIH0sXFxuICAgIGVuZ2xpc2hEZXNjcmlwdGlvblJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW5nbGlzaCBkZXNjcmlwdGlvbiBpcyByZXF1aXJlZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIGRlc2NyaXB0aW9uIGFuZ2xhaXNlIGVzdCBvYmxpZ2F0b2lyZS4nXFxuICAgIH0sXFxuICAgIG1heFNpemUxR0I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYXhpbXVtIHNpemUgYWxsb3dlZCBpcyAxR0IuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSB0YWlsbGUgbWF4aW1hbGUgYXV0aG9yaXPDqWUgZXN0IGRlIDFHTy4nXFxuICAgIH0sXFxuICAgIGludmFsaWRTaXplTWF4MUdCOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmlsZSB0b28gYmlnLCBtYXhpbXVtIHNpemUgYWxsb3dlZCBpcyAxR0IuJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVyIHRyb3AgbG91cmQsIGxhIHRhaWxsZSBtYXhpbWFsZSBhdXRob3Jpc8OpZSBlc3QgZGUgMUdPLidcXG4gICAgfSxcXG4gICAgbmFtZUFscmVhZHlFeGlzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIG5vbSBleGlzdGUgZMOpasOgLidcXG4gICAgfSxcXG4gICAgcmVzb3VyY2VOb3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlc291cmNlIGhhcyBiZWVuIGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUgcmVzc291cmNlIG5cXFxcJ2Egw6l0w6kgdHJvdXbDqWUnXFxuICAgIH0sXFxuICAgIHJlc291cmNlc0F0dGFjaGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzb3VyY2UgYXR0YWNoZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Jlc3NvdXJjZSBhdHRhY2jDqWUnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1VcGRhdGVGb3JDb25zaXN0YW5jeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0IHNlZW1zIGxpa2UgeW91ciBpdGVtcyBhcmUgbm90IHN5bmNocm9uaXplZCB3aXRoIHRoZSBzZXJ2ZXIgYW55bW9yZSwgeW91IHNob3VsZCBzYXZlIHlvdXIgd29yayBhbmQgdXBkYXRlIHRoZSBzZXJ2aWNlLicsXFxuICAgICAgICAnZnItRlInOiAnSWwgc2VtYmxlIHF1ZSB2b3Mgw6lsw6ltZW50cyBuZSBzb250IHBsdXMgc3luY2hyb25pc8OpcyBhdmVjIGxlIHNlcnZldXIsIHZvdXMgZGV2cmlleiBzYXV2ZWdhcmRlciB2b3RyZSB0cmF2YWlsIGV0IG1ldHRyZSDDoCBqb3VyIGxlIHNlcnZpY2UuJ1xcbiAgICB9LFxcbiAgICBpdGVtTm90Rm91bmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCBmb3VuZC4nLFxcbiAgICAgICAgJ2ZyLVVTJzogJ0F1Y3VuIMOpbMOpbWVudCB0cm91dsOpLidcXG4gICAgfSxcXG4gICAgc3RhdHVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RhdHVzJyxcXG4gICAgICAgICdmci1GUic6ICdTdGF0dXQnXFxuICAgIH0sXFxuICAgIG5vbmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb25lJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bidcXG4gICAgfSxcXG4gICAgaXRlbXNSZWFkb25seToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXNl4oCCaXRlbXMgYXJlIG9ubHkgcmVhZGFibGUuIFRoZXkgY2FuIG5vdCBiZSBkZWxldGVkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2VzIMOpbMOpbWVudHMgbmUgc29udCBwYXMgbW9kaWZpYWJsZXMuIElscyBuZSBwZXV2ZW50IHBhcyDDqnRyZSBzdXBwcmltw6lzLidcXG4gICAgfSxcXG4gICAgcmVnaXN0cmF0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVnaXN0cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdFbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgYmFja1RvTG9naW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdCYWNrIHRvIHNpZ24gaW4gcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUmV0b3VyIMOgIGxhIHBhZ2UgZGUgY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb25TdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2Vzc2Z1bCByZWdpc3RyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VucmVnaXN0cmVtZW50IHLDqXVzc2knXFxuICAgIH0sXFxuICAgIHN1Y2Nlc3NSZWdpc3Rlck1haWxTZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IHdpbGwgcmVjZWl2ZSBhIGNvbmZpcm1hdGlvbiBlbWFpbC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgYWxsZXogcmVjZXZvaXIgdW4gZW1haWwgZGUgY29uZmlybWF0aW9uLidcXG4gICAgfSxcXG4gICAgc3VjY2Vzc1JlZ2lzdHJhdGlvbk1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJZiB5b3UgYWxyZWFkeSBzZXQgeW91ciBwYXNzd29yZCwgeW91IGNhbiBub3cgc2lnbiBpbi4gT3RoZXJ3aXNlLCBwbGVhc2UgY2xpY2sgb24gdGhlIGxpbmsgc2VudCB0byB5b3UgYnkgZW1haWwgdG8gYWN0aXZhdGUgeW91ciBhY2NvdW50LicsXFxuICAgICAgICAnZnItRlInOiAnU2kgdm91cyBhdmV6IGTDqWrDoCBjcsOpw6kgdm90cmUgbW90IGRlIHBhc3NlLCB2b3VzIHBvdXZleiB2b3VzIGNvbm5lY3RlciBkw6hzIG1haW50ZW5hbnQuIFNpbm9uLCB2b3VzIHRyb3V2ZXJleiB1biBsaWVuIGRhbnMgbFxcXFwnZW1haWwgZGUgY29uZmlybWF0aW9uIHF1aSB2b3VzIHBlbWV0dHJhIGRcXFxcJ2FjdGl2ZXIgdm90cmUgY29tcHRlLidcXG4gICAgfSxcXG4gICAgcmVnaXN0cmF0aW9uRW1haWxIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWFrZSBzdXJlIHRoZSBlbWFpbCBpcyBjb3JyZWN0IHRvIHJlY2VpdmUgdGhlIGNvbmZpcm1hdGlvbiBsaW5rJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSB2b3VzIGFzc3VyZXIgcXVlIHZvdHJlIGVtYWlsIGVzdCBjb3JyZWN0IHBvdXIgcG91dm9pciBmaW5hbGlzZXIgbFxcXFwnZW5yZWdpc3RyZW1lbnQnXFxuICAgIH0sXFxuICAgIHBsZWFzZVdhaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugd2FpdCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgcGF0aWVudGVyJ1xcbiAgICB9LFxcbiAgICBpbXBvcnRMb2FkaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBpbXBvcnQgZmlsZSBpcyBiZWluZyBwcm9jZXNzZWQuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIGltcG9ydCBlc3QgZW4gY291cnMgZGUgdHJhaXRlbWVudC4uLidcXG4gICAgfSxcXG4gICAgZXhwb3J0TG9hZGluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgZXhwb3J0IGZpbGUgaXMgYmVpbmcgcHJlcGFyZWQuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIGV4cG9ydCBlc3QgZW4gY291cnMgZGUgY2hhcmdlbWVudC4uLidcXG4gICAgfSxcXG4gICAgY2xvc2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDbG9zZScsXFxuICAgICAgICAnZnItRlInOiAnRmVybWVyJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VydmljZScsXFxuICAgICAgICAnZnItRlInOiAnU2VydmljZSdcXG4gICAgfSxcXG4gICAgcmVuYW1lRGlzYWJsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2UgY2xvc2UgYW55IHZpZXcgb3IgZWRpdCB0YWIgY29uY2VybmluZyB0aGlzIGl0ZW0gaWYgeW91IHdhbnQgdG8gcmVuYW1lIGl0JyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBmZXJtZXIgdG91dCBvbmdsZXQgY29uY2VybmFudCBjZXQgw6lsw6ltZW50IHNpIHZvdXMgc291aGFpdGV6IGxlIHJlbm9tbWVyJ1xcbiAgICB9LFxcbiAgICBkZWxldGVEaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBjbG9zZSBhbnkgdmlldyBvciBlZGl0IHRhYiBjb25jZXJuaW5nIHRoaXMgaXRlbSBpZiB5b3Ugd2FudCB0byBkZWxldGUgaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIGZlcm1lciB0b3V0IG9uZ2xldCBjb25jZXJuYW50IGNldCDDqWzDqW1lbnQgc2kgdm91cyBzb3VoYWl0ZXogbGUgc3VwcHJpbWVyJ1xcbiAgICB9LFxcbiAgICByZXN1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdyZXN1bHQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3LDqXN1bHRhdCdcXG4gICAgfSxcXG4gICAgcmVzdWx0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3Jlc3VsdHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3LDqXN1bHRhdHMnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVHlwZUxhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVnaXN0cmF0aW9uIHR5cGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1R5cGUgZFxcXFwnZW5yZWdpc3RyZW1lbnQnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUmVnaXN0cmF0aW9uVHlwZUVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIHNlbGVjdCB0aGUgdHlwZSBvZiByZWdpc3RyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHPDqWxlY3Rpb25uZXIgbGUgdHlwZSBkXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlU3VwcGxpZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdXBwbGllcicsXFxuICAgICAgICAnZnItRlInOiAnRm91cm5pc3NldXInXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVHlwZUNhcGl0YWxQcm9qZWN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2FwaXRhbCBQcm9qZWN0JyxcXG4gICAgICAgICdmci1GUic6ICdDYXBpdGFsIFByb2plY3QnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVHlwZUludGVybmFsVXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludGVybmFsIFVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ludGVybmFsIFVzZXInXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uSW50cm8xOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBDb21tdW5pdHkgZW5hYmxlcyBDaGV2cm9uIFN1cHBsaWVycywgQ2hldnJvbiBJbnRlcm5hbCBVc2VycyBhbmQgQ2hldnJvbiBNYWpvciBDYXBpdGFsIFByb2plY3RzIHRvIHBlcmZvcm0gZWxlY3Ryb25pYyB0cmFuc2FjdGlvbnMgd2l0aCBDaGV2cm9uIElUIHN5c3RlbXMgaW4gYSBoaWdobHkgc2VjdXJlIGJ1dCB2ZXJ5IGVhc3kgbWFubmVyLicsXFxuICAgICAgICAnZnItRlInOiAnQ2V0dGUgY29tbXVuYXV0w6kgcGVybWV0IGF1eCBmb3Vybmlzc2V1cnMsIFxcXCJJbnRlcm5hbCBVc2VyXFxcIiBldCBcXFwiQ2FwaXRhbCBQcm9qZWN0XFxcIiBDaGV2cm9uIGRlIHLDqWFsaXNlciBkZXMgw6ljaGFuZ2VzIMOpbGVjdHJvbmlxdWVzIGF2ZWMgbGVzIHN5c3TDqG1lcyBpbmZvcm1hdGlxdWVzIGRlIENoZXZyb24gZGUgZmHDp29uIHNpbXBsZSBldCBzw6ljdXJpc8OpZS4nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uU3VwcGxpZXJJbnRybzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RvIGJlIHBhcnQgb2YgdGhlIENoZXZyb24gQ29tbXVuaXR5LCB5b3UgbXVzdCBoYXZlIGJlZW4gaW52aXRlZCBhbmQvb3IgYXV0aG9yaXplZCBieSBDaGV2cm9uLicsXFxuICAgICAgICAnZnItRlInOiAnUG91ciBmYWlyZSBwYXJ0aWUgZGUgbGEgY29tbXVuYXV0w6kgQ2hldnJvbiwgdm91cyBkZXZleiBhdm9pciByZcOndSB1bmUgaW52aXRhdGlvbiBldC9vdSB1bmUgYXV0b3Jpc2F0aW9uIGRlIGxhIHBhcnQgZGUgQ2hldnJvbi4nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGlkeGlkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUElEWCBJRCcsXFxuICAgICAgICAnZnItRlInOiAnUElEWCBJRCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25QaWR4aWRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gUElEWCBJRCBpcyBmb3VuZCBpbiB0aGUgaW52aXRhdGlvbiBlbWFpbCBzZW50IGJ5IENoZXZyb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIFxcXCJQSURYIElEXFxcIiBDaGV2cm9uIHNlIHRyb3V2ZSBkYW5zIGxcXFxcJ2VtYWlsIGRcXFxcJ2ludml0YXRpb24gZW52b3nDqSBwYXIgQ2hldnJvbidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25QaWR4aWRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBQSURYIElEJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgbGUgXFxcIlBJRFggSURcXFwiIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFUlAgVmVuZG9yIElEJyxcXG4gICAgICAgICdmci1GUic6ICdFUlAgVmVuZG9yIElEJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblZlbmRvcmlkSGVscDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBDaGV2cm9uIEVSUCBWZW5kb3IgSUQgaXMgZm91bmQgaW4gdGhlIGludml0YXRpb24gZW1haWwgc2VudCB0byB5b3UgYnkgQ2hldnJvbicsXFxuICAgICAgICAnZnItRlInOiAnTGUgXFxcIkVSUCBWZW5kb3IgSURcXFwiIENoZXZyb24gc2UgdHJvdXZlIGRhbnMgbFxcXFwnZW1haWwgZFxcXFwnaW52aXRhdGlvbiBlbnZvecOpIHBhciBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblZlbmRvcmlkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2UgZW50ZXIgdGhlIENoZXZyb24gRVJQIFZlbmRvciBJRCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc2Fpc2lyIGxlIFxcXCJFUlAgVmVuZG9yIElEXFxcIiBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudEludHJvOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiXFxcXG4gICAgICAgICAgICA8c3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5QbGVhc2UgcmVhZCB0aGUmbmJzcDs8L3NwYW4+XFxcXG4gICAgICAgICAgICAgICAgPGEgdGFyZ2V0PVxcXFxcXFwiX2JsYW5rXFxcXFxcXCIgaHJlZj1cXFxcXFxcImh0dHA6Ly93d3cuYjJlZW4uY29tL19jb21tdW5pdHltYXRlcmlhbC9jaGV2cm9uL0FncmVlbWVudF9iMmVlbl9DaGV2cm9uX1Byb2QucGRmXFxcXFxcXCI+Y29udHJhY3R1YWwgYWdyZWVtZW50PC9hPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPiZuYnNwO2FuZCBjb25maXJtIGJlbG93PC9zcGFuPlxcXFxuICAgICAgICAgICAgPC9zcGFuPlxcXFxuICAgICAgICBcXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIlxcXFxuICAgICAgICAgICAgPHNwYW4+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+TWVyY2kgZGUgbGlyZSZuYnNwOzwvc3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8YSB0YXJnZXQ9XFxcXFxcXCJfYmxhbmtcXFxcXFxcIiBocmVmPVxcXFxcXFwiaHR0cDovL3d3dy5iMmVlbi5jb20vX2NvbW11bml0eW1hdGVyaWFsL2NoZXZyb24vQWdyZWVtZW50X2IyZWVuX0NoZXZyb25fUHJvZC5wZGZcXFxcXFxcIj5sJ2FjY29yZCBjb250cmFjdHVlbDwvYT5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj4mbmJzcDtldCBkZSB2YWxpZGVyIGNpLWRlc3NvdXM8L3NwYW4+XFxcXG4gICAgICAgICAgICA8L3NwYW4+XFxcXG4gICAgICAgIFxcXCJcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25BZ3JlZW1lbnRMYWJlbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0kgaGF2ZSByZWFkIGFuZCBJIGFjY2VwdCB0aGUgVGVybXMgYW5kIENvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0pcXFxcJ2FpIGx1IGV0IGFjY2VwdGUgbGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZXMgZGUgY2UgY29udHJhdCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25BZ3JlZW1lbnRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBhY2NlcHQgdGhlIFRlcm1zIGFuZCBDb25kaXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSB2YWxpZGVyIGxlcyBDb25kaXRpb25zIEfDqW7DqXJhbGVzJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkludGVybmFsVXNlckludHJvMjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RvIGdldCB5b3VyIHJlZ2lzdHJhdGlvbiBhY2NlcHRlZCwgcGxlYXNlIHByb3ZpZGUgdGhlIGFwcHJvcHJpYXRlIFBJRFggSUQgYW5kIENoZXZyb24gcGFzc3dvcmQuJyxcXG4gICAgICAgICdmci1GUic6ICdQb3VyIHBvdXJzdWl2cmUgdm90cmUgZW5yZWdpc3RyZW1lbnQsIG1lcmNpIGRcXFxcJ2VudHJlciBsZSBcXFwiUElEWCBJRFxcXCIgZXQgbW90IGRlIHBhc3NlIENoZXZyb24gcHVpcyB2YWxpZGVyLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25QYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NoZXZyb24gcGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vdCBkZSBwYXNzZSBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBhc3N3b3JkSGVscDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBDaGV2cm9uIHBhc3N3b3JkIGlzIGZvdW5kIGluIHRoZSBpbnZpdGF0aW9uIGVtYWlsIHNlbnQgYnkgQ2hldnJvbicsXFxuICAgICAgICAnZnItRlInOiAnTGUgbW90IGRlIHBhc3NlIENoZXZyb24gc2UgdHJvdXZlIGRhbnMgbFxcXFwnZW1haWwgZFxcXFwnaW52aXRhdGlvbiBlbnZvecOpIHBhciBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBhc3N3b3JkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2UgZW50ZXIgdGhlIENoZXZyb24gcGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHNhaXNpciBsZSBtb3QgZGUgcGFzc2UgQ2hldnJvbidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25DYXBpdGFsUHJvamVjdEludHJvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGFyZSBjcmVhdGluZyB0aGlzIGFjY291bnQgZm9yIGEgQ2hldnJvbiBNYWpvciBDYXBpdGFsIFByb2plY3QuJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIGNyw6lleiBjZSBjb21wdGUgcG91ciB1biBcXFwiQ2hldnJvbiBNYWpvciBDYXBpdGFsIFByb2plY3RcXFwiLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25QaWR4aWRWZW5kb3JpZEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUElEWCBJRCAvIEVSUCBWZW5kb3IgSUQgYXJlIG5vdCBjb3JyZWN0LiBQbGVhc2UgY2hlY2sgdGhlIHZhbHVlcyB5b3UgcHJvdmlkZWQgYW5kIHJldHJ5LicsXFxuICAgICAgICAnZnItRlInOiAnXFxcIlBJRFggSURcXFwiIC8gXFxcIkVSUCBWZW5kb3IgSURcXFwiIGluY29ycmVjdHMuIE1lcmNpIGRlIHbDqXJpZmllciBsZXMgdmFsZXVycyBzYWlzaWVzIGF2YW50IGRlIHLDqWVzc2F5ZXIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZFBhc3N3b3JkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEIC8gQ2hldnJvbiBQYXNzd29yZCBhcmUgbm90IGNvcnJlY3QuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWVzIHlvdSBwcm92aWRlZCBhbmQgcmV0cnkuJyxcXG4gICAgICAgICdmci1GUic6ICdcXFwiUElEWCBJRFxcXCIgLyBNb3QgZGUgcGFzc2UgaW5jb3JyZWN0cy4gTWVyY2kgZGUgdsOpcmlmaWVyIGxlcyB2YWxldXJzIHNhaXNpZXMgYXZhbnQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRUb29sdGlwRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIHBlcm1pc3Npb24gc2V0JyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgY2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcEVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHBlcm1pc3Npb24gc2V0JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIGNlIGdyb3VwZSBkZSBwZXJtaXNzaW9ucydcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldFRvb2x0aXBDbG9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZSBhIG5ldyBwZXJtaXNzaW9uIHNldCB3aXRoIHByZWZpbGxlZCBkYXRhIGZyb20gdGhpcyBvbmUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6llciB1biBub3V2ZWF1IGdyb3VwZSBkZSBwZXJtaXNzaW9ucyBhdmVjIGxlcyBkb25uw6llcyBkZSBjZWx1aS1jaSdcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldFRvb2x0aXBDcm9zc0luc3RhbmNlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgaXMgYSBnbG9iYWwgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIGdyb3VwZSBkZSBwZXJtaXNzaW9ucyBlc3QgZ2xvYmFsJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0QXRMZWFzdE9uZVNjb3BlUmVxdWlyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBdCBsZWFzdCBvbmUgc2NvcGUgc3RyaW5nIGlzIHJlcXVpcmVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdSBtb2lucyB1biBzY29wZSBkb2l0IMOqdHJlIHJlbnNlaWduw6knXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRzRGVsZXRlQ29uZmlybToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBwZXJtaXNzaW9uIHNldD8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZSBncm91cGUgZGUgcGVybWlzc2lvbnMgPydcXG4gICAgfSxcXG4gICAgdXNlckRpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2Fzc29jaWF0ZSB1c2VyJyxcXG4gICAgICAgICdmci1GUic6ICdEw6lzYXNzb2NpZXIgY2V0IHV0aWxpc2F0ZXVyJ1xcbiAgICB9LFxcbiAgICByZWFsbToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlYWxtJyxcXG4gICAgICAgICdmci1GUic6ICdEb21haW5lJ1xcbiAgICB9LFxcbiAgICBlbWFpbFZlcmlmaWVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwgdmVyaWZpZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsIGNvbmZpcm3DqSdcXG4gICAgfSxcXG4gICAgcG9saWNpZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQb2xpY2llcycsXFxuICAgICAgICAnZnItRlInOiAnRHJvaXRzIGRcXFxcJ2FjY8OocydcXG4gICAgfSxcXG4gICAgb3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3JnYW5pemF0aW9uIHBvc2l0aW9ucycsXFxuICAgICAgICAnZnItRlInOiAnUG9zaXRpb25zIGRcXFxcJ29yZ2FuaXNhdGlvbidcXG4gICAgfSxcXG4gICAgdXNlclJlbG9hZE9yZ1Bvc2l0aW9uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbG9hZCB1c2VyIG9yZ2FuaXphdGlvbiBwb3NpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhZnJhw65jaGlyIGxlcyBwb3NpdGlvbnMgZFxcXFwnb3JnYW5pc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dyb3VwZSBkZSBwZXJtaXNzaW9ucydcXG4gICAgfSxcXG4gICAgdXNlclJlc2VuZEFjdGl2YXRpb25FbWFpbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc2VuZCBhY3RpdmF0aW9uIGVtYWlsJyxcXG4gICAgICAgICdmci1GUic6ICdSZW52b3llciBsXFxcXCdlbWFpbCBkXFxcXCdhY3RpdmF0aW9uJ1xcbiAgICB9LFxcbiAgICB1c2VyU2hvd09yZ1Bvc2l0aW9uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgdXNlciBvcmdhbml6YXRpb24gcG9zaXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlcyBwb3NpdGlvbnMgZFxcXFwnb3JnYW5pc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0c0Zvckluc3RhbmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGVybWlzc2lvbiBzZXRzIGZvciBpbnN0YW5jZScsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlcyBkZSBwZXJtaXNzaW9ucyBwb3VyIGxcXFxcJ2luc3RhbmNlJ1xcbiAgICB9LFxcbiAgICBvdGhlclByb3BlcnRpZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPdGhlciBwcm9wZXJ0aWVzJyxcXG4gICAgICAgICdmci1GUic6ICdBdXRyZXMgcHJvcHJpw6l0w6lzJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0UmVxdWlyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBdCBsZWFzdCBvbmUgcGVybWlzc2lvbiBzZXQgbXVzdCBiZSBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnQXUgbW9pbnMgdW4gZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGRvw650IMOqdHJlIGFzc2lnbsOpIMOgIGxcXFxcJ3V0aWxpc2F0ZXVyJ1xcbiAgICB9LFxcbiAgICBvcmdQb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ09yZ2FuaXphdGlvbiBwb3NpdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnUG9zaXRpb24gZGFucyBsXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHVzZXJzRW1haWxQbGFjZWhvbGRlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VtYWlsLi4uJyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbC4uLidcXG4gICAgfSxcXG4gICAgc2VhcmNoQnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWFyY2ggYnknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hlcmNoZXIgcGFyJ1xcbiAgICB9LFxcbiAgICB0b29sdGlwQWRkVXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1R5cGUgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIG5ldyB1c2VyIHlvdSB3YW50IHRvIGFzc29jaWF0ZSB0byB0aGlzIGluc3RhbmNlJyxcXG4gICAgICAgICdmci1GUic6ICdFbnRyZXIgbFxcXFwnYWRyZXNzZSBlbWFpbCBkdSBub3V2ZWwgdXRpbGlzYXRldXIgcXVlIHZvdXMgc291aGFpdGV6IGFzc29jaWVyIMOgIGNldHRlIGluc3RhbmNlJ1xcbiAgICB9LFxcbiAgICBhc3NvY2lhdGVVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXNzb2NpYXRlIG5ldyB1c2VyJyxcXG4gICAgICAgICdmci1GUic6ICdBc3NvY2llciBub3V2ZWwgdXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIHVzZXJEZWxldGVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHVzZXI/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgY2V0IHV0aWxpc2F0ZXVyID8nXFxuICAgIH0sXFxuICAgIHVzZXJEaXNhc3NvY2lhdGVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRpc2Fzc29jaWF0ZSB0aGlzIHVzZXIgZnJvbSB0aGUgY3VycmVudCBpbnN0YW5jZT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGTDqXNhc3NvY2llciBjZXQgdXRpbGlzYXRldXIgZGUgbFxcXFwnaW5zdGFuY2UgPydcXG4gICAgfSxcXG4gICAgc2hvd0FsbFVzZXJzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSB1c2VycyBvZiBhbGwgaW5zdGFuY2VzJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsZXMgdXRpbGlzYXRldXJzIGRlIHRvdXRlcyBsZXMgaW5zdGFuY2VzJ1xcbiAgICB9LFxcbiAgICBzaG93U2NvcGVsZXNzVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmx5IGRpc3BsYXkgdXNlcnMgd2l0aG91dCBhbnkgcGVybWlzc2lvbicsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgc2V1bGVtZW50IGxlcyB1dGlsaXNhdGV1cnMgc2FucyBkcm9pdHMgZFxcXFwnYWNjw6hzJ1xcbiAgICB9LFxcbiAgICBzaG93T3JnbGVzc1VzZXJzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT25seSBkaXNwbGF5IHVzZXJzIHdpdGhvdXQgYW55IGFzc29jaWF0ZWQgb3JnIG5vZGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIHNldWxlbWVudCBsZXMgdXRpbGlzYXRldXJzIHNhbnMgcG9zaXRpb24gZFxcXFwnb3JnYW5pc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNhc3NvY2lhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNhc3NvY2lhdGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXNhc3NvY2llcidcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dyb3VwZXMgZGUgcGVybWlzc2lvbnMnXFxuICAgIH0sXFxuICAgIHVzZXJzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlcnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVycydcXG4gICAgfSxcXG4gICAgZmllbGRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmllbGRzJyxcXG4gICAgICAgICdmci1GUic6ICdDaGFtcHMnXFxuICAgIH0sXFxuICAgIGlzS2V5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnS2V5PycsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqSA/J1xcbiAgICB9LFxcbiAgICBhZGRGaWVsZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBhIGZpZWxkJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuIGNoYW1wJ1xcbiAgICB9LFxcbiAgICBjcmVhdGVUYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZSBhIG5ldyB0YWJsZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuZSBub3V2ZWxsZSB0YWJsZSdcXG4gICAgfSxcXG4gICAgZWRpdFRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBkYXRlIHRoZSB0YWJsZScsXFxuICAgICAgICAnZnItRlInOiAnTW9kaWZpZXIgbGEgdGFibGUnXFxuICAgIH0sXFxuICAgIGludmFsaWRYbWxUYWc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlLiBBbGxvd2VkIGNoYXJzOiBhLXogQS1aIDAtOSBfIDogLSAuJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIgaW52YWxpZGUuIENhcmFjdMOocmVzIGF1dG9yaXPDqXMgOiBhLXogQS1aIDAtOSBfIDogLSAuJ1xcbiAgICB9LFxcbiAgICB3aWR0aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dpZHRoJyxcXG4gICAgICAgICdmci1GUic6ICdMYXJnZXVyJ1xcbiAgICB9LFxcbiAgICBoZWlnaHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIZWlnaHQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0hhdXRldXInXFxuICAgIH0sXFxuICAgIHNtYWxsU2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NtYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdQZXRpdCdcXG4gICAgfSxcXG4gICAgbWVkaXVtU2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lZGl1bScsXFxuICAgICAgICAnZnItRlInOiAnTW95ZW4nXFxuICAgIH0sXFxuICAgIGxhcmdlU2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhcmdlJyxcXG4gICAgICAgICdmci1GUic6ICdHcmFuZCdcXG4gICAgfSxcXG4gICAgZnVsbFNpemU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGdWxsJyxcXG4gICAgICAgICdmci1GUic6ICdQbGVpbidcXG4gICAgfSxcXG4gICAgZWRpdERvY3VtZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlciBsZSBkb2N1bWVudCdcXG4gICAgfSxcXG4gICAgdmlld0RvY3VtZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZSBkb2N1bWVudCdcXG4gICAgfSxcXG4gICAgcmVwcm9jZXNzRG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXByb2Nlc3MgZG9jdW1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbGFuY2VyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICByZWxvYWREb2N1bWVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbG9hZCBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGFyZ2VyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICBwcmludERvY3VtZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpbnQgZG9jdW1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcHJpbWVyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICB2aWV3Rm9ybUpzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyB0aGUgZm9ybScsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZSBmb3JtdWxhaXJlJ1xcbiAgICB9LFxcbiAgICBlZGl0Rm9ybUpzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCB1c2luZyB0aGUgZm9ybScsXFxuICAgICAgICAnZnItRlInOiAnRWRpdGVyIMOgIGxcXFxcJ2FpZGUgZHUgZm9ybXVsYWlyZSdcXG4gICAgfSxcXG4gICAgdmlld1NvdXJjZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcgdGhlIHNvdXJjZScsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsYSBzb3VyY2UnXFxuICAgIH0sXFxuICAgIGVkaXRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIGxlIG1lc3NhZ2UnXFxuICAgIH0sXFxuICAgIHZpZXdNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIG1lc3NhZ2UnXFxuICAgIH0sXFxuICAgIHJlcHJvY2Vzc01lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXByb2Nlc3MgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnUmVsYW5jZXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgcmVsb2FkTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbG9hZCBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZWNoYXJnZXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgcHJpbnRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpbnQgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnSW1wcmltZXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgbG9ja2VkTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgbWVzc2FnZSBpcyBjdXJyZW50bHkgbG9ja2VkJyxcXG4gICAgICAgICdmci1GUic6ICdDZSBtZXNzYWdlIGVzdCB2ZXJyb3VpbGzDqSdcXG4gICAgfSxcXG4gICAgYmFja1RvTGlzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHVybiB0byBsaXN0JyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgbGlzdGUnXFxuICAgIH0sXFxuICAgIGVtcHR5QXBwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm9uZScsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lJ1xcbiAgICB9LFxcbiAgICBub0FwcFNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gYXBwbGljYXRpb24gc2VsZWN0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBhcHBsaWNhdGlvbiBzw6lsZWN0aW9ubsOpZSdcXG4gICAgfSxcXG4gICAgc2VsZWN0QXBwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGFuIGFwcGxpY2F0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuZSBhcHBsaWNhdGlvbidcXG4gICAgfSxcXG4gICAgbG9nb3V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2lnbiBvdXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWNvbm5leGlvbidcXG4gICAgfSxcXG4gICAgbGFzdFN5bmNEYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFzdCBzeW5jaHJvbml6YXRpb24gZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnRGF0ZSBkZSBkZXJuacOocmUgc3luY2hyb25pc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBob21lQ29uZmlndXJhdGlvbkludmFsaWROYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCB2YWx1ZS4gQXV0aG9yaXplZCBjaGFyYWN0ZXJzIDogYS16IEEtWiAwLTkgXyA6IC0gLicsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyIGludmFsaWRlLiBDYXJhY3TDqHJlcyBhdXRvcmlzw6lzIDogYS16IEEtWiAwLTkgXyA6IC0gLidcXG4gICAgfSxcXG4gICAgaG9tZUNvbmZpZ3VyYXRpb25OYW1lQWxyZWFkeVVzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBge25hbWV9YGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgY29uZmlndXJhdGlvbiwgY2hvb3NlIGFub3RoZXIgb25lIHBsZWFzZScsXFxuICAgICAgICAnZnItRlInOiAnTGUgbm9tIGB7bmFtZX1gIGVzdCBkw6lqw6AgdXRpbGlzw6kgcG91ciB1bmUgYXV0cmUgY29uZmlndXJhdGlvbiwgdmV1aWxsZXogZW4gY2hvaXNpciB1biBhdXRyZSdcXG4gICAgfSxcXG4gICAgaW5zdGFuY2VDaGFuZ2VEaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0luc3RhbmNlIGNoYW5nZSBpc25cXFxcJ3QgcG9zc2libGUgd2hlbiB5b3UgYXJlIGVkaXRpbmcgdXNlcnMgb3IgcGVybWlzc2lvbiBzZXRzJyxcXG4gICAgICAgICdmci1GUic6ICdDaGFuZ2VyIGRcXFxcJ2luc3RhbmNlIGVzdCBpbXBvc3NpYmxlIHBlbmRhbnQgbFxcXFwnw6lkaXRpb24gZFxcXFwndXRpbGlzYXRldXJzIG91IGRlIGdyb3VwZXMgZGUgcGVybWlzc2lvbnMuJ1xcbiAgICB9LFxcbiAgICBxdWl0RWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1aXQgZWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnQW5udWxlciDDqWRpdGlvbidcXG4gICAgfSxcXG4gICAgcmVsb2FkSW5zdGFuY2VzTGlzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbG9hZCBpbnN0YW5jZXMgbGlzdCcsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgbGEgbGlzdGUgZGVzIGluc3RhbmNlcydcXG4gICAgfSxcXG4gICAgaW5zdGFuY2VGZXRjaFdhcm5pbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcHAgZW5kcG9pbnRzIG5vdCBsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlcyBcXFxcJ2VuZHBvaW50c1xcXFwnIG5lIHNvbnQgcGFzIGNoYXJnw6lzJ1xcbiAgICB9LFxcbiAgICBtZW51OiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVudScsXFxuICAgICAgICAnZnItRlInOiAnTWVudSdcXG4gICAgfSxcXG4gICAgaG9tZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hvbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FjY3VlaWwnXFxuICAgIH0sXFxuICAgIHJlcG9ydHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXBvcnRzJyxcXG4gICAgICAgICdmci1GUic6ICdSYXBwb3J0cydcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV29yayBJdGVtcycsXFxuICAgICAgICAnZnItRlInOiAnVMOiY2hlcydcXG4gICAgfSxcXG4gICAgdGFibGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGFibGVzJyxcXG4gICAgICAgICdmci1GUic6ICdUYWJsZXMnXFxuICAgIH0sXFxuICAgIGRvY3VtZW50czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RvY3VtZW50cycsXFxuICAgICAgICAnZnItRlInOiAnRG9jdW1lbnRzJ1xcbiAgICB9LFxcbiAgICBvYXV0aFNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT0F1dGggU2V0dGluZ3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmVzIE9BdXRoJ1xcbiAgICB9LFxcbiAgICBvcmdhbmlzYXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3JnYW5pemF0aW9ucycsXFxuICAgICAgICAnZnItRlInOiAnT3JnYW5pc2F0aW9ucydcXG4gICAgfSxcXG4gICAgbG9jYWxUZXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9jYWwgdGVzdCcsXFxuICAgICAgICAnZnItRlInOiAnVGVzdCBsb2NhbCdcXG4gICAgfSxcXG4gICAgcmV0cnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXRyeT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1LDqWVzc2F5ZXIgPydcXG4gICAgfSxcXG4gICAgbm9NZW51RW50cnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBlbnRyeSBmb3VuZCcsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gbWVudSBhY2Nlc3NpYmxlJ1xcbiAgICB9LFxcbiAgICBjcmVhdGVkTWVzc2FnZXNJZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDcmVhdGVkIG1lc3NhZ2UocykgSUQocyk6JyxcXG4gICAgICAgICdmci1GUic6ICdJRChzKSBkdS9kZXMgbWVzc2FnZShzKSBjcsOpw6kocykgOidcXG4gICAgfSxcXG4gICAgZmxhZ01lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGbGFnIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01hcnF1ZXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgZmxhZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGbGFncycsXFxuICAgICAgICAnZnItRlInOiAnTWFycXVldXJzJ1xcbiAgICB9LFxcbiAgICBhdmFpbGFibGVGaWVsZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBdmFpbGFibGUgZmllbGRzJyxcXG4gICAgICAgICdmci1GUic6ICdDaGFtcHMgZGlzcG9uaWJsZXMnXFxuICAgIH0sXFxuICAgIGFsd2F5c1Zpc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbHdheXMgdmlzaWJsZScsXFxuICAgICAgICAnZnItRlInOiAnVG91am91cnMgdmlzaWJsZSdcXG4gICAgfSxcXG4gICAgdmlzaWJsZUlmT3BlbmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlzaWJsZSBpZiBvcGVuZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Zpc2libGUgc2kgb3V2ZXJ0J1xcbiAgICB9LFxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdCYWNrZ3JvdW5kIGNvbG9yJyxcXG4gICAgICAgICdmci1GUic6ICdDb3VsZXVyIGR1IGZvbmQnXFxuICAgIH0sXFxuICAgIGZvbnRDb2xvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RlZmF1bHQgZm9udCBjb2xvcicsXFxuICAgICAgICAnZnItRlInOiAnQ291bGV1ciBkZSBiYXNlIGR1IHRleHRlJ1xcbiAgICB9LFxcbiAgICBjcmVhdGVNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6llciB1biBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICB1cGxvYWRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwbG9hZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnRW52b3llciBkZXMgZmljaGllcnMnXFxuICAgIH0sXFxuICAgIGVuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlJyxcXG4gICAgICAgICdmci1GUic6ICdUZXJtaW5lcidcXG4gICAgfSxcXG4gICAgcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Byb2Nlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGlkZXInXFxuICAgIH0sXFxuICAgIGZpbGVzRHJvcHBlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ2ZpbGUocykgZHJvcHBlZCcsXFxuICAgICAgICAnZnItRlInOiAnZmljaGllcihzKSBkw6lwb3PDqShzKSdcXG4gICAgfSxcXG4gICAgZmlsZXNVcGxvYWRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ2ZpbGUocykgdXBsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2ZpY2hpZXIocykgZW52b3nDqShzKSdcXG4gICAgfSxcXG4gICAgc2hvd1Byb2Nlc3NlZEZpbGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsZXMgZmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzJ1xcbiAgICB9LFxcbiAgICBoaWRlUHJvY2Vzc2VkRmlsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIaWRlIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgZmlsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01hc3F1ZXIgbGVzIGZpY2hpZXJzIHRyYWl0w6lzIGF2ZWMgc3VjY8OocydcXG4gICAgfSxcXG4gICAgZmlsZXNTdWJtaXRTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmlsZXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXJzIHRyYWl0w6lzIGF2ZWMgc3VjY8OocyAhJ1xcbiAgICB9LFxcbiAgICBoaWRkZW5Db2x1bW5zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSGlkZGVuIGNvbHVtbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbG9ubmVzIGNhY2jDqWVzJ1xcbiAgICB9LFxcbiAgICBoaWRkZW5Db2x1bW5zVGlwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnKGNsaWNrIHRvIHJlLWRpc3BsYXkpJyxcXG4gICAgICAgICdmci1GUic6ICcoY2xpcXVlciBwb3VyIHLDqS1hZmZpY2hlciknXFxuICAgIH0sXFxuICAgIGFsbENvbHVtbnNWaXNpYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWxsIGNvbHVtbnMgYXJlIGN1cnJlbnRseSBkaXNwbGF5ZWQuIEhpZGRlbnMgY29sdW1ucyBjYW4gYmUgZm91bmQgaGVyZSBhbmQgcmUtZGlzcGxheWVkLicsXFxuICAgICAgICAnZnItRlInOiAnVG91dGVzIGxlcyBjb2xvbm5lcyBzb250IGFjdHVlbGxlbWVudCB2aXNpYmxlcy4gTGVzIGNvbG9ubmVzIGNhY2jDqWVzIGFwcGFyYWl0cm9udCBpY2kgZXQgcG91cnJvbnQgw6p0cmUgcsOpLWFmZmljaMOpZXMuJ1xcbiAgICB9LFxcbiAgICBkYXRlRnJvbToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Zyb20nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWJ1dCdcXG4gICAgfSxcXG4gICAgZGF0ZVRvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpbidcXG4gICAgfSxcXG4gICAgZG9jdW1lbnRUeXBlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldycsXFxuICAgICAgICAnZnItRlInOiAnVnVlJ1xcbiAgICB9LFxcbiAgICBjb2xsYXBzZU9wdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbGxhcHNlIGFmdGVyIHNlYXJjaCcsXFxuICAgICAgICAnZnItRlInOiAnUsOpZHVpcmUgYXByw6hzIHJlY2hlcmNoZSdcXG4gICAgfSxcXG4gICAgcmVzZXRTZWFyY2hPcHRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXVuY2ggc2VhcmNoIGFmdGVyIHJlc2V0JyxcXG4gICAgICAgICdmci1GUic6ICdMYW5jZXIgbGEgcmVjaGVyY2hlIGFwcsOocyByw6lpbml0aWFsaXNhdGlvbidcXG4gICAgfSxcXG4gICAgZGlzcGxheUxhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBsYWJlbCcsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgbGFiZWwnXFxuICAgIH0sXFxuICAgIHdvcmtmbG93SW5Qcm9ncmVzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0luIGEgd29ya2Zsb3cnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZsdXggZW4gY291cnMnXFxuICAgIH0sXFxuICAgIGFzc2lnblVzZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBc3NpZ24gdXNlcicsXFxuICAgICAgICAnZnItRlInOiAnQXNzaWduZXIgdXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIGFzc2lnbmVkVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBc3NpZ25lZCB1c2VyKHMpJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1cihzKSBhc3NpZ27DqShzKSdcXG4gICAgfSxcXG4gICAgYXNzaWduVXNlclRvUG9zaXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgdGhpcyB1c2VyIHRvIHRoaXMgcG9zaXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgY2V0IHV0aWxpc2F0ZXVyIMOgIGNldHRlIHBvc2l0aW9uJ1xcbiAgICB9LFxcbiAgICByZW1vdmVVc2VyT3JnUG9zaXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZW1vdmUgdGhpcyB1c2VyIGZyb20gdGhpcyBwb3NpdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIGNldCB1dGlsaXNhdGV1ciBkZSBjZXR0ZSBwb3NpdGlvbidcXG4gICAgfSxcXG4gICAgbGF5b3V0QnVpbGRlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xheW91dCBidWlsZGVyJyxcXG4gICAgICAgICdmci1GUic6ICdQZXJzb25uYWxpc2F0aW9uIGRlIGxcXFxcJ2FmZmljaGFnZSdcXG4gICAgfSxcXG4gICAgdGhlbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGVtZScsXFxuICAgICAgICAnZnItRlInOiAnVGjDqG1lJ1xcbiAgICB9LFxcbiAgICBmb250U2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZvbnQgc2l6ZScsXFxuICAgICAgICAnZnItRlInOiAnVGFpbGxlIGNhcmFjdMOocmVzJ1xcbiAgICB9LFxcbiAgICBzaG93SW52aXNpYmxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaW52aXNpYmxlcycsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgbGVzIGNhcmFjdMOocmVzIGludmlzaWJsZXMnXFxuICAgIH0sXFxuICAgIHNob3dHdXR0ZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaG93IGd1dHRlcicsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgbGEgbWFyZ2UnXFxuICAgIH0sXFxuICAgIHNob3dJbmRlbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaG93IGluZGVudCBndWlkZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBndWlkZXMgZFxcXFwnaW5kZW50YXRpb24nXFxuICAgIH0sXFxuICAgIHdyYXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXcmFwJyxcXG4gICAgICAgICdmci1GUic6ICdEw6lib3JkZW1lbnQnXFxuICAgIH0sXFxuICAgIHByZXZpZXc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmV2aWV3JyxcXG4gICAgICAgICdmci1GUic6ICdQcsOpdmlzdWFsaXNhdGlvbidcXG4gICAgfSxcXG4gICAgc2hvd0hpZGRlbkNvbHVtbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaG93IGhpZGRlbiBjb2x1bW5zJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsZXMgY29sb25uZXMgY2FjaMOpZXMnXFxuICAgIH0sXFxuICAgIHJlc2V0RGlzcGxheVNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZXQgYWxsIGRpc3BsYXkgc2V0dGluZ3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1LDqWluaXRpYWxpc2VyIGxlcyBwcsOpZsOpcmVuY2VzIGRcXFxcJ2FmZmljaGFnZSdcXG4gICAgfSxcXG4gICAgZGlzcGxheUhpZGRlbkNvbHVtbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIaWRkZW4gY29sdW1ucyAoY2xpY2sgdG8gcmUtZGlzcGxheSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbG9ubmVzIGNhY2jDqWVzIChjbGlxdWVyIHBvdXIgcsOpLWFmZmljaGVyKSdcXG4gICAgfSxcXG4gICAgZGlzcGxheVNldHRpbmdzQ2hhbmdlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc3BsYXkgc2V0dGluZ3MgY2hhbmdlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlIG1vZGlmacOpZXMgISdcXG4gICAgfSxcXG4gICAgZGlzcGxheVNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBzZXR0aW5ncyEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBkYXRhZ3JpZFNhdmVEaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+RG8geW91IHdhbnQgdG8gc2F2ZSB5b3VyIG1vZGlmaWNhdGlvbnM/PC9zcGFuPjxici8+XFxcXG4gICAgICAgICAgICAgICAgPGVtIGNsYXNzPVxcXFxcXFwidGV4dC1tZWRpdW1cXFxcXFxcIj5Zb3VyIHByZWZlcmVuY2VzIChwcmVzZW5jZSwgd2lkdGggYW5kIG9yZGVyIG9mIGNvbHVtbnMuLi4pIHdpbGwgYmUgc2F2ZWQgaW4geW91ciB1c2VyIHByb2ZpbGUuPC9lbT5cXFxcbiAgICAgICAgICAgIDwvZGl2PlxcXFxuICAgICAgICBcXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIlxcXFxuICAgICAgICAgICAgPGRpdj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5Wb3VsZXotdm91cyBzYXV2ZWdhcmRlciB2b3MgbW9kaWZpY2F0aW9ucyA/PC9zcGFuPjxici8+XFxcXG4gICAgICAgICAgICAgICAgPGVtIGNsYXNzPVxcXFxcXFwidGV4dC1tZWRpdW1cXFxcXFxcIj5Wb3MgcHJcXFxcdTAwRTlmXFxcXHUwMEU5cmVuY2VzIGQnYWZmaWNoYWdlIChwclxcXFx1MDBFOXNlbmNlLCBsYXJnZXVyIGV0IG9yZHJlIGRlcyBjb2xvbm5lcy4uLikgc2Vyb250IGVucmVnaXN0clxcXFx1MDBFOWVzIGRhbnMgdm90cmUgcHJvZmlsIHV0aWxpc2F0ZXVyLjwvZW0+XFxcXG4gICAgICAgICAgICA8L2Rpdj5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3NSZXNldENvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVzZXQgYWxsIHlvdXIgZGlzcGxheSBzZXR0aW5ncz8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHLDqWluaXRpYWxpc2VyIHZvcyBwcsOpZsOpcmVuY2VzIGRcXFxcJ2FmZmljaGFnZSA/J1xcbiAgICB9LFxcbiAgICBkaXNwbGF5TW9kZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc3BsYXkgbW9kZTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGFnZSA6J1xcbiAgICB9LFxcbiAgICBkaXNwbGF5TGFwdG9wOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVkaXVtIHNjcmVlbiBzaXplJyxcXG4gICAgICAgICdmci1GUic6ICfDiWNyYW4gZGUgdGFpbGxlIG1veWVubmUnXFxuICAgIH0sXFxuICAgIGRpc3BsYXlEZXNrdG9wOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFyZ2Ugc2NyZWVuIHNpemUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3JhbiBkZSBncmFuZGUgdGFpbGxlJ1xcbiAgICB9LFxcbiAgICB1bmV4cGVjdGVkRXJyb3JDaGVja1VybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FuIHVuZXhwZWN0ZWQgZXJyb3IgaGFzIG9jY3VyZWQuIFBsZWFzZSByZXRyeSBhbmQgY2hlY2sgZm9yIHRoZSBVUkwgeW91IHJlcXVlc3RlZCBvciBjb250YWN0IHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IuJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZS4gTWVyY2kgZGUgcsOpZXNzYXllciBlbiB2w6lyaWZpYW50IGxcXFxcJ1VSTCBvdSBjb250YWN0ZXogdm90cmUgYWRtaW5pc3RyYXRldXIgc3lzdMOobWUuJ1xcbiAgICB9LFxcbiAgICBzZWVFcnJvckRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWUgZXJyb3IgZGV0YWlscycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZMOpdGFpbHMgZGUgbFxcXFwnZXJyZXVyJ1xcbiAgICB9LFxcbiAgICBzZWNvbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWNvbmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1NlY29uZGUnXFxuICAgIH0sXFxuICAgIG1pbnV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01pbnV0ZScsXFxuICAgICAgICAnZnItRlInOiAnTWludXRlJ1xcbiAgICB9LFxcbiAgICBob3VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG91cicsXFxuICAgICAgICAnZnItRlInOiAnSGV1cmUnXFxuICAgIH0sXFxuICAgIGRheU9mTW9udGg6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEYXkgb2YgbW9udGgnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0pvdXIgZHUgbW9pcydcXG4gICAgfSxcXG4gICAgbW9udGg6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNb250aCcsXFxuICAgICAgICAnZnItRlInOiAnTW9pcydcXG4gICAgfSxcXG4gICAgZGF5T2ZXZWVrOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGF5IG9mIHdlZWsnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0pvdXIgZGUgbGEgc2VtYWluZSdcXG4gICAgfSxcXG4gICAgeWVhcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1llYXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubsOpZSdcXG4gICAgfSxcXG4gICAgaW5wdXRJbnZhbGlkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBpbnB1dCcsXFxuICAgICAgICAnZnItRlInOiAnQ2hhbXAgaW52YWxpZGUnXFxuICAgIH0sXFxuICAgIGltcG9ydERhdGFGcm9tRmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ltcG9ydCBkYXRhIGZyb20gYSBmaWxlJyxcXG4gICAgICAgICdmci1GUic6ICdJbXBvcnRlciBkZXMgZG9ubsOpZXMgZGVwdWlzIHVuIGZpY2hpZXInXFxuICAgIH0sXFxuICAgIHNlbGVjdGVkRmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdGVkIGZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgc8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgZmlsZVR5cGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHR5cGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1R5cGUgZHUgZmljaGllcidcXG4gICAgfSxcXG4gICAgZmllbGRzU2VwYXJhdG9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmllbGRzIHNlcGFyYXRvcicsXFxuICAgICAgICAnZnItRlInOiAnU8OpcGFyYXRldXIgZGUgY29sb25uZXMnXFxuICAgIH0sXFxuICAgIGVuY29kaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW5jb2RpbmcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VuY29kYWdlJ1xcbiAgICB9LFxcbiAgICBxdW90ZUNoYXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdRdW90ZSBjaGFyYWN0ZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhcmFjdMOocmUgZGUgZ3VpbGxlbWV0J1xcbiAgICB9LFxcbiAgICBoZWFkZXJPbkZpcnN0Um93OiB7XFxuICAgICAgICAnZW4tVVMnOiAnSGVhZGVycyBvbiBmaXJzdCByb3cnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VudMOqdGVzIHN1ciBsYSBwcmVtacOocmUgbGlnbmUnXFxuICAgIH0sXFxuICAgIG92ZXJ3cml0ZUV4aXN0aW5nRGF0YToge1xcbiAgICAgICAgJ2VuLVVTJzogJ092ZXJ3cml0ZSBleGlzdGluZyBkYXRhJyxcXG4gICAgICAgICdmci1GUic6ICfDiWNyYXNlciBsZXMgZG9ubsOpZXMgZXhpc3RhbnRlcydcXG4gICAgfSxcXG4gICAgZHJvcFpvbmVUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Ryb3AgZmlsZXMgaGVyZSB0byB1cGxvYWQgdGhlbScsXFxuICAgICAgICAnZnItRlInOiAnRMOpcG9zZXIgbGVzIGZpY2hpZXJzIMOgIGVudm95ZXIgaWNpJ1xcbiAgICB9LFxcbiAgICBkcm9wWm9uZVN1YnRpdGxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnKG9yIGNsaWNrKScsXFxuICAgICAgICAnZnItRlInOiAnKG91IGNsaXF1ZXIpJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkRmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgZmlsZShzKScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllcihzKSBpbnZhbGlkZShzKSdcXG4gICAgfSxcXG4gICAgY29udGVudFR5cGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBY2NlcHRlZCBDb250ZW50LXR5cGVzOicsXFxuICAgICAgICAnZnItRlInOiAnQ29udGVudC10eXBlcyBhY2NlcHTDqXMgOidcXG4gICAgfSxcXG4gICAgbWF4U2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01heCBzaXplOicsXFxuICAgICAgICAnZnItRlInOiAnVGFpbGxlIG1heCA6J1xcbiAgICB9LFxcbiAgICB1bmtub3duRm9ybWF0OiB7XFxuICAgICAgICAnZW4tVVMnOiAndW5rbm93biBmb3JtYXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3Vua25vd24gc2l6ZSdcXG4gICAgfSxcXG4gICAgYWRkVGV4dFByb3BlcnR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgdGV4dCBwcm9wZXJ0eScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgdmFsZXVyIGRlIHR5cGUgdGV4dGUnXFxuICAgIH0sXFxuICAgIGFkZEZpbGVQcm9wZXJ0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBhIGZpbGUgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gZmljaGllcidcXG4gICAgfSxcXG4gICAgc2VsZWN0RmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhIGZpbGU6JyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuIGZpY2hpZXIgOidcXG4gICAgfSxcXG4gICAgZG93bmxvYWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEb3dubG9hZCcsXFxuICAgICAgICAnZnItRlInOiAnVMOpbMOpY2hhcmdlcidcXG4gICAgfSxcXG4gICAgdXBsb2FkRmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwbG9hZCBhIGZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Vudm95ZXIgdW4gZmljaGllcidcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWRMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdGVkIGxhbmd1YWdlJyxcXG4gICAgICAgICdmci1GUic6ICdMYW5ndWUgc8OpbGVjdGlvbm7DqWUnXFxuICAgIH0sXFxuICAgIGFkZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIGxhbmd1ZSdcXG4gICAgfSxcXG4gICAgcmVtb3ZlTGFuZ3VhZ2VTZWxlY3RlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbW92ZSBzZWxlY3RlZCBsYW5ndWFnZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIGxhIGxhbmd1ZSBzw6lsZWN0aW9ubsOpZSdcXG4gICAgfSxcXG4gICAgY2xvc2VMYW5ndWFnZVNlbGVjdG9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2xvc2UgbGFuZ3VhZ2Ugc2VsZWN0b3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Zlcm1lciBsYSBzw6lsZWN0aW9uIGRlIGxhbmd1ZSdcXG4gICAgfSxcXG4gICAgc2VhcmNoTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWFyY2ggbGFuZ3VhZ2UuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hlcmNoZXIgdW5lIGxhbmd1ZSdcXG4gICAgfSxcXG4gICAgcGFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhZ2UnXFxuICAgIH0sXFxuICAgIG9mOiB7XFxuICAgICAgICAnZW4tVVMnOiAnb2YnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3N1cidcXG4gICAgfSxcXG4gICAgcGRmTG9hZGluZ0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUERGIGxvYWRpbmcgZXJyb3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VycmV1ciBkZSBjaGFyZ2VtZW50IGR1IFBERidcXG4gICAgfSxcXG4gICAgbm9GaWxlQ2hvc2VuOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gZmlsZSBjaG9zZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIGZpY2hpZXIgY2hvaXNpJ1xcbiAgICB9LFxcbiAgICBmaWxlVXBsb2FkZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHVwbG9hZGVkJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVyIHTDqWzDqWNoYXJnw6knXFxuICAgIH0sXFxuICAgIHByZXZpZXdMb3dlckNhc2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdwcmV2aWV3JyxcXG4gICAgICAgICdmci1GUic6ICdhcGVyw6d1J1xcbiAgICB9LFxcbiAgICBmaWxlVXBsb2FkRmFpbGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmlsZSB1cGxvYWQgZmFpbGVkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWNoZWMgZHUgdMOpbMOpY2hhcmdlbWVudCBkdSBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICByZXN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnUmVkw6ltYXJyZXInXFxuICAgIH0sXFxuICAgIHNob3dTdGF0dXNDb250cm9sczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgc3RhdHVzIGNvbnRyb2xzJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsZXMgY29udHLDtGxlcyBkZSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIGhpZGVTdGF0dXNDb250cm9sczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGUgc3RhdHVzIGNvbnRyb2xzJyxcXG4gICAgICAgICdmci1GUic6ICdDYWNoZXIgbGVzIGNvbnRyw7RsZXMgZGUgc3RhdHV0J1xcbiAgICB9LFxcbiAgICByZWZyZXNoU3RhdHVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVmcmVzaCBzdGF0dXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhZnJhw65jaGlyIHN0YXR1dCdcXG4gICAgfSxcXG4gICAgcnVubmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1bm5pbmcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VuIGNvdXJzJ1xcbiAgICB9LFxcbiAgICBzdG9wcGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RvcHBlZCcsXFxuICAgICAgICAnZnItRlInOiAnQXJyw6p0w6knXFxuICAgIH0sXFxuICAgIHNvcnRCeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NvcnQgYnknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1RyaWVyIHBhcidcXG4gICAgfSxcXG4gICAgY3JlYXRlQ2hpbGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDcmVhdGUgY2hpbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6llciBlbmZhbnQnXFxuICAgIH0sXFxuICAgIHZhbGlkYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmFsaWRhdGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGlkZXInXFxuICAgIH0sXFxuICAgIHRyZWVVcGRhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVcGRhdGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGlkZXInXFxuICAgIH0sXFxuICAgIGlkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEJ1xcbiAgICB9LFxcbiAgICBwcm9wZXJ0aWVzS2V5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvcGVydGllcyBrZXkocyknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nsw6kocykgZGUgcHJvcHJpw6l0w6lzJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkVW5pcXVlTm9kZU5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb2RlIG5hbWUgbXVzdCBiZSB1bmlxdWUgYW1vbmcgZGlyZWN0IGNoaWxkcmVuJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gZHUgbm9ldWQgZG9pdCDDqnRyZSB1bmlxdWUgcGFybWkgbGVzIGVuZmFudHMgZGlyZWN0cydcXG4gICAgfSxcXG4gICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGRpdGlvbmFsIHByb3BlcnRpZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb3ByacOpdMOpcyBhZGRpdGlvbm5lbGxlcydcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWROb2RlRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdGVkIG5vZGUgZGV0YWlscycsXFxuICAgICAgICAnZnItRlInOiAnRMOpdGFpbHMgZHUgbm9ldWQgc8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgZXhwYW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwYW5kJyxcXG4gICAgICAgICdmci1GUic6ICdEw6lwbGllcidcXG4gICAgfSxcXG4gICAgY29sbGFwc2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb2xsYXBzZScsXFxuICAgICAgICAnZnItRlInOiAnUGxpZXInXFxuICAgIH0sXFxuICAgIHVzZXJEZXRhaWxzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdJbmZvcm1hdGlvbnMnXFxuICAgIH0sXFxuICAgIHZpZXdCeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcgYnknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIHBhcidcXG4gICAgfSxcXG4gICAgc2VsZWN0VXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhIHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdW4gdXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIHVzZXJFbWFpbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VzZXIgZW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsIGRlIGxcXFxcJ3V0aWxzYXRldXInXFxuICAgIH0sXFxuICAgIHNlbGVjdFZhbHVlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgdmFsdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdW5lIHZhbGV1cidcXG4gICAgfSxcXG4gICAgYWRkRmlsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgZmlsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgZGVzIGZpY2hpZXJzJ1xcbiAgICB9LFxcbiAgICBjb25maXJtVXNlcnNEaXNhc3NvY2lhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGlzYXNzb2NpYXRlIHRoZSBzZWxlY3RlZCB1c2VyKHMpIGZyb20gdGhlIGN1cnJlbnQgaW5zdGFuY2U/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBkw6lzYXNzb2NpZXIgbFxcXFwnKGxlcykgdXRpbGlzYXRldXIocykgc8OpbGVjdGlvbm7DqShzKSBkZSBsXFxcXCdpbnN0YW5jZSA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtVXNlcnNEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCB1c2VyKHMpPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGxcXFxcJyhsZXMpIHV0aWxpc2F0ZXVyKHMpIHPDqWxlY3Rpb25uw6kocykgPydcXG4gICAgfSxcXG4gICAgY29uZmlybVBlcm1zZXRzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgcGVybWlzc2lvbiBzZXQocyk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbGUocykgZ3JvdXBlKHMpIGRlIHBlcm1pc3Npb25zIHPDqWxlY3Rpb25uw6kocykgPydcXG4gICAgfSxcXG4gICAgcGVybXNldHNEZWxldGVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGVybWlzc2lvbiBzZXQocykgZGVsZXRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dyb3VwZShzKSBkZSBwZXJtaXNzaW9ucyBzdXBwcmltw6lzICEnXFxuICAgIH0sXFxuICAgIHBlcm1zZXRzRGVsZXRlRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3Blcm1pc3Npb24gc2V0KHMpIG5vdCBkZWxldGVkJyxcXG4gICAgICAgICdmci1GUic6ICdncm91cGUocykgZGUgcGVybWlzc2lvbnMgbm9uIHN1cHByaW3DqShzKSdcXG4gICAgfSxcXG4gICAgdXNlcnNEZWxldGVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlcihzKSBkZWxldGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIocykgc3VwcHJpbcOpKHMpICEnXFxuICAgIH0sXFxuICAgIHVzZXJzRGVsZXRlRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3VzZXIocykgbm90IGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3V0aWxpc2F0ZXVyKHMpIG5vbiBzdXBwcmltw6kocyknXFxuICAgIH0sXFxuICAgIHVzZXJzRGlzYXNzb2NpYXRlU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VzZXIocykgZGlzYXNzb2NpYXRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyKHMpIGTDqXNhc3NvY2nDqShzKSAhJ1xcbiAgICB9LFxcbiAgICB1c2Vyc0Rpc2Fzc29jaWF0ZUZhaWx1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICd1c2VyKHMpIG5vdCBkaXNhc3NvY2lhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICd1dGlsaXNhdGV1cihzKSBub24gZMOpc2Fzc29jacOpKHMpJ1xcbiAgICB9LFxcbiAgICByZWNvcmRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVjb3JkcycsXFxuICAgICAgICAnZnItRlInOiAnRW50csOpZXMnXFxuICAgIH0sXFxuICAgIG5vQXZhaWxhYmxlVGFibGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gdGFibGVzIGF2YWlsYWJsZS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSB0YWJsZSBkaXNwb25pYmxlLidcXG4gICAgfSxcXG4gICAgc2VsZWN0VGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYSB0YWJsZScsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1bmUgdGFibGUnXFxuICAgIH0sXFxuICAgIGRlbGV0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIHRoaXMgdGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZXR0ZSB0YWJsZSdcXG4gICAgfSxcXG4gICAgZGVsZXRlQWxsUmVjb3Jkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RlbGV0ZSBhbGwgcmVjb3JkcycsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIHRvdXQgbGUgY29udGVudSdcXG4gICAgfSxcXG4gICAgZXhwb3J0VG9FeGNlbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0V4cG9ydCB0byBFeGNlbCcsXFxuICAgICAgICAnZnItRlInOiAnRXhwb3J0ZXIgdmVycyBFeGNlbCdcXG4gICAgfSxcXG4gICAgaW1wb3J0RGF0YToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ltcG9ydCBkYXRhJyxcXG4gICAgICAgICdmci1GUic6ICdJbXBvcnRlciBkZXMgZG9ubsOpZXMnXFxuICAgIH0sXFxuICAgIGFkZFJlY29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBhIG5ldyByZWNvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIGVudHLDqWUnXFxuICAgIH0sXFxuICAgIHRhYmxlTmFtZUludmFsaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYWJsZSBuYW1lIGlzIGVtcHR5IG9yIGluY29ycmVjdCcsXFxuICAgICAgICAnZnItRlInOiAnTGUgbm9tIGRlIGxhIHRhYmxlIGVzdCB2aWRlIG91IGludmFsaWRlJ1xcbiAgICB9LFxcbiAgICB0YWJsZUZpZWxkc0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gdGFibGUgZmllbGRzIGFkZGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBjaGFtcCByZW5zZWlnbsOpJ1xcbiAgICB9LFxcbiAgICB0YWJsZUtleXNFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGtleSBmb3VuZCBmb3IgdGhlIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUgY2zDqSByZW5zZWlnbsOpZSdcXG4gICAgfSxcXG4gICAgdGFibGVJbnZhbGlkVmFsdWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCB2YWx1ZShzKSBzdXBwbGllZCBmb3IgdGhlIHRhYmxlIHN0cnVjdHVyZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyKHMpIGludmFsaWRlKHMpIGZvdXJuaWUocykgcG91ciBkw6lmaW5pciBsYSBzdHJ1Y3R1cmUgZGUgbGEgdGFibGUnXFxuICAgIH0sXFxuICAgIG5vdGhpbmdUb1NhdmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb3RoaW5nIHRvIHNhdmUgaGVyZSEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JpZW4gw6AgZW5yZWdpc3RyZXIgISdcXG4gICAgfSxcXG4gICAgY29uZmlybVJlY29yZERlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyByZWNvcmQ/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgY2V0dGUgZW50csOpZSA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtQWxsUmVjb3Jkc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgYWxsIHJlY29yZHMgaW4gdGhpcyB0YWJsZT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB0b3V0ZXMgbGVzIGRvbm7DqWVzIGRlIGNldHRlIHRhYmxlID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1EZWxldGVUYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyB0YWJsZT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXR0ZSB0YWJsZSA/J1xcbiAgICB9LFxcbiAgICBkb3dubG9hZFdpbGxTdGFydDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBkb3dsb2FkIHdpbGwgc3RhcnQgYXV0b21hdGljYWxseScsXFxuICAgICAgICAnZnItRlInOiAnTGUgdMOpbMOpY2hhcmdlbWVudCB2YSBkw6ltYXJyZXIgYXV0b21hdGlxdWVtZW50J1xcbiAgICB9LFxcbiAgICByZWNvcmRzUHJvY2Vzc2VkOiB7XFxuICAgICAgICAnZW4tVVMnOiAne25iUmVjb3Jkc30gcm93KHMpIHByb2Nlc3NlZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3tuYlJlY29yZHN9IGVucmVnaXN0cmVtZW50KHMpIHRyYWl0w6kocykuJ1xcbiAgICB9LFxcbiAgICBvazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ09LJyxcXG4gICAgICAgICdmci1GUic6ICdPSydcXG4gICAgfSxcXG4gICAgY29uZmlybUNoYW5nZVdpdGhvdXRTYXZpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSB2aWV3IGFuZCBsb29zZSB0aGUgY2hhbmdlcz8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIGNvbnRlbnUgYSDDqXTDqSBjaGFuZ8OpLiDDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBjaGFuZ2VyIGRlIHZ1ZSBldCBwZXJkcmUgY2VzIGNoYW5nZW1lbnRzID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1EZWxldGVJdGVtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGl0ZW0/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgY2V0IMOpbMOpbWVudCA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtUmVsb2FkV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZWxvYWQgdGhpcyBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnTGUgY29udGVudSBhIMOpdMOpIGNoYW5nw6kuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHJlY2hhcmdlciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1SZXByb2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVwcm9jZXNzIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHJlbGFuY2VyIGNldCDDqWzDqW1lbnQgPydcXG4gICAgfSxcXG4gICAgY29uZmlybVNhdmVBbmRSZXByb2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3UgaGF2ZSBtYWRlIHNvbWUgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHNhdmUgQU5EIHJlcHJvY2VzcyB0aGlzIGl0ZW0/JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBjb250ZW51IGEgw6l0w6kgY2hhbmfDqS4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc2F1dmVnYXJkZXIgRVQgcmVsYW5jZXIgY2V0IMOpbMOpbWVudCA/J1xcbiAgICB9LFxcbiAgICBpdGVtUmVwcm9jZXNzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnQgcmVsYW5jw6knXFxuICAgIH0sXFxuICAgIGl0ZW1SZXByb2Nlc3NGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3QgcmVwcm9jZXNzZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBub24gcmVsYW5jw6knXFxuICAgIH0sXFxuICAgIGl0ZW1SZWxvYWRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCByZWNoYXJnw6knXFxuICAgIH0sXFxuICAgIGl0ZW1SZWxvYWRGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3QgcmVsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBub24gcmVjaGFyZ8OpJ1xcbiAgICB9LFxcbiAgICBpdGVtU2F2ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIHNhdmVkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnQgZW5yZWdpc3Ryw6knXFxuICAgIH0sXFxuICAgIGl0ZW1TYXZlRmFpbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gbm90IHNhdmVkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnQgbm9uIGVucmVnaXN0csOpJ1xcbiAgICB9LFxcbiAgICBpdGVtRGVsZXRlRmFpbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gbm90IGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBub24gc3VwcHJpbcOpJ1xcbiAgICB9LFxcbiAgICByZXNldENoYW5nZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBjaGFuZ2VzJyxcXG4gICAgICAgICdmci1GUic6ICdBbm51bGVyIGxlcyBjaGFuZ2VtZW50cydcXG4gICAgfSxcXG4gICAgZXJyb3JPY2N1cmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQW4gZXJyb3Igb2NjdXJlZCcsXFxuICAgICAgICAnZnItRlInOiAnVW5lIGVycmV1ciBlc3Qgc3VydmVudWUnXFxuICAgIH0sXFxuICAgIHdvcmtJdGVtQ29uZmlybVRleHRTdGFydDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0bycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXInXFxuICAgIH0sXFxuICAgIHdvcmtJdGVtQ29uZmlybVRleHRFbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd0aGlzIHdvcmsgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2NldHRlIHTDomNoZSA/J1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1UaXRsZUxhbmd1YWdlU3NldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFuZ3VhZ2Ugc2V0dGluZ3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmUgZGVzIGxhbmd1ZXMnXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybVRpdGxlX2FkZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgZnJhbWUnXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybVRpdGxlX2VkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVcGRhdGUgZnJhbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01pc2Ugw6Agam91ciBkZSBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVGb3JtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJhbWUgaW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZyYW1lIGVuJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1IZWxwZXJFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpZWxkIG11c3QgYmUgcHJvdmlkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIGNoYW1wIGRvaXQgw6p0cmUgcmVuc2VpZ27DqSdcXG4gICAgfSxcXG4gICAgaWRVbmlxdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3VyIElEIG11c3QgYmUgdW5pcXVlJyxcXG4gICAgICAgICdmci1GUic6ICdWb3RyZSBJRCBkb2l0IMOqdHJlIHVuaXF1ZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtSGVscGVyTGFuZ3VhZ2VTZWxlY3RlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBjYW4gc2VsZWN0IHRoZSBsYW5ndWFnZSB0byBlZGl0IGFuZCByZW1vdmUgdGhlIG9uZSB5b3UgZG9uXFxcXCd0IHdhbnQgYW55bW9yZSBoZXJlLiBZb3UgbXVzdCBmaWxsIGF0IGxlYXN0IHRoZSBFTiBsYW5ndWFnZSB0byBiZSBhYmxlIHRvIHNhdmUgeW91ciBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBwb3V2ZXogc8OpbGVjdGlvbm5lciBsYSBsYW5ndWUgw6AgZWRpdGVyIGV0IHN1cHByaW1lciBjZWxsZXMgZG9udCB2b3VzIG5cXFxcJ2F2ZXogcGx1cyBiZXNvaW4gaWNpLiBWb3VzIGRldmV6IHJlbnNlaWduZXIgYXUgbW9pbnMgbGEgbGFuZ3VlIEVOIHBvdXIgcG91dm9pciBzYXV2ZWdhcmRlciB1bmUgZnJhbWUnXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybUdyaWRMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhbmd1YWdlIGNob2ljZSAoSVNPIGNvZGUpJyxcXG4gICAgICAgICdmci1GUic6ICdDaG9peCBkZSBsYSBsYW5ndWUgKGNvZGUgSVNPKSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtR3JpZExhbmd1YWdlc1NlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFuZ3VhZ2VzIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdMYW5ndWVzIHPDqWxlY3Rpb25uw6llcydcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyRGF0YUxhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRU4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZSJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJUZXh0RW1wdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBmcmFtZSB0byBkaXNwbGF5JyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUgZnJhbWUgw6AgYWZmaWNoZXInXFxuICAgIH0sXFxuICAgIGZyYW1lczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZyYW1lcycsXFxuICAgICAgICAnZnItRlInOiAnRnJhbWVzJ1xcbiAgICB9LFxcbiAgICB1cmw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVUkwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VSTCdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uRWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VkaXQgZnJhbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgbGEgZnJhbWUnXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlckJ1dHRvbkRlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RlbGV0ZSBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJCdXR0b25QcmV2aWV3OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJldmlldyBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnQXBlcsOndSBkZSBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgcmVmcmVzaEZyYW1lczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZnJlc2ggZnJhbWVzJyxcXG4gICAgICAgICdmci1GUic6ICdBY3R1YWxpc2VyIGxlcyBmcmFtZXMnXFxuICAgIH0sXFxuICAgIGFkZEZyYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgY2FuY2VsRnJhbWVFZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2FuY2VsIGZyYW1lIGVkaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXIgbFxcXFwnw6lkaXRpb24gZGUgbGEgZnJhbWUnXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlckJ1dHRvbkJhY2s6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXR1cm4gdG8gSG9tZSBwYWdlcyBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkZSBjb25maWd1cmF0aW9uIGRlcyBwYWdlcyBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBkYXRhTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFTicsXFxuICAgICAgICAnZnItRlInOiAnRlInXFxuICAgIH0sXFxuICAgIGZyYW1lcHJldmlld1RpdGxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJhbWUgcHJldmlldycsXFxuICAgICAgICAnZnItRlInOiAnQXBlcsOndSBkZSBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVwcmV2aWV3VGl0bGVTZXR0aW5nczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCB5b3VyIGxhbmd1YWdlJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9uIGRlIGxhIGxhbmd1ZSdcXG4gICAgfSxcXG4gICAgdW5pcXVlSWRSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lEIG11c3QgYmUgdW5pcXVlJyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXCdJRCBkb2l0IMOqdHJlIHVuaXF1ZSdcXG4gICAgfSxcXG4gICAgaHR0cHNVcmxSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ011c3QgYmUgYSB2YWxpZCBIVFRQUyBVUkwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VSTCBIVFRQUyB2YWxpZGUgcmVxdWlzZSdcXG4gICAgfSxcXG4gICAgbm9Nb2R1bGVTZWxlY3RlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIG1vZHVsZSBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gbW9kdWxlIHPDqWxlY3Rpb25uw6knXFxuICAgIH0sXFxuICAgIHNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uw6knXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lSGVhZGVyTGF5b3V0VGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdDb25maWd1cmF0aW9uIGRlIGxhIHByw6lzZW50YXRpb24nXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc0F2YWlsYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vZHVsZXMgYXZhaWxhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIGRpc3BvbmlibGVzJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZU1vZHVsZXNTZWxlY3RlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vZHVsZXMgc2VsZWN0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vZHVsZXMgc8OpbGVjdGlvbm7DqXMnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lQnV0dG9uQ29uZmlndXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29uZmlndXJlIGxheW91dCcsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqXRyYWdlIGRlIGxcXFxcJ2FmZmljaGFnZSdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVCdXR0b25EZWZhdWx0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzdG9yZSBkZWZhdWx0JyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOodHJlIHBhciBkw6lmYXV0J1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvblNlbGVjdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBtb2R1bGVzJyxcXG4gICAgICAgICdmci1GUic6ICdDaG9peCBkZXMgbW9kdWxlcydcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVCdXR0b25CYWNrOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQmFjayB0byBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lU2VsZWN0ZWRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkaWRuXFxcXCd0IHNlbGVjdCBhbnkgbW9kdWxlcycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBuXFxcXCdhdmV6IHPDqWxlY3Rpb25uw6kgYXVjdW4gbW9kdWxlJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZU1vZHVsZXNFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIG1vZHVsZXMgYXZhaWxhYmxlIGluIHRoaXMgY29uZmlndXJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gbW9kdWxlIGRpc3BvbmlibGUgZGFucyBjZXR0ZSBjb25maWd1cmF0aW9uJ1xcbiAgICB9LFxcbiAgICBob21lUGFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lTmF2aWdhdGVEZWZhdWx0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29uZmlndXJlIEhvbWUgcGFnZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbmZpZ3VyYXRpb24gZGVzIHBhZ2VzIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVOYXZpZ2F0ZU93bjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0N1c3RvbWl6ZSB0aGlzIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJlciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVTdGF0dXNFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhbnkgbW9kdWxlcyB0byBkaXNwbGF5JyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYXVjdW4gbW9kdWxlIMOgIGFmZmljaGVyJ1xcbiAgICB9LFxcbiAgICBob21lU2VsZWN0Tm9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCB5b3VyIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnQ2hvaXNpc3NleiB2b3RyZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NIZWFkZXJBdmFpbGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNb2R1bGVzIGF2YWlsYWJsZScsXFxuICAgICAgICAnZnItRlInOiAnTW9kdWxlcyBkaXNwb25pYmxlcydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0hlYWRlclNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnTW9kdWxlcyBzw6lsZWN0aW9ubsOpcydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0hlYWRlckNvbmZpZ3VyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmVkIEhvbWUgcGFnZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhZ2VzIGRcXFxcJ2FjY3VlaWwgY29uZmlndXJhYmxlcydcXG4gICAgfSxcXG4gICAgdHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1R5cGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1R5cGUnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NFZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCB0aGlzIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnTW9kaWZpZXIgY2V0dGUgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzRHVwbGljYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHVwbGljYXRlIHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdEdXBsaXF1ZXIgY2V0dGUgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgY2V0dGUgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzQ29uZmlndXJlbGF5b3V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29uZmlndXJlIGxheW91dCcsXFxuICAgICAgICAnZnItRlInOiAnUGVyc29uYWxpc2F0aW9uIGRlIGxcXFxcJ2FmZmljaGFnZSdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc1NhdmVzZWxlY3Rpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTYXZlIHlvdXIgc2VsZWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTYXV2ZWdhcmRlciB2b3RyZSBzw6lsZWN0aW9uJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzQWRkRGVmYXVsdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0J1dHRvbkJhY2s6IHtcXG4gICAgICAgICdlbi1VUyc6ICdCYWNrIHRvIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUmV0b3VyIMOgIGxhIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0ZyYW1lc3BhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZXMgbWFuYWdlcicsXFxuICAgICAgICAnZnItRlInOiAnR2VzdGlvbm5haXJlIGRlcyBGcmFtZXMnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NUZXh0RW1wdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGVyZSBpcyBubyBtb2R1bGVzIGF2YWlsYWJsZSBpbiB5b3VyIGN1cnJlbnQgY29uZmlndXJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnSWwgblxcXFwneSBhIGF1Y3VuIG1vZHVsZXMgZGlzcG9uaWJsZXMgcG91ciBjZXR0ZSBjb25maWd1cmF0aW9uJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzU2VsZWN0RGVmYXVsdHZhbHVlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGhvbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2lzaXNzZXogbGEgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzTW9kYWxEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgYWJvdXQgZGVsZXRpbmcgdGhpcyBzZXR0aW5nID8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXR0ZSBjb25maWd1cmF0aW9uID8nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NFcnJvckluVXNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIG5hbWUgYHtuYW1lfWBpcyBhbHJlYWR5IGluIHVzZSBieSBhbm90aGVyIGNvbmZpZ3VyYXRpb24sIGNob29zZSBhbm90aGVyIG9uZSBwbGVhc2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG5vbSBge25hbWV9YCBlc3QgZMOpasOgIHV0aWxpc8OpIHBvdXIgdW5lIGF1dHJlIGNvbmZpZ3VyYXRpb24sIHZldWlsbGV6IGVuIGNob2lzaXIgdW4gYXV0cmUnXFxuICAgIH0sXFxuICAgIGFwcExvYWRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FwcCBsb2FkZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdBcHAgbGFuY8OpZSAhJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkUGFzc3dvcmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3VyIHBhc3N3b3JkIG11c3QgYmUgOCB0byAzMiBjaGFyYWN0ZXJzIGxvbmcgYW5kIGNvbnRhaW5zIGF0IGxlYXN0IDEgdXBwZXIvbG93ZXIgY2FzZSBsZXR0ZXIgYW5kIDEgbnVtYmVyJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtb3QgZGUgcGFzc2UgZG9pdCBjb250ZW5pciBlbnRyZSA4IGV0IDMyIGNhcmFjdMOocmVzIGV0IGF1IG1vaW5zIDEgbWFqdXNjdWxlL21pbnVzY3VsZSBldCAxIGNoaWZmcmUnXFxuICAgIH0sXFxuICAgIGNhcmRUZW1wbGF0ZUZ1bGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGFyZWEgY2Fubm90IGNvbnRhaW4gbW9yZSBpdGVtcycsXFxuICAgICAgICAnZnItRlInOiAnQ2V0IHpvbmUgbmUgcGV1dCBwYXMgY29udGVuaXIgcGx1cyBkXFxcXCfDqWzDqW1lbnRzJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkQ29sb3JDb2RlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29sb3IgY29kZSBpcyBpbnZhbGlkJyxcXG4gICAgICAgICdmci1GUic6ICdDb2RlIGNvdWxldXIgaW52YWxpZGUnXFxuICAgIH0sXFxuICAgIG1hbmRhdG9yeVZhbHVlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01hbmRhdG9yeSB2YWx1ZShzKTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGV1cihzKSBvYmxpZ2F0b2lyZShzKSA6J1xcbiAgICB9LFxcbiAgICBwYXNzd29yZFVwZGF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQYXNzd29yZCB1cGRhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNb3QgZGUgcGFzc2UgbWlzIMOgIGpvdXIgISdcXG4gICAgfSxcXG4gICAgZGV0YWlsc1VwZGF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZXRhaWxzIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscyBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBzZXR0aW5nc1VwZGF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXR0aW5ncyB1cGRhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZXMgbWlzIMOgIGpvdXIgISdcXG4gICAgfSxcXG4gICAgYXZhdGFyVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F2YXRhciB1cGRhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnQXZhdGFyIG1pcyDDoCBqb3VyICEnXFxuICAgIH0sXFxuICAgIHVzZXJBc3NvY2lhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBzdWNjZXNzZnVsbHkgYXNzb2NpYXRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyIGFzc29jacOpIGF2ZWMgc3VjY8OocyAhJ1xcbiAgICB9LFxcbiAgICB1c2VyQXNzb2NpYXRlUmVzZW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwgc2VudCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgZW52b3nDqSAhJ1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYXNzb2NpYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VzZXIgZGlzYXNzb2NpYXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIgZMOpc2Fzc29jacOpJ1xcbiAgICB9LFxcbiAgICBtZXNzYWdlRGVsZXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lc3NhZ2UocykgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVzc2FnZShzKSBzdXBwcmltw6lzJ1xcbiAgICB9LFxcbiAgICBtZXNzYWdlUmVwcm9jZXNzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZW50IG1lc3NhZ2UocykgZm9yIHJlcHJvY2Vzc2luZycsXFxuICAgICAgICAnZnItRlInOiAnTWVzc2FnZShzKSDDoCByZWxhbmNlciBlbnZvecOpcydcXG4gICAgfSxcXG4gICAgdXNlckFscmVhZHlFeGlzdHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgdXNlciB5b3Ugd2FudCB0byBhc3NvY2lhdGUgdG8gdGhpcyBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cyBvbiB0aGUgc3lzdGVtIChhbmQgbWF5YmUgYWxyZWFkeSBhc3NvY2lhdGVkIHRvIG90aGVyIGluc3RhbmNlcykuJyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXCd1dGlsaXNhdGV1ciBxdWUgdm91cyB2b3VsZXogYXNzb2NpZXIgc3VyIGNldHRlIGluc3RhbmNlIGV4aXN0ZSBkw6lqw6Agc3VyIGxlIHN5c3TDqG1lLiBJbCBlc3QgcGV1dCDDqnRyZSDDqWdhbGVtZW50IGTDqWrDoCBhc3NvY2nDqSDDoCBkXFxcXCdhdXRyZXMgaW5zdGFuY2VzLidcXG4gICAgfSxcXG4gICAgdW5leHBlY3RlZEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cmVkLiBQbGVhc2UgdHJ5IGFnYWluLicsXFxuICAgICAgICAnZnItRlInOiAnVW5lIGVycmV1ciBlc3Qgc3VydmVudWUuIE1lcmNpIGRlIHLDqWVzc2F5ZXIuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb25VbmF2YWlsYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZ2lzdHJhdGlvbiBpcyBub3QgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnTFxcXFzigJllbnJlZ2lzdHJlbWVudCBuXFxcXCdlc3QgcGFzIGRpc3BvbmlibGUuJ1xcbiAgICB9LFxcbiAgICBmb3Jnb3RQYXNzd29yZFRpdGxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZXQgcGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1LDqWluaXRpYWxpc2VyIG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgZm9yZ290UGFzc3dvcmRNZXNzYWdlU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dlXFxcXCd2ZSBzZW50IHlvdSBhbiBlbWFpbC4gQ2xpY2sgdGhlIGxpbmsgaW4gdGhlIGVtYWlsIHRvIHJlc2V0IHlvdXIgcGFzc3dvcmQuJyxcXG4gICAgICAgICdmci1GUic6ICdOb3VzIHZvdXMgYXZvbnMgZW52b3nDqSB1biBlbWFpbC4gQ2xpcXVleiBzdXIgbGUgbGllbiBkYW5zIGxcXFxcJ2VtYWlsIHBvdXIgcsOpaW5pdGlhbGlzZXIgdm90cmUgbW90IGRlIHBhc3NlLidcXG4gICAgfSxcXG4gICAgcnVubmluZ0pvYnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSdW5uaW5nIGpvYnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1TDomNoZXMgZW4gY291cnMnXFxuICAgIH0sXFxuICAgIG5vUnVubmluZ0pvYjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJ1bm5pbmcgam9iJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUgdMOiY2hlIGVuIGNvdXJzJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ByaW9yaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdQcmlvcml0w6knXFxuICAgIH0sXFxuICAgIGNyZWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDcmVhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpw6kgbGUnXFxuICAgIH0sXFxuICAgIGxhc3RTdGF0dXNNb2RpZmljYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IHN0YXR1cyBtb2RpZmljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlcm5pw6hyZSBtb2RpZmljYXRpb24gZHUgc3RhdHV0J1xcbiAgICB9LFxcbiAgICBzdGFja3RyYWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RhY2t0cmFjZScsXFxuICAgICAgICAnZnItRlInOiAnU3RhY2t0cmFjZSdcXG4gICAgfSxcXG4gICAgZmlsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllcnMnXFxuICAgIH0sXFxuICAgIHZpZXdMYXN0TWVzc2FnZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IGxhc3QgbWVzc2FnZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGVzIGRlcm5pZXJzIG1lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICB2aWV3U3RhY2t0cmFjZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcgc3RhY2t0cmFjZScsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsYSBzdGFja3RyYWNlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eUhpZ2g6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIaWdoJyxcXG4gICAgICAgICdmci1GUic6ICdIYXV0ZSdcXG4gICAgfSxcXG4gICAgcHJpb3JpdHlNZWRpdW06IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZWRpdW0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01veWVubmUnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5TG93OiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG93JyxcXG4gICAgICAgICdmci1GUic6ICdCYXNzZSdcXG4gICAgfSxcXG4gICAgcHJpb3JpdHlWZXJ5TG93OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmVyeSBsb3cnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Ryw6hzIGJhc3NlJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNDb21wbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbXBsZXRlJyxcXG4gICAgICAgICdmci1GUic6ICdUZXJtaW7DqSdcXG4gICAgfSxcXG4gICAgam9iU3RhdHVzUXVldWVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUXVldWVkJyxcXG4gICAgICAgICdmci1GUic6ICdFbiBhdHRlbnRlJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNJbkVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW4gZXJyb3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VycmV1cidcXG4gICAgfSxcXG4gICAgam9iU3RhdHVzUnVubmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1bm5pbmcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VuIGNvdXJzJ1xcbiAgICB9LFxcbiAgICBtYXJrQXNSZWFkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWFyayBhcyByZWFkJyxcXG4gICAgICAgICdmci1GUic6ICdNYXJxdWVyIGNvbW1lIGx1J1xcbiAgICB9LFxcbiAgICBjYW5jZWxKb2JDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNhbmNlbCB0aGlzIGpvYj8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGFubnVsZXIgY2V0dGUgdMOiY2hlID8nXFxuICAgIH0sXFxuICAgIHBhc3N3b3JkRW1wdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2UgZW50ZXIgeW91ciBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcmVtZW1iZXJNZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0tlZXAgbWUgc2lnbmVkIGluJyxcXG4gICAgICAgICdmci1GUic6ICdHYXJkZXIgbWEgY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBmb3Jnb3RQYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZvcmdvdCBwYXNzd29yZD8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vdCBkZSBwYXNzZSBvdWJsacOpID8nXFxuICAgIH0sXFxuICAgIG5vdFJlZ2lzdGVyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb3QgYWxyZWFkeSByZWdpc3RlcmVkPycsXFxuICAgICAgICAnZnItRlInOiAnUGFzIGVuY29yZSBlbnJlZ2lzdHLDqShlKSA/J1xcbiAgICB9LFxcbiAgICBpbnZhbGlkTG9naW5Vcmw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGxvZ2luIFVSTCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VSTCBkZSBsb2dpbiBpbnZhbGlkZSAhJ1xcbiAgICB9LFxcbiAgICB1c2VyQWxyZWFkeVJlZ2lzdGVyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIHVzZXIgaXMgYWxyZWFkeSByZWdpc3RlcmVkJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1ciBkw6lqw6AgZW5yZWdpc3Ryw6knXFxuICAgIH0sXFxuICAgIHVzZXJBbHJlYWR5UmVnaXN0ZXJlZFRlc3RQcm9kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIG9uIHRlc3Qgb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudCcsXFxuICAgICAgICAnZnItRlInOiAnIHN1ciB1biBkZXMgZW52aXJvbm5lbWVudHMgKHRlc3Qgb3UgcHJvZHVjdGlvbiknXFxuICAgIH0sXFxuICAgIHNlbGVjdEVudmlyb25tZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGVudmlyb25tZW50JyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIGVudmlyb25uZW1lbnQnXFxuICAgIH0sXFxuICAgIHRlc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUZXN0JyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0J1xcbiAgICB9LFxcbiAgICBwcm9kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvZHVjdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnUHJvZHVjdGlvbidcXG4gICAgfSxcXG4gICAgdGVzdEFuZFByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUZXN0ICYgUHJvZHVjdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnVGVzdCAmIFByb2R1Y3Rpb24nXFxuICAgIH0sXFxuICAgIGVudkVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIHNlbGVjdCB0aGUgcmVnaXN0cmF0aW9uIGVudmlyb25tZW50JyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzw6lsZWN0aW9ubmVyIHN1ciBxdWVsIGVudmlyb25uZW1lbnQgdm91cyBzb3VoYWl0ZXogdm91cyBlbnJlZ2lzdHJlcidcXG4gICAgfSxcXG4gICAgbG9nb3V0TWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xvZ2dpbmcgb3V0Li4uJyxcXG4gICAgICAgICdmci1GUic6ICdEw6ljb25uZXhpb24uLi4nXFxuICAgIH0sXFxuICAgIGxvZ291dFN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3UgaGF2ZSBiZWVuIHNpZ25lZCBvdXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgw6p0ZXMgbWFpbnRlbmFudCBkw6ljb25uZWN0w6knXFxuICAgIH0sXFxuICAgIGxvZ291dEJ1dHRvbkxvZ2luOiB7XFxuICAgICAgICAnZW4tVVMnOiAnR28gdG8gc2lnbiBpbiBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdBbGxlciDDoCBsYSBwYWdlIGRlIGNvbm5leGlvbidcXG4gICAgfSxcXG4gICAgc2VydmVyQ29ubmV4aW9uRmFpbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvdWxkIG5vdCBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIgZm9yIGluc3RhbmNlJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9ibMOobWUgbG9ycyBkZSBsYSBjb25uZXhpb24gc2VydmV1ciBwb3VyIGxcXFxcJ2luc3RhbmNlJ1xcbiAgICB9LFxcbiAgICBzdGFsZUxvZ2luU2Vzc2lvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgbG9naW4gc2Vzc2lvbiBpcyBleHBpcmVkLiBQbGVhc2Ugd2FpdCwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJlZnJlc2hlZCBpbiA1IHNlY29uZHMuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIHNlc3Npb24gZGUgY29ubmV4aW9uIGEgZXhwaXLDqS4gTWVyY2kgZGUgcGF0aWVudGVyLCBjZWxsZS1jaSBzZXJhIGF1dG9tYXRpcXVlbWVudCBhY3R1YWxpc8OpZSBkYW5zIDUgc2Vjb25kZXMuLi4nXFxuICAgIH0sXFxuICAgIHdyb25nVXNlcm5hbWVQYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgdXNlcm5hbWUvcGFzc3dvcmQhJyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UgaW52YWxpZGUgISdcXG4gICAgfSxcXG4gICAgdXNlckRpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyB1c2VyIGFjY291bnQgaXMgZGlzYWJsZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdDZSBjb21wdGUgdXRpbGlzYXRldXIgZXN0IGTDqXNhY3RpdsOpICEnXFxuICAgIH0sXFxuICAgIG1lbWJlcnNoaXBFZXhwaXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgY29tcGFueSBNZW1iZXJzaGlwIGV4cGlyZWQgb24gPHN0cm9uZz57ZXhwaXJ5RGF0ZX08L3N0cm9uZz4uIFBsZWFzZSBhc2sgeW91ciBjb21wYW554oCZcyBDb21tdW5pdHkgYWRtaW5pc3RyYXRvcjxzdHJvbmc+e2FkbWluQ29udGFjdH08L3N0cm9uZz4gdG8gcmVuZXcgdGhlIE1lbWJlcnNoaXAuJyxcXG4gICAgICAgICdmci1GUic6ICdWb3RyZSBhYm9ubmVtZW50IGEgZXhwaXLDqSBsZSA8c3Ryb25nPntleHBpcnlEYXRlfTwvc3Ryb25nPi4gTWVyY2kgZGUgY29udGFjdGVyIHZvdHJlIGFkbWluaXN0cmF0ZXVyPHN0cm9uZz57YWRtaW5Db250YWN0fTwvc3Ryb25nPiBwb3VyIHJlbm91dmVsZXIgbGUgc2VydmljZS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ291bGQgbm90IHVuc3Vic2NyaWJlIHRoaXMgYWNjb3VudCBmcm9tIHRoaXMgaW5zdGFuY2UvY29tbXVuaXR5LicsXFxuICAgICAgICAnZnItRlInOiAnUHJvYmzDqG1lIGxvcnMgZGUgbGEgZMOpc2Fzc29jaWF0aW9uIGRlIGNlIGNvbXB0ZSBzdXIgY2V0dGUgaW5zdGFuY2UvY29tbXVuYXV0w6kuJ1xcbiAgICB9LFxcbiAgICB1bnN1YnNjcmliZUZhaWxlZEIyYXV0aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJyBJbXBvc3NpYmxlIHVuc3Vic2NyaXB0aW9uOiB0aGVyZSBpcyBubyBzdWJzY3JpcHRpb24gb24gaW5zdGFuY2UgKCopLicsXFxuICAgICAgICAnZnItRlInOiAnIEltcG9zc2libGUgZGUgc2UgZMOpc2luc2NyaXJlOiBpbCBuXFxcXCd5IGEgcGFzIGRcXFxcJ2luc2NyaXB0aW9uIHBvc3NpYmxlIHN1ciBsXFxcXCdpbnN0YW5jZSAoKikuJ1xcbiAgICB9LFxcbiAgICB1bnN1YnNjcmliZUZhaWxlZEluc3RhbmNlTm90Rm91bmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgQ291bGQgbm90IGZpbmQgc2VsZWN0ZWQgaW5zdGFuY2UgZGVmaW5pdGlvbi4gUGxlYXNlIHJlbG9hZCB0aGUgcGFnZSBhbmQgcmV0cnkuJyxcXG4gICAgICAgICdmci1GUic6ICcgSW1wb3NzaWJsZSBkZSB0cm91dmVyIGxlcyBwcm9wcmnDqXTDqXMgZGUgbFxcXFwnaW5zdGFuY2Ugc8OpbGVjdGlvbm7DqWUuIE1lcmNpIGRlIHJlY2hhcmdlciBsYSBwYWdlIGV0IGRlIHLDqWVzc2F5ZXIuJ1xcbiAgICB9LFxcbiAgICB1bnN1YnNjcmliZUZhaWxlZE5vQmFzZVVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJyBJbnZhbGlkIGJhc2VVcmwgZm91bmQgZm9yIHRoZSBjdXJyZW50IGluc3RhbmNlLicsXFxuICAgICAgICAnZnItRlInOiAnIFVSTCBkZSBsXFxcXCdpbnN0YW5jZSBzw6lsZWN0aW9ubsOpZSBpbnZhbGlkZS4nXFxuICAgIH0sXFxuICAgIHVzZXJOb3RBc3NvY2lhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIFVzZXIgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGluc3RhbmNlLicsXFxuICAgICAgICAnZnItRlInOiAnIFV0aWxpc2F0ZXVyIG5vbiBhc3NvY2nDqSDDoCBjZXR0ZSBpbnN0YW5jZS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VzZXIgc3VjY2Vzc2Z1bGx5IHVuc3Vic2NyaWJlZCBmcm9tIGNvbW11bml0eScsXFxuICAgICAgICAnZnItRlInOiAnTFxcXFwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGTDqXNhc3NvY2nDqSBkZSBjZXR0ZSBpbnN0YW5jZS4nXFxuICAgIH0sXFxuICAgIG5vUGVybWlzc2lvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhY2Nlc3MgdG8gYW55IGluc3RhbmNlISBQbGVhc2UgY2hlY2sgeW91ciBhY2NvdW50IHNldHRpbmdzIHdpdGggeW91ciBhZG1pbmlzdHJhdG9yLicsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBuXFxcXCdhdmV6IGF1Y3VuIGRyb2l0IGVucmVnaXN0csOpLiBNZXJjaSBkZSB2w6lyaWZpZXIgbGUgcGFyYW3DqXRyYWdlIGRlIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ciBhdmVjIHZvdHJlIGFkbWluaXN0cmF0ZXVyLidcXG4gICAgfSxcXG4gICAgbmV3VmVyc2lvbkF2YWlsYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBwb3J0YWwgbmVlZHMgdG8gYmUgdXBkYXRlZCB0byBhIG5ldyB2ZXJzaW9uLiBQbGVhc2Ugc2F2ZSB5b3VyIGN1cnJlbnQgd29yaywgdGhlIHVwZGF0ZSB3aWxsIGJlIGRvbmUgYXV0b21hdGljYWxseSBpbiA5MCBzZWNvbmRzLi4uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBwb3J0YWlsIGRvaXQgw6p0cmUgbWlzIMOgIGpvdXIgdmVycyB1biBub3V2ZWxsZSB2ZXJzaW9uLiBNZXJjaSBkZSBzYXV2ZWdhcmRlciB2b3MgdHJhdmF1eCBlbiBjb3VycywgbGEgbWlzZSDDoCBqb3VyIHNlIGZlcmEgYXV0b21hdGlxdWVtZW50IGRhbnMgOTAgc2Vjb25kZXMuLi4nXFxuICAgIH0sXFxuICAgIHVwZGF0ZU5vdzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZSBub3chJyxcXG4gICAgICAgICdmci1GUic6ICdNZXR0cmUgw6Agam91ciBtYWludGVuYW50ICEnXFxuICAgIH0sXFxuICAgIG5vdEZvdW5kVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNvdXJjZSBub3QgZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Jlc3NvdXJjZSBpbnRyb3V2YWJsZSdcXG4gICAgfSxcXG4gICAgbm90Rm91bmRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIHJlcXVlc3RlZCByZXNvdXJjZSB3YXMgbm90IGZvdW5kLicsXFxuICAgICAgICAnZnItRlInOiAnTGEgcmVzc291cmNlIGRlbWFuZMOpZSBlc3QgaW50cm91dmFibGUuJ1xcbiAgICB9LFxcbiAgICBzZXR0aW5nczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NldHRpbmdzJyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOodHJlcydcXG4gICAgfSxcXG4gICAgb3RoZXJzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3RoZXJzJyxcXG4gICAgICAgICdmci1GUic6ICdBdXRyZXMnXFxuICAgIH0sXFxuICAgIGRldmVsb3BtZW50VG9vbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZXZlbG9wbWVudCB0b29scycsXFxuICAgICAgICAnZnItRlInOiAnT3V0aWxzIGRlIGTDqXZlbG9wcGVtZW50J1xcbiAgICB9LFxcbiAgICBjb2RlRWRpdG9yQ29uZmlndXJhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvZGUgZWRpdG9yIGNvbmZpZ3VyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbmZpZ3VyYXRpb24gZGVzIMOpZGl0ZXVycyBkZSBjb2RlJ1xcbiAgICB9LFxcbiAgICBuZXdQYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05ldyBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTm91dmVhdSBtb3QgZGUgcGFzc2UnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1QYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpcm0gcGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbmZpcm1lciBtb3QgZGUgcGFzc2UnXFxuICAgIH0sXFxuICAgIHJlZnJlc2hQZXJtaXNzaW9uczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+UmVmcmVzaDxiciAvPnBlcm1pc3Npb25zPC9kaXY+XFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCI8ZGl2PlJhZnJhXFxcXHUwMEVFY2hpcjxiciAvPnBlcm1pc3Npb25zPC9kaXY+XFxcIlxcbiAgICB9LFxcbiAgICBjdHlVbnN1YnNjcmliZToge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+VW5zdWJzY3JpYmUgZnJvbTxiciAvPnRoaXMgQ29tbXVuaXR5PC9kaXY+XFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCI8ZGl2Pk1lIGRcXFxcdTAwRTlzaW5zY3JpcmU8YnIgLz5kZSBjZXR0ZSBDb21tdW5hdXRcXFxcdTAwRTk8L2Rpdj5cXFwiXFxuICAgIH0sXFxuICAgIGRlbGV0ZUFjY291bnQ6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCI8ZGl2PkRlbGV0ZTxiciAvPm15IGFjY291bnQ8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+U3VwcHJpbWVyIG1vbjxiciAvPmNvbXB0ZSB1dGlsaXNhdGV1cjwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgZXhwb3J0UGVybWlzc2lvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCI8ZGl2PkV4cG9ydDxiciAvPnBlcm1pc3Npb25zPC9kaXY+XFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCI8ZGl2PkV4cG9ydGVyPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VzQXV0b3JlZnJlc2g6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBdXRvLXJlZnJlc2ggbWVzc2FnZXMgbGlzdCBkZWxheScsXFxuICAgICAgICAnZnItRlInOiAnRMOpbGFpIGRlIHJhZnJhw65jaGlzc2VtZW50IGRlIGxhIGxpc3RlIGRlcyBtZXNzYWdlcydcXG4gICAgfSxcXG4gICAgZGlzYWJsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdkaXNhYmxlZCcsXFxuICAgICAgICAnZnItRlInOiAnZMOpc2FjdGl2w6knXFxuICAgIH0sXFxuICAgIHByZWZlcnJlZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJlZmVycmVkIGxhbmd1YWdlJyxcXG4gICAgICAgICdmci1GUic6ICdMYW5ndWUgcHLDqWbDqXLDqWUnXFxuICAgIH0sXFxuICAgIHVzZXJEZWxldGVBY2NvdW50Q29uZmlybToge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxwPkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgeW91IGFjY291bnQ/PC9wPlxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiPHA+XFxcXHUwMENBdGVzLXZvdXMgc1xcXFx1MDBGQnIoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyID88L3A+XFxcIlxcbiAgICB9LFxcbiAgICB1c2VyRGVsZXRlQWNjb3VudENvbmZpcm1TdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiXFxcXG4gICAgICAgICAgICA8cD5cXFxcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3NOYW1lPVxcXFxcXFwiZGFuZ2VyLWNvbG9yIGJvdHRvbS1tYXJnaW4gdGV4dC14eGxhcmdlXFxcXFxcXCI+V0FSTklORzwvaDM+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+QXJlIHlvdSA8c3Ryb25nPlJFQUxMWTwvc3Ryb25nPiBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB5b3UgYWNjb3VudD8gWW91IHdvbid0IGJlIGFibGUgdG8gYWNjZXNzIHRoZSBwb3J0YWwgYW55bW9yZS4uLjwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvcD5cXFxcbiAgICAgICAgXFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCJcXFxcbiAgICAgICAgICAgIDxwPlxcXFxuICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XFxcXFxcXCJkYW5nZXItY29sb3IgYm90dG9tLW1hcmdpbiB0ZXh0LXh4bGFyZ2VcXFxcXFxcIj5BVFRFTlRJT048L2gzPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlxcXFx1MDBDQXRlcy12b3VzIDxzdHJvbmc+VlJBSU1FTlQ8L3N0cm9uZz4gc1xcXFx1MDBGQnIoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyID8gVm91cyBuZSBwb3VycmV6IHBsdXMgYWNjXFxcXHUwMEU5ZGVyIGF1IHBvcnRhaWwuLi48L3NwYW4+XFxcXG4gICAgICAgICAgICA8L3A+XFxcXG4gICAgICAgIFxcXCJcXG4gICAgfSxcXG4gICAgdXNlclVuc3Vic2NyaWJlQ29uZmlybToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1bnN1YnNjcmliZSBmcm9tIHRoaXMgY29tbXVuaXR5PycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIHZvdHJlIGNvbXB0ZSBpbnNjcmlwdGlvbiDDoCBjZXR0ZSBjb21tdW5hdXTDqSA/J1xcbiAgICB9LFxcbiAgICBzZXRwYXNzd29yZFRpdGxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2V0IGEgbmV3IHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXIgdW4gbm91dmVhdSBtb3QgZGUgcGFzc2UnXFxuICAgIH0sXFxuICAgIHBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgc2lnbkluOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2lnbiBpbicsXFxuICAgICAgICAnZnItRlInOiAnU2UgY29ubmVjdGVyJ1xcbiAgICB9LFxcbiAgICBzZXRwYXNzd29yZFN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3VyIHBhc3N3b3JkIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBzZXQuJyxcXG4gICAgICAgICdmci1GUic6ICdWb3RyZSBtb3QgZGUgcGFzc2UgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLidcXG4gICAgfSxcXG4gICAgaW52YWxpZFBhc3N3b3JkQ29uZmlybToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bhc3N3b3JkcyBhcmUgbm90IGlkZW50aWNhbCcsXFxuICAgICAgICAnZnItRlInOiAnTGVzIDIgbW90cyBkZSBwYXNzZSBuZSBzb250IHBhcyBpZGVudGlxdWVzJ1xcbiAgICB9LFxcbiAgICBjb25maXJtTXVsdGlwbGVNZXNzYWdlc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIG1lc3NhZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGxlcyBtZXNzYWdlcyBzw6lsZWN0aW9ubsOpcyA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtTXVsdGlwbGVSZXByb2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVwcm9jZXNzIHRoZSBzZWxlY3RlZCBtZXNzYWdlcz8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHJlbGFuY2VyIGxlcyBtZXNzYWdlcyBzw6lsZWN0aW9ubsOpcyA/J1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZVJlcHJvY2Vzc1N1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZXNzYWdlcyByZXByb2Nlc3NlZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVzc2FnZXMgcmVsYW5jw6lzJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZVJlcHJvY2Vzc0ZhaWx1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdtZXNzYWdlKHMpIG5vdCByZXByb2Nlc3NlZCcsXFxuICAgICAgICAnZnItRlInOiAnbWVzc2FnZShzKSBub24gcmVsYW5jw6kocyknXFxuICAgIH0sXFxuICAgIGZldGNobXNnRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lc3NhZ2UgY2Fubm90IGJlIGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGUgbWVzc2FnZSBuZSBwZXV0IMOqdHJlIGNoYXJnw6knXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VzRGVsZXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lc3NhZ2VzIGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2VzIHN1cHByaW3DqXMnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VTYXZlRGlzcGxheVNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiXFxcXG4gICAgICAgICAgICA8ZGl2PlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPkRvIHlvdSB3YW50IHRvIHNhdmUgeW91ciBtb2RpZmljYXRpb25zPzwvc3Bhbj48YnIvPlxcXFxuICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cXFxcXFxcInRleHQtbWVkaXVtXFxcXFxcXCI+WW91ciBwcmVmZXJlbmNlcyAocHJlc2VuY2UsIHdpZHRoIGFuZCBvcmRlciBvZiBjb2x1bW5zLCBhY3Rpb24gcmVsYXRlZCB0byBcXFxcdTIwMUNTZWFyY2hcXFxcdTIwMUQgYW5kIFxcXFx1MjAxQ1Jlc2V0XFxcXHUyMDFEIGJ1dHRvbnMuLi4pIHdpbGwgYmUgc2F2ZWQgaW4geW91ciB1c2VyIHByb2ZpbGUuIE5vdGUgdGhhdCB5b3UgY2FuIHNhdmUgc3BlY2lmaWMgc2V0dGluZ3MgZm9yIGVhY2ggZGlzcGxheSBtb2RlIChtb2JpbGUsIG1lZGl1bSBhbmQgbGFyZ2Ugc2NyZWVuKS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8ZGl2PlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlZvdWxlei12b3VzIHNhdXZlZ2FyZGVyIHZvcyBtb2RpZmljYXRpb25zID88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPlZvcyBwclxcXFx1MDBFOWZcXFxcdTAwRTlyZW5jZXMgZCdhZmZpY2hhZ2UgKHByXFxcXHUwMEU5c2VuY2UsIGxhcmdldXIgZXQgb3JkcmUgZGVzIGNvbG9ubmVzLCBhY3Rpb24gZGVzIGJvdXRvbnMgXFxcXHUyMDFDUmVjaGVyY2hlclxcXFx1MjAxRCBldCBcXFxcdTIwMUNSXFxcXHUwMEU5aW5pdGlhbGlzZXJcXFxcdTIwMUQuLi4pIHNlcm9udCBlbnJlZ2lzdHJcXFxcdTAwRTllcyBkYW5zIHZvdHJlIHByb2ZpbCB1dGlsaXNhdGV1ci4gVm91cyBwb3V2ZXogc2F1dmVnYXJkZXIgZGVzIHBhcmFtXFxcXHUwMEU4dHJlcyBzcFxcXFx1MDBFOWNpZmlxdWVzIHBvdXIgY2hhcXVlIG1vZGUgZCdhZmZpY2hhZ2UgKG1vYmlsZSwgbW95ZW4gZXQgZ3JhbmQgXFxcXHUwMEU5Y3JhbikuPC9lbT5cXFxcbiAgICAgICAgICAgIDwvZGl2PlxcXFxuICAgICAgICBcXFwiXFxuICAgIH0sXFxuICAgIG11bHRpcGxlRGVsZXRlRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ21lc3NhZ2Uocykgbm90IGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ21lc3NhZ2Uocykgbm9uIHN1cHByaW3DqXMnXFxuICAgIH0sXFxuICAgIGZldGNoZG9jRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RvY3VtZW50IGNhbm5vdCBiZSBsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIGRvY3VtZW50IG5lIHBldXQgw6p0cmUgY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgY29uZmlybUNsb3NlTWVzc2FnZVN1Ym1pdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjbG9zZSB0aGlzIG1lc3NhZ2Ugc3VibWlzc2lvbiBzZXNzaW9uPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgdGVybWluZXIgY2V0dGUgc2Vzc2lvbiBkZSBjcsOpYXRpb24gZGUgbWVzc2FnZSA/J1xcbiAgICB9LFxcbiAgICBub1ZpZXdBY2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3UgZG9uXFxcXCd0IGhhdmUgYWNjZXNzIHRvIGFueSB2aWV3IG9uIHRoaXMgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBuXFxcXCdhdmV6IGFjY8OocyDDoCBhdWN1bmUgdnVlIHN1ciBjZXR0ZSBwYWdlJ1xcbiAgICB9LFxcbiAgICBub1Jlc3VsdHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyByZXN1bHRzIGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biByw6lzdWx0YXQnXFxuICAgIH0sXFxuICAgIHJlZnJlc2g6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWZyZXNoJyxcXG4gICAgICAgICdmci1GUic6ICdSYWZyYcOuY2hpcidcXG4gICAgfSxcXG4gICAgcmVwcm9jZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVwcm9jZXNzJyxcXG4gICAgICAgICdmci1GUic6ICdSZWxhbmNlcidcXG4gICAgfSxcXG4gICAgbXVsdGlwbGVNc2dSZXByb2Nlc3NJbXBvc3NpYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT25lIG9yIG1vcmUgb2YgdGhlIHNlbGVjdGVkIG1lc3NhZ2VzIGNhbm5vdCBiZSByZXByb2Nlc3NlZC4gUGxlYXNlIGNoZWNrIHlvdXIgc2VsZWN0aW9uIGFuZCByZXRyeSEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VuIG91IHBsdXNpZXVycyBkZXMgbWVzc2FnZXMgc8OpbGVjdGlvbm7DqXMgbmUgcGV1dmVudCBwYXMgw6p0cmUgcmVsYW5jw6lzLiBNZXJjaSBkZSB2ZXJpZmllciB2b3RyZSBzw6lsZWN0aW9uIGV0IGRlIHLDqWVzc2F5ZXIgISdcXG4gICAgfSxcXG4gICAgbXVsdGlwbGVNc2dEZWxldGVJbXBvc3NpYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT25lIG9yIG1vcmUgb2YgdGhlIHNlbGVjdGVkIG1lc3NhZ2VzIGNhbm5vdCBiZSBkZWxldGVkLiBQbGVhc2UgY2hlY2sgeW91ciBzZWxlY3Rpb24gYW5kIHJldHJ5IScsXFxuICAgICAgICAnZnItRlInOiAnVW4gb3UgcGx1c2lldXJzIGRlcyBtZXNzYWdlcyBzw6lsZWN0aW9ubsOpcyBuZSBwZXV2ZW50IHBhcyDDqnRyZSBzdXBwcmltw6lzLiBNZXJjaSBkZSB2ZXJpZmllciB2b3RyZSBzw6lsZWN0aW9uIGV0IGRlIHLDqWVzc2F5ZXIgISdcXG4gICAgfSxcXG4gICAgY29uZmlybU5vZGVEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgbm9kZT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZSBub2V1ZCA/J1xcbiAgICB9LFxcbiAgICByb290VHJlZURpc3BsYXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSb290IHRyZWUgZGlzcGxheWVkOicsXFxuICAgICAgICAnZnItRlInOiAnQXJicmUgcmFjaW5lIGFmZmljaMOpIDonXFxuICAgIH0sXFxuICAgIG9yZ2FuaXNhdGlvbnNDb25maXJtRGVsZXRlTGFzdFBvc2l0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBpcyB0aGUgb25seSBvcmdhbml6YXRpb24gcG9zaXRpb24gaGVsZCBieSB0aGlzIHVzZXIuIElmIHlvdSBkZWxldGUgaXQsIHlvdSB3b25cXFxcJ3QgYmUgYWJsZSB0byByZS1hc3NpZ24gdGhpcyB1c2VyIGFueXdoZXJlIGluIHRoZSB0cmVlLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY29tcGxldGVseSByZW1vdmUgdGhpcyB1c2VyIGZyb20gdGhlIG9yZ2FuaXphdGlvbj8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgw6p0ZXMgc3VyIGxlIHBvaW50IGRlIHN1cHByaW1lciBsYSBzZXVsZSBwb3NpdGlvbiB0ZW51ZSBwYXIgY2V0IHV0aWxpc2F0ZXVyIGRhbnMgbFxcXFwnb3JnYW5pc2F0aW9uLiBTaSB2b3VzIGxhIHN1cHByaW1leiwgdm91cyBuZSBwb3VycmV6IHBsdXMgZHUgdG91dCByw6lhc3NpZ25lciBjZXQgdXRpbGlzYXRldXIgZGFucyBsXFxcXCdhcmJyZS4gw4p0ZXMtdm91cyBjZXJ0YWluIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNvbXBsw6h0ZW1lbnQgY2V0IHV0aWxpc2F0ZXVyIGRlIGxcXFxcJ29yZ2FuaXNhdGlvbiA/J1xcbiAgICB9LFxcbiAgICBub0F2YWlsYWJsZVJlcG9ydHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyByZXBvcnRzIGF2YWlsYWJsZS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIHJhcHBvcnQgZGlzcG9uaWJsZS4nXFxuICAgIH0sXFxuICAgIHNlbGVjdFJlcG9ydDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhIHJlcG9ydCcsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1biByYXBwb3J0J1xcbiAgICB9LFxcbiAgICBwcmludDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ByaW50JyxcXG4gICAgICAgICdmci1GUic6ICdJbXByaW1lcidcXG4gICAgfSxcXG4gICAgc2VydmljZUNvbmZpcm1MZWF2ZVdpdGhvdXRTYXZpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGVyZSBhcmUgdW5zYXZlZCBjaGFuZ2VzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gbGVhdmUgdGhpcyBwYWdlIGFuZCBsb3NlIHlvdXIgdXBkYXRlcz8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgYXZleiBlZmZlY3R1w6kgZGVzIG1vZGlmaWNhdGlvbnMgc2FucyBsZXMgZW5yZWdpc3RyZXIuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHF1aXR0ZXIgY2V0dGUgcGFnZSBldCBwZXJkcmUgbGVzIGRvbm7DqWVzIG5vbiBzYXV2ZWdhcmTDqWVzID8nXFxuICAgIH0sXFxuICAgIHNlcnZpY2VWZXJzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VydmljZSB2ZXJzaW9uOicsXFxuICAgICAgICAnZnItRlInOiAnVmVyc2lvbiBkdSBzZXJ2aWNlIDonXFxuICAgIH0sXFxuICAgIGJhdGNoT3BlcmF0aW9uQ29tcGxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcGVyYXRpb24gY29tcGxldGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ09ww6lyYXRpb24gdGVybWluw6llJ1xcbiAgICB9LFxcbiAgICBiYXRjaE9wZXJhdGlvblByb2Nlc3NlZEl0ZW1zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvY2Vzc2VkIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnRzIHRyYWl0w6lzJ1xcbiAgICB9LFxcbiAgICBlcnJvcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFcnJvcnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VycmV1cnMnXFxuICAgIH0sXFxuICAgIHN1Y2Nlc3Nlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N1Y2Nlc3NlcycsXFxuICAgICAgICAnZnItRlInOiAnUsOpdXNzaXMnXFxuICAgIH0sXFxuICAgIGJhdGNoT3BlcmF0aW9uQWxsR29vZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FsbCBpdGVtcyBoYXZlIGJlZW4gcHJvY2Vzc2VkLiBFdmVyeXRoaW5nIHdlbnQgd2VsbCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1RvdXMgbGVzIMOpbMOpbWVudHMgb250IMOpdMOpIHRyYWl0w6lzICEnXFxuICAgIH0sXFxuICAgIGJhdGNoT3BlcmF0aW9uRXJyb3JzT2NjdXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NvbWUgZXJyb3JzIG9jY3VyZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLicsXFxuICAgICAgICAnZnItRlInOiAnRGVzIGVycmV1cnMgc29udCBzdXJ2ZW51ZXMgbG9ycyBkZXMgdHJhaXRlbWVudHMuJ1xcbiAgICB9LFxcbiAgICBpdGVtSWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIElEJyxcXG4gICAgICAgICdmci1GUic6ICdJRCDDqWzDqW1lbnQnXFxuICAgIH0sXFxuICAgIHN0YXR1c0NvZGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0dXMgY29kZScsXFxuICAgICAgICAnZnItRlInOiAnQ29kZSBIVFRQJ1xcbiAgICB9LFxcbiAgICBlcnJvck1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFcnJvciBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlIGRcXFxcJ2VycmV1cidcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Qcm9jZXNzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXb3JrIGl0ZW0gcHJvY2Vzc2VkIScsXFxuICAgICAgICAnZnItRlInOiAnVMOiY2hlIHRyYWl0w6llICEnXFxuICAgIH0sXFxuICAgIHZpZXc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3JyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlcidcXG4gICAgfSxcXG4gICAgbmFtZUFscmVhZHlVc2VkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBuYW1lIGlzIGFscmVhZHkgdXNlZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIG5vbSBlc3QgZMOpasOgIHV0aWxpc8OpLidcXG4gICAgfSxcXG4gICAgdW5rbm93bjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Vua25vd24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luY29ubnUnXFxuICAgIH0sXFxuICAgIHNlcnZpY2VTdGF0dXNDb25maWdDaGFuZ2VkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VydmljZSBjb25maWd1cmF0aW9uIGhhcyBjaGFuZ2VkIHNpbmNlIGxhc3Qgc3RhcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIGNvbmZpZ3VyYXRpb24gZHUgc2VydmljZSBhIGNoYW5nw6kgZGVwdWlzIGxlIGRlcm5pZXIgZMOpbWFycmFnZSdcXG4gICAgfSxcXG4gICAgc2VydmljZVN0YXR1czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlcnZpY2Ugc3RhdHVzOicsXFxuICAgICAgICAnZnItRlInOiAnw4l0YXQgZHUgc2VydmljZSA6J1xcbiAgICB9XFxufTtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5BVkFJTEFCTEVfTEFOR1VBR0VTID0gW1xcbiAgICB7XFxuICAgICAgICBsYWJlbDogJ0VOJyxcXG4gICAgICAgIGxvY2FsZTogJ2VuLVVTJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYWJlbDogJ0ZSJyxcXG4gICAgICAgIGxvY2FsZTogJ2ZyLUZSJ1xcbiAgICB9XFxuXTtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1Db25maWcuanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjcxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbmV4cG9ydHMuZmxhZ3NEZWYgPSB7XFxuICAgICdldW5yZWFkJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWVudmVsb3BlJyxcXG4gICAgICAgIGljb25Db2xvcjogJ2ZvbnQtY29sb3ItbGlnaHRlcicsXFxuICAgICAgICBmbGFnTGFiZWw6IHtcXG4gICAgICAgICAgICAnZW4tVVMnOiAnVW5yZWFkJyxcXG4gICAgICAgICAgICAnZnItRlInOiAnTm9uIGx1J1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnZHdhcm5pbmcnOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtZXhjbGFtYXRpb24tdHJpYW5nbGUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZGFuZ2VyLWNvbG9yJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdXYXJuaW5nJyxcXG4gICAgICAgICAgICAnZnItRlInOiAnQXR0ZW50aW9uJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnY2ltcG9ydGFudCc6IHtcXG4gICAgICAgIGljb25TaGFwZTogJ2ZhcyBmYS1zdGFyJyxcXG4gICAgICAgIGljb25Db2xvcjogJ3dhcm5pbmctY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ0ltcG9ydGFudCcsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGFudCdcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgJ2JpbmZvJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLXNxdWFyZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdpbmZvLWNvbG9yJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdJbmZvJyxcXG4gICAgICAgICAgICAnZnItRlInOiAnSW5mbydcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgJ2Fvayc6IHtcXG4gICAgICAgIGljb25TaGFwZTogJ2ZhcyBmYS1jaXJjbGUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAncHJpbWFyeS1jb2xvcicsXFxuICAgICAgICBmbGFnTGFiZWw6IHtcXG4gICAgICAgICAgICAnZW4tVVMnOiAnT0snLFxcbiAgICAgICAgICAgICdmci1GUic6ICdPSydcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgJ2FhdmlzaWJsZSc6IHtcXG4gICAgICAgIGljb25TaGFwZTogJ2ZhcyBmYS1hcmNoaXZlJyxcXG4gICAgICAgIGljb25Db2xvcjogJ2ZvbnQtY29sb3ItbGlnaHRlcicsXFxuICAgICAgICBmbGFnTGFiZWw6IHtcXG4gICAgICAgICAgICAnZW4tVVMnOiAnQXJjaGl2ZWQnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdBcmNoaXbDqSdcXG4gICAgICAgIH0sXFxuICAgICAgICBpbnZlcnNlZDogdHJ1ZSxcXG4gICAgICAgIGRlZmF1bHRTZWFyY2hTdGF0ZTogdHJ1ZVxcbiAgICB9LFxcbn07XFxuZXhwb3J0cy5sYW5ndWFnZUlzbyA9IFtcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQUEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQWZhcidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQUInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQWJraGF6J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBdmVzdGFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBRicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBZnJpa2FhbnMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0FrYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FNJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0FtaGFyaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0FyYWdvbmVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQVInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJhYmljJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBc3NhbWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQVYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXZhcmljJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBWScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBeW1hcmEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FaJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F6ZXJiYWlqYW5pJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCYXNoa2lyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCZWxhcnVzaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCRycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCdWxnYXJpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0JpaGFyaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQmlzbGFtYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQk0nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQmFtYmFyYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQk4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQmVuZ2FsaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQk8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGliZXRhbiBTdGFuZGFyZCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQlInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQnJldG9uJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCb3NuaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDYXRhbGFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDaGVjaGVuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDaGFtb3JybydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ08nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ29yc2ljYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NyZWUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0N6ZWNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdPbGQgQ2h1cmNoIFNsYXZvbmljJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDaHV2YXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDWScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdXZWxzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnREEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRGFuaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdERScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHZXJtYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0RWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0RpdmVoaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRFonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRHpvbmdraGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0V3ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRUwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXdlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdFTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdFbmdsaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdFTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdFc3BlcmFudG8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NwYW5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VzdG9uaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdFVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCYXNxdWUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0ZBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1BlcnNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0ZGJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Z1bGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0ZJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Zpbm5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0ZKJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ZpamlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRk8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmFyb2VzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRlInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRnJlbmNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGWScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdXZXN0ZXJuIEZyaXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0lyaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdHRCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTY290dGlzaCBHYWVsaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dMJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dhbGljaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdHTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHdWFyYW7DrSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR1UnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnR3VqYXJhdGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hbngnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hhdXNhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdIRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdIZWJyZXcnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hpbmRpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdITycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdIaXJpIE1vdHUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Nyb2F0aWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdIVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdIYWl0aWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdIVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdIdW5nYXJpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0FybWVuaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdIWicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdIZXJlcm8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludGVybGluZ3VhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJRCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJbmRvbmVzaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJbnRlcmxpbmd1ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSWdibydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTnVvc3UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludXBpYXEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0lkbydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSVMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSWNlbGFuZGljJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJdGFsaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJbnVrdGl0dXQnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0pBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0phcGFuZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdKVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdKYXZhbmVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0EnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnR2VvcmdpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tvbmdvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLaWt1eXUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tKJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t3YW55YW1hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLSycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLYXpha2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tMJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0thbGFhbGxpc3V0J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLaG1lcidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS04nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FubmFkYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS08nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS29yZWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLYW51cmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0thc2htaXJpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLdXJkaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLb21pJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLVycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDb3JuaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLWScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLeXJneXonXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0xhdGluJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMQicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMdXhlbWJvdXJnaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMRycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHYW5kYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGltYnVyZ2lzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTE4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGluZ2FsYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTE8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGFvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaXRodWFuaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMdWJhLUthdGFuZ2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0xhdHZpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01HJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hbGFnYXN5J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYXJzaGFsbGVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTUknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTcSBb3JpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNSycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYWNlZG9uaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNTCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYWxheWFsYW0nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01OJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01vbmdvbGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFyYXRoaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsYXnigI4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01UJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hbHRlc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01ZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0J1cm1lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05BJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05hdXJ1J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdOQicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J3ZWdpYW4gQm9rbcOlbCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTm9ydGhlcm4gTmRlYmVsZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTmVwYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOZG9uZ2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05MJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0R1dGNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdOTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J3ZWdpYW4gTnlub3JzaydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTk8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTm9yd2VnaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdOUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTb3V0aGVybiBOZGViZWxlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdOVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOYXZham8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05ZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoaWNoZXdhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdPQycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdPY2NpdGFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdPSicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdPamlid2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09NJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09yb21vJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdPUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdPcml5YSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnT1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnT3NzZXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1BBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1BhbmphYmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1BJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1DEgWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdQTCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdQb2xpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1BTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Bhc2h0bydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUFQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUG9ydHVndWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUVUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUXVlY2h1YSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUk0nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUm9tYW5zaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUk4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2lydW5kaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUk8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUm9tYW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1JVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1J1c3NpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1JXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tpbnlhcndhbmRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTYW5za3JpdCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2FyZGluaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTRCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTaW5kaGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcnRoZXJuIFNhbWknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NhbmdvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTaW5oYWxhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTSycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTbG92YWsnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NMJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Nsb3ZlbmUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NNJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NhbW9hbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU04nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2hvbmEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvbWFsaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1EnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQWxiYW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NlcmJpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3YXRpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTb3V0aGVybiBTb3RobydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1UnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3VuZGFuZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTd2VkaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTVycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTd2FoaWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYW1pbCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGVsdWd1J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdURycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYWppaydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEgnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGhhaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGlncmlueWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1R1cmttZW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RMJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhZ2Fsb2cnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1ROJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Rzd2FuYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVE8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVG9uZ2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1R1cmtpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Rzb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGF0YXInXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1R3aSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGFoaXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1V5Z2h1cidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVWtyYWluaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdVUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdVcmR1J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdVWicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdVemJlaydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVkUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVmVuZGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1ZJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1ZpZXRuYW1lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1ZPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1ZvbGFww7xrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdXQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdXYWxsb29uJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdXTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdXb2xvZidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWEgnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWGhvc2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1lJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1lpZGRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1lPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1lvcnViYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWmh1YW5nJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdaSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDaGluZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdaVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdadWx1J1xcbiAgICB9XFxuXTtcXG5leHBvcnRzLmNvdW50cmllc0lzbyA9IFtcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbmRvcnJhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQUVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVuaXRlZCBBcmFiIEVtaXJhdGVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQUZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFmZ2hhbmlzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQUdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFudGlndWEgYW5kIEJhcmJ1ZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBSVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW5ndWlsbGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWxiYW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBcm1lbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQU9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFuZ29sYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFRXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbnRhcmN0aWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFyZ2VudGluYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbWVyaWNhbiBTYW1vYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBdXN0cmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkF1c3RyYWxpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBcnViYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFYXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCLDhWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXplcmJhaWphblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb3NuaWEgYW5kIEhlcnplZ292aW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJhcmJhZG9zXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJhbmdsYWRlc2hcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVsZ2l1bVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCdXJraW5hIEZhc29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQnVsZ2FyaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFocmFpblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCdXJ1bmRpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJlbmluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkxcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IEJhcnRow6lsZW15XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQk1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJlcm11ZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQnJ1bmVpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvbGl2aWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCUVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQm9uYWlyZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcmF6aWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFoYW1hc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCaHV0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQm91dmV0IElzbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb3Rzd2FuYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCZWxhcnVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJlbGl6ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYW5hZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ29jb3MgW0tlZWxpbmddIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiB0aGUgQ29uZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDRlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlJlcHVibGljIG9mIHRoZSBDb25nb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTd2l0emVybGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJdm9yeSBDb2FzdFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb29rIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2hpbGVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2FtZXJvb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2hpbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ29sb21iaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ29zdGEgUmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNVXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDdWJhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhcGUgVmVyZGVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ3VyYWNhb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNYXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaHJpc3RtYXMgSXNsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN5cHJ1c1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDemVjaCBSZXB1YmxpY1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHZXJtYW55XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiREpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkRqaWJvdXRpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiREtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkRlbm1hcmtcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJETVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRG9taW5pY2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJET1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRG9taW5pY2FuIFJlcHVibGljXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRFpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFsZ2VyaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRWN1YWRvclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFc3RvbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRUdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVneXB0XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRUhcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIldlc3Rlcm4gU2FoYXJhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRVJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVyaXRyZWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3BhaW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRXRoaW9waWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGSVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRmlubGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZKXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGaWppXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRktcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZhbGtsYW5kIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWljcm9uZXNpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGYXJvZSBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZyYW5jZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHYWJvblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdCXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVbml0ZWQgS2luZ2RvbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHcmVuYWRhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0VcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdlb3JnaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHRlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJlbmNoIEd1aWFuYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWVybnNleVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHaGFuYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHaWJyYWx0YXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR3JlZW5sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR01cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdhbWJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWluZWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHUFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR3VhZGVsb3VwZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdRXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFcXVhdG9yaWFsIEd1aW5lYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHcmVlY2VcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU291dGggR2VvcmdpYSBhbmQgdGhlIFNvdXRoIFNhbmR3aWNoIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR3VhdGVtYWxhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1VcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1YW1cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR3VpbmVhLUJpc3NhdVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdXlhbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSG9uZyBLb25nXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSE1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkhlYXJkIElzbGFuZCBhbmQgTWNEb25hbGQgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkhOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJIb25kdXJhc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkhSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDcm9hdGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSFRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkhhaXRpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSFVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkh1bmdhcnlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSW5kb25lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSUVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIklyZWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXNyYWVsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIklzbGUgb2YgTWFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSU5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkluZGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSU9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJyaXRpc2ggSW5kaWFuIE9jZWFuIFRlcnJpdG9yeVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklRXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJcmFxXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIklyYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSWNlbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJdGFseVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKZXJzZXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJKTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSmFtYWljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKb3JkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJKUFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSmFwYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJLRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiS2VueWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJLR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiS3lyZ3l6c3RhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYW1ib2RpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLaXJpYmF0aVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb21vcm9zXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS05cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IEtpdHRzIGFuZCBOZXZpc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOb3J0aCBLb3JlYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTb3V0aCBLb3JlYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLdXdhaXRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJLWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2F5bWFuIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJLWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiS2F6YWtoc3RhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMYW9zXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxlYmFub25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgTHVjaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMSVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGllY2h0ZW5zdGVpblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTcmkgTGFua2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGliZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMZXNvdGhvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxpdGh1YW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxVXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMdXhlbWJvdXJnXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxhdHZpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWJ5YVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1BXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNb3JvY2NvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbmFjb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1EXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNb2xkb3ZhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbnRlbmVncm9cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNRlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgTWFydGluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hZGFnYXNjYXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFyc2hhbGwgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1LXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWNlZG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsaVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1NXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNeWFubWFyIFtCdXJtYV1cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9uZ29saWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFjYW9cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNUFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hcnRpbmlxdWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWF1cml0YW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1TXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNb250c2VycmF0XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbHRhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hdXJpdGl1c1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1WXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWxkaXZlc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1XXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWxhd2lcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWV4aWNvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVlcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGF5c2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vemFtYmlxdWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmFtaWJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5DXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOZXcgQ2FsZWRvbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5pZ2VyXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTkZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5vcmZvbGsgSXNsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTkdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5pZ2VyaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOSVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmljYXJhZ3VhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTkxcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5ldGhlcmxhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5vcndheVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5QXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOZXBhbFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5SXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOYXVydVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5VXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOaXVlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5ldyBaZWFsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiT01cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk9tYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFuYW1hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUEVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBlcnVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQRlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJlbmNoIFBvbHluZXNpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYXB1YSBOZXcgR3VpbmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUEhcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBoaWxpcHBpbmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBha2lzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUExcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBvbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBpdGNhaXJuIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUHVlcnRvIFJpY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFsZXN0aW5lXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUFRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBvcnR1Z2FsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUFdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBhbGF1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUFlcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBhcmFndWF5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUUFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlFhdGFyXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlLDqXVuaW9uXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlJvbWFuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2VyYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUlVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlJ1c3NpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlJXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJSd2FuZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2F1ZGkgQXJhYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvbG9tb24gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZXljaGVsbGVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0RcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlN1ZGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0VcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlN3ZWRlblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTaW5nYXBvcmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgSGVsZW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNsb3ZlbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0pcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlN2YWxiYXJkIGFuZCBKYW4gTWF5ZW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2xvdmFraWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2llcnJhIExlb25lXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU01cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhbiBNYXJpbm9cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2VuZWdhbFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTb21hbGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlN1cmluYW1lXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIFN1ZGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1RcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlPDo28gVG9tw6kgYW5kIFByw61uY2lwZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNWXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFbCBTYWx2YWRvclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNYXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTaW50IE1hYXJ0ZW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3lyaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3dhemlsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVENcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlREXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGFkXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVEZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUb2dvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVEhcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRoYWlsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVEpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRhamlraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVG9rZWxhdVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFYXN0IFRpbW9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVE1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlR1cmttZW5pc3RhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlROXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUdW5pc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVE9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRvbmdhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlR1cmtleVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUcmluaWRhZCBhbmQgVG9iYWdvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlR1dmFsdVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUYWl3YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGFuemFuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJVQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVWtyYWluZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVZ2FuZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJVTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVS5TLiBNaW5vciBPdXRseWluZyBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVuaXRlZCBTdGF0ZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJVWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVXJ1Z3VheVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVemJla2lzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlZhdGljYW4gQ2l0eVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJWZW5lenVlbGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQnJpdGlzaCBWaXJnaW4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVLlMuIFZpcmdpbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVk5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlZpZXRuYW1cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmFudWF0dVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIldGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJXYWxsaXMgYW5kIEZ1dHVuYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIldTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYW1vYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlhLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLb3Nvdm9cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJZRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiWWVtZW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJZVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWF5b3R0ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlpBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTb3V0aCBBZnJpY2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJaTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiWmFtYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlppbWJhYndlXFxcIlxcbiAgICB9XFxuXTtcXG5leHBvcnRzLmNvdW50cmllc05hbWVQcmVTZWxlY3Rpb24gPSBbXFxuICAgIFxcXCJVbml0ZWQgU3RhdGVzXFxcIixcXG4gICAgXFxcIkNhbmFkYVxcXCIsXFxuICAgIFxcXCJGcmFuY2VcXFwiLFxcbiAgICBcXFwiR2VybWFueVxcXCIsXFxuICAgIFxcXCJNZXhpY29cXFwiXFxuXTtcXG5leHBvcnRzLmNvdW50cmllc05hbWUgPSBbXFxuICAgIFxcXCJBZmdoYW5pc3RhblxcXCIsXFxuICAgIFxcXCLDhWxhbmRcXFwiLFxcbiAgICBcXFwiQWxiYW5pYVxcXCIsXFxuICAgIFxcXCJBbGdlcmlhXFxcIixcXG4gICAgXFxcIkFtZXJpY2FuIFNhbW9hXFxcIixcXG4gICAgXFxcIkFuZG9ycmFcXFwiLFxcbiAgICBcXFwiQW5nb2xhXFxcIixcXG4gICAgXFxcIkFuZ3VpbGxhXFxcIixcXG4gICAgXFxcIkFudGFyY3RpY2FcXFwiLFxcbiAgICBcXFwiQW50aWd1YSBhbmQgQmFyYnVkYVxcXCIsXFxuICAgIFxcXCJBcmdlbnRpbmFcXFwiLFxcbiAgICBcXFwiQXJtZW5pYVxcXCIsXFxuICAgIFxcXCJBcnViYVxcXCIsXFxuICAgIFxcXCJBdXN0cmFsaWFcXFwiLFxcbiAgICBcXFwiQXVzdHJpYVxcXCIsXFxuICAgIFxcXCJBemVyYmFpamFuXFxcIixcXG4gICAgXFxcIkJhaGFtYXNcXFwiLFxcbiAgICBcXFwiQmFocmFpblxcXCIsXFxuICAgIFxcXCJCYW5nbGFkZXNoXFxcIixcXG4gICAgXFxcIkJhcmJhZG9zXFxcIixcXG4gICAgXFxcIkJlbGFydXNcXFwiLFxcbiAgICBcXFwiQmVsZ2l1bVxcXCIsXFxuICAgIFxcXCJCZWxpemVcXFwiLFxcbiAgICBcXFwiQmVuaW5cXFwiLFxcbiAgICBcXFwiQmVybXVkYVxcXCIsXFxuICAgIFxcXCJCaHV0YW5cXFwiLFxcbiAgICBcXFwiQm9saXZpYVxcXCIsXFxuICAgIFxcXCJCb25haXJlXFxcIixcXG4gICAgXFxcIkJvc25pYSBhbmQgSGVyemVnb3ZpbmFcXFwiLFxcbiAgICBcXFwiQm90c3dhbmFcXFwiLFxcbiAgICBcXFwiQm91dmV0IElzbGFuZFxcXCIsXFxuICAgIFxcXCJCcmF6aWxcXFwiLFxcbiAgICBcXFwiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5XFxcIixcXG4gICAgXFxcIkJyaXRpc2ggVmlyZ2luIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiQnJ1bmVpXFxcIixcXG4gICAgXFxcIkJ1bGdhcmlhXFxcIixcXG4gICAgXFxcIkJ1cmtpbmEgRmFzb1xcXCIsXFxuICAgIFxcXCJCdXJ1bmRpXFxcIixcXG4gICAgXFxcIkNhbWJvZGlhXFxcIixcXG4gICAgXFxcIkNhbWVyb29uXFxcIixcXG4gICAgXFxcIkNhbmFkYVxcXCIsXFxuICAgIFxcXCJDYXBlIFZlcmRlXFxcIixcXG4gICAgXFxcIkNheW1hbiBJc2xhbmRzXFxcIixcXG4gICAgXFxcIkNlbnRyYWwgQWZyaWNhbiBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJDaGFkXFxcIixcXG4gICAgXFxcIkNoaWxlXFxcIixcXG4gICAgXFxcIkNoaW5hXFxcIixcXG4gICAgXFxcIkNocmlzdG1hcyBJc2xhbmRcXFwiLFxcbiAgICBcXFwiQ29jb3MgW0tlZWxpbmddIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiQ29sb21iaWFcXFwiLFxcbiAgICBcXFwiQ29tb3Jvc1xcXCIsXFxuICAgIFxcXCJDb29rIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiQ29zdGEgUmljYVxcXCIsXFxuICAgIFxcXCJDcm9hdGlhXFxcIixcXG4gICAgXFxcIkN1YmFcXFwiLFxcbiAgICBcXFwiQ3VyYWNhb1xcXCIsXFxuICAgIFxcXCJDeXBydXNcXFwiLFxcbiAgICBcXFwiQ3plY2ggUmVwdWJsaWNcXFwiLFxcbiAgICBcXFwiRGVtb2NyYXRpYyBSZXB1YmxpYyBvZiB0aGUgQ29uZ29cXFwiLFxcbiAgICBcXFwiRGVubWFya1xcXCIsXFxuICAgIFxcXCJEamlib3V0aVxcXCIsXFxuICAgIFxcXCJEb21pbmljYVxcXCIsXFxuICAgIFxcXCJEb21pbmljYW4gUmVwdWJsaWNcXFwiLFxcbiAgICBcXFwiRWFzdCBUaW1vclxcXCIsXFxuICAgIFxcXCJFY3VhZG9yXFxcIixcXG4gICAgXFxcIkVneXB0XFxcIixcXG4gICAgXFxcIkVsIFNhbHZhZG9yXFxcIixcXG4gICAgXFxcIkVxdWF0b3JpYWwgR3VpbmVhXFxcIixcXG4gICAgXFxcIkVyaXRyZWFcXFwiLFxcbiAgICBcXFwiRXN0b25pYVxcXCIsXFxuICAgIFxcXCJFdGhpb3BpYVxcXCIsXFxuICAgIFxcXCJGYWxrbGFuZCBJc2xhbmRzXFxcIixcXG4gICAgXFxcIkZhcm9lIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiRmlqaVxcXCIsXFxuICAgIFxcXCJGaW5sYW5kXFxcIixcXG4gICAgXFxcIkZyYW5jZVxcXCIsXFxuICAgIFxcXCJGcmVuY2ggR3VpYW5hXFxcIixcXG4gICAgXFxcIkZyZW5jaCBQb2x5bmVzaWFcXFwiLFxcbiAgICBcXFwiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzXFxcIixcXG4gICAgXFxcIkdhYm9uXFxcIixcXG4gICAgXFxcIkdhbWJpYVxcXCIsXFxuICAgIFxcXCJHZW9yZ2lhXFxcIixcXG4gICAgXFxcIkdlcm1hbnlcXFwiLFxcbiAgICBcXFwiR2hhbmFcXFwiLFxcbiAgICBcXFwiR2licmFsdGFyXFxcIixcXG4gICAgXFxcIkdyZWVjZVxcXCIsXFxuICAgIFxcXCJHcmVlbmxhbmRcXFwiLFxcbiAgICBcXFwiR3JlbmFkYVxcXCIsXFxuICAgIFxcXCJHdWFkZWxvdXBlXFxcIixcXG4gICAgXFxcIkd1YW1cXFwiLFxcbiAgICBcXFwiR3VhdGVtYWxhXFxcIixcXG4gICAgXFxcIkd1ZXJuc2V5XFxcIixcXG4gICAgXFxcIkd1aW5lYVxcXCIsXFxuICAgIFxcXCJHdWluZWEtQmlzc2F1XFxcIixcXG4gICAgXFxcIkd1eWFuYVxcXCIsXFxuICAgIFxcXCJIYWl0aVxcXCIsXFxuICAgIFxcXCJIZWFyZCBJc2xhbmQgYW5kIE1jRG9uYWxkIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiSG9uZHVyYXNcXFwiLFxcbiAgICBcXFwiSG9uZyBLb25nXFxcIixcXG4gICAgXFxcIkh1bmdhcnlcXFwiLFxcbiAgICBcXFwiSWNlbGFuZFxcXCIsXFxuICAgIFxcXCJJbmRpYVxcXCIsXFxuICAgIFxcXCJJbmRvbmVzaWFcXFwiLFxcbiAgICBcXFwiSXJhblxcXCIsXFxuICAgIFxcXCJJcmFxXFxcIixcXG4gICAgXFxcIklyZWxhbmRcXFwiLFxcbiAgICBcXFwiSXNsZSBvZiBNYW5cXFwiLFxcbiAgICBcXFwiSXNyYWVsXFxcIixcXG4gICAgXFxcIkl0YWx5XFxcIixcXG4gICAgXFxcIkl2b3J5IENvYXN0XFxcIixcXG4gICAgXFxcIkphbWFpY2FcXFwiLFxcbiAgICBcXFwiSmFwYW5cXFwiLFxcbiAgICBcXFwiSmVyc2V5XFxcIixcXG4gICAgXFxcIkpvcmRhblxcXCIsXFxuICAgIFxcXCJLYXpha2hzdGFuXFxcIixcXG4gICAgXFxcIktlbnlhXFxcIixcXG4gICAgXFxcIktpcmliYXRpXFxcIixcXG4gICAgXFxcIktvc292b1xcXCIsXFxuICAgIFxcXCJLdXdhaXRcXFwiLFxcbiAgICBcXFwiS3lyZ3l6c3RhblxcXCIsXFxuICAgIFxcXCJMYW9zXFxcIixcXG4gICAgXFxcIkxhdHZpYVxcXCIsXFxuICAgIFxcXCJMZWJhbm9uXFxcIixcXG4gICAgXFxcIkxlc290aG9cXFwiLFxcbiAgICBcXFwiTGliZXJpYVxcXCIsXFxuICAgIFxcXCJMaWJ5YVxcXCIsXFxuICAgIFxcXCJMaWVjaHRlbnN0ZWluXFxcIixcXG4gICAgXFxcIkxpdGh1YW5pYVxcXCIsXFxuICAgIFxcXCJMdXhlbWJvdXJnXFxcIixcXG4gICAgXFxcIk1hY2FvXFxcIixcXG4gICAgXFxcIk1hY2Vkb25pYVxcXCIsXFxuICAgIFxcXCJNYWRhZ2FzY2FyXFxcIixcXG4gICAgXFxcIk1hbGF3aVxcXCIsXFxuICAgIFxcXCJNYWxheXNpYVxcXCIsXFxuICAgIFxcXCJNYWxkaXZlc1xcXCIsXFxuICAgIFxcXCJNYWxpXFxcIixcXG4gICAgXFxcIk1hbHRhXFxcIixcXG4gICAgXFxcIk1hcnNoYWxsIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiTWFydGluaXF1ZVxcXCIsXFxuICAgIFxcXCJNYXVyaXRhbmlhXFxcIixcXG4gICAgXFxcIk1hdXJpdGl1c1xcXCIsXFxuICAgIFxcXCJNYXlvdHRlXFxcIixcXG4gICAgXFxcIk1leGljb1xcXCIsXFxuICAgIFxcXCJNaWNyb25lc2lhXFxcIixcXG4gICAgXFxcIk1vbGRvdmFcXFwiLFxcbiAgICBcXFwiTW9uYWNvXFxcIixcXG4gICAgXFxcIk1vbmdvbGlhXFxcIixcXG4gICAgXFxcIk1vbnRlbmVncm9cXFwiLFxcbiAgICBcXFwiTW9udHNlcnJhdFxcXCIsXFxuICAgIFxcXCJNb3JvY2NvXFxcIixcXG4gICAgXFxcIk1vemFtYmlxdWVcXFwiLFxcbiAgICBcXFwiTXlhbm1hciBbQnVybWFdXFxcIixcXG4gICAgXFxcIk5hbWliaWFcXFwiLFxcbiAgICBcXFwiTmF1cnVcXFwiLFxcbiAgICBcXFwiTmVwYWxcXFwiLFxcbiAgICBcXFwiTmV0aGVybGFuZHNcXFwiLFxcbiAgICBcXFwiTmV3IENhbGVkb25pYVxcXCIsXFxuICAgIFxcXCJOZXcgWmVhbGFuZFxcXCIsXFxuICAgIFxcXCJOaWNhcmFndWFcXFwiLFxcbiAgICBcXFwiTmlnZXJcXFwiLFxcbiAgICBcXFwiTmlnZXJpYVxcXCIsXFxuICAgIFxcXCJOaXVlXFxcIixcXG4gICAgXFxcIk5vcmZvbGsgSXNsYW5kXFxcIixcXG4gICAgXFxcIk5vcnRoIEtvcmVhXFxcIixcXG4gICAgXFxcIk5vcnRoZXJuIE1hcmlhbmEgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJOb3J3YXlcXFwiLFxcbiAgICBcXFwiT21hblxcXCIsXFxuICAgIFxcXCJQYWtpc3RhblxcXCIsXFxuICAgIFxcXCJQYWxhdVxcXCIsXFxuICAgIFxcXCJQYWxlc3RpbmVcXFwiLFxcbiAgICBcXFwiUGFuYW1hXFxcIixcXG4gICAgXFxcIlBhcHVhIE5ldyBHdWluZWFcXFwiLFxcbiAgICBcXFwiUGFyYWd1YXlcXFwiLFxcbiAgICBcXFwiUGVydVxcXCIsXFxuICAgIFxcXCJQaGlsaXBwaW5lc1xcXCIsXFxuICAgIFxcXCJQaXRjYWlybiBJc2xhbmRzXFxcIixcXG4gICAgXFxcIlBvbGFuZFxcXCIsXFxuICAgIFxcXCJQb3J0dWdhbFxcXCIsXFxuICAgIFxcXCJQdWVydG8gUmljb1xcXCIsXFxuICAgIFxcXCJRYXRhclxcXCIsXFxuICAgIFxcXCJSZXB1YmxpYyBvZiB0aGUgQ29uZ29cXFwiLFxcbiAgICBcXFwiUm9tYW5pYVxcXCIsXFxuICAgIFxcXCJSdXNzaWFcXFwiLFxcbiAgICBcXFwiUndhbmRhXFxcIixcXG4gICAgXFxcIlLDqXVuaW9uXFxcIixcXG4gICAgXFxcIlNhaW50IEJhcnRow6lsZW15XFxcIixcXG4gICAgXFxcIlNhaW50IEhlbGVuYVxcXCIsXFxuICAgIFxcXCJTYWludCBLaXR0cyBhbmQgTmV2aXNcXFwiLFxcbiAgICBcXFwiU2FpbnQgTHVjaWFcXFwiLFxcbiAgICBcXFwiU2FpbnQgTWFydGluXFxcIixcXG4gICAgXFxcIlNhaW50IFBpZXJyZSBhbmQgTWlxdWVsb25cXFwiLFxcbiAgICBcXFwiU2FpbnQgVmluY2VudCBhbmQgdGhlIEdyZW5hZGluZXNcXFwiLFxcbiAgICBcXFwiU2Ftb2FcXFwiLFxcbiAgICBcXFwiU2FuIE1hcmlub1xcXCIsXFxuICAgIFxcXCJTYXVkaSBBcmFiaWFcXFwiLFxcbiAgICBcXFwiU2VuZWdhbFxcXCIsXFxuICAgIFxcXCJTZXJiaWFcXFwiLFxcbiAgICBcXFwiU2V5Y2hlbGxlc1xcXCIsXFxuICAgIFxcXCJTaWVycmEgTGVvbmVcXFwiLFxcbiAgICBcXFwiU2luZ2Fwb3JlXFxcIixcXG4gICAgXFxcIlNpbnQgTWFhcnRlblxcXCIsXFxuICAgIFxcXCJTbG92YWtpYVxcXCIsXFxuICAgIFxcXCJTbG92ZW5pYVxcXCIsXFxuICAgIFxcXCJTb2xvbW9uIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiU29tYWxpYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBBZnJpY2FcXFwiLFxcbiAgICBcXFwiU291dGggR2VvcmdpYSBhbmQgdGhlIFNvdXRoIFNhbmR3aWNoIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiU291dGggS29yZWFcXFwiLFxcbiAgICBcXFwiU291dGggU3VkYW5cXFwiLFxcbiAgICBcXFwiU3BhaW5cXFwiLFxcbiAgICBcXFwiU3JpIExhbmthXFxcIixcXG4gICAgXFxcIlN1ZGFuXFxcIixcXG4gICAgXFxcIlN1cmluYW1lXFxcIixcXG4gICAgXFxcIlN2YWxiYXJkIGFuZCBKYW4gTWF5ZW5cXFwiLFxcbiAgICBcXFwiU3dhemlsYW5kXFxcIixcXG4gICAgXFxcIlN3ZWRlblxcXCIsXFxuICAgIFxcXCJTd2l0emVybGFuZFxcXCIsXFxuICAgIFxcXCJTeXJpYVxcXCIsXFxuICAgIFxcXCJTw6NvIFRvbcOpIGFuZCBQcsOtbmNpcGVcXFwiLFxcbiAgICBcXFwiVGFpd2FuXFxcIixcXG4gICAgXFxcIlRhamlraXN0YW5cXFwiLFxcbiAgICBcXFwiVGFuemFuaWFcXFwiLFxcbiAgICBcXFwiVGhhaWxhbmRcXFwiLFxcbiAgICBcXFwiVG9nb1xcXCIsXFxuICAgIFxcXCJUb2tlbGF1XFxcIixcXG4gICAgXFxcIlRvbmdhXFxcIixcXG4gICAgXFxcIlRyaW5pZGFkIGFuZCBUb2JhZ29cXFwiLFxcbiAgICBcXFwiVHVuaXNpYVxcXCIsXFxuICAgIFxcXCJUdXJrZXlcXFwiLFxcbiAgICBcXFwiVHVya21lbmlzdGFuXFxcIixcXG4gICAgXFxcIlR1cmtzIGFuZCBDYWljb3MgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJUdXZhbHVcXFwiLFxcbiAgICBcXFwiVS5TLiBNaW5vciBPdXRseWluZyBJc2xhbmRzXFxcIixcXG4gICAgXFxcIlUuUy4gVmlyZ2luIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiVWdhbmRhXFxcIixcXG4gICAgXFxcIlVrcmFpbmVcXFwiLFxcbiAgICBcXFwiVW5pdGVkIEFyYWIgRW1pcmF0ZXNcXFwiLFxcbiAgICBcXFwiVW5pdGVkIEtpbmdkb21cXFwiLFxcbiAgICBcXFwiVW5pdGVkIFN0YXRlc1xcXCIsXFxuICAgIFxcXCJVcnVndWF5XFxcIixcXG4gICAgXFxcIlV6YmVraXN0YW5cXFwiLFxcbiAgICBcXFwiVmFudWF0dVxcXCIsXFxuICAgIFxcXCJWYXRpY2FuIENpdHlcXFwiLFxcbiAgICBcXFwiVmVuZXp1ZWxhXFxcIixcXG4gICAgXFxcIlZpZXRuYW1cXFwiLFxcbiAgICBcXFwiV2FsbGlzIGFuZCBGdXR1bmFcXFwiLFxcbiAgICBcXFwiV2VzdGVybiBTYWhhcmFcXFwiLFxcbiAgICBcXFwiWWVtZW5cXFwiLFxcbiAgICBcXFwiWmFtYmlhXFxcIixcXG4gICAgXFxcIlppbWJhYndlXFxcIlxcbl07XFxuZXhwb3J0cy5kZWZhdWx0VXNlckltZyA9ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVpBQUFBR1FDQUlBQUFBUDNhR2JBQUFBQ1hCSVdYTUFBQXNUQUFBTEV3RUFtcHdZQUFBQUIzUkpUVVVINFFvTER5SWk5Zk85M2dBQUlBQkpSRUZVZU5ydG5YZVVYZFY5NzM5NzczTnVuVnVtRjAxUlE3MGdJYnBwQm1QYzR1UVJoNFJrMlg0dkxuaVo5M0FTeDNGYzBvaXhZOGU0NGZvU2x6aE9DUGF6RFFTYkloQWdDMUdFaEFvYWpkcG8ycDEyNTVhNTliUzkzeDhqSVNIVFpqVGxuSHUvbjRWbHpESmFtbjNPL3B6dmIxZVd5ZVVJQUFDOEFFY1RBQUFnTEFBQWdMQUFBQkFXQUFCQVdBQUFBR0VCQUNBc0FBQ0FzQUFBQU1JQ0FFQllBQUFBWVFFQUFJUUZBSUN3QUFBQXdnSUFBQWdMQUFCaEFRQUFoQVVBQUJBV0FBRENBZ0FBQ0FzQUFDQXNBQUNFQlFBQUVCWUFBRUJZQUFBSUN3QUFJQ3dBQUlDd0FBQVFGZ0FBUUZnQUFBZ0xBQUFnTEFBQWdMQUFBQkFXQUFCQVdBQUFBR0VCQUNBc0FBQ0FzQUFBQU1JQ0FFQllBQUFBWVFFQUFJUUZBSUN3QUFBQXdnSUFBQWdMQUFCaEFRQUFoQVVBQUJBV0FBRENBZ0FBQ0FzQUFGNE5EVTBBcG9zNjQ3L1VxWC9JR0UyYXpxUmg1U3huMG5Cc0tjTzZDUHRFUkJNaG54YjFDYVZPL3c3czVIK21mZ0VBd2dLemdWU2tTQ2xGaWtnd0dzd2JQYW5pa1d6eGNLYllreTRkTHhxanBrMm1RNFpObG55ZDM0c1JCVFRTQlBsRW15NldSd0tYTkVYUGI2aloyRlRUR3ZaTFJZd1JJOGJoTVBBYUwxRW1sME1yZ0RQVGsxVEtVWW9SRzhvYjI0ZlN6NDNsRHFTS0I3SWxNMXNpUnhJN014ck5LQ2E5bE5DbS9rWXBDdWtibTZOdmFvcHNhSWhjMEJSdHEvRUp6amhqZ2hGbkVCaUFzTUFadVVjUzJWTFpVbGxTRGVXTkp3ZlRqeVhTVHc1bVM5a1NNWnBLUGtSc2J1dTNxUlNuRkNsRnVtaHZpTHgxVWZ6cTl2Z0ZMZEc0WDlNWTB3WG5aMVNnQU1JQzFlVXBSVlIyWk1GeStyTGxiUVBwUnhQcHA0YXpsQ3NUNThUWUtVOHRWTkpUVTJHUFNMVTBSbTVjM25UVGl1YXVxRDhndUY5d0JuTkJXS0JLUE1VWW1ZN0tXODV3d2ZqeG9kRWZkQStYSmdxa3VVQlNyeUV2cVVpcXp0YllIeXh2L0wzbFRXMDEvaHBkK0FWVEN1YUNzRUFsd2hrcFJUbkxTUm5XODhPVDN6NHc5T3p4SkJFandjZ3I0MFJTa1ZTazFPYkY5UjlhditqU1JiRjZ2eDdSQldNRWMwRllvR0pVeFpSU3liTFZOMW0rKzlESTl3NE5VN1pNbWlEdlRzaEpSYlpEc2NBdHE5dHVXdG15S09Lcjkrcyt3YVZTMEJhRUJieUtZRXdxTlZveWo2WkxYMytoLzhHREk4UThGYWxldDFSMEpCRmR0cXp4ZzJ2Yk5yVkUyOFArZ01ZZENXMUJXTUJycWxLa2h2Sm1UNnJ3clgwREQzZVBFbU9rVmVqR0JrZVNJMXRiWW45NzBlS0xXMk5kRWI5UFFGc1FGdkRFRTJXa2M1YkltM3ZIYzkvWk4vaEl6eGdSVmF5cXpxNFQ1YkwyK0tjdTZMeWdOZFlWQ2VpYzJSTFdnckNBVy9FSm5qUHRQUlA1SCs1UDNMMXZpS1NxQ2xXZGxiYWtPbjlKL1cwYjJpOXVpeTJPQm0ycEVMWWdMT0F1Tk02SXFEdGRmS1IzNGxQUEhLZThRVUpVNzFZOVJ4TFIyMWExZlBqOGpvc2FhK29DZXRtUmVFa2dMTER3Y0VaK3dmdHo1WjJKN0pmM0RPenRTeEZuaEMxNWlzaVJGUFo5Y2xQbk8xYzBiYXdQTXlKVWlCQVdXRWo4Z3VjdDV6ZWprL2QwRC8vbmk4TmtPbFZYQTc0MlVwRlN5OXZpbjlyU2VXMW5YVXZJVjdJUnRTQXNNUDlQamlpa2lVT1p3aThQajkzeHdrQXBYU1RCQ1Z1Rlh4RmJpb0QyZ1kzdDcxdmJ0cm1oeHNTb0ZvUUY1aFBCbUdDMGRUaDcxKzcraHcrUGtTTkpJRmk5WHRRaTJ0QmUrNGt0blRkMDFZZDFZV0JVQzhJQzgxTUc1aXpudnFOam4zNnViM1Iwa2poRHNIcERLQ0xIaVVXRHQ1N2Y4VWVyVzFiR1EwWGJRZENDc01BY1VxT0x3NW5pRHc4a3ZydDNNSnN6TUdJMWJSekpOSEhOc29iYnRuUzl0UzJPOGhEQ0FuTUNaNlJ6L25BaTg3WG4rNTg0TnU1WURzckFtVVl0UlZKMXRFVHZ1R1RwN3l4dDBEaXpNSHNJWVlGWlJEREdHTjEzZlB5dm5qbytNSUl5OEp6ZmV5Smx5K2JhMEo5dDZYenZtclk2djRhRldoQVdtQjAwem15cGZuWms3TE03amcxUDVKa21rQWRteTFtUnNPL210VzEvZGtIbmttZ0FLeDRnTERBTHRqSWQ5UitIUnY3K3FXUGptUkxUT0d3MW16aFM2T0tHODVwdXYyelp1cnBRRWM2Q3NNQ00wVGtyMmZKSEx5YnUyTms3a1N2RFZuT0NWTVRZVmNzYjc3enl2SFYxSWVRc0NBdk1CQjluazViem5SY0d2N3FyTDVQSGhPQmNvaFF4ZHZIaStydXVYcm0rTG9UeExBZ0xUTk5XZ3FmSzFwZDJuZmpYRndiekpRc1RndlBoTEdJYnUyci83NXRYYmFnTHcxa1FGcGlHcmNaSzVtZDNITHZuNExCaE90akpQRi9PSWlLMXZLUDJ4OWV0M2xnYk1ySFd3WDNndSswNmRNN0dTK1puZGh6N3lmNEViRFcvbjI4aVlrY0gwamMvY3JBN1cvWng5QTRJQzd3bWdyRkowL25xN3Y1LzN6OGtwWVN0RnNSWnZRT1pXeDQ3TkpBdjYyaC9DQXU4NnNOZ1pEanlSd2VIdi81YzM5VFVGZHBrWVp6RjJITzlFN2RzNnhrdldScWNCV0dCVitnbWpHeEpQejg2L3RrbkRqdTJoSzBXT21mUnRpUGpIOTkrWk5LMEJaNEZoQVhPNmlCUzBVTW5raDk5NUtCbG94SjBpN04rOXVMdzU1ODlVWElrSGdpRUJVNmppSjVKWlA3a1Z3Y3NDNlBzYm5LV29tODgxL2VkdlFPV1ZIZ3FFQlk0eVlzVGhiZmZ2OCt4SEZTQ0xuVFczeng1OUo2ZVVRZW4wRUJZZ0JHTmwrM0w3M3RCbGl6WXlyWE8rc2pEM2J0SEoyRXNDS3ZhTVJ6NXAxc1BVcVlNVzduYVdWSmU5OS83SjhvV0dnUENxbDRjcGI2M2YrakpJK01ZdDNLOXN4amxqWnNmT29pTHdpQ3NLa1VSdlRDVys4empoMkVycnpqcjJlUEpyKy9waDdJZ3JHb2tiVGpYM3JjWGxhQ251Z3Y3aCsxSGQ0OU9vaVVncktvckJtOThZQjhWVERTRjUzTFdkZmZ2VFJrMldnTENxaUsrdW50Z1QxOEs4Y3FURk16My9Pb0FDa01JcXpxKzBFVEhNNlhiZjNNVVExZmVEVm5QbjVqNGx3TUpQRUFJcS9LUml2NzRrWU5vQjQvM0cvYUo3VWRHaXhhVUJXRlZNb0t4ZnpzMDBqMlVRVk40SHN2NStQWWpxT2tockFxdUpHaWliTjMyeEdFTVhWVUc5eDRjZVdRd2cvTm5JS3hLYld2MlZ6dU9ja3d3VmM0bmlHN2MybDIySll3RllWVWFPbWZiaDdQL2RTQ0J1dzBxQ1MxYitzS3VFem9PVTRhd0t1dExUQ1ZiL3Vtamh3aHo0WldGcmVqT1hYM2Q2UUlPK1lPd0tnZS80SGZ1NlIrZktLQXBLbEphZi9Ia0VReGtRVmlWMHNTTUpzcldsMThZdEhHZ1VpVWlsZHJabDNwOEtPT0R0Q0NzQ2lDb2lUdjNEbElKSjVOVUxKWlUvL1RjaVpQSEtnTUl5N3N3UnVteTlkMERRd1p1RXE3Z2tDWFY4NE9aN2NNSVdSQ1d4d2xyNHM3OVF6WTJPVmY0ZDRuS2p2eks4LzBDd29Ld1BCMnZzb2I5M1JjVFpSdnhxc0p4SFBuMFFQcTUwVW5jdlFwaGVaV1FKcjdmUFdKbnkxak5VQTFmcDd4cGYzbDN2MStnVDBGWTNveFhlZFA1MGNIaG5PVmdOTFlhc0IyNXZUKzllenlIelRvUWx2ZndjMzVmYjNJd2xTZXNacWlhYjFTMlpIMWx6MEJZRjJnTUNNdHJ3dEw0VDdwSHNnYXVHcXdpTE50NWFqQTlVakE0SGpxRTVTRUVZMGZUcFVQak9ZWFZERlZHb1dUOWQrK0VYMEJZRUpaM0NHajhubVBqR2NQRzZGVzFWWVVUaHYzTFkrTStETDFEV0Y1cVZzWWU2UjJmTE9NeTU2cEQyZkxRZVA1d3VvU2hkd2pMRytpYzdSbWJQSkVxRWk0cXFNYVFSYW1pZWUveGNheHZnTEM4UVZBVGR4OGRIeXNoWGxWcFZaZ3VXMXY3SnBDd0lDeFBmRi9Kc09YVEErbWlZV0VBcTBxUnFqZFZmSDQwaDFYdkVKYnI2MEhCbnh1YkhKNHNZWFY3TlgrMXhvcm1yL3RUcUFvaExOY0xpN01kSTlrVTVnZXJ1eXJNbHEybkV4bWhvWDlCV081R0UzeEhJcHZHQUZhVjQ4aXhYSG1zWUdJRktZVGw0dFprTEZVMHg3TWx3bnJScWc5WjZaSzFkd3pEV0JDV20rTVZaL3NtOHVteWpYaFY5Y0tpWk5uYU5RNWhRVmd1UnVkczExZytXY2I4SUlURk1pWHI2ZEZKZ1hGM0NNdTlDVXZ3N1NQWlZORkV3Z0xreU5Sa2VSd2JvU0VzbHpZbFk2bWltY1lBRmpnVnNwSkZjMzh5ajZvUXduSnBQYmd2bVU4aVhvR1R3cUt4a3JVYndvS3czSWxnckNkVFRCczJtZ0pNR1N0VnRwNUtGM0V6QllUbFNtRng2aXNZa3pnUUdaeEtXR1E2VHM1QTRvYXdYTm1VakIzTUdVWEx3WVdhNENXS3BwMHVZZmtvaE9YR0x5cWp2RUVtRWhZNEhiSnlwcDNJbXpoL0ZNSnlYYnhLRm8yOGlRRXM4TEp2MktUcEpMQ3lBY0p5RzRMUmNNSE1JVjZCbDVNejdhR2lJU0FzQ010dENTdFJNSE1XN3NnQkx5c0pNNll6a0RkUUVrSllia3RZYkNoZm5rUkpDRjV1ckx4cEg4a2JIQ3NiSUN5M2xZU0RSVE9Ma2hDOFBHR1I2UmdGRXkwQllibXVKRXdhZGhHYmNzRFpLTXR5REVmaVF3Wmh1WXVzTGFWVVdJUUZ6a3BadGxLR296QzJDV0c1Sy95WEhZbDd2Y0J2WTBscDJGaE9ER0c1RFZ1U2xIZ3R3VzhKaTBvb0NTRXNseVVzUmtoWTRCVS9aSTRzMnhJbElZVGxLaFJaRG9RRmZudXN3SklLZys0UWxxdmVTYklkNVdEQUhieHlTYWlRc0NBc2Q1V0RKVnVhVXNKWTRCVktRcWtNQis4R2hPVW1aWmxTT3FnSHdhc0lxNHlTRU1KeVdWWElzSXNRdk1hZ0FZQ3czSUlpNWVOTVk0d0lJUXVjamNhWlh3aThHUkNXaTR6bDE3aUdEYTdnbGRBNTh3dDh6Q0FzRi9tS2RNNGdMUEJxQ1N1Z2NRVmZRVmd1Z2pFU0dNWUNyL0ExMHprTENBNWZRVml1ZWk4VkNVNElXZUNWRXBaZklHRkJXTzU3TVlreGpGU0FzOUE1OXd0ME5BakxiYjVDd2dLdmtiRHdLWU93M0ZRU1VwMHVtT0NZREFKbmpSWDRCQXY3QkVwQ0NNdEZPRXAxQkgweFhhQXB3Rm41aWdkMG5UUDRDc0p5bDdEYXdyNm9MaEN3d0pueGluVFJHUGJqcllDdzNJVlUxQmIyUjN5Q0VQM0JHY1I5MnVLUXo4RmJBV0c1TFdHMWhQUUlTa0x3c29SRlVWMjBoU0VzQ010OUNhczE3SS9vR3NJL09MTWtqUGhFVzhpUGd6d2dMTGNKUzlVRzlJQlBZR00rT0pPSUxscVJzQ0FzZCtJTCswampDRm5ncFpJdzR0TmFhdndTd29Ld1hCZXlwRm9UQzlYNGRTekZBaTkxTDE5QXEvVnJLQWtoTE5kaEs3VytMdGdRd0RBV21JcFhLaERRVjllRmthNGdMRGRpU2JXK3JxWWhvR05sQTVpcUJ4c0N2ZzBOTlphVWFBd0l5MzBKUzZxVmRlRjR5SWVtQUZNSnF5R29yYXNMMnlnSUlTeDN3b2phYTBQY2g2b1FFQ21xOSt2cjZtc2dMQWpMclNGTHFjME5OZlVCRGVQdXNCWDVSTGcycUF2c0lvU3czSW9sMVliNm1qcS9EbC9CV0xWKzdmSUd4Q3NJeTgwSlM4ck5UWkg2SU1iZDRTdXFDK2diNmlBc0NNdkZTRVVSbi9EVmhnaWJDcXRkV0tvcDZMdTBMWVlwUWdqTDNWV2hvMjd1ckcwTytoQ3lxamxla1UvcmFJbkVzR1FVd25JNWhpT3Y3YWh0Q21FWXE2cmoxYUtRNzNjNzZ3d0g4UXJDY2plT1Vrdmo0WGhkbUFTMlFWY3Z6V0hmRFoxMUpvUUZZWG1nS3JUbGV4YlgxNk1xckZvMEhtdXNxUTNvcUFjaExBOWdTbmw5WjExZEFGVmhsZGFEelVIOS9WMzFxQWNoTEc4d3RVZW5NUjdFclY5VktTeXFEZnJlM0ZGck9maGVRVmplcVFwdlhOWVF4MGJvS2tUdzV2cFFlelNJUS9zZ0xNOWdPUEwzbGpiV2g3RVJ1dXJxd2FhUWZ1dWF0ckxsb0RFZ0xNL2dLTFVrRmx6WFVTczByQ0N0SmhqcnFnMi9lMmtqNWdjaExJOVJzSnhQYjJodkNHR3VzSHJpRlVYOTJrMnJXd2g3M3lFc3oyRkxkV0ZMN0x6bUNPTm81R3FoT2VML2t4Vk5aY1FyQ011TGxHem40eHZiWTM0Y2oxVVYrSFYrOWRMRzVoQ3VuSUN3dklucHlMY3ZhVmhjRzhMZFg5VlFEOVlFZmY5blhWdmV4bkE3aE9YZDExaXA5Njl2QytMdXI0cnZTSUp0V0JSYjF4QnhzTHdkd3ZJdVpVZiswWG5OYlRHRXJBcVBWd0dmOXFuek80dVdqY2FBc0R5ZHNLZzJvSDl3VTRlR3ZkQ1ZpK0RzaXM3YXE5dmpGdUlWaE9WMVNyWnp5OXJXOVUwUkdLdGloUlhVUG5mcFVtd2VoTEFxbzF3Z3YrQ2Z2SGdwRTJqdENvUXgrdjFWTFp1YklqZ05HY0txRUF4SHZtdEp3MVZkZFdqdXlxTXhHcnpqd3NWNTdNV0JzQ29KU2VvZkwxc21mZGlwVTJuOHhZVmRiVFVCcENzSXE2S3dwZHJTSExscGRTdDI2bFJPTVVpMHJqbjZvVFZ0UmF5OWdyQXFqN0lqYjc5b2NWMDhoS2FvREJTamYzalRNaC9tZnlHc3lueS9GWFZFQWwrNllqbWhmcWlFSWw5OWFIUFhXenJxc0pRQndxcFlERWUrWjFuakgyOW9KeHhINmZHUHo4cVc2S2N2N0pMWXdRQmhWWHdkOGJlWExtbXVEK0ZWOXpDQ2YvV2FsZlZCSFFPU0VGYmxGNFp0TmY2N3JsbUYwWGV2WWp1ZnVuelo1YTB4TEx5Q3NLcmpoWmZxdW83YTJ5NWRRcGhkOGh4U2JlNnEvK2o2UlRoREJzS3FJaGlqajUzZnNiSXRqZ0Y0THowMUloTHNxOWVzck1GNk9naXIycWdMNk4rK2JqWDVOWVp2dFVkc3BTem42OWV2V1Y4ZnhoT0RzS29PUmJTcG9lYkhiMStyRk02ZThjTHpNdXkvdm1yRkh5eHZ3c09Dc0txM01MeWhzLzdMMTY5V3BvMXU0R29zNThaTjdSL2VzQ2lvb2N0QVdGV016dGxOSzVwdnZXeTVNbkgybTF0eDVLcjIrTzJYTGF2MWE2Z0ZJYXhxSjZLTDJ6WjN2SFZOSzJISHZ3dVJTa1FEUDNqcjJrVmhQMndGWVFGU1JFMUIvWXRYbm5kZWU1eHdDSnlyYW5hbFNPZS9lTWVHVmJVaDJBckNBcWVkdFRnYStPSDFhMFB4RUJZNnVPaTVLUFVmNzl4d2VRdE9pNFd3d05sOWc5YlZoZjdySGVzb3FHTVJ2Q3V3blcvZXNQYTZqbHFOd1ZjUUZuaWxuUFdtNXVoL3ZtTWQ2UUxPV21BczU0dHZXWFBqaW1hLzRIZ1NFQlo0MWVkeFEzdmREOTYybGpqRDd1Z0Z0TlZmWDduaTV0VXRRUTIyZ3JEQWE0WXN6dWhkaXh1KzlwYlZ4QW5PV3BCSzhKYUxsM3g0NDZLb1QwUE1kUnNhbXNDRnp0STVlLy9xVnA4bVB2TElRVElsRnNMUEg0NzgyS1hML21KTFY5eXZPZEFWaEFYZW9MTVkwWHRYTk91YStNRFdiaW9ZaEhIZitXaDA5Y2tybHQrMnFiTkdGN0FWU2tJd3ZlNWpLZlVueXh0LytyYTE4VmdJWS9Celg0clQzMTIxNHVNWGRNRldFQmFZSVdWSHZudHgvVS9ldG1acFl3VE9tdE1pL0hOWHIvall4ZzZmNExBVmhBVm1UdEdXMTNmVS9ldjFhell2aXBOU0dJYWZkVVNONzB2WHJmN1krUjJjRTQ3bGc3REF1Vkt3bkRlMXhiNTEzYXJybGpZd3poQzFaaWxZS1NKYTBWUnp6dzNyL214ZG15MFZ0aGk0SDViSjVkQUtuaUNnOGVHOGVmc3p4My8wNHJCak9wZzZQRWRiY2M2dlcxSi8reFhMdHpSRmNpYTJuVU5ZWUxiUk9TTkZkK3dmdkd0WGZ6WmJPam1iQ0tadks4MnZ2WDl0MjJjdVh0SWE5aFZ0aVZhRXNNRGNQREJHVVYzNzVmSHhmM3JteEhPSmpPTklySGlZbHFvWVl3MjFvUTl1N3ZqMCtuWmloR3RRSVN4d1dpNmMySlJQcHFUQzZOVC9KaUlpVzZxWnpVbEZmT0pJcHZ5NXA0L2ZmWGpVS2xuRTRhdzNnRlNhTHE3cHF2djRSWXV2NzZ5Yk5PMFp0RDFucFBQVEk3K0sxTlJ2b2s3NmtCUmhMQXpDOGtSVEVqSEdPQ05HSkJoVFJEbkx5UnBXMFphR0kyMnBMS2tNcWNwU09WS1NWQ1RWaXJyd2tsalFuTkVaV0Q3QmxWUi92M2ZncHdjU3ZlTjVrZ3JhZW8xZ1JVUzFrY0Fmcm1uOTdKYkZqU0c5TUtPekVnVmpCZHQ1ZWppcnB0VEZXWWh6SDJPNllGTy9CalVSOVdsUm45QVlrMFJTS2FWSUtzeVNRRmh1aWxHQ01aMHp3MUZadzg2WVZ0cXd4d3k3VkxiN3M2WEQ2VUtpYUtZTk8yODZPZHZKV2pKdk9XVFpaRGxreWQvZHNPalRseXhkM3hBdTJ6TnhGaU9LQnZRbkJsUGYyajN3WUY5cU1tOU1XUk1QNWF4Z1JScS90QzMrdmcyTFByQ210ZXpJbVYyQXFuRTJhVHIvc24vb2I3YjFrRkxrMDBnWGZrM1U2anppRXhGTmkvaDRVOGgzWGp5MEpCYXNEZmxxZlZwZFFJdjc5YmhmQzJyY2tjcFJDRjhRMXNMbEtjR1pqL09DN2ZSTmxvOU5sZ2F5NVJQWjByRnM4VWltZENoYm9sejU1RlpteGs0VmhPejB2MHlNR0pFanQzVFdmZkdxRlplM1Jrc3pjcFlpQ21wY0t2cm1pNGxmSEJ4NWFpaE50a1RVT3EwcW9xNzY4UFhMR20vYjBMNjJJWncxWm5od3ZrL3dzYUw1clQyRFg5eDU3R1R6bmxVS1R2MjlVaWZYeWdYMWpuaHdaVHkwUEJaY0VndDJ4b0pkc2VDeWFDRHUxeHlwTElYUUJXSE5yNmNNUi9aT2xucXlwZTd4L002aHpNT0RhU2RYUGpWd3hVNTY2bzExcXE2bW1xOWRzL0x0bmZVbDIxRXovVk5GL2RxTEU0VnY3Qjk2K09oWTczaCtHbitBeXF3QmlhU2trTy8zbDlULzRaclcvN0dzcVdRN3BsUXphNUdneGc5bml0L1lQZkM5WFgzRStSdWFtVldLNU5TdmlwU2lvSDVSVy95YTl2aTZwc2g1OGRCNThXQkUxeXdwYlpnTHdwbzdWZmtFVjByMTVzb0hVb1dERTRYZGlleldvVXdwV3lJaUVuem11VWFxZUczb242OWU4Y2RMR3kybFpyellXdWNzcUltZkh4dS9wM3Y0bm1Qak5EVVlYNFhhY2lSeGRsRkgzVlVybWo2NXJpM3Ewd3JuY0x0SGpTNTJqZVh1ZVByNGZkMGpKR2E2MEZvcGNoUTVrb1Y5bDdmRkwyK0xyVzJzV1ZVWFhoa1ArVFZ1T2hLbElvUTFtL2dGbDBydEdzOXZIVXdmU0dTM0RXY3k2U0twYy9QVVdjVkxqZjlyVnl6L242dGJHR1BPT2J5L1lWMWtEUHVMQnhLN2U1T1BKakpVTkVud2F0R1dJNG14ZFMzUks3dnEzcnU2OWVLV2FNNTB6bVczVGRRbnRnNW0vbmJIc1owbkptYm5RWjh5bHovaXY2d3R2cmsxZWxWNzdSV3RzWkF1eWc3MkJVRlk1NHpPbVdCc1g2cndpMlBqRHg5UFBqK1lKa3VTeG1kL25FZ3FGdFJ2djJUSmh6ZTAxK2pDT0lmcmN6aGpFVjI4T0ZINHp4UEpmZjNwQndkVFZzNllOYmU2VmxWRUd4ZkZyK2lzZThlUyttdmI2MnlsekhOcnc2RGdQKzFOL3QxdmpoNGVtWno5cGxPS2JFbEVTMXVpYjEzVytLNGw5VmUyeGpYT0RBZGhDOEthRVlJeG4yQTltZEl2am8xdlBaN2MzajlCbGlSTnpPSGljcW00VDN4c2MrY0hON2F2aUFWejUzWk5vYzVaU0JOSE1xWDcraWFlN1UvOXVqK1Z5NVRtUkxVTGlGSlRxV3B6ZS95cXJ2cTNMYTYvYWxHdFV1cGN1cjBpQ2doZWR1VDN1MGYrOFpuZWRMbzRkeTNHaUpRamlXaDFTK3pLcGZVM0xtMjhzalVtbFRKaExRaHJXcStSVC9DMFlmK29lM2hyYi9MUi9qU1ZyYmxWMVptMW9lRHZYdEgwd1kzdE4zVFdGVzE1am5XQ3hsbFE4UDU4K2FIKzlNNysxQU45RThsa2dRUW40ZkhoTFVlU0l5bnN2M1pSN1piMjJQVWR0WmUzeFpVaTg1d1RTa1FYaHpMRjcrOGIrdHJlUVh0ZUZ1VXlJbVZMNHJTeExiNWxjZjJ0YTlwV3g0T0dSSVVJWWIzaFlMVnRNUE90ZllNUEgwdVc4d2JwOHpzR3BCUXBXdG9jK2NpbXpnK3NhZ2xvdk95YzYyWTN3WmhmOExHU3VXMHdzenVSMlRHU2ZYWTRTMFdMTk00NFZ4NFNsMVJUMWQrUzVzaGJ1K3BYTjBjdmE0NnVid2pQaXFvWVVkU25QVHlRdW10My8vMkh4K1o1TGU1SmJXbjhUWjExNzF2WGV2T0tGdXdjZ3JCZUI3L2dPY3Y1eXA2QiszdEdEd3huVHk1UVdLQ2VHUWo3UHJTdTdTUG50NitNaHlkTis5eC95eWtYRnl6blFLcXdPNWsvTnA1L2REQnpjRFJMcGtPQ016ZmZaM1hLVTAzMTRUZTF4amExUkRjMlJTNXNpallFZEZOS2V6YXlpTTZaenRtM2UwYnZldTdFa1pGSm9vVlpnc3NVS2R0cHJRdGR0cXp4N3k3b1doRVBsbTFJQzhMNkxUaGpJWTAvT3BDK2MwLy9ZNzBUVnNraWpTOTRMOVUwZnZXU2hvOXU3bnhYVjEzSmxyTnlHQ1pucEhHdU1ab28yeSttQzN0VGhaN2h5WWNHVTMxamViTGx5Ykg1bHhhN0xxeWtwQ0lwaWJIbWhwcXJGOFUzdDBaWHhFTXI0cUVsMFFCbnpKUnF0cXFtcUUrY21DeC9iLy9RWGZ1SDh0bnl3di80VWhHanl6cnEzcnUrN1grdGJqV1ZnclVnckpjTjlKaTJ2R04zL3dNOW85MmpreTVhdnFRVUViWFgxOXk2dWZPV3RhMUJqYzlzUWZ5ck9Wcm5qQkdORk0yZVRQRklwdFE3a2Q4M1VYZ21tWjlNRjArdW1PZFQvcHFYbjFTcWs0dkZwU0xCUXJIZ2xvYWFqUTAxNXpYVUxJc0ZsOGFDblRWK3daa3QxU3d1QU5BNEMzQitiOS9FZC9jTVBONDNZWnFPaXlZbGJLZWxOblRCNHZwL3ZtVHBra2lnN0VoMFZRaUwvSUtmbUN4OVpOdmhuUU1wbzJUTmZISGdYSDV2YTBLKzN6MnY2YU9iT2k1dWpoWXNaM2JQSFJlTWFad1JVYXBzalJiTjRaSTFWalFITXNVWHhuSTd4M1BEeVFJWjl1bllOZVV2ZGc1T1Y2ZkU5SktlR0tPd2Iwa3N1Q0lhNkl3R1drSytSYkhnb2tpZ0phZzNoM3dOQVowelppczE2d3VWYW5TUktCamYyanYwNDRQRFEra2lrWExkUklSVXhObUZyYkhQWExiMEhVc2E4cFlEWVZXMXNFSzZlQ3FSK2ZQSGVuWVBaeGRxMk9JTnZyaEM0NHZyd3pldmFmdm91cmFHb0Y2d25Ga3ZFamhqbkpGZ2pJaHlscE1zbWlObEsxdTIwa1V6VVRDR0M5Wnd3UmdxR0VNRmM3Qm8wR1I1YXJNZW5UNUFoNTArUm9kZWR1VEtTMm1SZEVGK2pYemEwcEMrUEJaY0Znc3Rpd1hib29FYXZ4YlRSZHluUlh3aXBJa2FuOUFZYzVSeTFKeWNzNjV4RmhEOFYvMnBPM2YxUFQyUUxwZGQrYUY2Q1VjdWJRaC83S0xGdDI3b21KWFJUQWpMazhUODJvOFBEWC91TjhkN3huT3VmbC9wVlA5WEtoelFOeTJLMzdhNTQ1MWQ5VktwdVp0Rm1qck1TekNhR2kwcTJVN0psaVZiRm0ybmFNdWM0emlXTkd4WnRKeTg1UlFzcDJnN09kUEpXN0pvV25sYlNxVmlQaEh6NmJHQUh2Ynh1RStMK3ZTb1R5aE94TG1QczRqR0k3cW84V2tSWFlSMHdlamtNU3h6ZmFUVTFBbUkvZm55bmMvMzNYTm9kSGl5VEVwNVlJV0hWSTBSLzgwYjJyOXkrZktjYlZmdGlvY3FGZGJVYnVIUFB0MzcvVDBEaVd6SlMyc3BsU0xHR3NQK2R5MXYvTVJGaTVmSGdrVjdQaFpITTBaVFJlQlVYVGgxK0plamxLT1VMWldqeUpIS2xtcXFjSnZxVHpwakdtZTY0SUtSenJuR21jNlpPdlZUS0RxNU8zZys5LzhHTlY2eTVQY09EWDluMzlCd01sOXkxWWpWRzNqMFFiOSt5Y3FtKzk2OGlqaXJ6aVh4MVNnc1JoVFN4UHUyOWR4L2NEaFhNajI1ZmxJcXZ5N3FhME8zbmQvKzRUVnRVMnUxRnJBOTZYUTV5TTZxQ09ubFozSXVGQnBuR21OYkI5T2ZmL2JFdnVGc3JteTVlZ1RnTlZLMnhpL3BxdjEvTjZ5TCtiVXFuRHFzUm1GRmRISGRneTl1N3htMVBYMzNqQ0lpVmVQWDE3VEY3cmhzNlJXdHNhbERUUW04SE1GWVFPTkhzNlhQUFgzOFYwZVRxYko1Y3BqZnk1L2NDeGJGNzMzWGhuaEFyelpuVloyd1lqN3RwcTNkUDl1ZmtIWkZUTGdvUlp6VkJuMXZYbHovNXhkMGJtbUtRRnRucXNvdmVIK3UvTTk3K243V016WlpNRTNMcVpDdGxJd3U2S3g5NU4zbmE1eFgxUmFlNmhKV3pLOTllRnZQdiswZExGZllQWFJLYVJxUDZOcjU3ZkdQYitxOHRxTldraktkNnRYVzFKciszbXo1Qzd0TzNIdDRyR2phaHVWVTJoazduRjIwdE9IeGQyNndxK25haXlvU1ZpeWcvK1Z2am41blYxL2VxTkNKWWFXNDRHR05kelJIUDdXcDg4YmxqYXI2OXYzcm5HbWNIVW9YNzNqMnhLK1BqcGN0eDdTZGlqME9UTEJMejJ0KzR1M3JTMDYxZkoycVJWaFJuL2FsM1gzL3RMTTNWVEFyL1BKUlJjUlpXSEJXRi9yQzVvNzNyVzdWR0p2eGZXTGVTUnVrY1U2a2ZuRTArZTBEUXk4TXBNdU90QjFWK1JmTmF2emExUzJQM0xDdVN0Wm5WWVd3QWhwL3FHL2lmei9jM1o4dFZkV1J3WDdCdFpCKzAzbk43MTNWY2tscmRHckJRWVdKYStyS290N0o4dmNPREg2M2UxVG1qVm5jWStpSjcxTW9vSDEwUzljWEwxK1dOU3JmV1pVdkxNSFlwR20vOHhjdjdFbGtxdk5lQnNHWnhwaUlCVzVkMVh6emlwWlZkV0ZMS3E5ZmxzY1pFNHlVVXZjZW4vaksvcUg5L2FtaWd2aW1BQUFMZjBsRVFWU3BKV0JWK0h4SnFhNTQ2QnR2V1hWOVYzM1pydkQ5aGhVdUxFWVUxc1UxRCt6ZmZtaVVxdjQ4Tk00WTV5ellWUFBaMVMzdldkSGNIUFRaODd0dWMxWktQODVZd1pJUDk2ZCtmbXpzMThlVGxtRkwzRDJqMUpaRnRiOTg5NGFZWDYvczJyL0NoVldqaXkvczd2L1N6dVBab29rYlJzLzB1T0lzMGxqejNzNjZ0M1RVWDl3YURldkN6YjErNm5hMWdjbnlnLzBULzM0MHVYY2c1ZUM4bGQ5cW8ydld0RDU4dzdxaVhja0Q4SlVzTEovZ3o0eE0zdkxRaXoxVDkvU0JWL2s0a3lZYW15UHY2Nmg5YzJmOXBxWklVT09LRm5pMGVxckxTYVdPWmtvN2h6TlBKcklQSmJLRlRHbnFvQ2p3aXM4eEh2Sjk0cktsZjdtcHMxQzVoenBVckxBRVl6bkxmczkvNzkvUm15VE84VDYvQVVNb1VrUStzYUkxZG1OSDdYV2Q5YXZyd3o3TzZQUnhER3d1RHJhYjJ1MTg1bmt6ZThkekQvZFBiRTFrOXc1UHlyTDFzbk1nd0d2Z3lEVk4wVzlldi9yaTFwaFpvWWRuVmF5d29qN3grNDhlK3ZrTGcrVGdtendUaFpCU3BIRmZKTEFxRmx3WkN5eUxocFpHQTB0aXdXWHhZRkFUZE1ZdWFDSmk3UFFXd3Bla2R2WXQ3dlRTdHNLVHY3MHQxV2pSN0VrVmptV0xoek9sZzVuU3dVeXBQRm1hdWdqbjVLbGJZSnJPdW5wNTQzKzhmWDFFRnhVNW1GV1p3Z3BvL1A3ZTVDZTNIVDZXTEpEQVN6OGJ5ZXRNa1lYMCttaXdLYURGZFMycWk3RE9JbjQ5b29rYWpkZjQ5QnFkUjN5YXp0bWthZWN0V2JEc3ZPMFVUR2ZTc25PV3pKdDJ6cFladzBtVXpISzJUTTZwVlowblBZY2tkYTRmRzkybjNYWmgxK2N2VzFhUmhhRldlVDhTWnl4dk90L2ZuemlXekh2Z2xDdTNmOUhPbE1ncGwxaHlJcG1mb0ROT1lGRDBzdU1ZMUpuLytrdC96MTdodDlVRTJuaFdueGV6U3RiV1k4bmZXZEp3WVhQVXFMakNzQUw3YzBDdzd4OU1QRFdZUmtFeHB4MkRHRHQ1cXhCbkpCZ0pmdm92N2RSZlovNURmc2IvbnlGSnpWMEk0UzhNWjc1K1lFZ3FWWGs5b05LRTVlUHNZS1o0NytHeDdHUVpNNE9nV2d0RDl1eUoxTStQalFjcXJzS29xSitIRVhIRzd0eWYyREdRUnEwQnFoZkIrcFA1dTd0SFJvdW1WbG1mN1lvU2xsL2p2KzZiZVByWU9Ea1NGUWVvOHNMdzBmN1V2L2VNQ2xaUmRXSGxDRXN3bGpXY3UzdEdENDlNWXF3ZFZEdU1sZlBHTDN2R25rL21mUlhVSFNybkovRUwvcXNUeVcxOUU3QVZBRVRFTlBIc1lPcnVvMk9NS3FmZXFKQytMUmhMR2RaamZhbXhpUUxHMmdFZ0lzV0lIUGxzWCtyWnNWekZoS3dLK1RIOGdqODZrSDdrUkJKajdRQ2M4U1VYenc2bEgreWZVRXBWeG1lOEVvVEZUOFdyRWNRckFGNVdGaEpaOHNrVHFYMnBRbVdFckVyNEdmeUNQem1VZWVENE9PSVZBR2VqOGQ4TXBCOGZTTXVLQ0ZtZUZ4Wm5MRlcySHUxUGpTVHpEUEVLZ0xOREZpUFRmcWczMlowcDZ0NFBXWjcvQWZ5Q1B6TTJlZSt4Y1JJY0o3b0I4SW9oYTl1SjFGTkRtUW80bU5YYndtS01pcGJ6VENJN01wNWpXTTBBd0t2MUU4UGEzcDhleUJ0ZVgvanU3VTZ1YzM0d1hkamFseUtHZUFYQWE0UXM4VUJ2Y2w4eXIwTllDL25sSURxWXpEODNtTVppVVFCZXM2T3o0bVRwdVVRbVhiWTlyU3dQOTNQQjJHREJlSEl3VFlhTm5ZTUF2RzdJK3JlajQzdlRCWitYVHd6MzhCL2RKMWgzcXZEVG8rT2tZelVEQUs5WGpnZytPcG83TUpZekhPbmQ3N3RYaGNVWlpRejdtYUZzT1Z2Q1lsRUFYcGVwTS9VZjYwdjE1dzNoMlM3alZXRnBuQi9PbG41NmJBeWpWd0M4OFc3endQSGswWFNSTXdocmZwRks5YWFMaHhOWkNBdUFOMXdXTWlxWk80WXlxYkxsVVdkNXNyZHp4c2FLNXZiQkRGWG81V3NBekJXQzM5ODNNWkEzUEhxWmxDZUZwVEYyb21EYzA0ZXpHUUNZYm8vblBZbE1JbWVnSkp3L0hLV0dzK1VzTHFBSFlOcFZJWkV0ZHd5bFU5NWNrT1U5WVhIR3hrdm1Zd01wUWprSXdJeXF3bnRQVEF3WFRTOE9ZM2xQV0lMUlFOSDhTVytTTkF5M0F6QVRZUjFMWkVieW5xd0t2ZGZuSGFWR3NxVnlFbWYxQVRCVEpEMCtrRXFYTGMvMUlZOEppek9XTEZrUDlrM2dsUVBnWE9xVW4vVW1SejI0dUlGN3JaMXB1R3o5OERpdXhnSGduS3JDL2tSMk5HZEtyeDF5NHJGdWIwazFuQ21yQ2N3UEFuQ3ViTzJmeUJxMnR6S1dsNFRGR09WTTU2bEVoaGhzQmNBNWRuMzIrRkFtYTlyY1UwZWRjRS85V1ZuT3NuZU1aQkd2QURqbjdzVDNER1p5SmhMV1hDYXNqR0UvTTVnbWpnRXNBTTZ4T3hHWjlwRjAwZkRVL2pZdjlYelRrWDJaRXBWeFhCOEFzMU1WN2toa0NwYmpvWkRsR1dFeFJnVkxQaldNZWhDQVdhc0tuMGhrODViRHZCTUJ2Q01zWW5uYmVUS1JnYkFBbUIwRU81VElGaXpIUXozS1E4S2luR252VFdRd2dBWEFyR0U3QjVKNUR3MWplYWJ6bTFJZW5paVE2V0FBQzRCWnJBcWZIRXFYYk0rRUxHOElpeEVWYmZuRUVPSVZBTE1yQUxadEtGdTBwVmZHM1QwaUxFWWwyM2tjQTFnQXpMYXdUaVN5T2ROQlNUakw1RXpueUJDRUJjQnNvMmozYU5aMHZMR3IwQnZDTWgyMWR6eUhFL3NBbUl1UTlmaFFwdXlSeXdvOUlDeEdWSGJrNDROcHhDc0E1a0pZanc1bERFZDZZanJMQ3dtTGtlSEl4d1pSRHdJd0o4SWFIYzFseWpaNW9TajBnckFVWlExN2NIUVN3Z0pnanRpWnlIamljQ3dQQ011U2F0ZElsaFJlS2dEbXNDbzBwUWVHc2R3dUxFWmtTdFNEQU15dHNMWU5waTBIQ1dzMk1CMjFGU3V3QUpqRFhNQXl5Y0pFeVhTL3NieFJFaVluQ2pobEZJQTVyV1VPVE9RZDVYWmx1VjFZa21pa1lKRGw0STBDWUU1RFZrKzY2UDVoZDdjTHk1RnEvM2dlV3dnQm1HdGhkYWVMU0Zqbm5MQ1U2a2tYY0VJREFITmRFdTVLRld3SllaMWp3bEowTUYzRUFCWUFjNTJ3QmlhS1JHN1BCdTRYbG5vbVhVVENBbUN1RXhhVnJHelpjbm5FNGk1dlE2Vm9Nb1VwUWdEbUFlWCtjWGRYQzBzUmpSUU5NakJGQ01COFZJWGRxWUp5OTdpN3E0VWxsVG80VWNDU1VRRG1TVmpwZ3N2UGNISzVzS2c3aFNsQ0FPYUp2YW1TUk1LYXViQklkYWN3UlFqQVBDV3NBeE41RExxZlU4TGFpWVFGd0R3SmkxVEJjUGxaeVc2ZkpSeEw1cEd3QUppM29xWW5WWEN6c1Z3dHJOR0NRU2FtQ0FHWXY0enc0a1RlemFOWTdoV1dVdFNESmFNQXpLdXcyTUZNVWJuNHRFd1hDNHRVZDZwQU1CWUE4NW13VWtVa3JKa0ppdzZtUy9BVkFQTnByS2ZjUFZIbzZwS3dQMWVHc0FDWXo0U2xzbVUzL3dGZG5iQUdTaFplSVFEbUZVZm1MUnZDbWdrREpSTmpXQURNTXhORkU4S2FFU1VMdmdKZ25zdkNNUmRYTnU0VmxpMFZsVkVTQWpEUHZxTHhvbnRQeFhLdnNNWmRuRXNCcUdER1N5Z0pwODlZQ2NJQ0FNTHlUTUt5c0lzUWdQa3ZDVWZLbUNXY0pvcG9yR2pnNVFGZ0lSSVdCdDFuVUJLV1VSSUNzQUFraW9acmR4TzZ1Q1RFcWxFQUZxSW1QRkUwTVVzNGJVYUxXSVFGd1B6N2lqSW9DYWVOb21Fa0xBQVdoSkpGYnEwSjNadXcrb3ZZbHdQQVFtRExzdTNTMjNQY08wczRnbjA1QUN3UXd3V1h6dEc3VkZqc1pDNEZBQ3dBcnAzeWNxbXdUS25JZ0xBQVdKaThNRjZFc0tiRGFNSEFNbmNBRm9wa0djS2FEbm5UeGtzRHdJSjFRTGVlNGVmV2tsQXB2RFFBTEZnSGxKZ2xuQTZHVzJkVkFhZ0d5ZzdXWVUydnZTQXNBQll1TVRoSVdOTktwSTdDSWl3QUZpd3gyQzY5Y2QydEpTRVNGZ0FvQ1NFc0FNRHJ3VkFTVGxmd0VCWUFTQXhlU1ZpWUpRUUFKYUZuaENVaExBQVdUbGc0cldGYW1DZ0pBVmhBWVdIaGFHV1UwQUJVQXlXVWhOTXNDYkUxQjRBRmdsRUpKZUUwUzJnSHJ3MEFDMFVlSmVIMGhPVWdZUUd3WUdTUXNLWlhFbUlNQzRDRm80U0VOYzJFSlhFREJRQUxoY0tnTzBwQ0FEd0ROajlQVDFoWTZRN0FBb0tFTmIxRWlqY0dnQVVFWTFqVElxaHh2RE1BTEJqQ3JSY0Fabkk1UEIwQWdDZEFrQUVBUUZnQUFBQmhBUUFnTEFBQWdMQUFBQURDQWdCQVdBQUFBR0VCQUFDRUJRQ0FzQUFBQU1JQ0FBQUlDd0FBWVFFQUFJUUZBQUFRRmdBQXdnSUFBQWdMQUFBZ0xBQUFoQVVBQUJBV0FBQkFXQUFBQ0FzQUFDQXNBQUNBc0FBQUVCWUFBRUJZQUFBQVlRRUFJQ3dBQUlDd0FBQVFGcG9BQUFCaEFRQUFoQVVBZ0xBQUFBRENBZ0FBQ0FzQUFHRUJBQUNFQlFBQUVCWUFBTUlDQUFBSUN3QUFJQ3dBQUlRRkFBQVFGZ0FBUUZnQUFBZ0xBQUFnTEFBQWdMQUFBQkFXQUFCQVdBQUE4S3I4ZjlySHNVeVp5YTJWQUFBQUFFbEZUa1N1UW1DQyc7XFxuZXhwb3J0cy5kZWZhdWx0S2V5SW1nID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBWkFBQUFHUUNBSUFBQUFQM2FHYkFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0UW9SRFFBQnpBYnBHUUFBSUFCSlJFRlVlTnJ0dmRsM0c4bVZyNXNST1krWVFRQWtSVWxXbFYyMis1dythNTMvLy9FODNMUDY5blhiVmJaVlVra2NNQU9KUkNhUWMwYmNoNUJVZGxXNVN3TUpZdmg5eTZzZlpEY0o1c2IrWXNnZE8wZ1FSUklBQUJ3Q0ZJOEFBQUJoQVFBQWhBVUFnTEFBQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQVFGZ0FBQUJoQVFBQWhBVUFnTEFBQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQVFGZ0FBQUJoQVFBQWhBVUFnTEFBQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBK0RVVVBBTHdoUkJDT09lYktBclg2eXpMOGl6TDg1eHpycXFxcHV1NnJ0dU80OVZxcXFveXh2QzR3QmQ5MllJb3dsTUFud2RuTEVtUzJYVHFMeGFjY3lyTHdsOC8vZzg0Ri8rWFZaWHJlV2Y5dnVPNmlvSmhFa0JZWUZjVEtzNVlXWmJiS0pxTXgxRVVLWXJ5ajVMNmwzYmp2S29xVmRQNi9YNjkwVkJVbFZMc1NBQUlDenpNdWsrU3BLb3MweXlMdDl1NzI5dXlLR1JaL2hoVi9ZU3FxaXJHTGk0dmE3V2FwdXVhcG4yWWl3RUFZWUV2VlJVaEpFbVNQTXVpS0xxN3VWRmtXYXordmdUR1dGbVd6V2J6ck4rWEZjVzJiV2dMUUZqZzg2R1VpdDMwcXFvbW8xRVlocFRTKzEzSGlYV2lwbW1YVjFlS290aU9JL2JtWVM0QVlZR1BuVkpSV2M2emJMdlpwR2s2bTB5eU5LV2Z0ZnI3ZUcweHhoUkZhWGM2dHV0YXBtblpkbFZWMEJhQXNNQy8valpRS2xPYXhIRVVSVkVVaFVHUTV6bWw5T0ZVOVJOdk1jYW9MTHVlVjZ2WGJkdDJISWRMRW9vaEFJUUZmcnI2STRTSVdxcE5GRzJpcUdKTTdGN3Qvc013eGlSQ2JNdHlQYzl4M1hxalFRaXBxZ3BoQWhEV3FTUExza1RJYXJsY0I4Rm1zOG5TbERHMkR3VUhqREZDaUtacGxtM1g2dlZHczZrb0NyYTNJQ3dJNnlRRFR3aVY1YklvVnI2L21NK0xQQmZsNmZ0V0c4VTU1NXhybXFacVdxMWViN2JidG1XVlpRbHRRVmpnVkZRbEswcWFwdFBKSkZ5dHFxcks4L3l4Vm4rZk5PRlNGRVZSVmNNMHp5OHVMTnZtakdGN0M4SUN4eHRzU2draFdacmUvUEJEbW1WbFZiR3Eybk5QL1h6Q1JRaFJWWlZTZW5sMTVkVnEyTjZDc01BeExnQXBEVmFydTl2Ym9pallVV1E0cFZTVzVYYTMyejgvRjI4WUVXZ0lDeHk4cWdnaDA4bGtQQnJ4WTl5eEZyMGlXdTMyK2NXRmdvWVFFQlk0M0ZTdXluSjhkemVieitsQnJmcytlN1ZvTzg3VnMyZUdZV0JMSHNJQ2g1TzZqSlZsK2ViMTYrMTJLLzF6djVkVDBKYXFLTTlldkxCcys5VCtkZ2dMSE5MS1NPdzliNkxvOXZvNlRkUGRWYWovc3k5a1JaRVlFNnFvR0pNNGwzYitNYXFxVWxYMTdPeXNPeGp3cXBJVkJYTXVDQXZzaGFja1NTckxra2pTYkRwZHpHWnBsdTIrUTU1NGVTZkxzaXpML1l1TFJxT2hLTW82Q0ViRFlab2tqREZSQmJwN2JWRkttODFtLytKQ2ZEYXg0WVd2RFlRRkhrRlZuUE95TFBNc1d5NFdpL2xjVktqdjJBdWkxbFQwaDJsM09vMW1rNzB2anhJSzIyNDJpOWxzSFlabFVZZzU0STQvb2ZnOHpXYXoxVzVianFNb0NwVmxqcjE1Q0F2c0Jrb3BZeXpMc25peldhMVdLOStYeEFtYjNYcUtjeTdMc200WXJ1ZTEybTNIY2RndlZYSUtiV1ZadHB6UHd6Qk1rK1JSNmxURlozTWNwOVZ1TzU2bkc0WWl5K0t2d0RjS3dnSVBNcWVpaEZSVkZjZnhKb3FDMVNwNmdBWlZINmtxVlZVdDIzWWNwOUZxV2JaZC9kcFpHYUd0c2l4WHZoK0ZvVGkwS0hGT2R2N2h5N0swTEt2UmJOcU80N2l1cW1rYzV4TWhMSEMvcXo5S2FWRVV3V29WYjdmaGVyM2Riait5ay9xOXEwclR0RWF6YVZwV3JWN1hkZjFUdTFiSnNrd2thYlZheFhFY0JzRm1zOW45QVViT2VWV1dxcWJWbTAzVE5Cdk5wcTdybUcxQldPQWVWbitFa0N6THB1TnhWVlcrNzM5MkovVXZYRTl4emwzUGE3WmFxcW8ybWsxQ3lKYzBUaUNVS3JJY2h1RjJzMG1UWkQ2YlBjb0dYRlZWRXVmTmRsdlR0RnFqVWF2VnVDUXhIUFNCc01CbnFFcVc1ZVZpc1E2Q1BNOEQzeWVQc2ZvVFZ1b1BCb1pwV3JidHVpNjd2eVBISDJhTzY5V3FLTXZaZUp4bW1VenBqdGVKNG0rMEhjZTJiY00wei9wOTh2NGY4VDJFc01DdjViQXNTNXlQUjZNa2prV1RZaUpKNURFV1RacXVuL1g3aG1FNHJxdXE2c010bWlpbGpQTnRGS1ZwdWxvdWZkOVhGT1ZSOXVZVVJYRTlUOWYxczE3UE1FMzBzWUd3d0w5VWxhS3FTWkxNSnBONHMwbVNwQ3hMYWVkRkFHSmIycXZWT3QydWFacUdhWXFyS0hiekJEam5lWjZuYWJyeS9jVjBLaEd5NDdlZjB2dENEY013VE12cWRMdTFlcjBvQ21nTHdnSS9vcWpxZHJNWjNkMGxTVkxrK2FPVVdiS3E0cHczbXMxdXI2Y2JocXFxajFKbStlNEN4S3JLMG5RZEJKUHh1Q3pMeHlxRlZWVlZONHl6ZnI5ZXIyT1JDR0VCaVZKYUZzWHQ5ZlY2dlg2c1RnUGk5L2I2L1dhcnBSdkcvcHkvRXl2VE1BeEh3MkgyU0llTmhFTk55M3J5OUtsbFdlZ0dBV0dkOURKd0hRUnZYcjkrcktGYnRQSHNEUWJ0VG1kdkw0NFhrNTF3dlo1T0p1RjYvVmphWW96MUI0UEJ4UVhtV1JEV2lkcHFkSGMzdkx2Yi9YcEhyTGtjMXozcjlWcnQ5cUYwN0tTVXBra3lHZzU5M3llUDBZbUJNZWE0N292Zi9wYWlDUVNFZFdxMnVuN3paajZiN2Y1SURhWFVkcHduVDU4YXBubUlOVWVFRUltUW03ZHYxNnRWVVJTN2Z5bWg2Zm8zZi9qRDNrNUlJU3h3L3puMzl2WHI1V0t4UzF1Snd6RmV2WDU1ZFNWVGV1aDdNY0lYeS9sOE5CeFdWYlhUUDRkeldWWC8rRC8rQjVwdFFWZ25NYmRhK2Y3cjc3L2ZoYTA0bDk1M2ZlbjJldDJ6TTRtUVk2cmtGaFplcjllajI5c3N6NnV5M05FTFZzNE55L3JtRDMvQWZoYUVkZVM2S3ZQOHozLzYwME1ubGRpbzFuUmRVOVZ1cjlmcWRFUXlIK3NZSU10eUhNZmo0VEJKRW5FWDdBNmU4TFBmL0tiWmF1RzlJWVIxdE1peS9GLy8rWjlGVVR4Y0ZvbXVMNVpsYWJyZVB6KzNMS3RpN0JUYVA0bURQbHlTN3E2djR6ak8walRMc2dmdFkwTW8vY08vL1pzNEE0RHZOb1IxaEJrVnJGWnZmL2poSWI3Zm5QT3FxaXpMTWt6VHRLeitZQ0RMOG1uV09vcTE5bkt4V0M0V1ZWVkZZU2hjOWhDL3ExYXZ2L2o2YTF5TXVETVVQSUpkSnRMdDlmVzlHK1JES3dWTjA1cXRsbGV2SzdKY2x1WEpacEg0dzF2dGRyUGRqcmZiK1hTYVpkbDJzeW5MOHQ1cnVMYWJUWjduQ25yR1k0WjFmTk9ySkVsZS9mM3Y0b1RnL1dSbVdjcUs0cml1YmR1TlJzTnlIT2w5MlRyNGNaMG95MmtjcjlmclRSUnRvaWhOMDN2c3owTUlhWFU2VjArZllwS0ZHZFpSUVNrVlBhM3VhL1duYVZxajIvVTh6M1ljMDdMdXNldkxNZkZqMjRsZXI5RnN4cHRORkVYQmFwVWt5YjJzRXhsajRYcU41d3hoSFdIcUpISDhoVyt2T0dNVlk2WnBpcVdmWVJoaXh4ZkQrOGNvWGxHVVdyUHBlRjZqMmR4dXQvNWlFZDVIajJsS1NGV1dFbXF5SUt4am92cXk2WTlJT2R0eHp2cDl5N0kwVFZOVWxXTlc5WW5Qa0ZjVklVVE1TVjNQSzR0aU1oNkg2elZqN1BQSzRrVG4xVGlPYmNmQk5oYUVkVlRaSWtrUytiei9SODZkV3UzSmt5Y1NwYnFtaWE0djZPVDdKZXM0U1pJTXd5Q21xZWs2WjJ3Mm15M2V0Mm4rakorV1pabmplUndSZ2JDT0EwSklXWlpja2o1ajRXQ2E1bGUvKzUyb2plVHY1Z2tZeWU5cHdzVzVhUHQxZm5IUkh3d200L0YwUFA1VVp3bGhZVUVJWVIzWGt2QVRiNWY1UUpabGYvM0xYMnpYZmZIMTE2TEZPaDdtZlk0bGxNcVV6cWJUNldUQ3F1b3pabGhpdFk1emhSRFdzUTNvbnowUktNdHl2VnI5di8vMy81cW0rZlQ1YzlPeXF2dXJqVGhaUkUzV0Q2OWVpVDJzTDVxM1loU0JzTUJQazRLeGVMdjk5ci8reXpETjgvUHpScXVGbDRPZmh6aDRlSGR6RTY3WG1CbEJXT0FobHpDRVpHbjYrdFVyOWZxNk54aTAybTJrM0NjOXZTZ003MjV1NGpoKzBHT0dBTUlDLzVSNFpWbGUvL0REOFBhMjFXNmY5ZnV5TEtPbDNMOTZWcXlxS3NhQzFXb3lHcVZwdXZzN3hBQ0VCU1JaVVRqbnM4bGtPcG0wV3ExdXI2ZnB1aUxMWkZjWGMrMjVwOFIyZUZtV3kvbDhNWnZsUmFFb3lxTTBwQVlRRm5nSGxXVkprbGFyMVd3NmJiYmJ6VmJMZGh4TjAraXBhb3RTeWhqTDh6eUo0MkMxbWsybm9pZ0Vxb0t3d0I1TktEUmRqOEl3OEgzZE5IdTlubWxabG1VcEQzbGo4MzZxYXJ2WnhISHNMNWVCNzh1WVVrRllZSisxcGFocVdSUTMxOWVVMHU3Wm1XWGJ0dU1ZaG5IRTJoTGI1MlZacm9NZ1M5UFpkSnFtcVV5cHFtbjRTa0JZNEFBU1dKeU1tNHpIbE5KYXZXNDdqdXQ1anV0S25CL1Q4VVBSY1NGTmt2VjZuY1N4Ny90Rm5tUDFCMkdCZzBSb0sxaXRmTi8zWE5kMkhOdHhtcTBXSWVUUWE3aEUyZWNtaWxhK242YnBPZ2c0WXhTcWdyREFvU1A2cDJ5MzJ5aUtkTU5ZcjllNnJvc2V5cDk5WU9oeExVd0ltVTJubXloS2ttUVRSV0tlUlhaN3d5T0FzTUNEcnhPTFBGL081N0lzYjZMSU1NMU90K3M0enE3djlmdUN6MTlWMWQzTlRacW1vamZ4aDhVdmdMREFjV3BMRkNpRjYvVW1pcUwxMnJUdFJyUFo2WGJMb3RoUGJZazNDWnN3bk0vbjJ5aEtzNHhWRlhsL2x5cUFzTUJKckJNbFNVclROTXV5YUwyZWpzZnRUcWZWNlZCSzkrZGt0V2dIdWxxdDVyTlpzdDJXNys5SnhaRWFDQXVjNklSTGtxU3FxdUx0OWphT3g4Tmh1OVBwOUhxcXFqNnV0c1FkWmY1aU1abE04aXo3TVBXRHFpQXNBQ1JKa2pqblJWR01SNlB4YU5ScXQzdURnYTdydTYvZW9wUldWVFVhRHVlVFNZbDJGQURDQXIvS2NyR1lUYWYxZXIxL2ZyNnpidVdFa0R6UFo5UHBaRFRDVmpxQXNNQ25MY3FpS0ZwLzk1MmlLTTlmdkxCcysrRTJ1VG5uV1piZDNkd0VxNVdpS0k5b0swM1Q4anhIOUNFc2NKQ0kwM2t2Ly9hM3FxcWV2M2hScTljcHBiSXMzOHVjUzNSVHlOTDAxY3VYb3N2d281UjlpdG9JWGRkZi9QYTNsTkwvNS8vOEg1enBnYkRBWVd1TFVucjk1bzBrU1kxRzQ4blRwK3o5OVEyZllhNTNWM0p3N2krWHc5dGJVYUcrNHhvRjhiRlZWWlVJNlhTNy9jRkFFbTJ6MEhzYXdnSkhveTFKa29JZ1dQN0hmemlPYy83a2lhN3JxcXArWkI4YlliY2l6eG5uNDd1N2xlOXpjY0ptdHd0QXpybm9iQ0hMOHZuRlJhMWVsOTVmL0NVK0pRSU5ZWUYzdVhJRWY0Ull1Q1ZKOHZLNzd3elQ3SnlkZVo2bjZicWlLUC9xbGFKWVY2WkprcWJwYkRJSncvRGRZWnJkZW9wekxzdXlZUmlHWmZWNlBkdDEyYzl1b2lXUzlCbEJ3aFVVRU5ZeGNrU2pOeUZFVnBROHoyK3ZyMVZONjNTN2p1dWFocUVieG9jYmFENTBmZGx1TnR2dGRqR2JKVW15KzhNMEgrNGZOQzNMZHB4T3R5dktOWDV4OWNjNS80d2dZVllHWVdHR2RTRGFrdVdxTEllM3Q2cXExbW8xcjE2M2JOdHhIRW1Ta2lTSnQ5c29pZ0xmVDlOVWx1WGRxNHBWbFdYYmxtMjd0VnE5WHRjMHJhb3EzRFlFWVlGVG5qZ1NzUjVjTHBlcjFjcHhYY2QxRlVXSnduQVRSZmxqTktoaVZVVUlzUjNIcmRWYzEzVmNWMWFVcWl6TFg5MVQvNnhaTUphRUVCYVdoSWVIbUVCRlliZ09BaXJMRXVlVTBoMnJxaXhMUlZFYXJWYTlYdGROMDNWZHpqbGpESy8vSUN3QWZnRlJBN0ZqUVFzcktZcHlmbm5wT0k1aG1vWmhNTVkrZWZYM1djdDI3R0ZCV0FCOGdxcE0wenpyOXkzTDBnMURyRTgvYzZNS1pRMFFGZ0FQZ1NoS3FOVnFnNHNMVlZYVjl6ZWJIVlBUZWdCaGdXTlFsU1JKN1c2M1B4aUlMWDlSbFlycll5RXNBUFpMVlp5eDUxOTk1WHJlajV0bDc0L2FBQWdMZ0wyZ3FpckxOSjg4ZjI1WkZ0cjRRVmdBN0srcTJ1MTJ0OSszTEFzektRZ0xnRDJGRU5MdWRIcURnYXFxSDA3OEFBZ0xnUDN5bEticjdVNm4yKzFTV1Q2SVc4Z0FoQVZPQ05IMVJWRVUwelRiblU2cjIyVlY5VG1WbndEQ0F1QkJWVVVwTlUzVHRLeDJ1OTFvdGZJOEw0c0NUd1pBV0dDUFBDVzZ2amlPbytsNi8veGMwL1dxTExNc3c4TUJFQmJZRzFVeFZqSG11SzVsV1pabG5mWDdraVF4eHZaaVZvVjlmUWdMZ0IrRklFbTFlbDAzakhxejZicXVKRW43dFV1RjlqSVFGZ0FmbG9HcXBwMzErN1Y2SGUvK3dHZEE4UWpBTGxFVlJkenR2S2RGVldndkEyRUJjRENySnh6NmdiQUFBQURDQWdCQVdBQUFBR0VCQUFDRUJRQ0FzQUFBQU1JQ0FBQUlDd0FBWVFFQUFJUjFRcUNFR3NFRkVOWkJJTXN5Wnd5dFMvWmNPcklzZitZSlI4NHBwYmpMWndlZ1c4T0RwZ0NobEJaRjRTK1h3V3BWbGlXZXlYNkdTWmJsTE12V1VSU0ZvYXg4V2xKd3pqZWJ6V3d5c1YxWDEzWHAvVDJ2QU1JNk1GV2xTYklPZ3MxMkc2M1hlWjdMc293bnMxL3JDMG9sU2NyemZESWVpMkRsZWE0b241d1UyODNtN1hicjFXcVdiZGNhRGNkeE9PZlFGb1IxR0RsQUNObHV0NHZaTEUzVDdXWlRscVZNS1d5MWgyR0t3dEJmTExJOFh3ZUIrTWZQc05VSDhRVkJFQVJCdUY3cmh0RnN0YnhhalZES2NJa0doTFdmaUIyUWxlOHY1dk95TExlYmpmZ3FRMVg3cFNwWmxqaGZ6T2ZySU1qU05JbGovdDQ0OXpKZjIyNjNVUlJ0dDF0ZDExM1hQZXYxeEUxbGVQSVExaDZ0L3JnazNWeGZ4OXR0bnVkWm1vcC94TVBacXpncHNsd1V4ZWp1TGx5djh5ekw4NXdRUWlnbDkvMTlrR1U1UzlNMFNlTE5aaDBFaXFvK2ZmNWNWZFg5YlZzSVlaMklxbVJGeVpMazdkdTNaWjZuYWNvWUkvYzBYSVA3TlVpZVpTKy8vMTU0cXFxcWh4NVJDQ0dFa0lxeHpXWkRDUG43ZDkvSml0SWZESnF0VmxtVzJONkNzSGFkQTVxbXpXZXoyV1NTcG1sWmx1SWVVTHpZM2tOVnJZUGc5dWFtS3N1aUtDVE9wZDJHU2Z5dU5Fa2tRdDcrOE1QdzdxN1phZzNPejlIU0hzTGF5UTRJcFpJa3pTYVQrV3hXRk1XSDd4eFV0Vitxb2xTUjVlSGQzWEt4eUxQc3g0WFlZNFdKRUVtU3lySXN5M0tVSk5QSnBObHU5M285c1U1RXZDQ3NCMUZWVVJURDRkQ2Z6OHV5aEtIMkUxbVdpendmMzk0dUZ3dXg5TnUzVDhnNUw0dGlOaDR2cHROYXJUYTR1TkJORXk4VElhejdKTXV5OFhDNDh2MFAyeE40Sm51bktrbzMyKzEwUEQ2VU1ESEdmTjlmTHBlZTUvWFB6eDNYeFpZOGhQVkZJNkVrU1ZFWVRpZVR0ZS9MbWdaUDdXMmt0cHZOOE81dUUwV0hkVVJHV0hXejJYejNsNzg0am5NMkdEUWFEZXd3UUZpZk9QUnhYcFhsSm9wdWIyN3lMSk5sV2RFMFBKYjlYRnVGVVRRWkR1UHRWdFcwd3kxNVUxVTF5N0kzcjE2OWxhVExwMCs5V2sxVFZVS3BSQWlPb0VKWXZ6eldTWkpVRmtXV1pWRVkzbDVmVTBxcExIOWU2VE40MkRDVlpaWmxtekFjM3Q1V2pDbUtvaDdGaUNLRWUzdDl6YXJxck45dnRscTZyaXVxU2dqQmFoSEMrcWNjU0pNa0w0cjVkTHBhTGlWQ0ZGWEZrOW5EMVZNY3gzbVdyWU5nUEJvcGlrSXBWWTZ1Nm8xU1NpbWR6MmJUeWNUenZONWdvR21hYnBveXBhaUVPR2xoaVR2VHQ1dE5scWF6MlV6c2dNaTduVkp4emxIRDlhdWU0b3lGWWNpcWFqd2NicUtJeXJLMjJ5blY3c01rdExYZGJsLys5YSttWlhWN1BjTTBiZHRXRkVWOEdBanJoSEpBMUNpc2ZEL0xzdmwwbW9tTnF0MnFpakhHT1RkTTAvVzhQRTJqS09LY28wcitIOE1reTdJNFFKNWwyV1EwS3ZLY3l2S09KNytNTWNhWTQ3cVdaYVZwdW9raWFZZUhHUWdoaXFybWVYN3o1bzJzcXQxdTF6Qk4xM1YxdzVCT3NvL05hUWxMakZwUkZHMmlLRW1TeFd3bUhMRjdWYkdxcWplYnBtVTVydHRvTk5Ja1dmbCtITWZoZWwwV0JaWGxVNTV3aVRkOThYYTczV3lpS0JLdHhIWS8rYTJxaWxMcWVaNXBXZlZtMDNYZDdYWWIrSDZlNTh2Rmd1K3dhWjg0QkNaeFBoNk5pQ1ExbWszSGRYWERhRFNicDliSGhnUlJkQXAvcHl6TEVpR3I1VEtPNHpBSXR0c3RZMnpITDVVNDU2eXFxQ3kzMm0zRE1PcU5obUdhd2w5aXJWRVVSYmhleDl2dHl2ZlROSlVwSmNjMTRlS2NtNVoxOWZTcFpkdS91S2loc2l4SlVoUUVZUlJ0b21qekdMTk96bmxWVllxaU5KcE4yN2JkV3MxOEh5YnhTWXFpQ0ZhckpJNkRJRWpqV0ZhVUhZOHU0Z3VqNjNxdDBUQU5vOUZ1cTRweUlpZXJqMXhZWW1qS3N5eFlyYUl3M0c0MmFaWkpqNUVEWlZtYWxsV3YxMTNQc3gxSDAzWE8yRSsrWWU5T3pGWlZ2TjF1TnB0Z3RRclhhMW1XajJhZCtLK0U5YTdqQmVmTHhlSmRtTkwwc1ZSbEdFYXoxWEpjMTdadFZkTitZY09JRUpuU29paEVtTlpCRUFhQnJDaTcvN1NjYzFWVmJjY1I4M1RiY1lxaU9HNXRIYTJ3eE9JLzJXNFg4M2tZaGorMkU5bjVZTWlxeW5hY2RxZmp1SzZtNjZxcS91cW1LYVcwWWl6UHNpU08vZVZTbEc0ZlFWK3Rud3VMRUtJb1NwcW0vbklaK0g2VzUwV2VTenV2bkJRbFhWNjkzbXkxWE0vVE5PMWo5clkvaENuZWJwZUxSUmdFZlBkaDRweHhyaWlLcnV1MjQzUzZYZHQxMmZHZXJENUNZVkZLQ2FYYnpXWTZIbTgybS9MOUVlVmRxNnFxdUNUVmFyWE8yWmxsV1lxcWlrbkVKemxYa3FROHo4dXFtazhtSzk4djh2eWc2eTMrVVZpU0pDbUtzdDFzcHROcHRGNVhWVlVVeGU3bmtsVlZTWVRVUEs5L2ZxNXBtcUtxc2l4L1VyYUxNQlZGa2FYcGNyRllMaGE3MzIwUXo1WVFvbXFhYVZuZGJyZFdxM0ZDanUrSTRsRUpTMnlDcmxhcjZXaVVwbW5GR0dkczk3dlg0dXZlYXJYT0JnTlZWV1ZaL3NMQ1AwSklXWmFzcXRaQk1Cb09SV0lmNHE2OEVOYXo1ODh0MjQ2aTZPNzZXblNuWW84UnBxcXFaRmx1ZFRwbnZSNmxWRlZWNmYxNXJNK0xrU1JKVlZreXpoZnorV3c2TGZKODkyRVMycEpsV2RXMHMxNnYyV29SUW81cHRuVWt3aEpHOEpmTHU1dWJkOHJnWEhvTVZjbUswdWwwQmhjWEgvWm83MzNiSXQ1dWI2NnZreVNoaDFhOXhUbTNiZHR4M1hVUS9HTnpua2NKMC9uRlJhUFJJSlRlYjVqRUxpUWhaQjBFdzl2YkxNc2Vhd3RTek9nSEZ4ZXRkbHRSMWVPWWJSMjhzRVJWNFh3MnU3dTkvZFExMS8ybW9xd29UNTg5ODJvMU1jbzk5Ry9Ncyt6MitucTlYaDljMGVrakhqUmhqQm1tZVhsMTVYbmVMcVoxbkZlTS9mMnZmODNUbEQvU2tXYVJJTFZHNCtuejU0K1lJQkRXdTJpOGZ2a3lDc1BIblRVWWh2SDFOOTg4eXFZNEllVDI3ZHZsY29telpyOGFKc3UyZi9QVlYrS2x4NjdESkVrMzE5ZnoyZXh4WC9ncWl2TE43Mzh2SC9JMjZLRUtLOC96VjMvL2U1Wmxqelc1SUlSVVpkbnQ5d2ZuNTU5L1kvQTlmUkpKa3Z6RjR2YjJsblBPMFhqM0p3K0hrR2F6ZWZYMEtmK0NMYXI3bWxjR1FYRDl3dy9TNDMwU3NSUzRmUEtrMVc3dlo0UERveElXNXp4TDArczNiemFieldOdFBJdmZlMzV4MFdxM0pVcjNSQkJpWVpna3lRL2ZmeStLY1I1bEozdC9FQlBleTZ1cmVyTXBVN29ublloRm1NTDFlbmgzbHlhSkpFbWNzVWZaYk5VMGJYQiszdXAwRHV0N2NrakNxcXBxZEhjM20wNGY3ZVdMb2hpR2NkYnIxUnNOYVM5UGNvazNSRWtjajhmajlXckZKYWs2cFc3T290YVVVcW9ieHNYbHBldDU3R2ZWdVhzU0prcHBITWZpTERlcnFtcm4xaEJEbW0zYjU1ZVhydWNkU2dlYmd4SFdkck81dTduWmJEYTdQay9EbUt3b2lxcGFsdFhyOSsxRHVJWDh3K251eFh5K1hDektvaWpMVWpyZVBwWWkwMlJGa1NtdE5ScWRUc2QyblAwL3F2TGgvckhwZENwZW01WkZzZU13TWNZVVJUbS92R3kxMndmaHJNTVExaWFLYnErdjR6amVtYTFFQVlHbXFycGh1TFZhcTlXeUhLYzh0SE1Qb2daU0ZKSEhTWkpuMlpGcFM0UkRWVlhkTUdxMVdydmIxVFR0NEU3VkthcGE1UGxxdFZvdGwxbWFacnNOay9pcW4xOWNuUFg3Kysrc2ZSY1dJU1NKWTdGcHRSdGJpU1c5cG1tTzY3cXUyMnkxbEFPL3MxZThFd2pYNjNVUWJEYWJKSTRmb2taczk3c3dFaUdHWVRpTzQzcGVvOWxVRkVWTUpBODNUSVJTZjdHSXdsQjBFOWxsbUJoalQ2NnUydDB1WmxoZlJGbVcxei84RUFUQkRtekZxb3BRYWp1TzY3cVc0N1JhTFhFYTlqZ21JNVJTV1piRE1CUmRFTUwxV3ZSc09iZ0psNmhRdHl6THE5ZHQyeGI3aWNjVUppckxVUmhHNi9WMnV3MkRvS29xOHZCaDRwekxzdnpzeFF2WGRTR3N6MytJTjIvZnpxWlQ5U0VyUjhTZWxDekw0cnk3N2JyT0lXeFVmZjYraWFLa1NSS3UxM21lenlhVFF6bm9JeUpDS1cxMU9yWnRXN2J0ZVY1WlZmeEl3MFFwTGZJOFdLM0V5WEJSTWYrZ1lXS01XWmIxbTYrL1Z2ZTRVR3V2aFpVa3lYZC8vdlBEemEzRUJFclg5WGFuWTFxVzY3cWFydS9uZTZWN3p3ZENxY1Q1eXZmTHNsd3VGdUY2VGUvN2tNcjloa25UOVg2L0x5dEtyZEhRVlBVVXdpVDYyRlJWRllWaGxxYUx4VUowOFg2NE1KVmwyVDgvUDcrNGdMQStoNzkrKzIyYUpBOHhxb2krdDdadDl3WURWZE5zMnhZYlBhZFdMeTYrK25FY2l6blhiRG9WcjY3MjVPTXh4c3F5YkRTYnJYWmIwelR4OXYwRSt3S0xJelh4ZHB2bnViOWNycGJMQisxajg4MGYvNmpyT29UMXlkT3J2L3pwVC9jK08yVlZ4VGh2dGxyZGJsZlJOTkZNOHNUUHRYeG9rSklteVNhS3BwTkprZWU3YjZUNWoxUlZ4U1dwMCtrMG1rM2RNQXpEUUpoRTBXbVdaVm1XYmFMbzd1Ym1JVVlYeHRqNTVlVlpyd2RoZlJvM2I5OHVGNHQ3ekJueHB1L2k2c3B6WFhIZEczTGc1eW5CcWlyUDh6aU9oN2UzYVpyS08rOHVYNWFsb2lpOWZyOVdyMnU2THRydEkwdy9HVjZxcXNxeUxJbmptN2R2eTdLODl6RDlyLy85di9mem1lL3BKUlNFMHNWOGZpOXI5UTk5YnkrZlBuVmRWM25meWhZNThJdlBpbENxRzRhbTYxNnRsc1R4YURnVWJacDM4SlpLbkJkNSt2eTViZHZpOWxDRTZaZWZsQ1JSU2szVE5BekRxOWUzbTgxc012R1hTMDNUN2lWTVZWbHVOeHZSWkJFenJJOGlTOU0vLytsUFgzNlpUVkVVOVVianJOZHpQVTg2M2xMdkJ5Vk5rdmxzTnB0T0gyN1RwS29xcjFickRRYXU2KzZtT2MveFNTeEwwK2w0dkZndXY3eExHdWY4OHVxcTNlbEFXQi9MYXJWNjgrclZGODZ3V0ZYMXo4OEg1K2NTYnZyK3dubTRxcTU4Ly9YTGx3K1ViTDErLy9McTZrVHVmWG00bFNJaHhGOHUzNzU1STMzWlkrU2NOMXV0cTJmUHNDVDg2STJNUFAveVlaYks4bVEwbWs0bXZjR2cwK2tvaW9KcytOUWtrRGdQMSt1YjYrczhUZW5EekxBSUlkUHhlRG9lbno5NTBtZzJINlZmMVJITXNJTFZhakljYnJiYmU3bGtjMi9QRE96cERHc3lHbzFIby90YUduRE9pNklRelRRTXc4Q0s0Mk9lV0ZtV3dXbzF2TGxodTdwdVM5UXJ0THZkczE3dnZyWmpqajVNVlZtR1lYano5cTI0OHZLK2ZySmxXVjkvOHcxbVdCKzlxWEd2dFRiaWJPQjhOcHVNUnJiclhqMTlxbXFhMkgzSFlQN1RKMTlWWlZITVpyUDVkQ3FPYTlCZGlVTm9jVG1iemNiamVxTXh1THpVTkUxY3k0Z3cvZE8zV1pMS3NpeUtJdkQ5MjVzYjhZanVkLzY3dDBlZGxEME95djMvVEVWVjB5VDU2N2ZmeXJMODlQbHp3elJWVlgyM1ZEemhsQkJuOVBNc3k3SnNOcDM2eStVajN0NUtLRlVvamFMbzJ6Lzl5WGFjd2NXRllacTZya05ib21nMnp6TEcyTnZYcjdmYjdZZkxmazRINVFTakx0NTJ2ZjdYNXNOdUFBQVlNVWxFUVZUK2UxbVdPMmRualVaRDFUUmQxMCt0MGwxczB6TEdObEZVRk1YdzdpN2ViaFZGMlljY0VGZnNaVm4yK3VWTFF1bVRwMDhOMHpRTVEvdkZxNWhQSUV4RlVZakNxOUhkWFpabHNpemZ5MTRWaEhVd0NHMko3ZDVHczlsc3RYUmROeTNyRkE1L2lMTzFhWm9tY1p4bDJlMzFOV2VNeXZLK0RkZmlxTFlrU2RkdjNraVMxT2wyYS9XNjZQeHpLa2MrQ2NteUxFMlNNQXdYczVsb3NIR2FxanAxWWYzanZzbks5LzNsMG5IZFpxdGxHSVpYcXhGSytUR21oRGp4SDBWUm5xYXIxU3BZcmFxcVVoUkYydS8yV0dKMFdjem5pL25jc3UzdTJabXFxbDZ0Smk2TGw0NDNUR2tjaCt1MTcvdGlQM0Yvam5sQ1dJK3ZyZTFtczRraVhkZWI3YlpwbWw2dHB1djYwUlFIS1lwU1ZWVzRYc2R4dlBMOTdXWWpjVTRQYW1VaHdwVEU4WnZYcnczRGFEU2J0dU00cm5zMFlSSXpYODc1eXZmVEpGbXRWc2wyeXppSHB5Q3NmNWtQUlZHTWgwTk4wMnpIY1QzUDlUelhkY3V5UE5COEVIdDJvcjk3RklaUkZJa0dHSWZiY2ZSZEsvUThINDlHbXE0N2p1TzZicTFlTjB6emNMdVlFVUlVV1U2ekxBeUNLSXFpTUV6VFZJUUpyb0t3ZmowZnFxcGErWDRVaG9acDJyYmRiTFhFNFo0RDZtd3B2dTVabGswbmt6QUlralF0OHZ5Z1ZmWHpNSlZGc2ZMOWNMMFdLL3BHcyttNDdtRnBTMVFreE52dFpMa1VhOEFzejBWN1dDUWpoUFZwK3lhaUNWRzgzVVpocUJsR3U5MXVOQnBVbHZlOGQ3aEk1azBVemVmelRSUVZlVjZXNWRHbzZpZC9xYWpKRUwzcWd5QXdEYU45ZGxhdjEvZC9kUG13RVRHYnpaSTR6dEpVM0d3S1ZVRllYNVFTa2lTbGFacW1hYkxkam9mRFpydmRQVHVqc3J5SHUvSlVsaVhPTjFGMGQzdGJGa1ZSRkZWVjdXMHIwZnROZmk1SldacG1hUm9ueVIwaFo0TkJzOW1VRmFYYXY5RkY3S243eStWc09zMnpURng4ZTVRanl2M240MzRlelJrTmg5UHhlQThQWjRpWE5ZU1FScVBST3o4WExaWDM0UzJWMkt4ZHpHYmo4VmlTcENMUHBSUHVUc0U1VnhTRkVPTFZhbGZQbnRHOXVmbjV4ekNOUnFMeDBYNTJwOUIxL1pzLy9oRXpyR09ZY0lrS29PVnk2ZnUrcnV2UFg3elFEZU1ScXhuRmNQM0Q5OStIWVNoeWdIeHhnNUVqQ0pNd2xOamhVbFgxTjE5OXBUMXFiVENsdEN6TG03ZHZWNzR2UHA2SUVZNU1RbGk3eUFmeDFVK1M1THUvL0lVUTh1ekZpMXF0dHVOOEVMZlN2MzN6Sm9uakQ3OFhDZkNUcVZaWmxtVlpmdnZuUDJ1YTFyKzRhTFZhT3k0NkpZU1VSZkhYdi84OXp6THhlOUh6QzhKNnpKVGduTDkrK1pKUzJ1NTBuang5dW9NdGVVcHBzRnJkM2Q2S3k1ekJ4NFFweTdLM3IxL2Z2SG5UR3d6T2VyMGRPRXVXNWVWaWNYZHpjOUEzdkVKWXh3bGpiRHFaVENlVFdyMSs5ZXpaUTd6ckVmTTNmN0VZM2QySlV4cVBOY0VraERSYkxVVlJSbmQzOUtEZWFqSEc3bTV1Um5kM3JYWjdjSDR1eTdKMDc1TWR6Z21sdzl2YjVXSWhybjE4UkUxZlBYdDJkM056TktmTklLeDd6bVJKa3RaQjhQLzl4Mzk0dFZwL01MQWQ1MTZXYWVLeW4vRnc2QzhXWlZVOVZqY0ZLc3N5cGIxK3Y5bHVxNm82dXJzN3hIcGE4ZWptczlsOE5uTmQ5OG5UcDZxbWZhZ3kvMEpCNUhrK0dZMld5NlhFK1NPOG4rVmNqQ2VhcnAvMWV1S0U3UEQyVnZ3N2hBVitXVnVpRE9ydjMzMW4ybmF2MzNjOVR4d0UrNlI4RUJ2OFZWVVZlVDRhRG9QVjZsM3A4MjVuTkp4ejhVczF3K2ozKy9WR2cwc1NxNnBEdngxZXFHU3oyZnpYZi82blY2dDFlejNYODhSZitubGhTdUo0T3BtczEyc2lmdmh1QlNIQ1JCWEZzcXhldisvV2FoTG5qREYyWEFjdElheUgxSmFpWkduNit2dnZUZE5zdGR2MVJ1Tmo3cTBpaEVpRXNMTE15ektLb3VWc0ZnU0JxcXE3OTVRb0RsQVV4Zlc4VnFkVHE5ZkxvamgwVC8zOGFhdWFGc2Z4cTVjdkxkTnNkYnYxZWwzMGQ1Uis3YzRlOGVLdnlQUE5aak9mVHFNb2ttVlozdm5NVjVUYXFKcm11bTZuMjNVOHJ5cExkbHhoZ3JCMm1BK3FXaGJGOE81dU1oNjNPeDJ2VnJOc1c3UUEvc25PZ2xnNVZtV1pKTWwyczVsTnArSm1RRTNUZHB3QWtpUXBpbUphbHUwNG9tR3htT2dkZDVqeW9oamUzbzZIdzg3Wm1ldTZJa3cvMTlhSEJsVlJGRzNDMEY4dTR6amVmUjh4OGFsVVZiVnMyM0djVnJ0dFdGWlpGRWNjSmdocmR3a2hSdXpaZERvZURydTludTA0dG0zYmppTzA5YTd6VVpwR1ViVGRiSmFMUlZXV3UyK2xJR1pWaG1rNmp1TTRUcXZUb2JMTXF1cEVYbko5T0JZekhZOW40M0c5MmZScU5kdHhyUGRkMHNRcU1rdlQ5WHFkSnNsME9oVWJWVHRXRmFzcVFxbHBtbzdyV3BiVk9UdVRKSWt4ZHR5cWdyQWVBYkdUNVMrWGkvbGNuS25XZEwzZWFLUkpzZzZDN1hZYnJGYnZPaC90VmxWQ21yYmplSjVudTI2dFhoZlhDMWNuK1Q1ZWFDdFlyZnpsMHZVOHIxYXpiZHVyMThQMWVydmRiamViNVh3dUs4cU9WMytjYzlGbnNkM3BhSWJoZVo1WHJ4L0JaaUtFdGUrSWwwZHBtdDdkM3FxcXVvbWlORW5XNi9XanZGU3FHQ09FZExwZHk3SXN4M0ZkbHpIR1Rpa0gvdnN3eGR0dHRGNmJ0bDFicjhNd1RPSlliSHZ0V0ZWVlZabW0yV2cyZGNNUUJTV01zYklvVGkwb0VOWWpMMEFZWS9QWmpMeGZNKzQ0QjFSTnUzcnlSRllVcjFiVE5JMHhoaExIbjRkSlVkVTh5MmJUNmU1YktUREdPR09PNTRsZXVLN25pVVY2ZGFvakNvUzFGeVA1am5PZ0xNdDNiZXdOdzNYZER5L21FWXYvUmxzN1Brd2p3dEZzdFJyTnBtRVlwbVdKWWViRUo3OFExZ2toZWdPYzlYcGVyV1pabHFpV1BMVkxhUFljb1NRdVNaZFhWN1p0aTV2b3BGOHJzSUN3d0ZGUkZJV202NE4rdjFHdnE3b3VPdVJBVmZ1bXFySXNUZFBzWDEwNW52ZWg4ZzR4Z3JCT0tBZkVadTJUcDArOVdrMTQ2c04vaGVlelY2cHFOQnJkWHM5eEhFS3BPQ1NFR0VGWUo1UURuSFBIOC9yOXZsZXJpYW9GUEpaOWd6RW1FZEpvTkFZWEY3cW1TUmhPSUt6VHBONW9uRjllR29ZaGVqL0JWbnVvS2xsUmVtZG52WDVmVmhRWUNzSTZ5WEFxU3IzUnVIcjJUTndjYy9SWFdCOGlvb1NsMit1Sm5seFkra0ZZSjRmbytuSitlZG51ZEtvVEx0TFpjOFN4MFA1ZzBPNTJpNkxBY0FKaG5SQ2luWWpvcHZEc3hRdlRORkgydWJkaFVsVlYxYlRuTDE2SVM2cnpFemowQjJHQmR3a2dsbjZpNjB2Ly9GemtBR1pWK3hZbXpybW1hYktpdUo3MzVPcEtYRHlCRVFYQ09pVlZjYTRaaHFacDlYcTkyK3RSU2pHcjJqZkVpei9UTkNtbFo3MWVvOW5jbjB2R0lDeXdxeHlRSk1kMU5VMXJ0ZHUxUnVOZEt3V2t3VjZGcWFxb0xOdU9veHRHOSt6TWRWM3g2Z05oZ3JCT1NGV3lvdFE4enpTTVZyZHJtYVpvVDR3bnMyK1RYMW1XWGM5ekhLZlJiSnFXSlVwMjhXUWdyTk5LQThkMTI1Mk81M21HWlZWbFdlRzkwbDVpMmZaWnIrZDZudWg0QVZWQldDYzZ2YW8zR3AxdTl6UTdIeDBLaEJESGRjOTZ2U3pQb1NvSTY5UkJEaHpFWkxpc0tnbjFudzhQeFNNQTRCN21XWGdFRUJZQUFFQllBQUFJQ3dBQUlDd0FBSUN3QUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQVB3Q3g5VldrT0lwZzgvODZsQktLRVdjOWh4WmxpVkpPcG93N1d1TFpJSU9qdnNMSVlRUTR2ditZajRYK1hEcWs1aDlIVkVrU1pxT3g1eHo4b2tKUmZZMUFmZFVXQXJTWUk4blZtRVkzdDNjSkhFc3pJVm5zbStQUU1RbENJTGI2K3Npeno5blhxYnNxeG4yZEI2cjRIYU1mWnhZSlVueTV2WHJORW1ncW4xR2pDaHBIQlA2T1hzK25ITVZ3dm9rVE11cXFrcUJ0dlpreWNONVdaYmYvKzF2YVpwU1NxR3F2UTFUSE1kM056ZWJLSkpsK2ZOczlTRUJJYXhQZVY2bWllL2ZQc3lwV0ZsS2hQenQyMitGcWlqRmErVjloREdXWmRuTjlmVW1ER1ZLdjNCamtURm0yVGFFOVFsUVNoM1hGYnNrK0RvK3l1cXZMQW91U1Q5OC8zMFVSVkRWM29hcEtJcXFMTisrZWJPSkl2ckZxdm9BaFBYSms5dCt2Ly9xKysveEVtckhDU0JKVWxtV1JaNlBoc09WNzk5akRvQjdqQk1sSkV0VHh0aTlxNHB6M215MUZFWGhlMWxhdEwrYlJMYmpJRlYycjZva1NaYnorV0krSjRUZytYOXNrdTh3VEpUU05FbktxaHJlM0t6WDYzc2ZVYXFxNnA2ZDhYMHRoTnhmWVNtcU9yaTR1SG56UmxGVnBNU0Q1b0JZV1d3M205VnE1UzhXakRHbzZ0T2U0YTVVbGFWcG1xYno2ZFQzZmZvQUl3cm4zSFhkdlYwUDdyV3dKRWxxTnB1TDJTekxNdXhrUFJDVTBySXNvekFNVnFzZ0NJbzhWeFFGdHRxN0VZWFNJczlGbUZhK3p6bC91Qmc5ZWZac245TnRyNFdscU9yRmt5ZXZYcjZFc080ZFdaYkxzbHd1RnV2MU9seXY4eXhURkFWMUpIdW9xcklvMXN0bHNGcUY2M1ZabHJJc1AxQTZGRVZ4Zm5GaEdNWmVPMkhQWSthNmJuOHdHQTJIR1BidlVWV01zZmxzRmdaQkZFVjVuc3VVUWxYN09hSUVpNFh2Ky9GMm0yZVovSkNUMzdJc085MXViekRZODhuQnZuOU5xU3ozQmdQTytXZzRSRko5K1FLUUVES2ZUdGRCc05sdWl6ekh6dnAraG9senZwak5Gb3RGbHFaWmxzbXkvS0JuUDhxeWJMZmJGMCtleUxMTTk3dnZ3TDRyZ0hOT0tSMWNYRWlTTkI2TlVHYjkyVGtneS9KMFBQWjlQNG5qc2l6Sis4T3hZTzlHbE5sc01aL25XWmJuK1E3S1NzcXliSGM2RjVlWHFxcnl2ZStTY2dCekZuSFd2SDkrcm1uYWFEZ3NpNEppVXZBcCt5Q0tvaXdXaStsb2xHVlpXWmE3T1FiSUdJTVFQMjFFVVpUSmFMU1l6L004TDR0Q3ZCWjg2TXppblBmUHp3Zm41NFFRZmdnOW5RNWprU1djMWVwMDZzM203YzNOYXJuRTRkdVBVWlVzeSt2MSt1YnQyN0lvZHFhcXFxbzBUZXQwdStQaFVGYVVVd2dULzdJd2laRjRNWnRsZVY3dEtreGxXVHFPYy9YOHVXRVlZaEY2RUk5YU9hd01WQlRsNmJObmcvUHp0ei84c04xc01JYi9LMlJaM202M1A3eDZWZVM1K0M3dVJsV3FxdjdtNjY5dDJ5YVMxR3kzNzY2djEwRnc5SlYwbi8xa05VMmJUYWVUMFNqTHNwMkZpVEdtS01ydmZ2OTd5N1pGQnZIRDZaZDVlTnZZaEJCZDEzLzMrOS9IY1N4YW5VQmJQMWxjcEVueTV2WHJlSWNuTWF1cTBuWDkyWXNYdFZydHd6K2Fwdm5WNzM2MzNXNUh0N2ZyOVJydlRQNHA4V1I1SFFSL3U3bEowM1RISzVXdmZ2dGIxL01POWJrZDZpU2NjOU0wLysxLy9zOTFFTnhlWDZkcGloVWlJU1JOa3R1Ym0zVVFQRnkxenMrSGE4TXcraGNYeldiekY4ZHEyN2EvL3VhYktJcUd0N2VpN1FuQ2xNVHh6WnMzbSsxMloyT3RVTlhUNTg5YjdUWmo3SUJGZjlDeHI2cktjZDAvL3Z1L3I1Ykw0ZDJkYUN4M21tbVFKb2s0cml6TDhzNmtvR2xhYnpCb3RkdUVrUDhtRGNTQmoyLys4SWYxZW4xM2M1UHRjRTZ4SXgxOGZKalNkSGg3NnkrWHFxcnV6RmF5TFBmUHozdjlmbFZWQjIycmd4ZldPMjJWWmExZWI3WmFpL2w4TWg1bmFjcFA1ZzRMem5tYXByUEpaREdmNzZ5ekFpRkVWZFh1MlZuMzdFd2loREgycXc5Y3ZKRHlQTy9mL3YzZkY3UFpaRHpPcyt6UWsrZkhCL0tyWVdJc3piTFplRHlkVGxWVlZYZXlxU2YyZkZ2dDl2bmxwV2pCZUF4TDZhUEoyN0lzbTYxV3M5VmF6dWV6MlN4TDA2cXFqblhDUlFpcHFpcExVMUd6STcyL0hPV2hIektsVkRlTWVxTWhYb1JYVmZWSjl4dHh6c3VpYURTYjNiT3owWERvTDVkcGtoeDltSklrOFJlTDhXaWtxcXFtYWJzSms2YnJJa3lVMHFxcWp1YVJIdFUrcUJpeFc5MXVxOU5aekdiTHhTSkpVL0dlK0hoeWdOS3FMTk1rOFpmTDJYVDZvT2RnZjVJRHR1Tll0djNrNmtvc3hyL2twK1Y1M2owN0c1eWYzMTVmYnphYjdXWnpWTm9paEVoU1daWnBIUHUrUHhtUFpWbmVtYXBNMC9UcTliTmVUOU8wc2l5UHlWYkhKcXgzMnFvcVNaSTZaMmZ0czdQcGVCeUY0U2FLeXJJODlKZUpZcWdNZzJBVFJkUFJpTzFFVmFMKzA2dlZETU80dkxwNk42dTZwNStjNTNuLy9GeVc1ZHVibXlTT296QThqakFWZVI3SDhYcTFtczFta2lUdFlBSElHU09VT283anVHN243TXd3akxJc2oyTU5lUHpDRW9pODZ2WDdaNzNlWkRSS2ttVGwrd2RhZmkzcStwYUxSWmFtNCtGUXFPcWhYY1VZSTRUVUd3M0ROQWNYRi9MRHJDd1lZNHl4ODRzTHp2bGtQTjV1TmxFWUZrVnhpQzhUWlZuTzh6d01ndlY2dlp6UHE1MjBGUk9yaWxxOWJscFdwOXMxVGJPcXFxTlUxWkVMNngrMTFUOC9aNHlabHBXbDZXSSs1NHdkeXVFZTBVeDlNWnZsV1RZZWowVnJ2WjJweXJidGRyZXJhVnBWVlErNnNuZ1hwc0dnTEV0L3VZekNNRnl2RDBoYlZKWTU1NHY1UEFyRGxlOVhaVWtmL2wydGNIMnIxVElzcTkzcEdJYkJHRHRpVmIxYmJRZFJKSjBHc2l4WFpibGNMT0k0bnMvbmZPLzdhbkxPNjQyR3Fxckx4VUkwUXRyRmFwcVFXcjB1L2lOeVlNZXZYS25vQUxWZXI0TWdXSzJxcXRyek1CRkNiTnMyVEhPNVdGUlZ0WU1wUEdlc0tNdE90MnRaVnF2ZDFneUQ3enhNRU5idUJzTWl6OFAxT2d6RC9XOEhUQWpaa2FvWUUzNXN0RnF1NitxNkxnb1JIdXV2RmwyYk4xRVVyRmJMeFdJMzd4YSs4QUh1UWxXY2wwWFJiTGU5V3EzZWFEeHVtQ0NzblE3amVaN0hjZXd2RnF2bGt1MTlQanpvY0YweFZtODBXcDJPNnppcXBrbjdjYmlNRUNJUlVoWkZ2Tm40eStWOFBqL2wyOFlZWTFWVjFldjFkcmRyTzQ2dTY5SkJuUUdFc080akg4UTlNWEU4bjgxV3ZpK2RXSXNvVWJ4V3E5ZlArbjNic2hSVjNjTWVJKy9DVkJSWmxrM0g0OFZpb1p4R0I0aC9EQk9yS3R0eGVvT0JzMDhqQ29UMU9QbkFPV2VNcFVreUdZMVdxOVdKOUFnc3k5SjJuTXNuVDB6VEZFMWc5amtIUkVTS3Nxeks4dWJ0MjEwZWxueGtWVEZtbXViZzRzS3IxY1EzODJSVkJXSDl3dmNqejdMcnQyK2pNRHppRldKVlZicGhQUHZOYjB6RE9NUldpRlZWc2FwNi9lcFZ2TjFTUXFRajFSWmpUTmYxd2ZsNW85VVNGYUVucmlvSTYxL1BQb3JpNWQvK2RuelhpekhHVkVWNTl0VlhsbVVkK3VLWGMxN2srYXRYcjdJNEpzZTFrT2VjSzRweWZua3BPaXVnRFFtRTlYRWplVmwrOTVlL0hNZkpCdkdXN2VyWnMzcWpjVXdETlNGa3U5MitmZk1tTzVwR0hZUmNQWDE2NkUxZ0lLeEh5NGM4ei8vMjdiZnNrT3RjWkZrZW5KOTNlajNHbUhTTXl3cEthUkFFdzl2YncyMWNJemFubmo1LzNtZzJzZlNEc0w0MEh6YWJ6WnZYcjZ1eVBLQnhUM1FYNlhTN290RC91Tk5BWE5uZ0w1ZWo0YkRJODBNSms1ajVjczZmUEhuU2FMZXhwdzVoM1ZzK0VFb0QzeDhOaDN2ZXlFbmtnS3dveldiei9QTHlIbzhySDhUUVFnaFpMaGJqNFZDYy90M2JkYUlJRTZHMDErOTN1bDFDS2NjYUVNSzY5M3lRSkdtNVdNeG5zeXhOeGJtdC9Va0pjYm1BcXFxTlpyTTNHTWl5ZkRxcStxY3d5VExuZk9YNzQ3dTdxcXJFN1g1N3BTb3F5NnFxTmx1dFhyOVBaWm1kWkpnZ3JCMGhybnBmTGhiK2NwbkVjVkVVai81eVhhaEsxN1I2czlrNU94T05rQkFtMGVKaVBwM21lUzd1VDM1OFZWRnFtS1pYcTMzb1Y0V0VnckIyZ2FJb1JWbXVsc3RndGRwdU5ubWVQMG8raUxPUXBtWFZhN1ZXdDZ2cmVsVlYyQWY1aWJibTgzbmcrL0YyVytRNWZhUXdVVXB0Mi9acXRXYW5ZNWxtVVJTSURvVDFDTm9xaTJMcCs1c3dERmFyM1J4VS9wQURoQkRYODd4YXJkbHE2YnJPVHViSS9tY3NFaGxqeS9rOENzTjFFT3ltcDhJL2hzbHgzWHE5WG1zMGJOc3V5eEpoZ3JBZWRSaFhsS29vL09VeVRwTDVkUHJRSFNERWxyL25lYlZHbzk1b1BFb1RtQU9kYlJWRnNRNEMwYmptb2ZzcmZHaXRWNnZYWGM5ekhBZXFnckQyYkJpdnFwWHZKM0U4R1kzNEExd01JUTZYdVo3WDduUnN4N0VzQzZyNkRHMWxXYmJkYnYzbE12QjlzYTkwNzZyaW5EZWF6VnE5N3JxdWlUQkJXUHVyTFVxcnFvckNNQXJEeVhnczZvUHVSMVZWWlRuTytjV0ZwdXVXWloxYUk2VDcvTklUUWlsTjAxUmNPM1NQalRwRUE0eFd1OTFvTm0zSE1Rd0RZWUt3RGtOYlJWR2tTU0pxSUw1RVcySldwUnZHcytmUFpVV0JxdTVSVzRTUUxNdnlQSjlOSnN2RjRrdjZiUWxWMVJ1TmJxOW5XWloyMmsxZ0lLeERUWW15TFBNc200ekgvbkpKQ2Zta1k3cWM4NnFxVE11NmV2Wk0wN1NUN2RuMjRFR1NwS0lvOGpTZHpXYno2VlQwQmZ1RU1FbFNWWmFPNjE1Y1hocUdvV2dhUVpnZ3JJTkdYR2sxdkwwTlBycmZWbEVVNGhKQTA3S1V2ZTlYZFRSaFNwTmtPcG5NcDFOVjAzNDFUR0tkTG5yMUdLWjVzazFySWF3amhmTTBUY2ZqOFdJMis5Qi83a05XQ0IrSmxZWG5lZjJMQzgvejBGcmtNYUxFMHpTZGpzZUwrZnpEV3Y3SFFMeVBVMWxWcnV1ZVAzbml1QzZDQkdFZGVVcUU2M1VTeDBtUzVIbk9HUk1IbFhYRE1DM0w4enhOMXpHZjJvY0pWeGlHOFhhYkprbFJGS3lxS0tXeW9waVdaUmlHVjZ0cG1vWXdRVmdBQVBETFVEd0NBQUNFQlFBQUVCWUFBTUlDQUFBSUN3QUFJQ3dBQUlRRkFBQVFGZ0FBUUZnQUFBZ0xBQUFnTEFBQWdMQUFBQkFXQUFCQVdBQUFBR0VCQUNBc0FBQ0FzQUFBQU1JQ0FFQllBQUFBWVFFQUFJUUZBSUN3QUFBQXdnSUFBQWdMQUFCaEFRQUFoQVVBQUJBV0FBRENBZ0FBQ0FzQUFHRUJBQUNFQlFBQUVCWUFBTUlDQUFBSUN3QUFJQ3dBQUlRRkFBQVFGZ0FBUUZnQUFBZ0xBQUFnTEFBQWdMQUFBQkFXQUFCQVdBQUFBR0VCQUNBc0FBQ0FzQUFBQU1JQ0FFQllBQUFBWVFFQUFJUUZBSUN3QUFBQXdnSUFBQWdMQUFCaEFRQUFoQVVBQUJBV0FBRENBZ0FBQ0FzQUFHRUJBQUNFQlFBQUVCWUFBTUlDQUFBSUN3QUFJQ3dBQUlRRkFBQVFGZ0FBUUZnQUFBZ0xBQUFnTEFBQWdMQUFBQkFXQUFCQVdBQUFBR0VCQUNBc0FBQ0FzQUFBQU1JQ0FCd04vejl0ckhpMHFZWndzZ0FBQUFCSlJVNUVya0pnZ2c9PSc7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RGF0YS5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNzIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZnVuY3Rpb24gZm9ybWF0SXRlbXNPcHRpb25zKGl0ZW1zKSB7XFxuICAgIHJldHVybiBpdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcXG4gICAgICAgIHJldHVybiB7IHZhbHVlOiBpdGVtLmlkLCBsYWJlbDogaXRlbS5pZCArIFxcXCIgKFxcXCIgKyBpdGVtLnByaWNlICsgXFxcIiBcXFwiICsgaXRlbS5jdXJyZW5jeSArIFxcXCIpXFxcIiB9O1xcbiAgICB9KTtcXG59XFxuZXhwb3J0cy5mb3JtYXRJdGVtc09wdGlvbnMgPSBmb3JtYXRJdGVtc09wdGlvbnM7XFxuZnVuY3Rpb24gZ2V0SXRlbXNGcm9tTGluZShsaW5lcywgaW5kZXgpIHtcXG4gICAgcmV0dXJuIGxpbmVzLmZpbmQoZnVuY3Rpb24gKGxpbmUpIHtcXG4gICAgICAgIHJldHVybiBsaW5lLmlkID09PSBpbmRleDtcXG4gICAgfSkuaXRlbXM7XFxufVxcbmV4cG9ydHMuZ2V0SXRlbXNGcm9tTGluZSA9IGdldEl0ZW1zRnJvbUxpbmU7XFxuZnVuY3Rpb24gY2FsY3VsSXRlbUFtb3VudChsaW5lLCBpdGVtKSB7XFxuICAgIHZhciBkaXNjb3VudCA9IGxpbmUuZGlzY291bnQ7XFxuICAgIHJldHVybiByb3VuZERlY2ltYWwobGluZS5xdWFudGl0eSAqIGl0ZW0ucHJpY2UgKiAoMSAtIChkaXNjb3VudCA/IGRpc2NvdW50IDogMCkgLyAxMDApLCAyKTtcXG59XFxuZnVuY3Rpb24gZGlzcGxheUl0ZW1BbW91bnQobGluZSkge1xcbiAgICBpZiAoIWxpbmUuaXRlbSkgcmV0dXJuIFxcXCIwIFxcXCIgKyBsaW5lLml0ZW1zWzBdLmN1cnJlbmN5O1xcbiAgICB2YXIgaXRlbSA9IGxpbmUuaXRlbXMuZmluZChmdW5jdGlvbiAoaXRlbSkge1xcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT09IGxpbmUuaXRlbTtcXG4gICAgfSk7XFxuICAgIHJldHVybiBjYWxjdWxJdGVtQW1vdW50KGxpbmUsIGl0ZW0pICsgXFxcIiBcXFwiICsgaXRlbS5jdXJyZW5jeSArIFxcXCIgXFxcIjtcXG59XFxuZXhwb3J0cy5kaXNwbGF5SXRlbUFtb3VudCA9IGRpc3BsYXlJdGVtQW1vdW50O1xcbmZ1bmN0aW9uIGRpc3BsYXlUb3RhbEFtb3VudChsaW5lcykge1xcbiAgICB2YXIgdG90YWwgPSBsaW5lcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgbGluZSkge1xcbiAgICAgICAgaWYgKCFsaW5lLml0ZW0pIHJldHVybiBhY2M7XFxuICAgICAgICB2YXIgaXRlbSA9IGxpbmUuaXRlbXMuZmluZChmdW5jdGlvbiAoaXRlbSkge1xcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmlkID09PSBsaW5lLml0ZW07XFxuICAgICAgICB9KTtcXG4gICAgICAgIHJldHVybiBjYWxjdWxJdGVtQW1vdW50KGxpbmUsIGl0ZW0pICsgYWNjO1xcbiAgICB9LCAwKTtcXG4gICAgcmV0dXJuIHRvdGFsICsgXFxcIiBcXFwiICsgbGluZXNbMF0uaXRlbXNbMF0uY3VycmVuY3k7XFxufVxcbmV4cG9ydHMuZGlzcGxheVRvdGFsQW1vdW50ID0gZGlzcGxheVRvdGFsQW1vdW50O1xcbmZ1bmN0aW9uIHJvdW5kRGVjaW1hbChudW1iZXIsIHByZWNpc2lvbikge1xcbiAgICB2YXIgdG1wID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiB8fCAyKTtcXG4gICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogdG1wKSAvIHRtcDtcXG59XFxuXFxuLyoqKi8gfSksXFxuLyogMjczICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbmV4cG9ydHMuZGVmYXVsdCA9IHtcXG4gICAgYW1vdW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQW1vdW50JyxcXG4gICAgICAgICdmci1GUic6ICdNb250YW50J1xcbiAgICB9LFxcbiAgICBkZXNjcmlwdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rlc2NyaXB0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXNjcmlwdGlvbidcXG4gICAgfSxcXG4gICAgZGlzY291bnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNjb3VudCAoJSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhYmFpcyAoJSknXFxuICAgIH0sXFxuICAgIGlkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUkZRIElEJyxcXG4gICAgICAgICdmci1GUic6ICdJZGVudGlmaWFudCBSRlEnXFxuICAgIH0sXFxuICAgIGlzc3VlX2RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJc3N1ZSBEYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEYXRlIGRlIGNyw6lhdGlvbidcXG4gICAgfSxcXG4gICAgaXNzdWVfdGltZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lzc3VlIFRpbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0hldXJlIGRlIGNyw6lhdGlvbidcXG4gICAgfSxcXG4gICAgbGluZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xpbmUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xpZ25lJ1xcbiAgICB9LFxcbiAgICBsaXN0X2l0ZW1zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGlzdCBvZiBpdGVtcycsXFxuICAgICAgICAnZnItRlInOiAnTGlzdGUgZGVzIGFydGljbGVzJ1xcbiAgICB9LFxcbiAgICBub3RlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm90ZScsXFxuICAgICAgICAnZnItRlInOiAnTm90ZSdcXG4gICAgfSxcXG4gICAgcXVhbnRpdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdRdWFudGl0eScsXFxuICAgICAgICAnZnItRlInOiAnUXVhbnRpdMOpJ1xcbiAgICB9LFxcbiAgICByZnFfaW5mbzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JGUSBpbmZvJyxcXG4gICAgICAgICdmci1GUic6ICdJbmZvIGR1IFJGUSdcXG4gICAgfSxcXG4gICAgc2VsZWN0X2l0ZW06IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYW4gaXRlbScsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5leiB1biBhcnRpY2xlJ1xcbiAgICB9LFxcbiAgICB0b3RhbF9hbW91bnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUb3RhbCBhbW91bnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vbnRhbnQgdG90YWwnXFxuICAgIH0sXFxuICAgIHZhbGlkYXRpb25fY29kZV9sYWJlbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSB2ZXJpZnkgeW91ciB2YWxpZGF0aW9uIGNvZGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHbDqXJpZmllciBsZSBjb2RlIGRlIHZhbGlkYXRpb24nXFxuICAgIH1cXG59O1xcblxcbi8qKiovIH0pXFxuLyoqKioqKi8gXSk7XCIsXCJieXRlQ29udGVudFwiOm51bGx9XX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NzU5ODg2MTUxNTV9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVBPLUJ1aWxkRW1haWwiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVBPLUJ1aWxkRW1haWxcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQnVpbGQgdGhlIGVtYWlsIG5vdGlmaWNhdGlvbiBzZW50IGJ5IHRoZSBIYW5kbGVQdXJjaGFzZU9yZGVyIFdvcmtmbG93IFN0ZXBcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NzU5ODg2MTUyMzAsXCJyZXZpc2lvbklkXCI6XCIxZWE1OWE2MmZhNzcwOTJjZWNmNDUwMTVhZWUwZmI5MFwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGphdmEubmV0LlVSTEVuY29kZXJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ1N1YmplY3QnLCAnUGxhdGZvcm0gNiBEZW1vIEFwcCAtIFB1cmNoYXNlIE9yZGVyIHRvIHJldmlldydcXG5cXG5wNi5waXBlbGluZS5wdXQgJ0Zyb20nLCAnbm8tcmVwbHlAcGxhdGZvcm02LmlvJ1xcblxcbmRlZiBpbnN0YW5jZUlkID0gcDYuY29uZmlndXJhdGlvbi5nZXQoXFxcImluc3RhbmNlLmlkXFxcIilcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpdGVtSWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGl0ZW1QayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGl0ZW1JZHMpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5leGlzdHMoaXRlbVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5cXG5kZWYgcG9ydGFsQmFzZVVSTCA9ICdwb3J0YWwucGxhdGZvcm02LmlvJ1xcbmlmICgnZGV2Jy5lcXVhbHMoaW5zdGFuY2VJZCkpIHtcXG4gICAgcG9ydGFsQmFzZVVSTCA9ICdkZXYucG9ydGFsLmFtYWx0by5jb20nXFxufVxcblxcbmRlZiBodG1sTGluayA9IFxcXCJodHRwczovLyRwb3J0YWxCYXNlVVJMLyMvZWRpdC10cmFuc2FjdGlvbi8kaW5zdGFuY2VJZC9wNl9kZW1vLlRyYW5zYWN0aW9ucy9cXFwiK1VSTEVuY29kZXIuZW5jb2RlKCdbXFxcIicrdHJhbnNhY3Rpb25JZCsnXFxcIl0nLCAndXRmLTgnKVxcbnA2LnBpcGVsaW5lLnB1dCAnaHJlZicsIGh0bWxMaW5rLCAndGV4dC9wbGFpbidcXG5cXG5kZWYgZG9jTnVtYmVyID0gdHJhbnNhY3Rpb25JbmZvLkJ1c2luZXNzRG9jTnVtYmVyLnRleHQoKVxcbmRlZiB0b3RhbEFtb3VudCA9IHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5maW5ke2l0LktleSA9PSAnVG90YWwgQW1vdW50J30uVmFsdWUudGV4dCgpXFxuXFxuaWYgKGRvY051bWJlciA9PSBudWxsKSB7XFxuICAgIGRvY051bWJlciA9ICcnXFxufVxcblxcbmlmICh0b3RhbEFtb3VudCA9PSBudWxsKSB7XFxuICAgIHRvdGFsQW1vdW50ID0gJydcXG59XFxuXFxuXFxucDYucGlwZWxpbmUucHV0ICdkb2NOdW1iZXInLCBkb2NOdW1iZXIsICd0ZXh0L3BsYWluJ1xcbnA2LnBpcGVsaW5lLnB1dCAndG90YWxBbW91bnQnLCB0b3RhbEFtb3VudCwgJ3RleHQvcGxhaW4nXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU3NTk4ODYxNTIzMH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uUmVqZWN0T3JkZXIiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVBPLUhhbmRsZUFjdGlvblJlamVjdE9yZGVyXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkhhbmRsZSBQTyBUcmFuc2FjdGlvbkluZm8gdXBkYXRlcyBmb3IgYSBSZWplY3RlZCBPcmRlciAtIFNjcmlwdCBjYWxsZWQgYnkgdGhlIEhhbmRsZVB1cmNoYXNlT3JkZXIgV29ya2Zsb3cgU3RlcFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU3NTk4ODYxNTI5MSxcInJldmlzaW9uSWRcIjpcIjgyOWE1MGJiYjhmNTY2MTE0MzVkNmVjMzUwNjNlNWUzXCIsXCJtYWluU2NyaXB0XCI6XCJpbXBvcnQgZ3Jvb3Z5Lmpzb24uKlxcbmltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdFxcblxcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIGl0ZW1JZHMgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG5kZWYgaXRlbVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgaXRlbUlkcylcXG5cXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmV4aXN0cyhpdGVtUGspXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoKVxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBzbHVycGVyLnBhcnNlVGV4dCh0cmFuc2FjdGlvbkluZm9Db250ZW50KVxcblxcbmRlZiBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKClcXG5TaW1wbGVEYXRlRm9ybWF0IHRyYW5zYWN0aW9uX3NkZiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KFxcXCJ5eXl5TU1kZCdUJ0hIOm1tOnNzXFxcIilcXG5cXG5kZWYgZm9ybWF0ZWREYXRlID0gdHJhbnNhY3Rpb25fc2RmLmZvcm1hdChjdXJyZW50RGF0ZSlcXG5cXG5kZWYgcmVhc29uID0gcDYucGlwZWxpbmUuZ2V0ICdyZWFzb24nXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gJ1JlamVjdGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZSA9IHJlYXNvblxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IGZvcm1hdGVkRGF0ZVxcblxcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNDb2RlID0gJ0hhbmRsZWQnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c01lc3NhZ2UgPSAnJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNEYXRlID0gZm9ybWF0ZWREYXRlXFxuXFxuZGVmIHRyYW5zYWN0aW9uSWQgPSB0cmFuc2FjdGlvbkluZm8uSWQudGV4dCgpXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoJ3A2X2RlbW8uVHJhbnNhY3Rpb25JbmZvJywgdHJhbnNhY3Rpb25JZClcXG5cXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTc1OTg4NjE1MjkxfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiSGFuZGxlUXVvdGVUcmFuc2FjdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkhhbmRsZVF1b3RlVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIHRoZSByZWNlcHRpb24gb2YgYSBRdW90ZSAoZmxpcCB0byBhIFB1cmNoYXNlT3JkZXIgVUJMIERvY3VtZW50LCBjcmVhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyBUcmFuc2FjdGlvbkluZm8sIHN0b3JhZ2UgdG8gZmlsZSBzeXN0ZW0pIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgQmxvY2tjaGFpbkV2ZW50SGFuZGxlciBzY3JpcHRcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NzU5ODg2MTU0NTEsXCJyZXZpc2lvbklkXCI6XCI1YWVlZDgzZjUxMmZjMTQ0MGM4OTU4Mzg0ZDU4NDFmM1wiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmltcG9ydCBqYXZhLnV0aWwuVVVJRFxcbmltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5cXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG5kZWYgcXVvdGVDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICd1YmwnXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoZmFsc2UsIHRydWUpXFxuZGVmIHF1b3RlID0gc2x1cnBlci5wYXJzZVRleHQocXVvdGVDb250ZW50KVxcblxcbmRlZiBpbnN0YW5jZUlkID0gcDYuY29uZmlndXJhdGlvbi5nZXQoXFxcImluc3RhbmNlLmlkXFxcIilcXG5cXG4vLyBDYWxjdWxhdGUgaXNzdWUgZGF0ZSBhbmQgdGltZVxcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuZGVmIGlzc3VlRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eS1NTS1kZFxcXCIpLmZvcm1hdChub3cpXFxuZGVmIGlzc3VlVGltZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwiSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcblxcbmRlZiBzZWxsZXJOYW1lID0gcXVvdGUuU2VsbGVyU3VwcGxpZXJQYXJ0eS5QYXJ0eS5QYXJ0eU5hbWUuTmFtZS50ZXh0KClcXG5kZWYgYnV5ZXJOYW1lID0gcXVvdGUuT3JpZ2luYXRvckN1c3RvbWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuZGVmIHRvdGFsQW1vdW50ID0gcXVvdGUuUXVvdGVkTW9uZXRhcnlUb3RhbC5QYXlhYmxlQW1vdW50LnRleHQoKVxcbmRlZiB0b3RhbEN1cnJlbmN5ID0gcXVvdGUuUXVvdGVkTW9uZXRhcnlUb3RhbC5QYXlhYmxlQW1vdW50LidAY3VycmVuY3lJRCcudGV4dCgpXFxuXFxuZGVmIHF1b3RlSWQgPSBxdW90ZS5JRC50ZXh0KClcXG5kZWYgY29tbWVudHMgPSBxdW90ZS5Ob3RlLnRleHQoKVxcblxcbmludCBuYkxpbmVzID0gcXVvdGUuUXVvdGF0aW9uTGluZS5zaXplKClcXG5cXG5kZWYgdHJhbnNhY3Rpb25UeXBlID0gJ1B1cmNoYXNlT3JkZXInXFxuZGVmIHB1cmNoYXNlT3JkZXJJZCA9IFVVSUQucmFuZG9tVVVJRCgpLnRvU3RyaW5nKClcXG5kZWYgc3RhdHVzID0gJ1JlY2VpdmVkJ1xcbmRlZiBzdGF0dXNNZXNzYWdlID0gJ1JlY2VpdmVkIGJ5IERlbW8gQXBwJ1xcblxcbmRlZiBzb3VyY2VVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUXVvdGUvXFxcIiArIHF1b3RlSWQgKyBcXFwiLnhtbFxcXCJcXG5kZWYgdGFyZ2V0VVJJID0gXFxcImZpbGU6Ly8kUDZfREFUQS9yZXNvdXJjZXMvZG9jdW1lbnRzL1B1cmNoYXNlT3JkZXIvXFxcIiArIHB1cmNoYXNlT3JkZXJJZCArIFxcXCIueG1sXFxcIlxcblxcbmRlZiBvcmRlckxpbmVzID0gJydcXG5cXG5xdW90ZS5RdW90YXRpb25MaW5lLmVhY2ggeyBteUxpbmUgLT5cXG5cXG4gICAgb3JkZXJMaW5lcyArPSBcXFwiXFxcIlxcXCI8Y2FjOk9yZGVyTGluZT5cXG4gICAgPGNiYzpOb3RlPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5Ob3RlLnRleHQoKSl9PC9jYmM6Tm90ZT5cXG4gICAgPGNhYzpMaW5lSXRlbT5cXG4gICAgICA8Y2JjOklEPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5JRC50ZXh0KCkpfTwvY2JjOklEPlxcbiAgICAgIDxjYmM6UXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5RdWFudGl0eS4nQHVuaXRDb2RlJy50ZXh0KCkpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LnRleHQoKSl9PC9jYmM6UXVhbnRpdHk+XFxuICAgICAgPGNiYzpMaW5lRXh0ZW5zaW9uQW1vdW50IGN1cnJlbmN5SUQ9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5MaW5lRXh0ZW5zaW9uQW1vdW50LidAY3VycmVuY3lJRCcudGV4dCgpKX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5MaW5lRXh0ZW5zaW9uQW1vdW50LnRleHQoKSl9PC9jYmM6TGluZUV4dGVuc2lvbkFtb3VudD5cXG4gICAgICA8Y2FjOlByaWNlPlxcbiAgICAgICAgPGNiYzpQcmljZUFtb3VudCBjdXJyZW5jeUlEPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUHJpY2UuUHJpY2VBbW91bnQuJ0BjdXJyZW5jeUlEJy50ZXh0KCkpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlByaWNlLlByaWNlQW1vdW50LnRleHQoKSl9PC9jYmM6UHJpY2VBbW91bnQ+XFxuICAgICAgICA8Y2JjOkJhc2VRdWFudGl0eSB1bml0Q29kZT1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlByaWNlLkJhc2VRdWFudGl0eS4nQHVuaXRDb2RlJy50ZXh0KCkpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlByaWNlLkJhc2VRdWFudGl0eS50ZXh0KCkpfTwvY2JjOkJhc2VRdWFudGl0eT5cXG4gICAgICA8L2NhYzpQcmljZT5cXG4gICAgICA8Y2FjOkl0ZW0+XFxuICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5JdGVtLkRlc2NyaXB0aW9uLnRleHQoKSl9PC9jYmM6RGVzY3JpcHRpb24+XFxuICAgICAgICA8Y2JjOk5hbWU+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLkl0ZW0uTmFtZS50ZXh0KCkpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6SXRlbT5cXG4gICAgPC9jYWM6TGluZUl0ZW0+XFxuICA8L2NhYzpPcmRlckxpbmU+XFxuICAgIFxcXCJcXFwiXFxcIlxcbn1cXG5cXG5cXG5kZWYgb3JkZXJDb250ZW50ID0gXFxcIlxcXCJcXFwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIiBlbmNvZGluZz1cXFwiVVRGLThcXFwiPz5cXG48T3JkZXIgeG1sbnM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOk9yZGVyLTJcXFwiXFxuICB4bWxuczpjYWM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkFnZ3JlZ2F0ZUNvbXBvbmVudHMtMlxcXCJcXG4gIHhtbG5zOmNiYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQmFzaWNDb21wb25lbnRzLTJcXFwiPlxcbiAgPGNiYzpVQkxWZXJzaW9uSUQ+Mi4xPC9jYmM6VUJMVmVyc2lvbklEPlxcbiAgPGNiYzpDdXN0b21pemF0aW9uSUQ+dXJuOnd3dy5jZW5iaWkuZXU6dHJhbnNhY3Rpb246YmlpY29yZXRyZG0wMDE6dmVyMS4wPC9jYmM6Q3VzdG9taXphdGlvbklEPlxcbiAgPGNiYzpQcm9maWxlSUQgc2NoZW1lQWdlbmN5SUQ9XFxcIkJJSVxcXCIgc2NoZW1lSUQ9XFxcIlByb2ZpbGVcXFwiXFxuICAgID51cm46d3d3LmNlbmJpaS5ldTpwcm9maWxlOkJJSTAxOnZlcjEuMDwvY2JjOlByb2ZpbGVJRD5cXG4gIDxjYmM6SUQ+JHtwNi51dGlscy5lc2NhcGVYbWwocHVyY2hhc2VPcmRlcklkKX08L2NiYzpJRD5cXG4gIDxjYmM6SXNzdWVEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgIDxjYmM6SXNzdWVUaW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlzc3VlVGltZSl9PC9jYmM6SXNzdWVUaW1lPlxcbiAgPGNiYzpOb3RlPkluZm9ybWF0aW9uIHRleHQgZm9yIHRoZSB3aG9sZSBvcmRlcjwvY2JjOk5vdGU+XFxuICA8Y2JjOkRvY3VtZW50Q3VycmVuY3lDb2RlPlNFSzwvY2JjOkRvY3VtZW50Q3VycmVuY3lDb2RlPlxcbiAgPGNiYzpBY2NvdW50aW5nQ29zdENvZGU+UHJvamVjdDEyMzwvY2JjOkFjY291bnRpbmdDb3N0Q29kZT5cXG4gIDxjYWM6UXVvdGF0aW9uRG9jdW1lbnRSZWZlcmVuY2U+XFxuICAgIDxjYmM6SUQ+UXVvdGVJRDEyMzwvY2JjOklEPlxcbiAgPC9jYWM6UXVvdGF0aW9uRG9jdW1lbnRSZWZlcmVuY2U+XFxuICA8Y2FjOk9yZGVyRG9jdW1lbnRSZWZlcmVuY2U+XFxuICAgIDxjYmM6SUQ+UmplY3RlZE9yZGVySUQxMjM8L2NiYzpJRD5cXG4gIDwvY2FjOk9yZGVyRG9jdW1lbnRSZWZlcmVuY2U+XFxuICA8Y2FjOk9yaWdpbmF0b3JEb2N1bWVudFJlZmVyZW5jZT5cXG4gICAgPGNiYzpJRD5NQUZPPC9jYmM6SUQ+XFxuICA8L2NhYzpPcmlnaW5hdG9yRG9jdW1lbnRSZWZlcmVuY2U+XFxuICA8Y2FjOkNvbnRyYWN0PlxcbiAgICA8Y2JjOklEPjM0MzIyPC9jYmM6SUQ+XFxuICAgIDxjYmM6Q29udHJhY3RUeXBlPkZyYW1ld29ya0FncmVlbWVudElEMTIzPC9jYmM6Q29udHJhY3RUeXBlPlxcbiAgPC9jYWM6Q29udHJhY3Q+XFxuICA8Y2FjOkJ1eWVyQ3VzdG9tZXJQYXJ0eT5cXG4gICAgPGNhYzpQYXJ0eT5cXG4gICAgICA8Y2JjOkVuZHBvaW50SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjczMDAwNzIzMTExMTU8L2NiYzpFbmRwb2ludElEPlxcbiAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjczMDAwNzAwMTExMTU8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICAgIDxjYmM6SUQ+UGFydHlJRDEyMzwvY2JjOklEPlxcbiAgICAgIDwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICA8Y2JjOk5hbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoYnV5ZXJOYW1lKX08L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOlBhcnR5TmFtZT5cXG4gICAgICA8Y2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj4xMjM0NTY3ODkwMTIzPC9jYmM6SUQ+XFxuICAgICAgICA8Y2JjOlBvc3Rib3g+UG9Cb3gxMjM8L2NiYzpQb3N0Ym94PlxcbiAgICAgICAgPGNiYzpTdHJlZXROYW1lPlLDpWRodXNnYXRhbjwvY2JjOlN0cmVldE5hbWU+XFxuICAgICAgICA8Y2JjOkFkZGl0aW9uYWxTdHJlZXROYW1lPjJuZCBmbG9vcjwvY2JjOkFkZGl0aW9uYWxTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj41PC9jYmM6QnVpbGRpbmdOdW1iZXI+XFxuICAgICAgICA8Y2JjOkRlcGFydG1lbnQ+UHVyY2hhc2luZyBkZXBhcnRtZW50PC9jYmM6RGVwYXJ0bWVudD5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+U3RvY2tob2xtPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICA8Y2JjOlBvc3RhbFpvbmU+MTEwMDA8L2NiYzpQb3N0YWxab25lPlxcbiAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PlJlZ2lvblg8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgPGNhYzpDb3VudHJ5PlxcbiAgICAgICAgICA8Y2JjOklkZW50aWZpY2F0aW9uQ29kZT5TRTwvY2JjOklkZW50aWZpY2F0aW9uQ29kZT5cXG4gICAgICAgIDwvY2FjOkNvdW50cnk+XFxuICAgICAgPC9jYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICA8Y2FjOlBhcnR5TGVnYWxFbnRpdHk+XFxuICAgICAgICA8Y2JjOlJlZ2lzdHJhdGlvbk5hbWU+Sm9obnNzb25zIEJ5Z2d2YXJvciBBQjwvY2JjOlJlZ2lzdHJhdGlvbk5hbWU+XFxuICAgICAgICA8Y2JjOkNvbXBhbnlJRCBzY2hlbWVJRD1cXFwiU0U6T1JHTlJcXFwiPjU1MzIzMzExODM8L2NiYzpDb21wYW55SUQ+XFxuICAgICAgICA8Y2FjOlJlZ2lzdHJhdGlvbkFkZHJlc3M+XFxuICAgICAgICAgIDxjYmM6Q2l0eU5hbWU+U3RvY2tob2xtPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5SZWdpb25YPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgICAgPGNhYzpDb3VudHJ5PlxcbiAgICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPlNFPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgICAgPC9jYWM6UmVnaXN0cmF0aW9uQWRkcmVzcz5cXG4gICAgICA8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICA8L2NhYzpQYXJ0eT5cXG4gIDwvY2FjOkJ1eWVyQ3VzdG9tZXJQYXJ0eT5cXG4gIDxjYWM6U2VsbGVyU3VwcGxpZXJQYXJ0eT5cXG4gICAgPGNhYzpQYXJ0eT5cXG4gICAgICA8Y2JjOkVuZHBvaW50SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjczMDIzNDcyMzExMTE8L2NiYzpFbmRwb2ludElEPlxcbiAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICAgIDxjYmM6SUQ+U2VsbGVyUGFydHlJRDEyMzwvY2JjOklEPlxcbiAgICAgIDwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICA8Y2JjOk5hbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+MDk4NzY1NDMyMTEyMzwvY2JjOklEPlxcbiAgICAgICAgPGNiYzpQb3N0Ym94PjMyMTwvY2JjOlBvc3Rib3g+XFxuICAgICAgICA8Y2JjOlN0cmVldE5hbWU+S3VuZ3NnYXRhbjwvY2JjOlN0cmVldE5hbWU+XFxuICAgICAgICA8Y2JjOkFkZGl0aW9uYWxTdHJlZXROYW1lPnN1aXRlMTI8L2NiYzpBZGRpdGlvbmFsU3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+MjI8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6RGVwYXJ0bWVudD5TYWxlcyBkZXBhcnRtZW50PC9jYmM6RGVwYXJ0bWVudD5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+U3RvY2tob2xtPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICA8Y2JjOlBvc3RhbFpvbmU+MTEwMDA8L2NiYzpQb3N0YWxab25lPlxcbiAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PlJlZ2lvblg8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgPGNhYzpDb3VudHJ5PlxcbiAgICAgICAgICA8Y2JjOklkZW50aWZpY2F0aW9uQ29kZT5TRTwvY2JjOklkZW50aWZpY2F0aW9uQ29kZT5cXG4gICAgICAgIDwvY2FjOkNvdW50cnk+XFxuICAgICAgPC9jYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICA8Y2FjOlBhcnR5TGVnYWxFbnRpdHk+XFxuICAgICAgICA8Y2JjOlJlZ2lzdHJhdGlvbk5hbWU+TW9kZXJuYSBQcm9kdWt0ZXIgQUI8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIlNFOk9SR05SXFxcIj41NTMyMzMyMjgzPC9jYmM6Q29tcGFueUlEPlxcbiAgICAgICAgPGNhYzpSZWdpc3RyYXRpb25BZGRyZXNzPlxcbiAgICAgICAgICA8Y2JjOkNpdHlOYW1lPlN0b2NraG9sbTwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+UmVnaW9uWDwvY2JjOkNvdW50cnlTdWJlbnRpdHk+XFxuICAgICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgICA8Y2JjOklkZW50aWZpY2F0aW9uQ29kZT5TRTwvY2JjOklkZW50aWZpY2F0aW9uQ29kZT5cXG4gICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgIDwvY2FjOlJlZ2lzdHJhdGlvbkFkZHJlc3M+XFxuICAgICAgPC9jYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgPGNhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICAgPGNhYzpQYXJ0eT5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj4wOTg3Njc4MzIxMTIzPC9jYmM6SUQ+XFxuICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICA8Y2FjOlBhcnR5TmFtZT5cXG4gICAgICAgIDxjYmM6TmFtZT5Nb2Rlcm5hIFByb2R1a3RlciBBQjwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICA8L2NhYzpQYXJ0eT5cXG4gIDwvY2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcbiAgPGNhYzpBbnRpY2lwYXRlZE1vbmV0YXJ5VG90YWw+XFxuICAgIDxjYmM6UGF5YWJsZUFtb3VudCBjdXJyZW5jeUlEID1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwodG90YWxDdXJyZW5jeSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEFtb3VudCl9PC9jYmM6UGF5YWJsZUFtb3VudD5cXG4gIDwvY2FjOkFudGljaXBhdGVkTW9uZXRhcnlUb3RhbD5cXG4gICR7b3JkZXJMaW5lc31cXG48L09yZGVyPlxcblxcblxcXCJcXFwiXFxcIlxcblxcblxcbmRlZiB0YXJnZXRGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHRhcmdldFVSSSlcXG5cXG5GaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUodGFyZ2V0RmlsZSwgb3JkZXJDb250ZW50LCdVVEYtOCcpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IFxcXCJcXFwiXFxcIjxUcmFuc2FjdGlvbkluZm8+XFxuICAgIDxJZD4ke3B1cmNoYXNlT3JkZXJJZH08L0lkPlxcbiAgICA8Q3JlYXRpb25EYXRlPiR7Zm9ybWF0dGVkRGF0ZX08L0NyZWF0aW9uRGF0ZT5cXG4gICAgPFRyYW5zYWN0aW9uVHlwZT5QdXJjaGFzZSBPcmRlcjwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHtwdXJjaGFzZU9yZGVySWR9PC9UcmFuc2FjdGlvbk51bWJlcj5cXG4gICAgPFNvdXJjZVN5c3RlbT5EZW1vIEFwcDwvU291cmNlU3lzdGVtPlxcbiAgICA8VGFyZ2V0U3lzdGVtLz5cXG4gICAgPFNlbmRlci8+XFxuICAgIDxGaW5hbFJlY2lwaWVudD5TdXBwbGllcjwvRmluYWxSZWNpcGllbnQ+XFxuICAgIDxUcmFuc2ZlclByb3RvY29sPkJsb2NrY2hhaW48L1RyYW5zZmVyUHJvdG9jb2w+XFxuICAgIDxEZWxpdmVyZWRWaWE+QW1hbHRvPC9EZWxpdmVyZWRWaWE+XFxuICAgIDxTb3VyY2VEb2N1bWVudEZvcm1hdD5VQkw8L1NvdXJjZURvY3VtZW50Rm9ybWF0PlxcbiAgICA8U291cmNlRG9jdW1lbnRVUkk+JHtzb3VyY2VVUkl9PC9Tb3VyY2VEb2N1bWVudFVSST5cXG4gICAgPFNvdXJjZURvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1NvdXJjZURvY3VtZW50Q29udGVudFR5cGU+XFxuICAgIDxQaXZvdERvY3VtZW50Rm9ybWF0PlVCTDwvUGl2b3REb2N1bWVudEZvcm1hdD5cXG4gICAgPFBpdm90RG9jdW1lbnRVUkk+JHt0YXJnZXRVUkl9PC9QaXZvdERvY3VtZW50VVJJPlxcbiAgICA8UGl2b3REb2N1bWVudENvbnRlbnRUeXBlPnRleHQveG1sOyBjaGFyc2V0PXV0Zi04PC9QaXZvdERvY3VtZW50Q29udGVudFR5cGU+XFxuICAgIDxUYXJnZXREb2N1bWVudEZvcm1hdD5VQkw8L1RhcmdldERvY3VtZW50Rm9ybWF0PlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRVUkk+JHt0YXJnZXRVUkl9PC9UYXJnZXREb2N1bWVudFVSST5cXG4gICAgPFRhcmdldERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1RhcmdldERvY3VtZW50Q29udGVudFR5cGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNDb2RlPiR7c3RhdHVzfTwvVGVjaG5pY2FsU3RhdHVzQ29kZT5cXG4gICAgPFRlY2huaWNhbFN0YXR1c01lc3NhZ2U+JHtzdGF0dXNNZXNzYWdlfTwvVGVjaG5pY2FsU3RhdHVzTWVzc2FnZT5cXG4gICAgPFRlY2huaWNhbFN0YXR1c0RhdGU+JHtmb3JtYXR0ZWREYXRlfTwvVGVjaG5pY2FsU3RhdHVzRGF0ZT5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNDb2RlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNEYXRlLz5cXG4gICAgPEZsYWdzPntcXFwiYWF2aXNpYmxlXFxcIjogdHJ1ZX08L0ZsYWdzPlxcbiAgICA8T3JnUGF0aD4vJHtpbnN0YW5jZUlkfS88L09yZ1BhdGg+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PlNlbGxlciBOYW1lPC9LZXk+XFxuICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNlbGxlck5hbWUpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5CdXllciBOYW1lPC9LZXk+XFxuICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGJ1eWVyTmFtZSl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5PkNvbW1lbnQ8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChjb21tZW50cyl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgICAgPEtleT5Jc3N1ZSBEYXRlPC9LZXk+XFxuICAgICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVEYXRlKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5PkxpbmUgaXRlbXM8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke25iTGluZXN9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+VG90YWwgQW1vdW50PC9LZXk+XFxuICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHRvdGFsQW1vdW50KX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+Q3VycmVuY3k8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwodG90YWxDdXJyZW5jeSl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbjwvVHJhbnNhY3Rpb25JbmZvPlxcXCJcXFwiXFxcIlxcblxcbmRlZiBpcGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHB1cmNoYXNlT3JkZXJJZClcXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUodHJhbnNhY3Rpb25JbmZvLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTc1OTg4NjE1NDUxfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uRGVjbGluZSIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvbkRlY2xpbmVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFJGUSBUcmFuc2FjdGlvbkluZm8gdXBkYXRlIGZvciBEZWNsaW5lZCBSRlEgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBIYW5kbGVSZXF1ZXN0Rm9yUXVvdGF0aW9uIFdvcmtmbG93IFN0ZXBcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NzU5ODg2MTU0ODUsXCJyZXZpc2lvbklkXCI6XCJhZjJiYWY0YjYzN2E4MDZhOGYzMjliZDAyMThjYmQxZVwiLFwibWFpblNjcmlwdFwiOlwiLyoqXFxuICogWW91IGNhbiBjYWxsIGFub3RoZXIgc2NyaXB0IGJ5IHVzaW5nICdJbmNsdWRlJyB0YWdzXFxuICogXFxuICogQGluY2x1ZGUgUkZRU21hcnRDb250cmFjdEhlbHBlclxcbiAqL1xcblxcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuaW1wb3J0IGphdmEudXRpbC5VVUlEXFxuXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgcmZxSWQgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5kZWYgcmVhc29uID0gcDYucGlwZWxpbmUuZ2V0ICdyZWFzb24nXFxuXFxuZGVmIG5vdyA9IGhlbHBlci5ub3coKVxcblxcbi8vIEZldGNoIHRoZSBSRlEgdHJhbnNhY3Rpb24gaW5mb1xcbmRlZiByZnFQayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIHJmcUlkKVxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZ2V0KHJmcVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG4vLyBEZWNsaW5lIFJGUSBsb2NhbGx5XFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcblxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZSA9ICdEZWNsaW5lZCdcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSByZWFzb25cXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHJmcVBrKVxcblxcbi8vIERlY2xpbmUgUkZRIG9uIHRoZSBibG9ja2NoYWluXFxuZGVmIGRlY2xpbmVJZCA9IFVVSUQucmFuZG9tVVVJRCgpXFxuaGVscGVyLmRlY2xpbmVSRlEoZGVjbGluZUlkLCBVVUlELmZyb21TdHJpbmcocmZxSWQpLCBub3cpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU3NTk4ODYxNTQ4NX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXIiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVBPLUhhbmRsZUFjdGlvbkFjY2VwdE9yZGVyXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkhhbmRsZSBQTyBUcmFuc2FjdGlvbkluZm8gdXBkYXRlcyBmb3IgYW4gQWNjZXB0ZWQgT3JkZXIgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBIYW5kbGVQdXJjaGFzZU9yZGVyIFdvcmtmbG93IFN0ZXBcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NzU5ODg2MTU1MTAsXCJyZXZpc2lvbklkXCI6XCJkYzA2NGJlZGZkYWRhYzQ4N2U5ZDA4NWQ4ZGUwYzBiOFwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXRcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpdGVtSWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGl0ZW1QayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGl0ZW1JZHMpXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5leGlzdHMoaXRlbVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXFxuU2ltcGxlRGF0ZUZvcm1hdCB0cmFuc2FjdGlvbl9zZGYgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdChcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpXFxuXFxuZGVmIGZvcm1hdGVkRGF0ZSA9IHRyYW5zYWN0aW9uX3NkZi5mb3JtYXQoY3VycmVudERhdGUpXFxuXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gJ0FjY2VwdGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNEYXRlID0gZm9ybWF0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG5cXG5kZWYgc2FsZXNvcmRlcm51bWJlciA9IHA2LnBpcGVsaW5lLmdldCAnc2FsZXNvcmRlcm51bWJlcidcXG5cXG5pZiAoc2FsZXNvcmRlcm51bWJlciE9bnVsbCAmJiAhJycuZXF1YWxzKHNhbGVzb3JkZXJudW1iZXIpKSB7XFxuICAgIFxcbiAgICBpbnQgbmJLZXlWYWx1ZXMgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuc2l6ZSgpXFxuICAgIHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZVtuYktleVZhbHVlcy0xXSArIHtcXG4gICAgICAgICAgICAgS2V5VmFsdWUge1xcbiAgICAgICAgICAgIEtleShcXFwiU2FsZXMgT3JkZXIgTnVtYmVyXFxcIilcXG4gICAgICAgICAgICBWYWx1ZShzYWxlc29yZGVybnVtYmVyKVxcbiAgICAgICAgfVxcbiAgICB9XFxufVxcblxcbmRlZiB0cmFuc2FjdGlvbklkID0gdHJhbnNhY3Rpb25JbmZvLklkLnRleHQoKVxcblxcbmRlZiBpcGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHRyYW5zYWN0aW9uSWQpXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZUFuZFJvdXRlKGdyb292eS54bWwuWG1sVXRpbC5zZXJpYWxpemUodHJhbnNhY3Rpb25JbmZvKSwgJ3A2X2RlbW8uVHJhbnNhY3Rpb25JbmZvJywgaXBrLCAnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fRGlzcGF0Y2hlcicpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU3NTk4ODYxNTUxMH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IkJsb2NrY2hhaW5FdmVudEhhbmRsZXIiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJCbG9ja2NoYWluRXZlbnRIYW5kbGVyXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkhhbmRsZSBldmVudHMgcmVjZWl2ZWQgZnJvbSB0aGUgYmxvY2tjaGFpblwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU3NTk4ODYxNTUyOSxcInJldmlzaW9uSWRcIjpcImYxMjI3NzQyMDRlYzNiOTRhYTk3YjVkMTMyODU3NjlkXCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5EZXNlcmlhbGl6YXRpb25GZWF0dXJlXFxuaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXJcXG5pbXBvcnQgb3JnLndlYjNqLnByb3RvY29sLmNvcmUubWV0aG9kcy5yZXNwb25zZS5Mb2dcXG5cXG5cXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG5kZWYgbWFwcGVyID0gbmV3IE9iamVjdE1hcHBlcigpO1xcbm1hcHBlci5jb25maWd1cmUoRGVzZXJpYWxpemF0aW9uRmVhdHVyZS5GQUlMX09OX1VOS05PV05fUFJPUEVSVElFUywgZmFsc2UpO1xcblxcbmRlZiBldGhMb2cgPSBtYXBwZXIucmVhZGVyRm9yKExvZy5jbGFzcykucmVhZFZhbHVlKHA2LnBpcGVsaW5lLmdldCgnYm9keScpKVxcbmRlZiB0b3BpY3MgPSBldGhMb2cuZ2V0VG9waWNzKClcXG5kZWYgZXZlbnRIYXNoID0gdG9waWNzWzBdXFxuZGVmIGRhdGEgPSBldGhMb2cuZ2V0RGF0YSgpXFxuXFxuaWYgKGV2ZW50SGFzaCA9PSBSRlFTbWFydENvbnRyYWN0SGVscGVyLlJGUVJlY2VpdmVkRXZlbnRIYXNoKSB7XFxuICAgIGRlZiAocmZxSWQsIGlzc3VlZEF0LCB1YmwpID0gaGVscGVyLnJlYWRSRlFSZWNlaXZlZEV2ZW50KHRvcGljcywgZGF0YSlcXG5cXG4gICAgcDYucGlwZWxpbmUucHV0KFxcXCJ1YmxcXFwiLCB1YmwpXFxuICAgIHA2LnNjcmlwdC5jYWxsICdwNl9kZW1vLlJlY2VpdmVSRlFUcmFuc2FjdGlvbidcXG59XFxuZWxzZSBpZiAoZXZlbnRIYXNoID09IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIuUkZRRGVjbGluZWRFdmVudEhhc2gpIHtcXG4gICAgZGVmIChzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0KSA9IGhlbHBlci5yZWFkUkZRRGVjbGluZWRFdmVudCh0b3BpY3MsIGRhdGEpXFxuXFxuICAgIGxvZy5pbmZvIFxcXCJSRlEgXFxcIiArIHJmcUlkICsgXFxcIiB3YXMgZGVjbGluZWQuXFxcIlxcbn1cXG5lbHNlIGlmIChldmVudEhhc2ggPT0gUkZRU21hcnRDb250cmFjdEhlbHBlci5RdW90ZVJlY2VpdmVkRXZlbnRIYXNoKSB7XFxuICAgIGRlZiAoc3VwcGxpZXIsIHJmcUlkLCBxdW90ZUlkLCBpc3N1ZWRBdCwgdWJsKSA9IGhlbHBlci5yZWFkUXVvdGVSZWNlaXZlZEV2ZW50KHRvcGljcywgZGF0YSlcXG5cXG4gICAgcDYucGlwZWxpbmUucHV0KFxcXCJ1YmxcXFwiLCB1YmwpXFxuICAgIHA2LnNjcmlwdC5jYWxsICdwNl9kZW1vLkhhbmRsZVF1b3RlVHJhbnNhY3Rpb24nXFxufVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NzU5ODg2MTU1Mjl9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGUiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFJGUSBUcmFuc2FjdGlvbkluZm8gdXBkYXRlIGFuZCBRdW90ZSBjcmVhdGlvbiAtIFNjcmlwdCBjYWxsZWQgYnkgdGhlIEhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb24gV29ya2Zsb3cgU3RlcFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU3NTk4ODYxNTU2NixcInJldmlzaW9uSWRcIjpcIjY1NzE5N2FjYjMyNzk3ZGU4ZjA3MWE0Y2Q1Yzk1YzllXCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcbmltcG9ydCBqYXZhLnRpbWUuZm9ybWF0LkRhdGVUaW1lRm9ybWF0dGVyXFxuaW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsXFxuaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0XFxuXFxuXFxuZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuZGVmIHhtbCA9IHA2LnBpcGVsaW5lLmdldFhtbCAneG1sJ1xcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIHJmcUlkID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuLy8gRmV0Y2ggUkZRIGZyb20gZGF0YWJhc2VcXG5kZWYgcmZxUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCByZnFJZClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmdldChyZnFQaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuLy8gQ2FsY3VsYXRlIGlzc3VlIGRhdGUgYW5kIHRpbWVcXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuZGVmIGZvcm1hdHRlZERhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZURhdGUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcInl5eXktTU0tZGRcXFwiKS5mb3JtYXQobm93KVxcbmRlZiBpc3N1ZVRpbWUgPSBEYXRlVGltZUZvcm1hdHRlci5vZlBhdHRlcm4oXFxcIkhIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5cXG4vLyBVcGRhdGUgdGhlIFJGUVxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzQ29kZSA9ICdRdW90ZSBwcm92aWRlZCdcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSAnJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZSA9ICdIYW5kbGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG5kZWYgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCggdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKSlcXG5cXG5TdHJpbmcgcmZxQ29udGVudCA9IEZpbGVVdGlscy5yZWFkRmlsZVRvU3RyaW5nKHNyY0ZpbGUpXFxuZGVmIHJmcSA9IHNsdXJwZXIucGFyc2VUZXh0KHJmcUNvbnRlbnQpXFxuXFxuZGVmIHNlbGxlck5hbWUgPSByZnEuU2VsbGVyU3VwcGxpZXJQYXJ0eS5QYXJ0eS5QYXJ0eU5hbWUuTmFtZS50ZXh0KClcXG5kZWYgYnV5ZXJOYW1lID0gcmZxLk9yaWdpbmF0b3JDdXN0b21lclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiByZnFJc3N1ZURhdGUgPSByZnEuSXNzdWVEYXRlLnRleHQoKVxcblxcbnA2LnRyYW5zYWN0aW9uLnNhdmUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCByZnFQaylcXG5cXG5kZWYgbGluZXNDb250ZW50ID0gcDYucGlwZWxpbmUuZ2V0ICdsaW5lcydcXG5cXG4vLyBDcmVhdGUgUXVvdGUgZG9jdW1lbnRcXG5cXG5Kc29uU2x1cnBlciBqU2x1cnBlciA9IG5ldyBKc29uU2x1cnBlcigpXFxuZGVmIG15TGluZXMgPSBqU2x1cnBlci5wYXJzZVRleHQobGluZXNDb250ZW50KVxcblxcbkRlY2ltYWxGb3JtYXQgdWJsX2RmID0gbmV3IERlY2ltYWxGb3JtYXQoXFxcIiMwLjAwXFxcIilcXG5cXG5kZWYgcXVvdGF0aW9uTGluZXMgPSAnJ1xcblxcbmRlZiB0b3RhbEFtb3VudCA9IG5ldyBCaWdEZWNpbWFsKDApXFxuZGVmIHRvdGFsQ3VycmVuY3kgPSAnJ1xcblxcbmRlZiBxdW90ZUlkID0gVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKVxcblxcbnJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5lYWNoIHsgbXlMaW5lIC0+IFxcblxcbiAgICBkZWYgaW5wdXRMaW5lID0gbXlMaW5lcy5maW5kIHsgaXQuaWQgPT0gbXlMaW5lLklELnRleHQoKSB9XFxuICAgIGRlZiBpdGVtRGV0YWlsID0gaW5wdXRMaW5lLml0ZW1zLmZpbmQgeyBpdC5pZCA9PSBpbnB1dExpbmUuaXRlbSB9XFxuICAgIFxcbiAgICBCaWdEZWNpbWFsIHVuaXRQcmljZSA9IG5ldyBCaWdEZWNpbWFsKGl0ZW1EZXRhaWwucHJpY2UpXFxuICAgIFxcbiAgICBpZiAoaW5wdXRMaW5lLmRpc2NvdW50IT1udWxsICYmICEnJy5lcXVhbHMoaW5wdXRMaW5lLmRpc2NvdW50KSAmJiAhJzAnLmVxdWFscyhpbnB1dExpbmUuZGlzY291bnQpKSB7XFxuICAgICAgICBCaWdEZWNpbWFsIGRpc2NvdW50ID0gIG5ldyBCaWdEZWNpbWFsKDEwMCkuXFx0c3VidHJhY3QobmV3IEJpZ0RlY2ltYWwoaW5wdXRMaW5lLmRpc2NvdW50KSlcXG4gICAgICAgIHVuaXRQcmljZSA9IHVuaXRQcmljZS5tdWx0aXBseShkaXNjb3VudCkuZGl2aWRlKG5ldyBCaWdEZWNpbWFsKDEwMCkpXFxuICAgIH1cXG4gICAgXFxuICAgIGRlZiBsaW5lUXR5ID0gbmV3IEJpZ0RlY2ltYWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LnRleHQoKSlcXG4gICAgXFxuICAgIGRlZiBsaW5lQW1tb3VudCA9IGxpbmVRdHkubXVsdGlwbHkodW5pdFByaWNlKVxcbiAgICBcXG4gICAgdG90YWxBbW91bnQgPSB0b3RhbEFtb3VudC5hZGQobGluZUFtbW91bnQpXFxuICAgIHRvdGFsQ3VycmVuY3kgPSBpdGVtRGV0YWlsLmN1cnJlbmN5XFxuICAgIFxcbiAgICBxdW90YXRpb25MaW5lcyArPSAgXFxcIlxcXCJcXFwiPGNhYzpRdW90YXRpb25MaW5lPlxcbiAgICAgIDxjYmM6SUQ+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLklELnRleHQoKSl9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpOb3RlPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5Ob3RlLnRleHQoKSl9PC9jYmM6Tm90ZT5cXG4gICAgICA8Y2FjOkxpbmVJdGVtPlxcbiAgICAgICAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uSUQudGV4dCgpKX08L2NiYzpJRD5cXG4gICAgICAgIDxjYmM6UXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5RdWFudGl0eS4nQHVuaXRDb2RlJy50ZXh0KCkpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LnRleHQoKSl9PC9jYmM6UXVhbnRpdHk+XFxuICAgICAgICA8Y2JjOkxpbmVFeHRlbnNpb25BbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC5jdXJyZW5jeSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbCh1YmxfZGYuZm9ybWF0KGxpbmVBbW1vdW50KSl9PC9jYmM6TGluZUV4dGVuc2lvbkFtb3VudD5cXG4gICAgICAgIDxjYWM6UHJpY2U+XFxuICAgICAgICAgIDxjYmM6UHJpY2VBbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC5jdXJyZW5jeSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbCh1YmxfZGYuZm9ybWF0KHVuaXRQcmljZSkpfTwvY2JjOlByaWNlQW1vdW50PlxcbiAgICAgICAgICA8Y2JjOkJhc2VRdWFudGl0eSB1bml0Q29kZT1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwoaXRlbURldGFpbC51b20pfVxcXCI+MTwvY2JjOkJhc2VRdWFudGl0eT5cXG4gICAgICAgIDwvY2FjOlByaWNlPlxcbiAgICAgICAgPGNhYzpJdGVtPlxcbiAgICAgICAgICA8Y2JjOkRlc2NyaXB0aW9uPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlucHV0TGluZS5pdGVtKX08L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX08L2NiYzpOYW1lPlxcbiAgICAgICAgPC9jYWM6SXRlbT5cXG4gICAgICA8L2NhYzpMaW5lSXRlbT5cXG4gICAgPC9jYWM6UXVvdGF0aW9uTGluZT5cXG4gICAgXFxcIlxcXCJcXFwiXFxufVxcblxcbmRlZiBxdW90ZVVCTCA9IFxcXCJcXFwiXFxcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPFF1b3RhdGlvbiB4bWxucz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6UXVvdGF0aW9uLTJcXFwiIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIiB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gIDxjYmM6VUJMVmVyc2lvbklEPjIuMDwvY2JjOlVCTFZlcnNpb25JRD5cXG4gIDxjYmM6Q3VzdG9taXphdGlvbklEPk9JT1VCTC0yLjE8L2NiYzpDdXN0b21pemF0aW9uSUQ+XFxuICA8Y2JjOlByb2ZpbGVJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiMzIwXFxcIiBzY2hlbWVJRD1cXFwidXJuOm9pb3VibDppZDpwcm9maWxlaWQtMS4yXFxcIj5Qcm9jdXJlbWVudC1RdW9TaW0tMS4wPC9jYmM6UHJvZmlsZUlEPlxcbiAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChxdW90ZUlkKX08L2NiYzpJRD5cXG4gIDxjYmM6Q29weUluZGljYXRvcj5mYWxzZTwvY2JjOkNvcHlJbmRpY2F0b3I+XFxuICA8Y2JjOlVVSUQ+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9jYmM6VVVJRD5cXG4gIDxjYmM6SXNzdWVEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgPGNiYzpJc3N1ZVRpbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICA8Y2JjOk5vdGUgbGFuZ3VhZ2VJRD1cXFwiZGEtZGtcXFwiPkJlc3RpbGxpbmcgYWYgY29tcHV0ZXJlPC9jYmM6Tm90ZT5cXG4gIDxjYWM6UmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPkc4NjdCPC9jYmM6SUQ+XFxuXFx0PGNiYzpVVUlEPiR7cDYudXRpbHMuZXNjYXBlWG1sKHJmcUlkKX08L2NiYzpVVUlEPlxcblxcdDxjYmM6SXNzdWVEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHJmcUlzc3VlRGF0ZSl9PC9jYmM6SXNzdWVEYXRlPlxcbiAgPC9jYWM6UmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlPlxcbiAgPGNhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgICA8Y2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+TEVWMDAxMjM8L2NiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYmM6RW5kcG9pbnRJRCBzY2hlbWVJRD1cXFwiREs6Q1ZSXFxcIj5ESzE4Mjk2Nzk5PC9jYmM6RW5kcG9pbnRJRD5cXG4gICAgICA8Y2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUlEPVxcXCJESzpDVlJcXFwiPkRLMTgyOTY3OTk8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNlbGxlck5hbWUpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgIDxjYmM6QWRkcmVzc0Zvcm1hdENvZGUgbGlzdEFnZW5jeUlEPVxcXCIzMjBcXFwiIGxpc3RJRD1cXFwidXJuOm9pb3VibDpjb2RlbGlzdDphZGRyZXNzZm9ybWF0Y29kZS0xLjFcXFwiPlN0cnVjdHVyZWRESzwvY2JjOkFkZHJlc3NGb3JtYXRDb2RlPlxcbiAgICAgICAgPGNiYzpTdHJlZXROYW1lPkFybmUgSmFjb2JzZW5zIEFsbMOpPC9jYmM6U3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+MTU8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+S8O4YmVuaGF2biBTPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICA8Y2JjOlBvc3RhbFpvbmU+MjMwMDwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPkRLPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDxjYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgICAgIDxjYmM6UmVnaXN0cmF0aW9uTmFtZT5EZWxjb21wdXRlciBBL1M8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+MTgyOTY3OTk8L2NiYzpDb21wYW55SUQ+XFxuICAgICAgPC9jYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgPC9jYWM6UGFydHk+XFxuICA8L2NhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgPGNhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICAgPGNhYzpQYXJ0eT5cXG4gICAgICA8Y2JjOkVuZHBvaW50SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjU3OTgwMDA0MTY2MDQ8L2NiYzpFbmRwb2ludElEPlxcbiAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjU3OTgwMDA0MTY2MDQ8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPiR7cDYudXRpbHMuZXNjYXBlWG1sKGJ1eWVyTmFtZSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgPGNiYzpBZGRyZXNzRm9ybWF0Q29kZSBsaXN0QWdlbmN5SUQ9XFxcIjMyMFxcXCIgbGlzdElEPVxcXCJ1cm46b2lvdWJsOmNvZGVsaXN0OmFkZHJlc3Nmb3JtYXRjb2RlLTEuMVxcXCI+U3RydWN0dXJlZERLPC9jYmM6QWRkcmVzc0Zvcm1hdENvZGU+XFxuICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QmVybnN0b3JmZnN2ZWo8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj4xNjE8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6Q2l0eU5hbWU+Q2hhcmxvdHRlbmx1bmQ8L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgIDxjYmM6UG9zdGFsWm9uZT4yOTIwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+REs8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPkdlbnRvZnRlIEtvbW11bmU8L2NiYzpSZWdpc3RyYXRpb25OYW1lPlxcbiAgICAgICAgPGNiYzpDb21wYW55SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+REsxMjM0NTY3ODwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICA8L2NhYzpQYXJ0eT5cXG4gIDwvY2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcblxcdDxjYWM6UXVvdGVkTW9uZXRhcnlUb3RhbD5cXG4gICAgPGNiYzpQYXlhYmxlQW1vdW50IGN1cnJlbmN5SUQgPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKHVibF9kZi5mb3JtYXQodG90YWxBbW91bnQpKX08L2NiYzpQYXlhYmxlQW1vdW50PlxcbiAgPC9jYWM6UXVvdGVkTW9uZXRhcnlUb3RhbD5cXG4gICR7cXVvdGF0aW9uTGluZXN9XFxuPC9RdW90YXRpb24+XFxuXFxcIlxcXCJcXFwiXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdRdW90ZSdcXG5kZWYgY29tbWVudHMgPSAnJ1xcbmludCBuYkxpbmVzID0gcmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLnNpemUoKVxcblxcbmRlZiBzdGF0dXMgPSAnQ3JlYXRlZCdcXG5kZWYgc3RhdHVzTWVzc2FnZSA9ICdDcmVhdGVkIGJ5IERlbW8gQXBwJ1xcblxcbmRlZiBzb3VyY2VVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvXFxcIiArIHRyYW5zYWN0aW9uVHlwZSArIFxcXCIvXFxcIiArIHF1b3RlSWQgKyBcXFwiLnhtbFxcXCJcXG5cXG5kZWYgIHNvdXJjZUZpbGUgPSBwNi51cmkuZmlsZUZyb21Vcmwoc291cmNlVVJJKVxcbkZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZShzb3VyY2VGaWxlLCBxdW90ZVVCTCwnVVRGLTgnKVxcblxcbmRlZiBpbnN0YW5jZUlkID0gcDYuY29uZmlndXJhdGlvbi5nZXQoXFxcImluc3RhbmNlLmlkXFxcIilcXG5cXG5kZWYgbmV3VHJhbnNhY3Rpb25JbmZvID0gXFxcIlxcXCJcXFwiPFRyYW5zYWN0aW9uSW5mbz5cXG4gICAgPElkPiR7cDYudXRpbHMuZXNjYXBlWG1sKHF1b3RlSWQpfTwvSWQ+XFxuICAgIDxDcmVhdGlvbkRhdGU+JHtwNi51dGlscy5lc2NhcGVYbWwoZm9ybWF0dGVkRGF0ZSl9PC9DcmVhdGlvbkRhdGU+XFxuICAgIDxUcmFuc2FjdGlvblR5cGU+JHtwNi51dGlscy5lc2NhcGVYbWwodHJhbnNhY3Rpb25UeXBlKX08L1RyYW5zYWN0aW9uVHlwZT5cXG4gICAgPFRyYW5zYWN0aW9uTnVtYmVyPiR7cDYudXRpbHMuZXNjYXBlWG1sKHF1b3RlSWQpfTwvVHJhbnNhY3Rpb25OdW1iZXI+XFxuICAgIDxTb3VyY2VTeXN0ZW0+RGVtbyBBcHA8L1NvdXJjZVN5c3RlbT5cXG4gICAgPFRhcmdldFN5c3RlbS8+XFxuICAgIDxTZW5kZXIvPlxcbiAgICA8RmluYWxSZWNpcGllbnQ+U3VwcGxpZXI8L0ZpbmFsUmVjaXBpZW50PlxcbiAgICA8VHJhbnNmZXJQcm90b2NvbD5CbG9ja2NoYWluPC9UcmFuc2ZlclByb3RvY29sPlxcbiAgICA8RGVsaXZlcmVkVmlhPkFtYWx0bzwvRGVsaXZlcmVkVmlhPlxcbiAgICA8U291cmNlRG9jdW1lbnRGb3JtYXQ+VUJMPC9Tb3VyY2VEb2N1bWVudEZvcm1hdD5cXG4gICAgPFNvdXJjZURvY3VtZW50VVJJPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNvdXJjZVVSSSl9PC9Tb3VyY2VEb2N1bWVudFVSST5cXG4gICAgPFNvdXJjZURvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1NvdXJjZURvY3VtZW50Q29udGVudFR5cGU+XFxuICAgIDxQaXZvdERvY3VtZW50Rm9ybWF0PlVCTDwvUGl2b3REb2N1bWVudEZvcm1hdD5cXG4gICAgPFBpdm90RG9jdW1lbnRVUkk+JHtwNi51dGlscy5lc2NhcGVYbWwoc291cmNlVVJJKX08L1Bpdm90RG9jdW1lbnRVUkk+XFxuICAgIDxQaXZvdERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1Bpdm90RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRhcmdldERvY3VtZW50Rm9ybWF0PlVCTDwvVGFyZ2V0RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxUYXJnZXREb2N1bWVudFVSST4ke3A2LnV0aWxzLmVzY2FwZVhtbChzb3VyY2VVUkkpfTwvVGFyZ2V0RG9jdW1lbnRVUkk+XFxuICAgIDxUYXJnZXREb2N1bWVudENvbnRlbnRUeXBlPnRleHQveG1sOyBjaGFyc2V0PXV0Zi04PC9UYXJnZXREb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzQ29kZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChzdGF0dXMpfTwvVGVjaG5pY2FsU3RhdHVzQ29kZT5cXG4gICAgPFRlY2huaWNhbFN0YXR1c01lc3NhZ2U+JHtwNi51dGlscy5lc2NhcGVYbWwoc3RhdHVzTWVzc2FnZSl9PC9UZWNobmljYWxTdGF0dXNNZXNzYWdlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzRGF0ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChmb3JtYXR0ZWREYXRlKX08L1RlY2huaWNhbFN0YXR1c0RhdGU+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzQ29kZS8+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzTWVzc2FnZS8+XFxuICAgIDxGdW5jdGlvbmFsU3RhdHVzRGF0ZS8+XFxuICAgIDxGbGFncz57XFxcImFhdmlzaWJsZVxcXCI6IHRydWV9PC9GbGFncz5cXG4gICAgPE9yZ1BhdGg+LyR7cDYudXRpbHMuZXNjYXBlWG1sKGluc3RhbmNlSWQpfS88L09yZ1BhdGg+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PlNlbGxlciBOYW1lPC9LZXk+XFxuICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNlbGxlck5hbWUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkJ1eWVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoYnV5ZXJOYW1lKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5PkNvbW1lbnQ8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChjb21tZW50cyl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgICAgPEtleT5Jc3N1ZSBEYXRlPC9LZXk+XFxuICAgICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVEYXRlKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5PkxpbmUgaXRlbXM8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke25iTGluZXN9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+VG90YWwgQW1vdW50PC9LZXk+XFxuICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHVibF9kZi5mb3JtYXQodG90YWxBbW91bnQpKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+Q3VycmVuY3k8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwodG90YWxDdXJyZW5jeSl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbjwvVHJhbnNhY3Rpb25JbmZvPlxcXCJcXFwiXFxcIlxcblxcbmRlZiBxdW90ZVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSygncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBxdW90ZUlkKVxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZShuZXdUcmFuc2FjdGlvbkluZm8sICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlUGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTc1OTg4NjE1NTY2fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGV29ya2Zsb3dUYXNrRW5oYW5jZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQWRkIEF0dHJpYnV0ZXMgdG8gV29ya2Zsb3cgVGFza3NcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NzU5ODg2MTU2MjIsXCJyZXZpc2lvbklkXCI6XCIwMTAzMWVhNWY3MWM5YTZiZjdkN2ViNGU0NzYzMjIxNFwiLFwibWFpblNjcmlwdFwiOlwiZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaWRzID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5pZHMnXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIGlkcylcXG5kZWYgaXRlbSA9IHA2LnRyYW5zYWN0aW9uLmdldChpcGspXFxuXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IG5ldyBYbWxTbHVycGVyKCkucGFyc2VUZXh0KGl0ZW0pXFxuXFxuZGVmIHRyYW5zYWN0aW9uTnVtYmVyID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uTnVtYmVyLnRleHQoKVxcbnA2LnBpcGVsaW5lLnB1dCAnVHJhbnNhY3Rpb25OdW1iZXInLCB0cmFuc2FjdGlvbk51bWJlciwgJ3RleHQvcGxhaW4nXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9IHRyYW5zYWN0aW9uSW5mby5UcmFuc2FjdGlvblR5cGUudGV4dCgpXFxucDYucGlwZWxpbmUucHV0ICdUcmFuc2FjdGlvblR5cGUnLCB0cmFuc2FjdGlvblR5cGUsICd0ZXh0L3BsYWluJ1xcblxcbmRlZiBlbmRwb2ludCA9IHRyYW5zYWN0aW9uSW5mby5FbmRwb2ludC50ZXh0KClcXG5wNi5waXBlbGluZS5wdXQgJ0VuZHBvaW50JywgZW5kcG9pbnQsICd0ZXh0L3BsYWluJ1xcblxcbi8vIEFkZCBjb21tb24gd29yayBpdGVtIGF0dHJpYnV0ZXMgcmVxdWlyZWQgYnkgdGhlIHN0YW5kYXJkIGIyYm94ICdXb3JrIEl0ZW1zJyB2aWV3XFxuZGVmIHN0ZXBYbWwgPSBwNi5waXBlbGluZS5nZXQgJ193Zl9zdGVwWG1sJ1xcbmRlZiBzdGF0dXNNYXAgPSBwNi53b3JrZmxvdy5sb2NhbGVUZXh0IHN0ZXBYbWwsIFxcXCJTdGF0dXNMYWJlbHMvTGFiZWxbQG5hbWU9J1xcXCIgKyBwNi5waXBlbGluZS5nZXQoJ193Zl9zdGF0dXNJZCcpICsgXFxcIiddXFxcIlxcbnA2LnBpcGVsaW5lLnB1dCAnU3RhdHVzJywgc3RhdHVzTWFwLCAnYXBwbGljYXRpb24vYjJib3guaTE4bidcXG5cXG5kZWYgYXNzaWduZWVNYXAgPSBwNi53b3JrZmxvdy5sb2NhbGVUZXh0IHN0ZXBYbWwsICdBc3NpZ25lZS9MYWJlbCdcXG5wNi5waXBlbGluZS5wdXQgJ0Fzc2lnbmVkVG8nLCBhc3NpZ25lZU1hcCwgJ2FwcGxpY2F0aW9uL2IyYm94LmkxOG4nXFxucDYucGlwZWxpbmUucHV0ICdfQVNTSUdORURUT05BTUUnLCBwNi5waXBlbGluZS5nZXQoJ193Zl9hc3NpZ25lZFRvSWQnKSwgJ3RleHQvcGxhaW4nXFxucDYucGlwZWxpbmUucHV0ICdTdGFydERhdGUnLCBwNi5waXBlbGluZS5nZXQoJ193Zl9pbnN0YW5jZVN0YXJ0RGF0ZScpLCAndGV4dC9wbGFpbidcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTc1OTg4NjE1NjIyfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiUG9zdEluc3RhbGxBcHBsaWNhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlBvc3RJbnN0YWxsQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiU2NyaXB0IHRvIGRlcGxveSB0aGUgZGVtbyBzbWFydCBjb250cmFjdCBhbmQgaW5pdGlhbGl6ZSB0YWJsZXNcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NzU5ODg2MTUzNDMsXCJyZXZpc2lvbklkXCI6XCI1ZDJhOGNiNjQ1YjZlMGY4ZTY0NTlhNTkxMDY5ODAyOVwiLFwibWFpblNjcmlwdFwiOlwiLy8gVGhpcyBzY3JpcHQgaXMgbGF1bmNoZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gaXMgaW5zdGFsbGVkIG9uIHRoZSBpbnN0YW5jZVxcbmltcG9ydCBpby5wbGF0Zm9ybTYuZGVtby5zYy5SZXF1ZXN0Rm9yUXVvdGF0aW9uc1xcblxcbmltcG9ydCBvcmcud2ViM2oudHguKlxcblxcbi8vIFBvcHVsYXRlIHRoZSBJdGVtcyB0YWJsZSBmcm9tIHRoZSBwcm92aWRlZCBDU1YgZmlsZVxcbmRlZiBjc3ZGaWxlID0gWyBza2lwTGluZXM6IDAsIHNlcGFyYXRvcjogJywnLCB1c2VGaXJzdExpbmVIZWFkZXJzOiB0cnVlLCB1cmk6ICdmaWxlOi8vJHtUTVB9L3A2X2RlbW9faXRlbXMuY3N2JyBdXFxuXFxucDYuY3N2LnBhcnNlKGNzdkZpbGUpIHsgcm93IC0+XFxuICAgIGRlZiByZWNvcmRzID0gbmV3IEFycmF5TGlzdCgpXFxuICAgIHJlY29yZHNbMF0gPSByb3dcXG4gICAgcDYudGFibGUudXBzZXJ0KCdwNl9kZW1vLkl0ZW1zJywgcmVjb3JkcylcXG4gICAgdHJ1ZVxcbn1cXG5sb2cuZGVidWcgJ1BvcHVsYXRlZCB0aGUgSXRlbXMgdGFibGUgZnJvbSB0aGUgQ1NWIGZpbGUnXFxuXFxuLy8gRGVwbG95IHRoZSBzbWFydCBjb250cmFjdFxcbmRlZiB3ZWIzaiA9IHA2LmV0aGVyZXVtcnBjLmJ1aWxkKHA2LmFwcGNvbmZpZy5nZXQoXFxcImV0aENsaWVudFVSTFxcXCIpKVxcbmRlZiBjcmVkZW50aWFscyA9IHA2LmV0aGVyZXVtcnBjLmdldENyZWRlbnRpYWxzKHA2LmFwcGNvbmZpZy5nZXQoXFxcImRlbW9XYWxsZXRcXFwiKSwgXFxcIkFEdW1teVBhc3N3b3JkXFxcIilcXG5cXG4vLyBEZWZpbmUgYSBjdXN0b20gdHJhbnNhY3Rpb24gbWFuYWdlciB3aXRoIGEgcG9sbGluZyBmcmVxdWVuY3kgb2YgMiBzZWNvbmRzXFxuZGVmIHRtID0gcDYuZXRoZXJldW1ycGMucG9sbGluZ1RyYW5zYWN0aW9uTWFuYWdlcih3ZWIzaiwgY3JlZGVudGlhbHMsIDIwMDBMKVxcbmRlZiBjb250cmFjdCA9IFJlcXVlc3RGb3JRdW90YXRpb25zLmRlcGxveSh3ZWIzaiwgdG0sIHA2LmV0aGVyZXVtcnBjLkRFRkFVTFRfR0FTX1BST1ZJREVSKS5zZW5kKClcXG5cXG4vLyBTYXZlIHRoZSBjb250cmFjdCBhZGRyZXNzIGFuZCBFdGhlcmV1bSBjbGllbnQgVVJMIGluIGNvbmZpZyB0YWJsZVxcbnA2LmFwcGNvbmZpZy5vdmVycmlkZShcXFwiY29udHJhY3RBZGRyZXNzXFxcIiwgY29udHJhY3QuZ2V0Q29udHJhY3RBZGRyZXNzKCkpXFxuXFxuLy8gTm90aWZ5IFA2IHRoYXQgaW5zdGFsbGF0aW9uIHdhcyBzdWNjZXNzZnVsXFxubG9nLmRlYnVnICdEZW1vIGFwcCBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkhJ1xcbnA2LnBpcGVsaW5lLnB1dChcXFwiaW5zdGFsbFNjcmlwdFJlc3VsdFxcXCIsIFxcXCJ0cnVlXFxcIilcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTc1OTg4NjE1MzQzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiUHJlSW5zdGFsbEFwcGxpY2F0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUHJlSW5zdGFsbEFwcGxpY2F0aW9uXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlByZSBpbnN0YWxsIGFwcGxpY2F0aW9uIHNjcmlwdCB3aGVyZSBidW5kbGVkIHJlc291cmNlcyBnZXQgZGVwbG95ZWRcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NzU5ODg2MTUzMTEsXCJyZXZpc2lvbklkXCI6XCJjODc2N2M2MTRlMGIyNjQxOTNlMzhkYTUyOTU2NmI3YlwiLFwibWFpblNjcmlwdFwiOlwiLy8gRGVwbG95IChjb3B5IHRvIGxvY2FsIGZpbGUgc3lzdGVtIGFuZCBsb2FkIEpBUiBjbGFzc2VzIGludG8gY2xhc3NwYXRoKSBidW5kbGVkIHJlc291cmNlc1xcbnA2LmJ1bmRsZWQuZGVwbG95KCdwNl9kZW1vLkRlbW9TbWFydENvbnRyYWN0JylcXG5wNi5idW5kbGVkLmRlcGxveSgncDZfZGVtby5QT1JldmlldycpXFxucDYuYnVuZGxlZC5kZXBsb3koJ3A2X2RlbW8uVGFibGVJdGVtc0RhdGEnKVxcbmxvZy5kZWJ1ZyAnRGVwbG95ZWQgYnVuZGxlZCByZXNvdXJjZXMnXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU3NTk4ODYxNTMxMX1dLCJwbGF0Zm9ybTYuY291bnRlcnMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmNvdW50ZXJzIiwibmFtZSI6IkNvdW50UkZRcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkNvdW50UkZRc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFJGUXMgd2l0aCBcXFwiUmVjZWl2ZWRcXFwiIHRlY2huaWNhbCBzdGF0dXMgKG92ZXIgdGhlIHBhc3QgOTAgZGF5cylcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImFub255bW91c0BhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NDQ1MDA2MDIxNyxcInJldmlzaW9uSWRcIjpcImNhYmI1ZTcwMDYyZjZmZjBmNmVhMjEyMzI4MmM0NjMzXCIsXCJsYXN0U3luY0RhdGVcIjoxNTg0NDUwMDYwMjE3LFwidmFsdWVcIjoyNi4wLFwidHlwZVwiOlwiQ09VTlRcIixcInF1ZXJ5XCI6XCIvVHJhbnNhY3Rpb25JbmZvW1RyYW5zYWN0aW9uVHlwZSA9IFxcXCJSZXF1ZXN0IEZvciBRdW90YXRpb25cXFwiIF1bVGVjaG5pY2FsU3RhdHVzQ29kZSA9IFxcXCJSZWNlaXZlZFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODQ0NTAwNjAyMTd9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJDb3VudFF1b3Rlc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFF1b3RlcyB3aXRoIFxcXCJTZW50XFxcIiB0ZWNobmljYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJhbm9ueW1vdXNAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODQ0NDY1MjAwMzAsXCJyZXZpc2lvbklkXCI6XCJiNTdhMWUzZmJlMjExZGI4YTllZmE3Yzg4ZTBjMDMxMlwiLFwibGFzdFN5bmNEYXRlXCI6MTU4NDQ0NjUyMDAzMCxcInZhbHVlXCI6MC4wLFwidHlwZVwiOlwiQ09VTlRcIixcInF1ZXJ5XCI6XCIvVHJhbnNhY3Rpb25JbmZvW1RyYW5zYWN0aW9uVHlwZSA9IFxcXCJRdW90ZVxcXCIgXVtUZWNobmljYWxTdGF0dXNDb2RlID0gXFxcIlNlbnRcXFwiIF1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpIDwgY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwbX1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEzLDIpKV1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpID4gY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTMsMikpXVwiLFwidGFyZ2V0XCI6XCJUcmFuc2FjdGlvblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiYW5vbnltb3VzQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg0NDQ2NTIwMDMwfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmNvdW50ZXJzIiwibmFtZSI6IkNvdW50RmFpbGVkUm91dGluZ09yZGVycyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkNvdW50RmFpbGVkUm91dGluZ09yZGVyc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIEZhaWxlZCBSb3V0aW5nIE9yZGVyc1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiYW5vbnltb3VzQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg0NDUwMDAwMDc0LFwicmV2aXNpb25JZFwiOlwiNTBlYTVlYjkwYWY3YzU5MTFkZjY5OTk1ODQwOTc1YjRcIixcImxhc3RTeW5jRGF0ZVwiOjE1ODQ0NTAwMDAwNzQsXCJ2YWx1ZVwiOjEwLjAsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9yb3V0aW5nT3JkZXJcIixcInRhcmdldFwiOlwiRmFpbGVkUm91dGluZ09yZGVyXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODQ0NTAwMDAwNzR9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRSZWplY3RlZFBPcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkNvdW50UmVqZWN0ZWRQT3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiIyBvZiBQdXJjaGFzZSBPcmRlcnMgd2l0aCBcXFwiUmVqZWN0ZWRcXFwiIGZ1bmN0aW9uYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJhbm9ueW1vdXNAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODQ0NDY2NDAwMzYsXCJyZXZpc2lvbklkXCI6XCI3Njk1YTllNGVjYzdmMjA5OTc5ODViOTkzZjcxMzkzZFwiLFwibGFzdFN5bmNEYXRlXCI6MTU4NDQ0NjY0MDAzNixcInZhbHVlXCI6MC4wLFwidHlwZVwiOlwiQ09VTlRcIixcInF1ZXJ5XCI6XCIvVHJhbnNhY3Rpb25JbmZvW1RyYW5zYWN0aW9uVHlwZSA9IFxcXCJQdXJjaGFzZSBPcmRlclxcXCIgXVtGdW5jdGlvbmFsU3RhdHVzQ29kZSA9IFxcXCJSZWplY3RlZFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODQ0NDY2NDAwMzZ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRBY2NlcHRlZFBPcyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkNvdW50QWNjZXB0ZWRQT3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiIyBvZiBQdXJjaGFzZSBPcmRlcnMgd2l0aCBcXFwiQWNjZXB0ZWRcXFwiIGZ1bmN0aW9uYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJhbm9ueW1vdXNAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODQ0NDY1ODAwNjIsXCJyZXZpc2lvbklkXCI6XCJlODViMmNmMTY3NmRjY2FiNmQ2NTcwNmViZjdjYTFhZlwiLFwibGFzdFN5bmNEYXRlXCI6MTU4NDQ0NjU4MDA2MixcInZhbHVlXCI6MC4wLFwidHlwZVwiOlwiQ09VTlRcIixcInF1ZXJ5XCI6XCIvVHJhbnNhY3Rpb25JbmZvW1RyYW5zYWN0aW9uVHlwZSA9IFxcXCJQdXJjaGFzZSBPcmRlclxcXCIgXVtGdW5jdGlvbmFsU3RhdHVzQ29kZSA9IFxcXCJBY2NlcHRlZFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJhbm9ueW1vdXNAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODQ0NDY1ODAwNjJ9XSwicGxhdGZvcm02LmFwcGNvbmZpZyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuYXBwY29uZmlnIiwibmFtZSI6ImRlbW9XYWxsZXQiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJkZW1vV2FsbGV0XCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkRlbW8gV2FsbGV0XCJ9LFwiY29udGVudE1vZGVcIjpcIlJFQURcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTc1OTg4NjE0NTIyLFwicmV2aXNpb25JZFwiOlwiY2IzMWNmMmQ1YzFlMTM4ZGUyOGE5NGEyNmZhODljODNcIixcInZhbHVlXCI6XCJ7XFxcImFkZHJlc3NcXFwiOlxcXCI2MjczMDYwOTBhYmFiM2E2ZTE0MDBlOTM0NWJjNjBjNzhhOGJlZjU3XFxcIixcXFwiaWRcXFwiOlxcXCJjOTEzODY3Zi1lNWU0LTRiZTYtYTdkYS02NTRjZTgzM2JmYjRcXFwiLFxcXCJ2ZXJzaW9uXFxcIjozLFxcXCJjcnlwdG9cXFwiOntcXFwiY2lwaGVyXFxcIjpcXFwiYWVzLTEyOC1jdHJcXFwiLFxcXCJjaXBoZXJ0ZXh0XFxcIjpcXFwiNGMwNjA0Y2NhMzMxNDgzOGQ2Mzg0N2I0ZWQwMmU3YTJkMTdlNTExZWZkNDRmNjA1MGUwOWMyMzhhNWQ1MDA5NVxcXCIsXFxcImNpcGhlcnBhcmFtc1xcXCI6e1xcXCJpdlxcXCI6XFxcImI0OGQ4MTczMjBlZDViNDU5YmJkZGYxNDBlNWYwNDUzXFxcIn0sXFxcImtkZlxcXCI6XFxcInNjcnlwdFxcXCIsXFxcImtkZnBhcmFtc1xcXCI6e1xcXCJka2xlblxcXCI6MzIsXFxcIm5cXFwiOjI2MjE0NCxcXFwicFxcXCI6MSxcXFwiclxcXCI6OCxcXFwic2FsdFxcXCI6XFxcIjM1ZDUzMzlhY2Y2YThmMTU0NjJmZmMwYmI5ODFjZjMxOTc5NGFlMjM5YzUxMzQxZmI4NTRjMThlZTQ1OGQ1YzdcXFwifSxcXFwibWFjXFxcIjpcXFwiNzZjMWE0N2Y3MTI0Y2Q2MzQ2MGFkMjVmYmIwYjljNmUzZWFiOGVkNTBkMzZmNjZlMmRjNDBjMDM4ODgxMTIzZVxcXCJ9fVwiLFwidHlwZVwiOlwiU3RyaW5nXCJ9IiwiY29udGVudE1vZGUiOiJSRUFEIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTc1OTg4NjE0NTIyfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmFwcGNvbmZpZyIsIm5hbWUiOiJjb250cmFjdEFkZHJlc3MiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJjb250cmFjdEFkZHJlc3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQ29udHJhY3QgQWRkcmVzc1wifSxcImNvbnRlbnRNb2RlXCI6XCJSRUFEXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU3NTk4ODYxNDQ2OCxcInJldmlzaW9uSWRcIjpcIjVlODY4YzZkNTIzMTBjNjU3NTk0MjU4ZTFmOTU3NDIwXCIsXCJ2YWx1ZVwiOlwiXCIsXCJ0eXBlXCI6XCJTdHJpbmdcIn0iLCJjb250ZW50TW9kZSI6IlJFQUQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NzU5ODg2MTQ0Njh9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuYXBwY29uZmlnIiwibmFtZSI6ImV0aENsaWVudFVSTCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcImV0aENsaWVudFVSTFwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJFdGhlcmV1bSBDbGllbnQgVVJMXCJ9LFwiY29udGVudE1vZGVcIjpcIlJFQURcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg0NDQ2MTYxOTMxLFwicmV2aXNpb25JZFwiOlwiMjIzOTk2MjQ3YTUwMWZlZWQyYjQwYzRkM2I0NDA4N2NcIixcInZhbHVlXCI6XCJodHRwOi8vZGVtb2JjOjg1NDVcIixcInR5cGVcIjpcIlN0cmluZ1wifSIsImNvbnRlbnRNb2RlIjoiUkVBRCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NDQ0NjE2MTkzMX1dLCJwbGF0Zm9ybTYuaG9tZXBhZ2VzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5ob21lcGFnZXMiLCJuYW1lIjoiRGVtbyBIb21lIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiRGVtbyBIb21lXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkRlbW8gSG9tZVwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU3NTk4ODYxNDg2NixcInJldmlzaW9uSWRcIjpcImJmZmNhMDc4NWFmN2E1Y2I0ZjIyZDEzZGUxNDU5MDhjXCIsXCJtb2R1bGVzXCI6W3tcImlkXCI6XCJwNl9kZW1vLkNvdW50UkZRc1wiLFwib3JkZXJcIjowLFwidHlwZVwiOlwiY291bnRlcnNcIixcIndpZHRoXCI6XCJzbWFsbFwiLFwiaGVpZ2h0XCI6XCJtZWRpdW1cIixcImRhdGFcIjpudWxsfSx7XCJpZFwiOlwicDZfZGVtby5Db3VudFF1b3Rlc1wiLFwib3JkZXJcIjoxLFwidHlwZVwiOlwiY291bnRlcnNcIixcIndpZHRoXCI6XCJzbWFsbFwiLFwiaGVpZ2h0XCI6XCJtZWRpdW1cIixcImRhdGFcIjpudWxsfSx7XCJpZFwiOlwicDZfZGVtby5Db3VudEFjY2VwdGVkUE9zXCIsXCJvcmRlclwiOjIsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9LHtcImlkXCI6XCJwNl9kZW1vLkNvdW50UmVqZWN0ZWRQT3NcIixcIm9yZGVyXCI6MyxcInR5cGVcIjpcImNvdW50ZXJzXCIsXCJ3aWR0aFwiOlwic21hbGxcIixcImhlaWdodFwiOlwibWVkaXVtXCIsXCJkYXRhXCI6bnVsbH1dfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU3NTk4ODYxNDg2Nn1dLCJwbGF0Zm9ybTYuZGF0YW1vZGVscyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuZGF0YW1vZGVscyIsIm5hbWUiOiJUcmFuc2FjdGlvbkluZm8iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJUcmFuc2FjdGlvbkluZm9cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiVHJhbnNhY3Rpb25JbmZvIGRhdGFtb2RlbFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU3NTk4ODYxNDgyNCxcInJldmlzaW9uSWRcIjpcImYxZTAzY2E0MGRlYjM5NDFjOGFkN2ZlMjg5Y2M4MzE0XCIsXCJzY2hlbWFcIjpcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCIgZW5jb2Rpbmc9XFxcIlVURi04XFxcIj8+XFxuPHhzZDpzY2hlbWEgeG1sbnM6eHNkPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYVxcXCIgYXR0cmlidXRlRm9ybURlZmF1bHQ9XFxcInVucXVhbGlmaWVkXFxcIlxcbiAgICAgICAgICAgIGJsb2NrRGVmYXVsdD1cXFwiXFxcIlxcbiAgICAgICAgICAgIGVsZW1lbnRGb3JtRGVmYXVsdD1cXFwicXVhbGlmaWVkXFxcIlxcbiAgICAgICAgICAgIGZpbmFsRGVmYXVsdD1cXFwiXFxcIj5cXG4gICA8eHNkOmVsZW1lbnQgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJUcmFuc2FjdGlvbkluZm9cXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgPHhzZDpjb21wbGV4VHlwZSBtaXhlZD1cXFwiZmFsc2VcXFwiPlxcbiAgICAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiSWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiQ3JlYXRpb25EYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRyYW5zYWN0aW9uVHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUcmFuc2FjdGlvbk51bWJlclxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJTb3VyY2VTeXN0ZW1cXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVGFyZ2V0U3lzdGVtXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlNlbmRlclxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJGaW5hbFJlY2lwaWVudFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUcmFuc2ZlclByb3RvY29sXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkRlbGl2ZXJlZFZpYVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJTb3VyY2VEb2N1bWVudEZvcm1hdFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJTb3VyY2VEb2N1bWVudFVSSVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlBpdm90RG9jdW1lbnRGb3JtYXRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiUGl2b3REb2N1bWVudFVSSVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJQaXZvdERvY3VtZW50Q29udGVudFR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVGFyZ2V0RG9jdW1lbnRGb3JtYXRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVGFyZ2V0RG9jdW1lbnRVUklcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJBdHRhY2htZW50c1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJBdHRhY2htZW50c1xcXCIvPlxcblxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiVGVjaG5pY2FsU3RhdHVzQ29kZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJUZWNobmljYWxTdGF0dXNNZXNzYWdlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlRlY2huaWNhbFN0YXR1c0RhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRnVuY3Rpb25hbFN0YXR1c0NvZGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRnVuY3Rpb25hbFN0YXR1c0RhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRmxhZ3NcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJPcmdQYXRoXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiS2V5VmFsdWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiS2V5VmFsdWVcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIklzc3Vlc1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJJc3N1ZXNcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkF1ZGl0VHJhaWxcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZSBtaXhlZD1cXFwiZmFsc2VcXFwiPlxcbiAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJSZWNvcmRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZSBtaXhlZD1cXFwiZmFsc2VcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJDb2RlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkRhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiTWVzc2FnZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgICAgICAgICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD5cXG4gICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICAgICAgICAgICA8L3hzZDplbGVtZW50PlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJXb3JrZmxvd1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJXRkluc3RhbmNlc1xcXCIvPlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgICAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgICAgIDx4c2Q6dW5pcXVlIG5hbWU9XFxcIlRyYW5zYWN0aW9uSW5mb1xcXCI+XFxuICAgICAgICAgPHhzZDpzZWxlY3RvciB4cGF0aD1cXFwiLlxcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZmllbGQgeHBhdGg9XFxcIklkXFxcIi8+XFxuICAgICAgPC94c2Q6dW5pcXVlPlxcbiAgIDwveHNkOmVsZW1lbnQ+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiVGhyZWFkXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRyYW5zYWN0aW9uSW5mb0lkXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkJ1c2luZXNzRG9jTmFtZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJNZXNzYWdlQ29udGVudFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJEYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJLZXlWYWx1ZVxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJLZXlcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVmFsdWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIkF0dGFjaG1lbnRzXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiQXR0YWNobWVudFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJBdHRhY2htZW50XFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiQXR0YWNobWVudFxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJVUklcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiQ29udGVudFR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIklzc3Vlc1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIklzc3VlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIklzc3VlXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiSXNzdWVcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiTGV2ZWxcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiVHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJNZXNzYWdlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZpZWxkXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZpZWxkVHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJWYWx1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJQYXRoXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkxpc3RPZlZhbHVlc1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJMaXN0T2ZWYWx1ZXNcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJMaXN0T2ZWYWx1ZXNcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJWYWx1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiV0ZJbnN0YW5jZXNcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGbG93TmFtZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJBY3RpdmVJbnN0YW5jZUlkXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiSW5zdGFuY2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiV0ZJbnN0YW5jZVxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIldGSW5zdGFuY2VcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiaWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwic3RhcnREYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImVuZERhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwibGFzdFVzZXJFbWFpbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGF0dXNcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiZmxpbmtcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwiRkxJTktcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwic3RlcFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJXRlN0ZXBcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRlN0ZXBcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwic3RlcElkXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInN0YXR1c1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJhY3Rpb25lZEJ5RW1haWxcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwic3RhcnREYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImVuZERhdGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiYXNzaWduZWRUb05hbWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiYXNzaWduZWVzXFxcIiBuaWxsYWJsZT1cXFwidHJ1ZVxcXCIgdHlwZT1cXFwiV0ZBc3NpZ25lZXNcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImRlc2NyaXB0aW9uXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIldGRGVzY3JpcHRpb25NYXBcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwicGFyYW1ldGVyXFxcIiBuaWxsYWJsZT1cXFwidHJ1ZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiS2V5VmFsdWVcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJGTElOS1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJ2aWV3XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiaWRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwidHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiV0ZBc3NpZ25lZXNcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJhc3NpZ25lZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiV0ZEZXNjcmlwdGlvbk1hcFxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIj5cXG4gICAgICAgICA8eHNkOmFueSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZXNwYWNlPVxcXCIjI2FueVxcXCIgcHJvY2Vzc0NvbnRlbnRzPVxcXCJsYXhcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG48L3hzZDpzY2hlbWE+XCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTc1OTg4NjE0ODI0fV0sInBsYXRmb3JtNi53b3JrZmxvd3N0ZXBzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi53b3JrZmxvd3N0ZXBzIiwibmFtZSI6IkhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJIYW5kbGVSZXF1ZXN0Rm9yUXVvdGF0aW9uXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlByb3ZpZGUgUXVvdGUgb3IgRGVjbGluZSBSRlFcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NzU5ODg2MTU5NzIsXCJyZXZpc2lvbklkXCI6XCI0MDI1ODc4ZDhkZDJiZmMwNWZjOWY3Y2U1ZmFmMmQzMlwiLFwieG1sU3RlcFwiOlwiPFdvcmtmbG93U3RlcCBlbmFibGVkPVxcXCJ0cnVlXFxcIj5cXG4gICAgXFxuICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgIDxFTj5SZXF1ZXN0Rm9yUXVvdGF0aW9uIC0gQW5zd2VyIG9yIGRlY2xpbmU8L0VOPlxcbiAgICAgICAgPEZSPkRldmlzIC0gUsOpcG9uZHJlIG91IGTDqWNsaW5lcjwvRlI+XFxuICAgIDwvRGVzY3JpcHRpb24+XFxuICAgIFxcbiAgICA8QWxsb3dUcmFuc2FjdGlvbkVkaXQ+QVNTSUdORUU8L0FsbG93VHJhbnNhY3Rpb25FZGl0PlxcbiAgICA8VHJhbnNhY3Rpb25EYXRhTW9kZWw+cDZfZGVtby5UcmFuc2FjdGlvbkluZm88L1RyYW5zYWN0aW9uRGF0YU1vZGVsPlxcbiAgICA8Vmlld05hbWVzPlxcbiAgICAgICAgPEl0ZW0+cDZfZGVtby5UcmFuc2FjdGlvbnM8L0l0ZW0+XFxuICAgICAgICA8V29ya0l0ZW0+cDZfZGVtby5Xb3JrZmxvdyBUYXNrczwvV29ya0l0ZW0+XFxuICAgIDwvVmlld05hbWVzPlxcblxcbiAgICA8QWxsb3dSZWNhbGw+ZmFsc2U8L0FsbG93UmVjYWxsPlxcbiAgICA8QWxsb3dBcHByb3ZlckRlbGVnYXRpb24+ZmFsc2U8L0FsbG93QXBwcm92ZXJEZWxlZ2F0aW9uPlxcbiAgICBcXG4gICAgPFNlbmRFbWFpbHM+ZmFsc2U8L1NlbmRFbWFpbHM+XFxuXFxuICAgIDxUdGwgaWQ9XFxcImV4cGlyZVxcXCI+MTIwPC9UdGw+XFxuICAgIFxcblxcdDxXb3JrSXRlbSBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlclxcXCIvPlxcbiAgICBcXG4gICAgPEFzc2lnbmVlIG5hbWU9XFxcIkRlbW9BcHBcXFwiIHBhdGg9XFxcIi8ke0lOU1RBTkNFX0lEfVxcXCIgdHlwZT1cXFwiVU5JVFxcXCIgc2NvcGU9XFxcIio9KlxcXCI+XFxuICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgPEVOPlN1cHBsaWVyPC9FTj5cXG4gICAgICAgICAgICA8RlI+Rm91cm5pc3NldXI8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgPC9Bc3NpZ25lZT5cXG4gICAgXFxuXFx0PFN0YXR1c0xhYmVscz5cXG5cXHQgICAgPExhYmVsIG5hbWU9XFxcIlJlY2VpdmVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPlJlY2VpdmVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+UmXDp3VlPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQ3JlYXRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5DcmVhdGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+Q3LDqcOpZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIkRlcHJlY2F0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+RGVwcmVjYXRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPkFubnVsw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiUHJvdmlkZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+UXVvdGUgcHJvdmlkZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5RdW90YXRpb24gZm91cm5pZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIkRlY2xpbmVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPkRlY2xpbmVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+RMOpY2xpbsOpZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICA8L1N0YXR1c0xhYmVscz5cXG4gICAgXFxuICAgIDxBY3Rpb25zPlxcbiAgICAgICAgPEFjdGlvbiBpZD1cXFwic2VuZFxcXCIgc3RhdHVzPVxcXCJQcm92aWRlZFxcXCIgdHlwZT1cXFwiRk9STVxcXCIgc3RvcD1cXFwidHJ1ZVxcXCIgc2NyaXB0PVxcXCJwNl9kZW1vLldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvblByb3ZpZGVRdW90ZVxcXCI+XFxuICAgICAgICAgICAgPFN0eWxlPmljb246ZmEtY2hlY2ssYnRuOmJ0bi1zdWNjZXNzPC9TdHlsZT5cXG5cXG4gICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgIDxFTj5Qcm92aWRlIFF1b3RlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkZvdXJuaXIgUXVvdGF0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0xhYmVsPlxcblxcbiAgICAgICAgICAgIDxGb3JtR2VuZXJhdG9yPnA2X2RlbW8uV0ZIYW5kbGVSRlEtUHJvdmlkZUZvcm1Gb3JRdW90ZUNyZWF0aW9uPC9Gb3JtR2VuZXJhdG9yPlxcbiAgICAgICAgICAgXFxuICAgICAgICAgICA8UGFyYW1ldGVyPlxcbiAgICAgICAgICAgICAgICA8TmFtZT5yZnE8L05hbWU+XFxuICAgICAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgIDxFTj5yZnE8L0VOPlxcbiAgICAgICAgICAgICAgICAgICAgPEZSPnJmcTwvRlI+XFxuICAgICAgICAgICAgICAgIDwvTGFiZWw+XFxuICAgICAgICAgICAgICAgIDxNYW5kYXRvcnk+ZmFsc2U8L01hbmRhdG9yeT5cXG4gICAgICAgICAgICAgICAgPElucHV0VHlwZT5URVhUPC9JbnB1dFR5cGU+XFxuICAgICAgICAgICAgPC9QYXJhbWV0ZXI+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgPFBhcmFtZXRlcj5cXG4gICAgICAgICAgICAgICAgPE5hbWU+bGluZXM8L05hbWU+XFxuICAgICAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgIDxFTj5saW5lczwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+bGluZXM8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVDwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgPEFjdGlvbiBpZD1cXFwiZGVwcmVjYXRlXFxcIiBzdGF0dXM9XFxcIkRlY2xpbmVkXFxcIiB0eXBlPVxcXCJBQ1RJT05cXFwiIHN0b3A9XFxcInRydWVcXFwiIHNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25EZWNsaW5lXFxcIj5cXG4gICAgICAgICAgICA8U3R5bGU+aWNvbjpmYS10aW1lcyxidG46YnRuLWRhbmdlcixjb2xvcjpkYW5nZXI8L1N0eWxlPiBcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgIDxFTj5EZWNsaW5lPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkTDqWNsaW5lciBxdW90LjwvRlI+XFxuICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8UGFyYW1ldGVyPlxcblxcdCAgICAgICAgICAgIDxOYW1lPnJlYXNvbjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlJlYXNvbjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TW90aWY8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVEFSRUE8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgIDwvQWN0aW9uPlxcbiAgICAgICAgXFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJleHBpcmVcXFwiIHN0YXR1cz1cXFwiRVhQSVJFRFxcXCIgdHlwZT1cXFwiRVhQSVJFXFxcIiBkaXNwbGF5PVxcXCJmYWxzZVxcXCI+XFxuXFx0XFx0XFx0PEV4cGlyeSBlcnJvcj1cXFwiZmFsc2VcXFwiLz5cXG4gICAgICAgIDwvQWN0aW9uPlxcbiAgICA8L0FjdGlvbnM+XFxuICAgIFxcbjwvV29ya2Zsb3dTdGVwPlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU3NTk4ODYxNTk3Mn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi53b3JrZmxvd3N0ZXBzIiwibmFtZSI6IkhhbmRsZVB1cmNoYXNlT3JkZXIiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJIYW5kbGVQdXJjaGFzZU9yZGVyXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkFjY2VwdCBvciBSZWplY3QgdGhlIE9yZGVyXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTc1OTg4NjE1OTU2LFwicmV2aXNpb25JZFwiOlwiYWU5MGNiYWZiNmY4NTQyMzcwZTQ3YmM1ZmQ5ZjkyMjdcIixcInhtbFN0ZXBcIjpcIjxXb3JrZmxvd1N0ZXAgZW5hYmxlZD1cXFwidHJ1ZVxcXCI+XFxuICAgIFxcbiAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICA8RU4+UHVyY2hhc2VPcmRlciAtIEFjY2VwdCBvciByZWplY3Q8L0VOPlxcbiAgICAgICAgPEZSPkNvbW1hbmRlIC0gQWNjZXB0ZXIgb3UgcmVmdXNlcjwvRlI+XFxuICAgIDwvRGVzY3JpcHRpb24+XFxuICAgIFxcbiAgICA8QWxsb3dUcmFuc2FjdGlvbkVkaXQ+QVNTSUdORUU8L0FsbG93VHJhbnNhY3Rpb25FZGl0PlxcbiAgICA8VHJhbnNhY3Rpb25EYXRhTW9kZWw+cDZfZGVtby5UcmFuc2FjdGlvbkluZm88L1RyYW5zYWN0aW9uRGF0YU1vZGVsPlxcbiAgICA8Vmlld05hbWVzPlxcbiAgICAgICAgPEl0ZW0+cDZfZGVtby5UcmFuc2FjdGlvbnM8L0l0ZW0+XFxuICAgICAgICA8V29ya0l0ZW0+cDZfZGVtby5Xb3JrZmxvdyBUYXNrczwvV29ya0l0ZW0+XFxuICAgIDwvVmlld05hbWVzPlxcblxcbiAgICA8QWxsb3dSZWNhbGw+ZmFsc2U8L0FsbG93UmVjYWxsPlxcbiAgICA8QWxsb3dBcHByb3ZlckRlbGVnYXRpb24+ZmFsc2U8L0FsbG93QXBwcm92ZXJEZWxlZ2F0aW9uPlxcbiAgICBcXG4gICAgPFNlbmRFbWFpbHM+dHJ1ZTwvU2VuZEVtYWlscz5cXG4gICAgPEVtYWlsVGVtcGxhdGUgbW9kZWxTY3JpcHQ9XFxcInA2X2RlbW8uV0ZIYW5kbGVQTy1CdWlsZEVtYWlsXFxcIj5maWxlOi8vJHtQNl9EQVRBfS9yZXNvdXJjZXMvdGVtcGxhdGVzL3A2ZGVtb19QT1Jldmlldy5mdGw8L0VtYWlsVGVtcGxhdGU+XFxuICAgIFxcbiAgICA8VHRsIGlkPVxcXCJleHBpcmVcXFwiPjEyMDwvVHRsPlxcbiAgICBcXG5cXHQ8V29ya0l0ZW0gc2NyaXB0PVxcXCJwNl9kZW1vLldGV29ya2Zsb3dUYXNrRW5oYW5jZXJcXFwiLz5cXG4gICAgXFxuICAgIDxBc3NpZ25lZSBuYW1lPVxcXCJEZW1vQXBwXFxcIiBwYXRoPVxcXCIvJHtJTlNUQU5DRV9JRH1cXFwiIHR5cGU9XFxcIlVOSVRcXFwiIHNjb3BlPVxcXCIqPSpcXFwiPlxcbiAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgIDxFTj5TdXBwbGllcjwvRU4+XFxuICAgICAgICAgICAgPEZSPkZvdXJuaXNzZXVyPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvQXNzaWduZWU+XFxuICAgIFxcblxcdDxTdGF0dXNMYWJlbHM+XFxuXFx0ICAgIDxMYWJlbCBuYW1lPVxcXCJSZWNlaXZlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5SZWNlaXZlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlJlw6d1ZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIkNyZWF0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+Q3JlYXRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPkNyw6nDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJEZXByZWNhdGVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPkRlcHJlY2F0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Bbm51bMOpZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIkFjY2VwdGVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPk9yZGVyIGFjY2VwdGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+Q29tbWFuZGUgYWNjZXB0w6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiUmVqZWN0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+UmVqZWN0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5SZWZ1c8OpZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICA8L1N0YXR1c0xhYmVscz5cXG4gICAgXFxuICAgIDxBY3Rpb25zPlxcbiAgICAgICAgPEFjdGlvbiBpZD1cXFwiYWNjZXB0XFxcIiBzdGF0dXM9XFxcIkFjY2VwdGVkXFxcIiB0eXBlPVxcXCJBQ1RJT05cXFwiIHN0b3A9XFxcInRydWVcXFwiIHNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUhhbmRsZUFjdGlvbkFjY2VwdE9yZGVyXFxcIj5cXG5cXG4gICAgICAgICAgICA8U3R5bGU+aWNvbjpmYS1jaGVjayxidG46YnRuLXN1Y2Nlc3M8L1N0eWxlPlxcblxcbiAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgPEVOPkFjY2VwdCBPcmRlcjwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5BY2NlcHRlciBjb21tYW5kZTwvRlI+XFxuICAgICAgICAgICAgPC9MYWJlbD5cXG5cXG4gICAgICAgICAgIDxQYXJhbWV0ZXI+XFxuICAgICAgICAgICAgICAgIDxOYW1lPnNhbGVzb3JkZXJudW1iZXI8L05hbWU+XFxuICAgICAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgIDxFTj5TYWxlcyBPcmRlciBOdW1iZXI8L0VOPlxcbiAgICAgICAgICAgICAgICAgICAgPEZSPk51bcOpcm8gZGUgY29tbWFuZGUgY2xpZW50PC9GUj5cXG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgPE1hbmRhdG9yeT5mYWxzZTwvTWFuZGF0b3J5PlxcbiAgICAgICAgICAgICAgICA8SW5wdXRUeXBlPlRFWFQ8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG5cXG4gICAgICAgIDwvQWN0aW9uPlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgIDxBY3Rpb24gaWQ9XFxcInJlamVjdFxcXCIgc3RhdHVzPVxcXCJSZWplY3RlZFxcXCIgdHlwZT1cXFwiQUNUSU9OXFxcIiBzdG9wPVxcXCJ0cnVlXFxcIiBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZIYW5kbGVQTy1IYW5kbGVBY3Rpb25SZWplY3RPcmRlclxcXCI+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgPFN0eWxlPmljb246ZmEtdGltZXMsYnRuOmJ0bi1kYW5nZXIsY29sb3I6ZGFuZ2VyPC9TdHlsZT4gXFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICA8RU4+UmVqZWN0PC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlJlZnVzZXI8L0ZSPlxcbiAgICAgICAgICAgIDwvTGFiZWw+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgPFBhcmFtZXRlcj5cXG5cXHQgICAgICAgICAgICA8TmFtZT5yZWFzb248L05hbWU+XFxuICAgICAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgIDxFTj5SZWFzb248L0VOPlxcbiAgICAgICAgICAgICAgICAgICAgPEZSPk1vdGlmPC9GUj5cXG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgPE1hbmRhdG9yeT5mYWxzZTwvTWFuZGF0b3J5PlxcbiAgICAgICAgICAgICAgICA8SW5wdXRUeXBlPlRFWFRBUkVBPC9JbnB1dFR5cGU+XFxuICAgICAgICAgICAgPC9QYXJhbWV0ZXI+XFxuICAgICAgICAgICAgXFxuICAgICAgICA8L0FjdGlvbj5cXG4gICAgICAgIFxcbiAgICAgICAgPEFjdGlvbiBpZD1cXFwiZXhwaXJlXFxcIiBzdGF0dXM9XFxcIkVYUElSRURcXFwiIHR5cGU9XFxcIkVYUElSRVxcXCIgZGlzcGxheT1cXFwiZmFsc2VcXFwiPlxcblxcdFxcdFxcdDxFeHBpcnkgZXJyb3I9XFxcImZhbHNlXFxcIi8+XFxuXFx0XFx0PC9BY3Rpb24+XFxuICAgICAgICBcXG4gICAgPC9BY3Rpb25zPlxcbiAgICBcXG48L1dvcmtmbG93U3RlcD5cXG5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1NzU5ODg2MTU5NTZ9XSwicGxhdGZvcm02LmJ1bmRsZWRyZXNvdXJjZXMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmJ1bmRsZWRyZXNvdXJjZXMiLCJuYW1lIjoiRGVtb1NtYXJ0Q29udHJhY3QiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJEZW1vU21hcnRDb250cmFjdFwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEZW1vIFNtYXJ0IENvbnRyYWN0IEpBUiBnZW5lcmF0ZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2FtYWx0by9zb2xpZGl0eS1qYXItYnVpbGRlclwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU3NjAxNzI4NzM2OSxcInJldmlzaW9uSWRcIjpcIjI4YTVlN2FhYjg0NzU2MGI4M2E1YWU5MjA0Y2YyMWZhXCIsXCJpdGVtQnl0ZXNcIjpcIlVFc0RCQlFBQUFnSUFJU1FhRTlRc1IxOW9RQUFBQk1CQUFBVUFBQUFUVVZVUVMxSlRrWXZUVUZPU1VaRlUxUXVUVWFOejcwS3dqQVFCL0E5a0hmSUMxeEpxb1BOcUM0V0NvTEZ3UzBrVndrbWFVaFR3YmMzM1N4ZGhKdnU0OGYvT2hYc2dGT0dPNmJKamtFeVVYRktMajQ2OUJpeXlxVUp2YzBPSlRQb1IxQXh3dVJWeXFESGtKUFNlYlArWTlXVTNDSnFPMWo5SDNXY3JUUFFtaGNzZHd0eDJQaG5sUXRSYzlHQUVNQ2JublBKOTZVZWxKd1NscW1CNDBleVRyMHhzRllsZG5YejB3YTJxK3JsdTNXaWRWcEt2bEJMQXdRS0FBQUlBQUNFa0doUEFBQUFBQUFBQUFBQUFBQUFDUUFBQUUxRlZFRXRTVTVHTDFCTEF3UUtBQUFJQUFDRWtHaFBBQUFBQUFBQUFBQUFBQUFBQXdBQUFHbHZMMUJMQXdRS0FBQUlBQUNFa0doUEFBQUFBQUFBQUFBQUFBQUFEUUFBQUdsdkwzQnNZWFJtYjNKdE5pOVFTd01FQ2dBQUNBQUFoSkJvVHdBQUFBQUFBQUFBQUFBQUFCSUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTlRU3dNRUNnQUFDQUFBaEpCb1R3QUFBQUFBQUFBQUFBQUFBQlVBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVFTd01FQ2dBQUNBQUFoSkJvVHdBQUFBQUFBQUFBQUFBQUFBOEFBQUJOUlZSQkxVbE9SaTl0WVhabGJpOVFTd01FQ2dBQUNBQUFoSkJvVHdBQUFBQUFBQUFBQUFBQUFDUUFBQUJOUlZSQkxVbE9SaTl0WVhabGJpOWpiMjB1WVcxaGJIUnZMbkJzWVhSbWIzSnROaTlRU3dNRUNnQUFDQUFBaEpCb1R3QUFBQUFBQUFBQUFBQUFBRHdBQUFCTlJWUkJMVWxPUmk5dFlYWmxiaTlqYjIwdVlXMWhiSFJ2TG5Cc1lYUm1iM0p0Tmk5a1pXMXZMV0Z3Y0MxemJXRnlkQzFqYjI1MGNtRmpkQzlRU3dNRUZBQUFDQWdBaEpCb1Q5anpwOENpQVFBQTZBSUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TkM1amJHRnpjNVZTWFU4VFFSUTlVNWF1TGF0VVZCUlI0d014TFpnT1FlUUYwcGRHRWszVkNOajMyZDNiTW1RN1UyZG5NZndqWG4wd0pEejRBL2hSeExzTEQ4WVlBNW5NM0k4NTk4NDVrM3R4ZWY0THdDWmVORENEeFNZQ1BBN3hKTVNTUU4wZjZueGxYV0J0b0syY1pzcVBySnRzeVpRbVZ1YUozS052QmVWKzE3b3ZoZlhLYTJ2eWJTN2IwVWI3bmtDM2ZZdTZ6bEFnNk51VUJPWUgydENuWWhLVE8xQnh4cG1GZ1UxVU5sUk9sL0YxTWlqcENVVHZqU0hYejFTZUU0ZmRtNys1c3JISmRCdjdlbXlVTHh5My9EQ3diaXkvVS96bVNLcFl5NE9US2UzUmlCeVpoSGIrdWt3VjkyRkFMc2ZFREpTblZIN1Z4bSs4M2RydWNlUG12aTFjUXJ1NkpMdjBMd0xkSTNXc1dPODdrMlEyMTJiOGtmeWhUVU04amJDTVp4Rm1VWThRNHJuQTY5dW9FbGoranc2QnpvMmJDY3laMkgwZWxabnlkMSsxTzMvOHd0UlpieE9ieWNRNjR2b0pnL29xeTFqOFRMc3p4RXNlcVlDblM3UmFwWlRTNHgzaUR0c0dlejNVZUFITjFiV2ZFS3RucVAzZ3FJWW1uL1VLZTRvNVBoZXZVSWh3RDZpODJlbyt3SHlGYitGK1pSZndnRzJBaDNpRXV4V09pVlFWK0ExUVN3TUVGQUFBQ0FnQWhKQm9UOC9Db0UyZ0FRQUE1UUlBQURJQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE9TNWpiR0Z6YzVWU1hVOFVNUlE5WFlZZGRoMWxSVUVSTlQ3d3NBdG1pNEVRQ0dRZjNFZzBXVTNrWTE5ODZzNWNocExaZHVsME1Qd3NINHlKRC93QWZoVGh6dWlETWNaQW12YmUyNTV6ZTA3VHErdWZsd0EyOExLQktTdzBFZUJKaUtjaEZnWHEva1RueTJzQ3F3TnQ1U1JUL3RpNjhhWk1hR3hsSHN0OU9pc285M3ZXZlM2c1YxNWJrKzh3YlZjYjdYc0MzZllkZUoyaFFOQzNDUW5NRHJTaFQ4VjRSTzVRalRMZW1SdllXR1ZENVhSWi85NE1TbmtDMFFkanlQVXpsZWZFWmZmMmR5Ni8yV2E1alFPZEd1VUx4eTNmRDZ4TDVWY2FyWjlLTmRMeThHSkMrM1JNamt4TXUzOGRKb3I3TUNDWEtiRUM1U21SUjlyNHJaMGV0MjBlMk1MRnRLZExxWXYvdXI1N3FzNFZ1MzFuNHN6bTJxUWZ5Wi9ZSk1TekNFdDRIbUVhOVFnaFhnaTh2b3NuZ2FYL3VCRG8zTHFad0V4S3ZxeVoxbTUvZWR2NTR3a216bm9iMjB6RzFoSFR4NHpxcXl4ajcxUHR6aEN2K0Q4Ri9MVkVxMVU2S1RPZUlXWTROampyb2NZRGFLNnNmb2RZK1lIYU42NXFhUEphcjdBVzkzaGQrSVZDaEFkQWxVMVg1d0ZtSzN3TEQ2czRoMGNjQXp6R1BPNVhPQlpTTVhBRFVFc0RCQlFBQUFnSUFJU1FhRS9LTVBPK0JnUUFBTUFKQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qWXVZMnhoYzNPdFZ2dHpFMVVVL202YWRFbTZRS0V0VWtUd1VTRk5IN2NDMWtkcnRZK05ScmZCUGl3aUltNTJMK2wydG52ajdrMHAvNDh6L29xT0JaRVpobkhHRi81UGp1ZHVZaU50R0pxUkpIc2Y1OXo3bmZPZGUrN1pQUDc3NTRjQUxzSExvaCtUT1F6Z3JTeE4zODVSODQ2QmQzUElhRWtHVXptY3gzUVAzc09NZ2ZkN2tNTUhCbWExWnM3QXZPNFhERmk2THhyNE1FZG9IeGtvR2ZqWXdDY00zV3JkajRjbUdFWnNYL0phNEtpYk10cWM1SjdZbER4MitiTDRwaTVpVlpUUlVsMHFSL2t5aktkbzI3UWYrbXFHWVR6ZndiN2hOWWIwdlBRRXcxSGJEMFc1dmxrUjBhcFRDVWh5M0phdUU2dzVrYS9uVFdGYXU4ZGdsc0pRUlBPQkU4ZUNwdU1IdHpsMFlaTGN6VGkxV25DYjRlUnljV2xadU1MZkVwNjFKVUsxTE9JYXJTSkxLbS9McU1wdmljckZEVjZMcEpLdURMZ3JJOEUzaFZxWFhzeWo1bUp1eStyVWNBYytQTTBxZWRZVnlLb20xSkZ0aGg2aGNkYWNnSXdaV0tUb1dTM0JGVit0MnhxMjhCOVl0YzNuWmFnaXgxVkQrOWNTNUdGMXV5YThWa0FXbmcvQmMzbDd3OWx5ZU9DRVZYNjVzaUZjUmJIYkoyTElXZHV1cUNWNEJzb00yUlcvR2pxcUhwRXYzKzNmb0wyTEJMRWhvOXY4WmoxMGs2MjgyQnhOZHhiUzUwRjJSck5Za2ZYSUZVVmZaKzlndS8zam1ncGRBQ3QwQXhuN1lYVXg4Y2ZBWlJPZllzbkVDemhwWWhETEpsYXdhdUl6MEsyWisvL3VtUmpDNnlhdTRITURWMDE4Z1dzTXAxc3hjaW8rOXh3Q29TeUkrU3ExSnI3RWRZYlV0VGtUWDJHV29UODVoRTFIcmZNNXYxb0tsYWlLeU1RTmZNM1EyenFnRlJVUkt4TU9LZ3lqblp5Q2lWZndHdTNwNUhZL1licVJHd3hubjVFY0JseUcvRUV2QjBOZnk4UnVsaklNSDloUHFqelJubU1wQnZKV284YlpCNms4Q1NhMzFEcGxsaEpSby95MEtQNkxwaXRLWHBmWll6b05ySG1ydEdZdDNMRFdyUElxUmNWKzJuRW5IdW5zZFZ4WHhCVFdDWG9qZk50SmFYOEdkS2UxdFlPNjFWY1ZxaXpEVXVpSmJlRTF0RlFQODgwaVUxZCt3RzAvMXZTT1BDbWhXTkZlaG9GOHFXMUZPa1RhQkk5U1A5OTJSY3IzYUprZngzWGh6UkxTQ2J2ZEZkR0hVcThFK2hXMzk1YVFhcUF0Vjd4TUwrb0JFQ1JZYjYrdUNmUnZvSXVlUVp3aTZZczBta0dLdmtDdU1MSURWcmlIMVBjMFMrRTB0ZDIwQnZnRkwxRjdvckVLWndnVHlVaWpNZnJTYld0aS9VbllhZXI5d285Z1A2QnI1Q2VrRng4Z2MvVWV1c3RqaEcrTWpkN0ZvYTc3eUtid0NMbjc2R0hVbS9UYndlRkVsOTZqTzdLRG80a2lzMGZSdTROalkzZDJYVDBEZzlwZlllSTNvdnc3RWZ3RGI1SkRaVHhHRlg4bEZBb041M1lwK0xxV2tlc21ydU1jaGdtcG4rcGtBU1BvNnAwbFdxTWswYlF1TmtPVUxZdzh3dkc3Nkx2VE5rSm1NczQyNGNmb1NaTmtuRnFlckovQUcwbC9nUUMxN2hJNWVKWkdweWhxL1doOE1pUjlsVERPdzBZZTJYOEFVRXNEQkJRQUFBZ0lBSVNRYUUrQXZOaGFNUTRBQUowekFBQW9BQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aUzVqYkdGemM4MWFDV0FjVjNuKzNtcWxrZFpqeFpadDJYS2NLTEZsUjRmbG5kM1pTNDdpb2tpeVk1Q1ZWRkpzRkdpVDBjeXN0UEZxVit5T1pEdWtwYlFFUWlEaFBoS08wRktnTGFVTlJ5UWJKWkJDU3d1OUM3MEx2VS9vQVcxcEc5clEvNStaUGJUYXRVYVdFa2UyM3J6ei83Ly9lLy83MzVzMytzcHpuLzBjZ0lqb0M4Q0hKeVI4c2hHZkN1QTJmSnFUejNEeUpDZUxFcFlha1pad01ZQkwrS3lFWlFsUEJiQVZUd2ZRaU05SitEeVBmNllST1FtL0ZNQU9mQ0dBTCtLWHVmSlhHckVnNFVzQjdNSFRUVlQrVmE3OE5RbGYzb0t2NE5jRDJJZmY0Tnh2YnNGdjRiYzUrUjBKdnl2aDl3STRnSzhHc0I5ZmE2TGM3M1B1RDdqakgyNUJBSC9FZFgvTXlaK3doRDlsd1grMkJWL0hOeVQ4ZVFCQnh2VVgrRXNKZjhYYS9qcUFNUDRtZ0wvRjMzSHU3N251SHpqNVIwNytpWk52Y3ZLdEFQNFovOEs1ZitYazN6ajVOaWZma2ZEdmpmZ1BDZjhad0NDK0srRy9BaGpHZHdNWXdIOUwrQitCNjhldGJNNDBoalJMRzV6Uk10T21NYnhnWnF3eE16K1h6ZVJOQWZsa0ptUG1CdE5hUG0vbUJScHVQVGs2TURZcDBESnlyN2FnQmRNMEpqaHU1VktaNlpzRnRnN1NJRXZMV0tlMTlEd052dWI0bmFPRGQ0OVAzRDQyUERRME1ERWcwT2pVREU4VXNpYzR1N3ZVWmZDMmdkRVR3ME4zRDU4ZUhxV1c5cEZzYmpwNHpweFM3dzFxVTZtZ1FVQ3RDM05tUG1qakpKME4vYWxNeWpvbWNLRnpOYVN5MFhPNXJKWFZzK25nR1M2V3QraTVDM05XTmpoSVBKRElsSmJPMyt4SW10V3NtZUN0cWVtVEdjdWNObk0xYXJ0T0MvZ0hzd2JiTzVMS21LUHpzMU5tYmtLYlNwdE1VMWJYMHFlMVhJckxicVhmbWtrUmx4MGpxV3h3THExWnlXeHVOaFkwek5sc01LOEh4MU96YzJtVDUwV2JOc25BYS9Sc3hzcHB1alZnR0RrelR3UHJiZHdDZTJ1Yko3QkZMOWxEODN4NWUyazJwclg4SGJtVVR2QmFxOXZwOUJsSnphWXNnY0NRT1pjemRjMHlEWUcyc1htU00ydWVUdVZUWk9CQUpwT2xXVXFSTHhTRjJaTlNHa1BDOHBzNVhhVlc2M3lRVUFZSFhjNU9zRlhaaFpUaFR0UU9mWFdEd0NGdkFnVHV2MUxRSkhVaXAyWHlKSkY0T2FWbHROb09WZHZOV3F4Vk1nUnVYRk9Od01JbTQvYk1keUJmakM5RWMyZFhOYVU2OVFpT2tmZGI1cUNXVHJPakplY3p0a0tCL1RVRHdIRzNEL1Z2R2s5Tlp6UnJQa2ZlZTh5VGt2N3FKQjhqWVhWNWt4eTh2N1BHTkhpMElHT2VjNFBncXpjZ3FiOW1uMW5UbXNrYStXRE9qZFRsMHpSbTZtWnF6bktzbVdacjlsSmFQZExURXIyOWMwTmF1aHp6NXExVU9qaVN5bk5NM3NvelpKUTJrVUVQa2E3ajhqc1JSelNUSzJ4V0NYWExjS2wwSm1YTmpHU25CYnBYZW1iQkt6dFc5NzE1NVdweWpSRzRaVU5ja0NzdXNCYm1RV0RiYW1hYUNxUEpnbDFselFPNW5IYkI3ZE82Y3M4Z0t0MTlvNzlDWHI5M2E5a1Y3cXFtcjM4VHBvYUZieDIzTlAzc0tXM094aXJoV1Rvb1NmaWV3RHMzMTdzMkMrLzErYXA5anFlejV4eXlSN3pnZmhWUmJBV0hyWm5qcWJSbHIybENselBaaEFYemZMQWdqWThwU2J1SGdIb0ZZZ1hldG9sb05vdkNjN1V4RFpsSmJUNXQzWnJPNm1mdjBISWFZVnk1YlhqcFhwdE0ybFcwbk5OZElMaE9zUlNjell6aERuN3E2dGl3V1ZQZ1QyYzFPb0M5LzJvZGZiMmRZQisvaXFjbWJ3amYvY0lmUnIwQmUvU3FITnk4WVdzd3pMbDA5b0xBWTFVWDBlWnh0YUdUbU15dmh5bmVUKzNUV0l1WjBlbGR6YkRmVkhQek9sa2o4TXlMMWdBdmdjS09CQi93WnNKRzNHSkQwL0RGRnpNK3p5eC82TW9kWlIxQmEwTkVmK2xGRHRFejF4L2VrTWU4VUhSLytjV1AwalBqQVUzWHpYeStRMUVVTzZCNEdMYkc5Wnozb3orL3BIU3RKT3p5YjIrKzh3b25JVTdDQWtmV3A0b09nZjE2MnIwNXJPdTByeXJHcy9NNTNhU3pNMjhUSzh3OHd0ekwrRi84bjhEK3RWa1J2bHhNU1NneEphSkV3Mm9rb1lTaXNaQ2loSlJvUEViY0pwU2tFWjJLT3UwaGFnbXBmV3BDb2Y5T1BxSFNieWhCZVVkQ1RBa3JpVkRJbGFLcUs2V1FCQ3BGb3pFbDZVaFFJakd1VWZzNFRhcEpjeFVXcXE1RW9rUlVHaHBUVk4xcFVhbVhxWVIwR3FtR3RaQ1cxSTIrVUlTa2hLSnhyaU50WmlRK0ZlSzZhSjliWjBSME02YnFYQmVQUnVQUnFaSU9Ha2x5NDFQUm1KMm4ybWlvTDVRSVI4UDBKT3Y2U0NYYnFWQXVxWEtmdU1xb0VseXRsakdneEl5VjJCbHBJc1J5aVFWWHoxVEMwVU0xRWFmTkdVR2xNT21NT3N6M0tZUkFkWDdqU2MyTVIySnFYQW1IVEZYUmlNSklPTjZuUnBSUUtCRk5odlZJeE5DVDlFNGFTK2p4VUtndmtkQzFoS0xGazZvZUR5ZkQ4VGpKMGxTYURhV2t1WS95U1ZNTHg2S3hjRnlqZjJGVmlTYkNpaFlKYVFhQk1VS0swUmVOa1dnbG91czZVYUZGVE1Vd29wR29FVE1KWlZnellvb1JqcGhHckM4MHBVNUZRMFNRR29sRmlKdGtUSStwRVpVVktSclZobVdNNHpsT3ZrOEpIWHNvRVFJM3JIVjdKckN2VmhlK2VaQ0VUeFoxd2k5dzdjcHUzRGhtSnMwY25hZG92WFI0ZUo5UkdWTTlKdzBDTzZ1Rk0xbElvbEdncXhhaWFUTmo1dmorT0hobkttT0ZvekVXMWlTSmdDeTJDRmtXVzBXek55Z1JHVCtJTVZyUjRocUJIVld1UlNROEs0dHRZanNyYUpIRkRyRlR3dmRrc1V1MHltSzMyQ1BRNlRWVUNReHMrRjJQcC9VVHNtZ1RlMlZ4TFQ0dWkzMWtMUmJFZGJLNFh1eVJSVHZ1a1dGUkltNFFOOHA0QlY0cGlmMnlPSUNIdmRFUmxVU0hMQTZLUXdLaGRWOHp5T0ltMGNrOGRVbWlXeFk5NHJBc2VzVVJHVy9Hd3d4OGdwTVpUbXc3emtvaUtBdEZoR1FSRmlvbkVVNmluTVFFcnJ2c2hpS3dmUlZUM2t3TU1jSzR0NzY4bGtSQ1lGZlZPUlpvWG5rbFJidEZxZUtreFI3S0x4WFhtZWZ0L2pidzRvMUF5UzB1ZEY2OXpmTk4xVjRycjlyWHN3ZWVYelNlUDFZOHNuazROdWQ3ejRQUE95RFAzR3lyQ0pMOExaaS9Cckw3SCt4OFJSbXEyNmZ1TmZXcW53VnU4blNrWkczUm1vYVg1RldXZWR4Kzg3eXB6MXRtNmZBN1RrUFRwdTMvWTZZMW42TU5UNnU5OElyZmxNclUyOSsrMXp4b0YwYTZyd1Z0dFQ3NkVNaGRKZUNEMlhUYTFOMVBwVTNtN0p4MXdZMG9uVlg0MjdmS3VySXBGYmpEZzEzck5DT3plVEhLMjVjamZ6NTFuMm1meUU5U29mTWs4OVdZS3NiVTFoVzBGR0l0alpObXRQd29CVng3NkYwME5HTVhkaGI2bDNzbWVlNjBhZGt4V0xuTXg4SWE3dzExYVI2NGpTU2N6QmcwSVViaGc5UXVRbHROV1NOMWRTK2ZHck5wdzgzV2FZYkJZNm9zSElLL3A5YVNwczNIdElONDZVUEZycW8zektSaFZwc1RPTnE1OGdhNjhHVjFoVS9VdW1kdkllaURsWDk5c0pMVDR0OSs1Si9ubS9UVk90azM5cTUwVDlzcGgrMGJQdktXQnVldVQwQmR5NDJyV3RSTVUrU0VqNG5zWEVvWEdLb1NsYno0ajNOZ0tuN0xxVGppRk9haENIdTdBM3ZGRFdWSDU2cHdWdzN5TnVkS3RoUWdCQzUxcm9wbEw4Umw1K1czTEkrWEswOWRJZmFOM3lKdUN2elBieUwxNjc0cDJoUUx2ckM1RTNCMWpQQjMzc1doNHFDSE0wWFhhZHdJSDI0RFVJKzllQmxHSUhDS1NqN1VvUTJqWmVVbUt0OWVWbTZoOGgxbDVkMVVwbmRNeXUrRW4xK0RTTUtkVk1wQVFnTTltN3RiNm5vTzk3YjUyK3FYNFAra1BlWTBwZnhuZTRDS3JZamdET1dPT2IzeGNrd0NkdTR1V3d2bjZFWFA3dDJNSDhJUGszek8zWTE3U0Ivbk5NclZZOG9lcGROdkE0MHk2TWxvVE1vem1pbXFyYWVuWEVDemhQcEtMSEZzUWNMR0VuSDZGckhJUlN4eUVZdGN4Q0lqaVduU3h2cG1MbWQ5UTZYR2ZyTCtsblZZbjhLOTY3TCtiRzNycFVvc0x5SHJCOVpoZlFGTHdYcUJOR2FwamZXZGRXWDJMS054c3FXcDdta0VMbUtMLzJuSWszWEwyRHJadllUbWNhcFp3alVqM1QwdDJ4YXgvWWtpbkJiYnNDSHdYM0R1dzNFY3dBa2JWcXNqMG9WMUFJMUVjcGJVenRralgwVzVIUEl1Z0N5NUxZTTdhQU5vSWMwQjFyeGpzbWNKTzFuelJld2k1YWU2RHkraXRWTDF5N0NMZkhzUHJZSjI4bnhXZllNanJNaklRYjZFSUlYdHhDdUQ4TGtnNXFsdW9RWUx1eXRZMk1Nc3RLM0J3amlKbUNBVzdpUjdUM3RrNFJ6T093REVMUVJib3ZxSHVqK0Z2VDJMdVBiVU12Wk5IcjZFNndTV2NQMG81ZHJwNU9SdjgxL0NEUUtQWW9wek53bzhnLzFINjVkeFlISUpIVWNiMmhyYTZoZHg4RWtjY25JMzFWMUNwNDg2QlM2aGl6dHZleExkYnBOL2RWTlBiMXZESWc2ZitkajNIK3Q5d25aTXRxK2JMQU01VmhPNTFHNXlxaWd0cDJPMG9HNGoxOWFKM0I4bHgzNkFIUGRCS2hVV3lESHloQXU0ajNKUkNrR3Z4by9ZanZwUWNWb2VvbEd2SVFhYThGcjhHUDF5Y01yangvRVR4TVByWE82Y3RnZUtiYStudGpkUTIzYjRua083aEFjbHZGSENROC9TU25Zb2ZSTUpmRE1lZHVmMHBRU2ZKNkMxK3pQbzdibUVJejRzSThoVHFTd2lWSnErQm51OVRKZE5XV3NSWmlzZXdWdUtVL1pXVy83YmlvNWJiMDk4K3pMQ2t6Mkh1eGVoTGlFeTJrc1RlQkhSUmNUT2RQY3VJbDVTMUd5NzVqdzlGeWdRbjdNVmRqc2lpZ3JiOFhhOHd3YlVqbmRTemtlOXQ5c2c2bHdRN3lKZTNvMzN1TUhySHZJYVpyWjVHYjdKYmpkZ0pDcU51NzhzV0RqaENzVndKWXJCMmxjTVYzWEZjT1d2RXE1WS8zc3ZwNyt2VXY5cjE5VFBJV285K2g5MXcrVUUxVEtEY2tIL0VvNVdhbitnakdtNXFGMHVhcGVMMWpzQnNzN1c4Rmh0RFRkWGFuamptaG9LOXBVMHZBL3ZkeDNwUGpma2Q1UmlYMjh4OXZVZjliZjRTRzFMWFp2L0ltNHBhWFlDMXNPME5oNHBZN2ZEMWdrN3gxWUpPOGM2ZlhidUF6YTd1Mmt6K3lDaDlMcys5YmlONTBQcngzT3NFcy9iU2ZZN2F1QmhEcnpoK1VrYnowOVJtZkc4M3QyZ0Q1WHdzSmNWQWRYYmdIb0pVZjFGL0VBbG92ZlM5dkJvMmNaOXFJam9VSkdoUTdiWCtleWM1dnJmSVJ1Ym4wWTMyOWdLRzdlRDhNTVZIdmsrL1BTVm9IMUpKZG9Qa3I3SGE2QXQ4TGQrdEI4cFI3dXRFUi9GeDF6dkhxYlJQRjRpVElzUWxZN2RVYmFuU3ZnWk4waEorRms2UlFvNzkzUDRPSTFveE0vakU2N0lseElkL05POWpJSEpsbHZyM1UxMGNKSllHQnFmOUM5am1MUEhuZjMweEtleGw4ODNvaXhFOXBMR0kraWlwdysvWUNQNlJaSUtIQ1Y5QjZoMGtqUUU0ZnpzY1o5YjNlZXduVFppMEgzdXAyM3FmalQ5UDFCTEF3UVVBQUFJQ0FDRWtHaFBzbDhiZFZjREFBQVlDQUFBTWdBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRJeUxtTnNZWE56eFZWcFR4TkJHSDZtRkJiS1N1c0IzaGRXN1lFc291TFJldEJLQmEwbmhzUVFZNmJic1N6WjdwYmRXUlIva3A4MEVmRklqSi85NnY4eHZyTTBBcVVxUmhQVGRtZm1tZmQ0bm5mZTJYNzU5dUVUZ0xPNDFZTStES3VIRVVNY0l6RU00YlNHMFY2Y3dWa041M3FoWVV6RGVRMFhORnlNb1JPWFltU2MwNURYY0ZuREZRWjlrZHZKcDRGalNzdDFHQWJMcmxjem5vbkttWG1EVnl5anlpV1hTdzNoRzZXbVRZNmhTODVaZm5LRUlWdTJYS05oYy9uVTllcGpSbFhVWGNNM2pRZGlJUkMrTExuZS9jQWxmL0x5bFZ2ZWNpeEpPZStsL3NEdjk0VFNNd3pSb2xzVkRQR3k1WWc3UWIwaXZJZThZaE95byt5YTNKN2hucVhXVFRDcUJKRDJLY2NSWHRIbXZpOW9PYngxVnNuUlVSSVVwY2cydy9GVWVoMUpHVFJzWWxjVEZKcExVVFVlS3VBY21XdWU4QU5iVXFaRWVaNHZjaU9RbG0yVUxWL1M1c0JHbnFTd3lYV2t4VGIvMDRJb3A5d1ZpaFdiZUc2S1JraFV3MVdHbm1tcjVuQVplQlJ1YVN0azg2czU2MXpPR1FXck51VklVUk5lYmhXMXVWTXpwcVZuT2JWY2U3dlp3bVpMeFdzWDVWN2J1RnVaRjZhUy9uSXp1RTZ6NlRwbTRIbkNrVWFSeXEyS2t2OVBDc0xhVHJ1Qlo0cVNwYzVtYjd2ZUdGYWUxSW9Uam1tN1BubmVGbkxPcldxNHBtTWNCUjA3c1V2SGR1elEwWStpanV1WVlEajZXMFVhU2pwdVlKTGh3SzhhUU1jVVRsS3AyOG1peG10VnhSQ1pMU2dpTjNVY3hDR0dvVCs1QXhzQ3JoNGR3OEZmbmgzRHpqV1hIMzNLa041eVhvYnVtcEJxVGNGU3FkbkMrb1p1ZUs1MFRWZWw5Z1M1MThsS3BhYVQ2MGlwRjBXTW02YncvZVRwRVhwL1BmbkhMNkxOMTdwdkkwSXNpRHREZjJxcTdWVlF5bWE0SFpDeXg2bWZYWXUvUjlJek9FTC9BM0hRQVNLU1NLaHVCR2lrMXFRL2xnNzY5V09BZG5mVHJJaElpTVF6MldXd3pOQXlJcGtWZEx3bUtJSTk5T3dpUTJBQmUrazVRQmlaWWg4T0FPRk1oV1Qwb2U2aU1DcmdWM1NIVmd1Wk54VHZEU0x2RUMxL1JPZWpiTWQ3ZEVYd0dkcDdkRE1hZTdMUkZpU1c3ZHhrMDlXQzlOSTNxN1U2cmtCL0ZXcFRsQWVKQWlDaEl5RGxpMGppR2Nid0hKTll3bU84UUlQd05Ua0xUVGs2QkE1VDVlaTZoaXZXUkFacGRveVFLSTFKSEE4TGN5SXhUcEpQMGt4Sk5zSVNBSjJadDlqMnFtM2w5RldEWnFxMWNORm13QlRTNFpoQk50d2J3aW5zcDFtTXJQckNXdU03VUVzREJCUUFBQWdJQUlTUWFFK1dBQUZodnhBQUFCTXRBQUFmQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZWR1Z6ZEM1amJHRnpjOFZhaDNzY3gzVi9TNVFGVGtlYm9nUkpJR1UxMmpKSUVienRCVlJsaTZDQXBFVFNWQ2dwc2JhQ0p4L3U0THNESlRxTzdTUk9jWHB6RWl2VmNoSWxjbXpMU2tKQ1Z1dzRQWEdhMDN1dmYwTytMM0YrYjJiMzZoNE9vdng5QVhsN3M3TnZYdjNObXpkNzg0WC8vY3puaU1paS95cFJoY0lTUlJTWEtLR1VXNnNsdWtqVkVqMUQ3eXBSamRabXFVNk5FcTNUdS9tMnlROWFUTmRtdWcyK1hPTExzL3pndVJtNlhLTDMwTmZ5NWIwODZPdEs5RDU2L3d4OW9FUmZUOTh3Uzk5SUh5elJOOUUzejlDM3FQU3RKZHBMSDdxT3ZvMitmWWErWTRhK3MwVGZSZC9ObCs5UjZYdExkQmZyOW4zMC9TWDZBZm93dDM3d092b2grbUcrZkVTbDU3bjdSL2ptUjFYNnNSSWRwQjlYNlNkVStrbUZwdSt0MXF2dCt4V2FXTmgvWHFISm80MDRVZWpOSzlWNmNtcGpMVXlhNTRLd2hwN2RLNDBvcUowUG1sVyt6em9uMnhlckxZWDJybFFibGZWYTBFNGJ6VFduRWlkcmpVb3JxcHhMV3UzRElGb0xxbldGYmxwNGN1V1o0RkpRcVFYMTFjclpkck5hWHowc1JBYk5WVEM1b2VDeFFqTTFGbnVxOGF4QzgvSjV1N3FXVklReXg0SjJjZzUzSUZPcUVDQ2Zyd1h0aTVVajFkWGxlanRaVFpwNE9GRWZIUDVFbzU3RVBjTjNWREcrbkxRdkhxMVZrM3I3SFdkVzJPQUNkYWFlVFVMekdZWDJyRFNhcXhWeFUxbHZOdHFOcUZHclBNNjNJTG91YWlZeDJGU0RHdXk2clljMGFsNWViemNxUjd2UFFUNTlaUG5VUTJjdXNBTFB0WnRCMUQ1K0NROFZlbnFoWjJRUVZpdHgwQTdhbDllVFZrVlFIQjVXc01EQkF6ekV5UE5CYlNOaDBWT1h1Tld2WTcra2M3aXlmNWRCbkVpOWJoK2psa0t6dGNicXVjWjZOWUw1S3Ryd2RBQTcyMW5YWEZLUGdMSllrSit0cnRhRDlrWVRXdXlzMXVQa3VTU1c2aW0wUzVxejBhN1dLaXRWZ2FWZDlVWjl1Wi9xK216VW8wRXpXRXZhU2JQRlVPZ0RLNVRMQUtzTnNMeDNhOFB2aDhqVFk0WXc0WmtrVFpxd0tobkxqem51UE5zT29uZWRETmFGVWlvdHFmUlJsVjVRNldNS2xjNDJOcHBSY3FMSzJzN3lERHJFNHN1a2thN1NUNVhwQWZwcGxYNm1UQy9TejVicDUrZ2xsVDVlcHArblQ2ajB5VEo5aWw1VzZkTmxlb1YrUWFWZkxOTXYwUldWcnBacGsxNHQwMmZvNVRLOVJyOWNwcy9TNTVqUnI1VHA4OHpscy9TcmZQc0pTTCtNdjhXVEp4ZmpXS1ZmSzlPdjAyK1U2VGZwdDVqRGI2djBPMlg2WGZxQ1FnZlBuSGpzVEJJbDFVdEp2QkJlYmljdDNUbTRVYTBmcWlEWWQrQ3ZiZGpPd1paQTRINlZmcTlNdjA5L29OSWZsdW1QNkxSS1h5elRIOU9mS0hUenhYWjdmYWxTMFYzamtHNGUwZzRaMnBKblc3WkMrd3BtRnhOWEhzYmxiTks4VkkwU2RnbDArdE15L1JuOXVYTHJnNDdtYVk1bWFiWmhXcDZtMjQ2dWFicG11NDZtNFVrYTI2R041eHFlMlJhK2RVY0wrTjdBbDZuN3VtT2F1dXRyTm8rTGt3UzhNTjQwZUxUcDh6VTEwNlFyZ3ptWklHRXF6N1ZkTjRLd2Evd1RNbXpOY2t6TlN5eklTVDFkdHdUbnlIWWgwZFR0eEV5Z291alY0U0xSYTBacGFzVjJKSG9OeDVDOW51ZTVWbWdZc2pjTVpHOFlPWkVkUnBLdjZTV3lOOVl0UGZKTlQvU0NxK3hOWGRQM28wQ1R2VzVHbXdaYXBOdTYxTUh5VFZDSFhkOTJmZTU3QXo1SFg1UjUzblQ0djZIQnZvdzZTUHVwVFZ2R3h1dUxEVXVNTE50aGlmQys3bW1lNWVrY0JRUFVUQ3UrVFI0RDNycmtIY1AyTk9FeGFhbzdQZlNnZ1E4TTIyQXU2TmU3ejN6ZGhteGI5ek9lUHU0OFUzRFc3QkN0WEhOZFoyOWhwTWJqd1UzcjhHRFphY3JhMnByODU0c1AwekpmbmJYSnVGZ2lsaGh0c2xRbnN3SmNHRnlNcU13RC9Sb3laOS9LdWR0YTdoVWZkdmxBYWs4OHdITW9IcnJuallpSDdycmJqSWNkcFgzeGNBcmlJY1oyNHFFSHhvaDRXRTQ2N2s5STNSWlZEMTl6YUo0N3d6MkZ1SEN1R1JlR1lXNkJDME1MdDRVTEEwK3ZGUmRPRnhkanNHRTR5UkEyak1EcHhZYlR4WWJoMlVQWmRBQVpubTdhb0hlZ21FQ1ZobnNma3RFajlPQjdjSEpoWDRZZDRWUGdRN2ZaNyt4ZkR4K0pTdlpLdjc2Uk0wNWZyMGZmT082bEx0RFd5TFExaHJUVmhXNkc2Tkc3RWZKRVMzaEZQSE9zYnRidjRCeWNlK1V5cFl3ZHQzSWFJK3lqMFZoeUhrZlBrdkdHeHkwZTBTZkZSSWNyZVZoOTl2a1Nrd0pIbXZRL3g5elNjdlFKSFBpWkJieUc0Ym5wRzlLKzNsbURmOURWczB6QjNUZFlKL1lMNG9NNzN4Wis5ODI0TndOeFBEdHhNdjNnZGVES0RQWHhjUnJBbEo1SHhPbllzMVZFRW1OOFJGTHJEVWZFMHAzL3g0aUUvdWlJb0xZWWlvamxSRnpyYUVuL1hOekdQTFM4NGZobTNIU3JYNjZmRGxNR25xQU1ldVVPNW1WWVp5QzdqZFNsQUNYd2tNanZIZDlKbjNNTE1uUzBMT2JLbVBIaFMyNTF4aHR5M3N2YUp2WEg0TkdTY2xpdnJweGNxc1hjb2I4aFZnaXUxbmdrKzVWWFJ0dnlIRmdrOG81Y0ZjRklWSmt3VE9RaTFoSGVCR1lZRjlDVFo0M0YyWmZ2bUF6eDVzckZzZzNPOVVBQ3hyQWtJTVRJL0c3N3NhamFlRTFobjlzdXp3QWhqYld5TFVZaHZnMDVxeGhQMlNoSHpnOWZ6QzVOa3hqa2xzR3JWUWdiUmVVbG5tWnpVSzc1UEErWWg4Y3JseUhqSlZZMHdTMWY4NGE5Q1h1Y0luOW12cFRTaFI5OXkwY1dZTFF6bnpURlNGTjRUTS94dmkxVW1GdWpBckVUbnk0ZkVSRWpRd2U2eDZCajBCb2hMNytEUlRwN1IxaWxpeFUrUjRnaFlwZ2p4QnlKRUo0YlpnOUNiSUVRVzVQajdSNkVZUGFnR3RjRXB2UUJoRGhCMG9jUXh6TzNnUkFlOVVZUmdoaHVoWkJDakdCbjVydEZmdVhNa0NQRjE0MnNtaEllNWJpS05sRGpRVnRYb2thcytJNjBWRkJZZlhuQXp1WDMxb2pZN1doalVHWnVML2YwWUVydllNbzFqVEdZQXVpS3JPL09FYnZQaWd3NXJwMzA4ODF6YlNTOHhQZ293aTk3U0dCQTFrVWFaeDNQWmJtb0FIV1oxYkRuTlNUbnJGNzJ0R3p0a0J6QjArUGFuNlBqaFo2SUhXaDlyb1pOazczTGJmbmN0N054SnZnYkhHdElkVVQxYlExNHpPSmM0WE9WWnVzdXFORVMyWlR6b3VoRmo4azY4a3JtQzk4bVB2dGQ1azg1RXdRbXNRSVpnYXpGODNwT3JFSm1ucWZGTHNXWE93YXU3enZWQkJTUyt4ajRXYnd4c0dWbE9NVEIxY2J0VitTMGtsanNzeFR6TzFzSkRMblNaKzhtNExjTTFYb1g0VUtXT1haejFMdVRLbHh0K3lWcFJmWDlJQXBIWkdxNXcrdmJqWHVCTHIybVcvSStscGpmNXRyYVA4dWxuTjRvZFRVWDg4ZkkzL0p3ck5tYTNpcGpZR2E1c3M2UUdKVTFJVmRpSW9xMndHZEJmY0x6M2RkZEZJMm1scmdPVU9ScXVoSHJPbFJFdGdsQ2JLU3gxN05OQ3pTNkc2V2FrU1NhYlJvUjhraHN4VkZzbWFIdmFuNVBkZU9JRkk5ZHNtenhPNWFlV3E1UWQrc05aQjNmR2JjLzBvclhzakZaeC9mOWE4ZzZibUhXOFVUV3dZcVl0eVV1TWRidHlTNU9sbDI4bnV6U3lUNitsZXN1S3lhdU44RGZIcEZmZUtmQlhrUFFRRzluZTIvb01wUlpBcmx6L0RKbWxzQTBpek9McDNkNG1KNmVjK25QRjNtbHNMMnMwNm1kZU9hN1lpOGhzNHNwYk0yelMyZVdEZVFMaXpQQjY4azVXWDJkNTViQjZQc2MvV0VrZDJ0cXhnT3Y3cjR6NUVPdWZ2WGNCaS9Edktabjl4YmlKZXNZdzR0NXBndjcrSTc5R01pOEluZVI4cDJpQndqQVBrUE1RSDdMWm5pZTZIRjU1WEZUT3d4MHp6ZE5DekFJa3pRQnBCelREZXpBdEt3RVBzWFM2TGdPTmo1YVlDZFdFdm1tNC9xR0c2RUVTWkl3ZGJGYVJmZ2srTVR5NDNPdTU2b3p3eEdqM1JmbzVlcWZQMzF2bUVMeC9uZlVHNmJRakxiMWhvbnJ0R3Q5dzJTUGZyL1V5VjcyNEY2VUVTV1FwUGtGRlpZcDN5dUhvZnU2S3lGOUd6a3BUTXh4ZTdvY2dTTjNkVUFWNXlXQkwxTm1IRGtldVlhemhRbTA1V3VHN2ZFckMxMkxqQ3hIaUlqYXcvbGgxUHEzOVR3b1d2K0V6QXo3UWhkZDdDSVl2ekpudURuV2ZaSFBPS3R3NVNibVI1N0JERm5qdVdtRTZrV3p3c1J6WE0xQi9SdEhrZVlZVGhwYVhvSmxJN1ROTUlxak5JNlFtOE5ZYzlMWUNySEMrWUVYUTJRWVk3NzQzWS9BZDdZUzlhTmNybjZGT0k4aWJ3dWNSNkcyTFp4SHFmM2xmOE9PV2thaUhMTzJEK0dhMlB2SXR0SFR0Z3ArYzhJVFg1TzdxVHpIZWtLLzNuMWY5czZhZDB0VzBYNnIrMjVKN0FMWmZ1enhPcnU2R0pXSksrM08zbzdEQy96YkJkZk8vQndsWGFhQnBzdDZpWjlnejV3L2RlV2JDMEdUcjFPaUgrczRyK1YyZDMvWXMrTURqUnRuR0VjN3NPUXVYYlE5MlM5dEY3UEI1Ykg4emcxeU13bEIvalpPbCt1RmlIbk11ODgwd2NKck80WWI0SjloYWp6cE5ETTBJalBnMXk2V1l4a0d2OFR4SWljMDdkZzIwaVFDR094VVMxSTdOVFZrWDhPeTBqQnlBeXUyNEJ3TlNRVU9Wa2c1cU5KSHkvUVg5SmRsK2l2NmE0VnU2UDd5KzFDekdWem1uMzlWZXFGTWYwTi9xOUxmbGVudjZSL0s5STk4ODdFeS9SUDljNW4raGY1Vm9iMWIvRUpjcG4ramZ5L1RmekQvK1pHL3pmT1BtLzhKZ3BIbktoVGExZjJ0LzNUNFRCTDFkOG1mL3hWNnk1YS8xU3YwcHY0ZnR4VzZlY1FoQzFpMXNIK0xFeGk3K2s5WExNY0s3V3hkYnJXVHRXTkpHbXpVd1ByR1BnYVNpczgvQkcxdUs3UzRNUHg0Y0VUdnFZMmJSenhTYUxiZFdLNjMyZ0ZiT05jbk5ldkc2T3VIT2hVcXR4dkgxeHZSeFpQVldxMHFqc1E4QXJXTGpwVW9wSXF6RTZkVFJHbmhrZjJqenA3MGhrUjRBMXdiRzZ5V0hJRUFQNHBJdFJHdkpGZzduR091dnh2QzF2bXVWbWR6VmdZREwwN1J6TllhOWRYejhqaEh1WkgybW5GVFI3OEJGOHcyMG83cER5NFVrR3dkajBFSTdCMktiMiswMU5Va2kvTTFpQnBrZGxmM0VjK05vRjNKSDU0UXQyMk9FTXg3VkRUaE5tK2g2R3pNZUM2TVQvbE1JYjlYYjRSeXZkRU1hcGlOc3ZGUUZDV3RWcU9acyswL09EUlhKQjlodTYxd2hwODU4ZGhaVE5TTkZxUmZ5czY1N0Z2WS8yVHhPYXNPTmNzWk9tejBjTkM2cUZDcGRURXc4NlJ3OTJobjlHdTl2MWhlOG01bzFJYVBIdHRvUUhDMVVlZHpPSHdvNVBqUjQ4dm5qeDk3NS9IengwK2RVMmhQUVlJN0xnNy9JRHpUOGhpUVF1YTRnMDZGdXQweTZnU1dRbFBoUnJXR0JIVGZ3c2hqV3RraGtyN3pVVU1IdWFaYTY3VXFBdi8ySW44VkhsZWJobXZFcWEvQ2Fmb0VjaFptd2FuT0dhYmVNMHU3ODluVGU5NXBYNzlqVG16VUkzYjNtYVM5MGF3ZlMzSlB4b24wcEZXZzZDRFRBaWszUXFrQ2pTWmIxZmNrSWdzdTR3b2FObXQ1LzdCaFVGNXEwSHMwUzZIVFJkcHNzVFFPSFZZYk9vWTJFY1F4ejRSQkU0WnNQRTkzMGlHcUVQOU5rTUtucDNBMWNGZkJ0NEx2cVFOWFNmazBHanZJeEhWYWRONUtGcTVsU1VBMk9maWVKWmM4T1ZoWkE3Tlo5SDFxazNhczNMTkpFMWRvOGdwTlhhSHBUVkpQdmtJejkxeWhXWHdkdkVLbFRib09CSnRVUnRjbTdUeTEyQ0ZjbWdUSm9xU2NuNVNrdUgzVEpyMVpkbTdTTHRuWWZmMG03Y2FqRzY3UWphSi9ic0xJbnR5MFNUZkwzbGZvbGsyYVIzdjNucVdwMTJqdmhmbXBxM1RySnIxbGFWcFpVbmZmdGpUVE5mTVIybzNyYlRSSnQ5TWMzUUdENzRSSDl1SFpXK2tCZWh1ZG9MdnBTVnFnbUE1UWl3N1MrL0QwUS9EZWgwSHhFVGpuUlRqbEpiamxrM0FLdStvcDZRN3lhUW5may9SeE9rejN3bGx6OUR6ZFIvY0xxZThGNXdmaHVBZG9uUjVDM3lRNDNVUkg2Q2hjL0NMTjBERTZEdmUvaExzVDlCV2tncmRDRCtQcERIZ3ZRMlBwK3ZkalhBa3lOdTdaZmZzVnV1UFVBZGk4TkxrNFliQUg3M3llcHBTWFg2TzdMbHlsZlV0VEJ3OWNvYmR1MHR1V3B0RzRlMG1kY0dibVp1YlZWK250Q3IxQUJ4Ym5aaWFmTnViVnVabFhhV0VIZlo3MmI5S0JwZG41cWZuWlYrbWVIZlQ0QjJlVUY3LzB4ZGZvSUZ3NVAzMlZGbDhXeHJFRERhQ0RZS3dLUTNmQ3hGdGcwQjZZdFE4R0xjSVVFOFljZ1NFWFlFcUVkaFVHc0tOU0tIOEJuNitrRlpqbGdPNCtPZ2tUWVJDZG90TUNxQnYwS014V1JPc3h0SFpBU3AzT1FOb0VaRjJrcytpYmhLUXpkSTdlQVhjdHdrM24wWm9HdHlQME9Gb3FmUlZHM3dGNlNYV2hRM1doUS9VRXFKNEUxU0dhK0IvYW85SlRLbjMxbDJndnphcjBOV2lLLzArSjZ6dmxmeWowMzdCYm9hY0ZqSUwvQTFCTEF3UVVBQUFJQ0FDRWtHaFBIUDdPM0tBQkFBRG5BZ0FBTWdBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRJd0xtTnNZWE56bFZKQlR4UXhGUDY2RER2c09zcUtpQ0pxUEhEWUJiTkZORndnZTJBamlXWTFFY2hlT0hWbkhrUEpiTHUySFEwL2l3TXg4ZUFQOEVjWjM0d2VqREVHMHJUdnZmYjdYcit2NmZjZlg3OEJlSVduTGN4aHBZMElEMkk4akxFcTBBeG4ycTl2Q1d5T3RKV3pRb1ZUNjZZN01xT3BsVDZWaC9TeEpCOE9yUHRRMnFDQ3RzYnZNbTFQR3gwR0F2M3VEWGk5c1VBMHRCa0pMSTYwb2ZmbGRFTHVXRTBLM2xrYTJWUVZZK1YwVmYvZWpDcDVBc2tiWThnTkMrVTljZG0vL3AzcjIxc3N0M1drYzZOQzZiamwyNUYxdWZ4TWs1Zm5VazIwUEw2WTBTR2RraU9UMHQ1Zmg1bmlQZ3p3TWlkV29BSmxjdjhpa0greHN6dmd4dTBqVzdxVURuUWxkdlZmQXZybjZwTml2NjlOV2xpdlRmNk93cG5OWWp4S3NJYkhDZWJSVEJEamljRHptN2dTV1B1UEQ0SGV0WnNKTE9RVXFwcHAzZTdKZnUrUFI1ZzVHMnhxQzVsYVIweWZNbXFvaW9LOXozVjdZenpqSHhYeDV4S2RUdVdreW5qR1dPRFk0bXlBQmcrZ3ZiRjVCYkh4QlkxTHJocG84OXFzc1JhM2VGMzVoVUtDTzBDZHpkZm5FUlpyZkFkMzY3aUVleHdqTE9NK2J0YzRGbEl6OEJOUVN3TUVGQUFBQ0FnQWhKQm9UMmpCajV1UUFRQUFuQUlBQUVnQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lSU1JsRkVaV05zYVc1bFpFVjJaVzUwVW1WemNHOXVjMlV1WTJ4aGMzT2xVazFyRkVFUWZiMUpkamJyYXI0MEpuNGNCQThtaC9RaHdZc2l1SWtMQzRPU2plUWlDTDB6bGRsZWVycG51M3ZpNy9JVThPQVA4RWVKTlpNRkx3cUNsM3BkSDYvcVZkRS9mbjc3RHVBRVQvdFl3VjZDUndrZUM2d1lWd2djcGM0WDhndE5qK2V5OGk2NnpCbVpPVSt5cERoemVaQ2VRdVZzSUptNjRwVkFMOVJWWlRSNWdlMTBycTZWTk1vVzhpSjZiWnY4bXI5YWpIT0J6cWVoUUxLb1hhVEc3ZWtRYXNyZlJvSGRXMXFwNGt3T2RURzJrUXJ5VE8yKzFsYkhOeXp0eGNHbHdPcXB5MGxnSTlXVzN0ZmxsUHhITlRYVXpIV1pNcGZLNjhaZkJsZmpUQWVCdmNuby9Jd3l3NXo4M1RYWk9GbktGeGlNclNWL2FsUUl4SlZucVhheU1pcGVPVisrbERtVlRvWk1UbWhSVTRnajU4OVp1NHFheWMvLzFwUkY5eTljN1RNYTZVYkUvcC9ZUjgyNkE5ekZ2UVJQQkliL1AxWmc4L2ZsUDB6bmxQRlpELzY1TDU2aHd6OEJXQVBmalMwWXUwaGE3R0c5eGY0UzcyRFFvbWdXWUx2Qm5teDk1aC9lUUh6bFJ3ZWJiTHROVUh6R0ZyOEh0d1hZeG9NMnY5dmFoN2pQMk9kY0Ivdll3Zm92VUVzREJCUUFBQWdJQUlTUWFFL2QzYk5SVVFFQUFDd0NBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rT1M1amJHRnpjNVZSeVVvRFFSQjlIV01TWTl3MUtybDZNSXBPUUJGY0NFb3dJRVRCUkR6azFwbXB4QTZUN3RnOTQvSlpuZ1FQZm9BZkpWWkdUeUtpRFZXdmx0ZXZxK2kzOTVkWEFMdFl5V01NaTFrc1pWRVV5QndwcmFLcVFIcTlYYjVtcUptQUJHWWFTdE5GUE9pUXZaS2RrQ3Z6RGVQTDhGcGFOY3EvaXVub1JqbUJ3cG5XWkd1aGRJNDQzV29vNHcxREdYV05IZXg1QVEyTTUzeXZTYmN4dWFodTdHVnNJaGtwbzkzYS9xRkE2cUVpSU5vQ0V5M1YwektLTFVzZk40enRlZmZVMmVsN3NxTzhxOGNoTmFsTGxyUlBSOSthZ1dROUpqanZKQWdzT1hkWVpkMTh5OFRXcDdvYWpicjYwL1BiZlhrbmVkdFQ3WWZHS2QwN3ArakdCRmtzRjVER3VNRG1QellSS1AweXNrRDV6MXFvSU1XZk5EcUNqU2RoekhCMHdQVVVZMmFqOUF6eHhGRUsyVkdlOE9ySXNTOStNakNCeVVRaGd3S211Si9HZE1LZndXeUNjNWhQdEJmWTV4TVR5VTBnOXdGUVN3TUVGQUFBQ0FnQWhKQm9UNVpTTEJsT0JBQUFWQW9BQURJQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU55NWpiR0Z6YzYxV1czUGJSQlQrTnJHajJGRmIwMXhhUWlCY1FuQ2NpMElDRFpBU3lFVU9Cc1VobDdxVVFvc3NiMndGV1hLa2Rabys4OFlqejB5ZmVPR3RNS1NsTU1QMG1UL0NESGY0QVF4blpSUFR4SjNHTTdHczFlNzV6bjU3enRIWnMvcnhuKzkrQVBBU3lqR2N3NnR4bk1kck1jeGdOazdOUlFXdnh4R1ZraWptNGtqaGpTNjhpWGtGQzEySVkxSEJra1IwaWFRVkxNdkJXN0xKS0hoYlB0K1JqYUZnSlU3a1dRV3JDdDVWc01iUUlVcDJNRFRKTUdyWW5sWnhUTEhsK2VVTFdvR1hQUzJ3dEhXK1UrV0JTSHYrV3RVVHByQTlONWlsYVJkdDF4WnpEQlBKRnVhTjVCZ2lpMTZCTTV3eGJKZG5xK1U4OXpmTnZFT1NzNFpubVU3TzlHMDVyZ3NqMGp3R05lTzYzRjkwekNEZ05KdzQvcHBEVXpOa2J0U3NWSnliRFAwUzRPdmM0dll1TCtpNzNCWHJQS2lRSHEyMW16UTh2NmpkNFBucGJhM2llOEt6UEVlelBKOXJaUzVLWGlIUS9McXlabmpGMlpFV3JIajR1bVJkdStNVnBWTXRyYzdReFNWUHpuUm9PUVViRkVHOUliaHNpNUloYVZQL294VjcycUxuQ3QrMHhOQlJYYUk4Slc1V2VLRVJrdlJKdVRpY05MYk5YVk56VExlb3JlYTN1U1VvZmtkRURIRjl6K0tWa0ZIQkprTnN3eTY2cHFqNlpNMlhSeWRJKzN4Ty90Q2llOXBXMWJYQ3FWcTYzcnZZV2xCUHh0MDU2Y2VHVi9VdG5yWmxGai9lakdGQ09rTWJRWGN0eHd0c3Q3Z1NXcVRna29vY0xxdm94eE1xQnZDZWlpdDRYOFZWZk1Dd2RCSUdxbmdCU1JVZjRwcUM2eW8rQXBreDBJaVRtYmUxZ2trMGxBdUJ0a210aWp3c2hrUWovQnZDSjR0VkZFRGdGcTR4dEYxZFVGSEVzb29TbGhsNlF0MnlLVXJhZ2wzTXVJSVh1YS9DeHJhS2owRXhHV3ZseGFnWXdqRE5hV1hiUDJCdkxWMFlCaCtSTHdvY2h1Unhkd3hEZDJPSmc4UmxHRG0yblZTU2RvNjhwN1RqM2FpVlArTTRKU2xrMVhSUm9tUVQzSy9WcFlhVC83SEpRcE9VRmJoNzdkTHFwcjZ1TCtxWm5MNTBYYy9wV2Rwb2c4YkRNaUMwU2FhMGFWazhDSWFtSittNCtLS1Z1djhJNmxiTGJnc0ZMVkhrSXVNVytCNHYxQ0Nxa3NsNjRha0syOUVNTzVDK25YNVFRcUdpaVF5OXlVelRLdFZKYU1oSGlaNXNyaEZVNmNpeHVTOFB0c1A3aHZCdVlzaDY3aUhib3Y3V1RxYkFvSVJKSVh1ZGRoQlVlV0dlak9rem11MHArVnFyZWNyYTNxWmh3ZE4wNEo4SDFTQ3dSRUxXRlBySWFLZDdBRStTOUNucXphR05MaUNlR3QwSFM5MUYyMWMwYXNNZ3RSMmtBL3hFTEVCZlRRdlA0RGtnN0VrMlJoZHR6aG9YNnlEdUNHRzNVdCtBZlkzMjBXOFJXZmtlMFN0MzBaRWRKMzVsZk93T090dnZJZGFHKzRqZlF4ZWpwN3FQVXhJNGZSZzRRLzk5SkVJczBoUjdMTVNpaDdDeisrZ09nWTZqSy9XTTN6N3dieGd4YW4rR2lsL1FnMThwU3I5aENyOGppeit3alQveENmN0M1L2c3OUQ5VjgrekEvMXV5akpMZktqN0RDTWFJc1FlZllod1RhRS9NVTB3MGtzajRUdGZqRzB1TjNrZnZIZlRkYmhwZU5lekg2dlNUZEVkSThpSzFVNkgrTkgwYnl1Zkx1QkJpTTNnRnoxS3ZuMEorRHJWZmxLVFBFMGNLNnhoRjdGOVFTd01FRkFBQUNBZ0FoSkJvVDdEZ2tQR2JBUUFBNEFJQUFESUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhPQzVqYkdGemM1VlNVV3NUUVJEK05yM21tbmlhV0xWYXE5S0hQaVN0WkJWRkNpMTVNRmdRb21CVDg5S256V1dTYnJuc3hMMDl4Wi9sZ3dnKytBUDhVZUxjNllPSVNNdXlPek03M3pjekg4ejNIMSsvQVhpS0J3MnNZS09KQ0xkajNJbXhxVkFQWnpiZmVhU3dON1NzbDVrSk0vYUxaM3BLQzlaNXFvL3BYVUY1T0dML3B1QmdnbVdYSHdqdDBEb2IrZ3E5emlWNDNiRkNOT0FwS2JTRzF0SHJZakVoZjJJbW1meXNEemsxMmRoNFc4YS9QNk55UElYa3BYUGtCNW5KYzVLd2QvR2VPNC8zWmR6R3lNNmRDWVdYa29NaCs3bitRSk1uNTlwTXJENzV1S1JqbXBFbmw5TGhYOG1wa1RvQ3lQWGJNTnNmQlcvZC9LQXZGWnNqTG54S1I3YWNjdk5mblh2bjVyMFJvUzljbW5FdXZGY1V6bmdhNDI2Q0xkeExzSXA2Z2hqM0ZSNWVSbzdDMW44RUtIUXZYRXhoYlU2aGpJWFc2WncrNy82aGZ1azVjTXFaVHRtVDBCZUNHcGdzRSswcm5lNFkyN0pLa1d5VmFyZExKYVVuTjhhYTJJWjRmZFRrQU0zZHZjOVF1MTlRK3lSUkRVMTU2eFdXY1VYZWpWOG9KTGdHVk41cWxZL1FxdkJ0WEsvc09tNklqWEFUdDNDMXdza2dGUU0vQVZCTEF3UVVBQUFJQ0FDRWtHaFBlSytpbDV3QkFBRGlBZ0FBTWdBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRJMUxtTnNZWE56bFZMUlRoUXhGRDFkaGgxMkhXVkZRUkUxUGhDekMyWnJCSDJCYk5TTkpDYXJpVUQydlR0eldVcG0yNlh0UVBncXdnTXg4Y0VQOEtPTWQwWWVqREVHMHJUMzN2YmMwM09hL3ZqNTdUdUFUVHh0WUFaTFRVUjRFT05oakdXQmVqalVmdldsd1BwQVd6bk5WVGl3YnZKR1pqU3gwcWR5bDQ0TDhtSEh1aStGRFNwb2Evd1d0MjFybzBOUG9OdStRVjluS0JEMWJVWUM4d050NkhNeEdaSGJWNk9jZHhZR05sWDVVRGxkMWxlYlVTbFBJUGxvRExsK3Jyd25McnZYdjNQMTFXdVcyOWpUWTZOQzRaank3Y0M2c1R5bDBjYVJWQ010OTgrbXRFc0g1TWlrdFAzWFlhYVlod0ZldnNzeVI5NXY5Wml1dVdjTGw5S09MaVV1Lyt2YTdwRTZVZXp5ZzBsejY3VVpmNkp3YUxNWWp4S3M0SEdDV2RRVHhIZ2k4T0ltWGdSVy9xTmVvSE50TWhZM3B2QytPQ04zWlUzZ2VidnpoLytwczhHbU5wZXBkY1FjRXh1b3IvS2NIMkNtM1JuaUdYK21pUCtWYUxWS08yWEdNOFljeHdablBkUjRBTTIxOVV1SXRhK29YWEJWUTVQWGVvVTl4eTFlbDM2amtPQU9VR1d6MVhtRStRcmZ3dDBxTHVBZXh3ajNzWWpiRlk2RlZCMzRCVkJMQXdRVUFBQUlDQUNFa0doUFR0ZXkzWlVCQUFDd0FnQUFTZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKRkYxYjNSbFVtVmpaV2wyWldSRmRtVnVkRkpsYzNCdmJuTmxMbU5zWVhOenJWTExiaE14RkQxT21rNGFBaTBGQ2kwUHFSSUx5cUplZ05pQUt0RkNwRWdqSGlucWhwVm41bmJpeUdOUGJFLzRMbFpJWGZRRCtDaFVlem9TRzVCWXNMbm5IdC8zdmY3NTYrSVN3RXM4R2FHUDNRUVBFenhpNkN0VE1oeW14cGI4RzJVdkZyeTJ4cHZjS0o0YlM3d2lQemVGNDVaY2JiUWpucHJ5TmNQUU5YV3RKRm1HN1hRaFZvSXJvVXQrNnEzVTBUNnc1OHRwd2REN2VzeVFMQnZqS2RLaGRLNmg0cTFuMkxrT3E0U2Y4Mk5aVHJXbmttd0k3VGVaWWxoL0k3WDBSNEUrT3poaldEc3hCVEZzcGxMVGg2Ykt5SDRSbWFKWTNlUkNuUWtySSs4ZTEveGNPb2E5ejdIdWpIS1NLeXJlcjBqN1dUY0d3M2lxTmRrVEpaeWo0RHRKcGVHMUV2N2MyT29WTDZneTNPVjhSc3VHbko4WUczTUpMMFB3MDcrbkRlMlBUazFqYzVySTJNanVuK0lQNCtCajNNSm1nc2NNNy81SFlZYXQzMWY0bUMwb0R5cysrT2ZNMkVjdi9BcGdIV0Y3R0FRdG5BQkppME5zdERqcThBYkdMZDdzN0N5T0V1UldZTHpsd09ENUQ3RHZRZW5oZHBjVzdCTzJnejYrZHNBZDdMVDIrNjE4Z0hzQlI4SFd3eDd1WXVNS1VFc0RCQlFBQUFnSUFJU1FhRThUOUp2R1lRRUFBRllDQUFCSEFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VTJsdGNHeGxVM1J2Y21GblpTUlRkRzl5WldSRVlYUmhRMmhoYm1kbFpFVjJaVzUwVW1WemNHOXVjMlV1WTJ4aGMzT2xVYmxPQXpFUWZRNUhRZ2ozM1NDQktJQUNGeUFhRUJJRWtKQldJQkdVM3RrZE5vNjhkdVIxd3Yvd0IxUklGSHdBSDRXWVhkTFFRRUhoTjRlZlo5Nk1QejdmM2dFY1lhT09NU3hYc1ZyRm1zQ1ljYW5BUWVSOEtwK29jOWlUZmUrQ2k1MlJzZk1rTXdwZGwrVFNVOTUzTmljWnVmUkVvT1pNMGxabVFBS3JVVThObGN4VTZNb0xuZDdZUUNuNWdtUHBhY1NaUE5WV2h6TnV0N3ZYRmhodnVvU3pjNUcyZER2SU91UWZWTWR3WmpGeXNUSnQ1WFVSajVMam9hdHpnYzFXWUVISnBRcXEyVlUycGVScVNEYmNqNFFKTkc2c0pkODBLcytKK2MxSU85azNLanc2bngzTGhESW44MWkyZE5ZM1ZOUlNLZTM4WHBPSHFMZmN3TWQwclV0NVB4NGZGSE0zTUlWNkZlc0M1Lzl1SnpCZnJ0THdsYnpyOUNnT0F0dC9sOFVXS3Z5bjRNUGJ3Z1I3dkhKVVMxc2JXVkVJWlp6bVNKWXhNTEgvQ3ZIQ1RnVU54c2t5K1l3WnhzWTNBYk5ZS084WFMxekNQTnVpVEFVcm1NUFVGMUJMQXdRVUFBQUlDQUNFa0doUHhJTG40RUlCQUFBYUFnQUFNUUFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKRGd1WTJ4aGMzT1ZVVXRMdzBBUW51MHJiWTFXNndQRXF3ZXI2QXFLRkZwNnNGZ1FvbUJiZTk4azAzWkx1bHMzRzhXZjVVbnc0QS93UjRtVDZFbEVkR0JlMzh4OE84Tyt2Yis4QXNBcGJGVWhEM1VIMWgzWVlGQnFTeVZ0aDBGK3J6RmlVT2pxRUJuVVBLbndPcG43YUliQ2p3aXBlem9RMFVnWW1lWmZZTUZPWmN6QXZWUUtUVGNTY1l5VUhucFM4MFVrN0ZpYitSa1BjYTU1SFBBKzNpVVkyNTQyTjRtMndrcXQ0dDFtaTBGbElDZEsyTVFRWTlmVFpzSWYwRCtaY2VGTFBueGNZQi9IYUZBRjJQNVdEQVhSVUVQTWIrMjRPYkJHcWttclE0elZnVTVNZ0QyWkxybjkwOE5ITTNFdjZNNExGVVE2cHJrcnRGTWRPckRwUWdHS0RBNytjUU9EblYrMlp0RDRNeGNjUTQ1K0p4VkdTcHVRTDFIRXlhZEljZjhaMkJNRk9YRElsakx3SE1wazNjOEdxTUJTTnVwbVhjdXdrdmthckdib0d0bHFwb3pRVk1vZlVFc0RCQlFBQUFnSUFJU1FhRSthUzQzSm1RRUFBTjBDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qRXVZMnhoYzNPVlV0Rk9FMEVVUFZPV0xxMnJWRlFRVWNNRER5MllqZ3J4QmRLb2pTUW1sVVFnZmVGcHVuc3BRN1l6ZFdaV3cyZnhRRWg4OEFQOEtNUGQxUWRqaUlGTVp1NjljOCs1YzA0eVAzOTkvd0ZnQzg4Ym1NRmlFeEdXWWp5T3NTeFFEeWZhcjcwVTJCaG9LNmU1Q3NmV1RkN0lqQ1pXK2xUdTA1ZUNmTmkxN25OaGd3cmFHci9OdEIxdGRPZ0pkTnUzNEhXR0FsSGZaaVF3UDlDRzlvckppTnloR3VWOHN6Q3dxY3FIeXVteS9uTVpsZklFa28vR2tPdm55bnZpc252ek45ZGV2Mks1alFNOU5pb1Vqa2UrSFZnM2x0OW90SGtxMVVqTHc3TXA3ZE14T1RJcDdmelR6QlRQWVlDWDc3TE1rZmZiUFI3WFBMQ0ZTMmxYbHhLWHIzdTJlNnErS25iNXdhUzU5ZHFNUDFFNHNWbU1Kd2xXOERUQkxPb0pZandUZUhFYkx3SXIvMUV2MExueE1JRzVNWVd5WmxxN2ZmUys4NWYxcWJQQnBqYVhxWFhFOUFtaitpclAyZnRNdXpQRUt2K2ppTCtVYUxWS0oyWEdPOFljeHdablBkUjRBYzMxalF1STlVdlV6cm1xb2NsbnZjSmEzT0Z6OFRjS0NlNEJWVFpiOVNQTVYvZ1c3bGR4QVE4NFJuaUlSN2hiNFZoSXhjQVZVRXNEQkJRQUFBZ0lBSVNRYUUvRmtzNDVvd0VBQU9ZQ0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNak11WTJ4aGMzT1ZVbDFQRTBFVVBWT1dycTJyRkZBVVVlTURJUzJZamdIbEJkS1h4aWFhcXFGZzMyZDNiOHVRN1V5Wm5kWDRjL3dKUGhnU0h2d0IvaWpqM2RVSFk0eUJUT1orekp4NzU1eWIrZjdqOGh1QTUzamN3QUxXbWdod0w4VDlFT3NDZFgrcTg4MW5BanREYmVVOFUzNWkzV3hmcGpTek1rL2tpTTRMeXYzQXVxUENldVcxTmZrQmx4MXFvMzFQb051K1JsMW5MQkQwYlVvQ1MwTnQ2RzB4aThtZHFEamprNVdoVFZRMlZrNlgrZS9Eb0tRbkVMMHlobHcvVTNsT25IYXYvdWJtN2g3VGJSenJxVkcrY056eTlkQzZxZnhJOGQ2WlZMR1dKNS9tTktJSk9USUpIZjUxbVNydXc0QmNUb2taS0UrcGZLK04zMzJ4ZjlEanhzMWpXN2lFQnJva3UvNHZBdDB6OVVHeDNwY215V3l1emZRTitWT2JobmdRWVFNUEl5eWlIaUhFSTRHbjExRWxzUEVmSFFLZEt6Zmo4WmpZdlp1TUJrY2NiN1U3Zjh4ZzdxeTNpYzFrWWgxeDljeDY2cXNzWStrTDdjNFlUL2hEQmZ5M1JLdFZDaWtqM2lGdXNHOXcxRU9ORjlEYzN2a0tzWDJCMmhmT2FtaXlyVmZZejdqSmR1MFhDaEZ1QTFXMFdOMEhXS3J3TFN4WGZnV3I3QVBjd1YzY3FuQk1wS3JBVDFCTEF3UVVBQUFJQ0FDRWtHaFBZMUk3bFZFQkFBQWFBZ0FBS2dBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVa01pNWpiR0Z6YzQxUnl5NEVRUlE5TmNiMEdNTjRrOWlKQ0JaS3htT0IyQWdKR1JZR0M3dnE3anV0cEx0cVVsM2o4VmxXRWdzZjRLUEVuV2JEQXBYY092ZHg2dHg3VTIvdkw2OEFOakZYd3dDbUFrd0htQkdvN0dtai9iNUFlZmw2NVlyaHdNWWswR2hwUTJlOUxDUjNvY0tVTXhNdEc2bjBTam5kajcrU1pYK2pjNEg2c1RIa0RsS1Y1OFRoVWt0YjJVMlY3MWlYYmN1WU1pdnpTTFoxMWsycDdhMVRDUzAyZHdWS0Qrc0M0bHBncUswVG8zelBzZVpKeTdwRTNsTzRjU3RWcU9YRlk1Zk9xVU9PVEVSN1A0cXg4c296SVpjSjhRaktVeXd2dGZITnJlM2RmZTVRYTl1ZWkraElGeXQ4bTJEdFZ0MHAzdlRRUktuTnRVbE95ZC9ZT01Cc0hXVU1DaXorWnd1QitWL0dGVmo0V3dUcktQR1g5STlnNDk2TUZmWjJPRjlpckt6T1AwTThzVmRDMEk4TDNocXFmTTk4TWpDRTRVS2hnanBHdUY3R2FNRnZZS3pBY1V3VTJwTjgxd29UeFV1ZytnRlFTd01FRkFBQUNBZ0FoSkJvVDJneUlhZElBUUFBSXdJQUFESUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhNaTVqYkdGemM1VlJTMDhDTVJDZXltTUJWMUY4Sk1hckJ6R0dLaW9YQ0JjaWlXWTFFWkI3MlIyZ1pHbXgyOVg0c3p5WmVQQUgrS09NczZzblk0eE9NcTl2cGwrK1NkL2VYMTRCNEJTMlM1Q0JpZ01iRG13eXlMZWtrcmJOSUxOZkhUTElkblNBRE1xZVZIZ2R6MGRvQm1JVUVsTHh0Qy9Db1RBeTZiL0FySjNLaUlGN29SU2FUaWlpQ0ttdGVWTHpSU2pzV0p0NWd3YzQxenp5ZVEvdllveHNWNXViV0Z0aHBWYlIzbkc5eWFEWWx4TWxiR3lJOHRMVFpzSWZjSFF5NDJJaytlQnhnVDBjbzBIbFkrdmJNQkRFUXdzUm55QXBFQllEZml1VnJaODFtbTBpTHZWMWJIenN5a1Rzems4Q2FqTnhMK2plYytXSE9wSnFjb1YycWdNSHRseklRbzdCNFg5dVliRDdpM29HMVQrVHdSRXMwVGNseHNoSkN1VThWWnh5Z3VRT25vRTlVYkVFRHNWOENuYWhRTkg5WElBaUxLZFAzWFJyQlZiVFhJYTFGRjJuV0VxZEVacFk0UU5RU3dNRUZBQUFDQWdBaEpCb1QrZDhCbHhHQVFBQUlRSUFBREVBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVEyTG1Oc1lYTnpsVkZMVHdJeEVKN3lCbEVVSDRueDZrRTBXbzJHQzRRRFJCTE5haUlRN21WM2dKS2x4YmFyNFdkNU12SGdEL0JIR1dkWFQ4WVluV1JlWDZkZnYwbmYzbDllQWVBQ2RrcVFobW9lTnZPd3hTRFhsRXE2Rm9QMFFXM0lJTlBSQVRLb2VGTGhiVFFmb1JtSVVVaEkxZE8rQ0lmQ3lMai9Bak51S2kyRDhwVlNhRHFoc0JhcFBmYWs1b3RRdUxFMjh6b1BjSzY1OVhrUDd5TzBycXZOWGFTZGNGSXJ1MTl2TUNqMjVVUUpGeGxpdlBhMG1mQkhISjNQdUJoSlBsZ3VzSWRqTktoOGJINDdEQVRSMElEbEV5UUJ3bUhBMjB1SDlxemVhQkZ4cWE4ajQyTlh4bHAzZjNyL1pDWWVCSzE3cWZ4UVc2a21OK2ltT3NqRGRoa3lrR1Z3OUk5VkdPejlJcDVCN2M5Y2NBb3ArcVRZR0RrcG9aeWppbE9Pa2V6aE03QW5LbEtRcDVoTHdEWVVLSlkvQjZBSUs4blZjaksxQ210SnJzQjZnbTVRTENYT0NJMnQ4QUZRU3dNRUZBQUFDQWdBaEpCb1QzSXR6ZjFIQVFBQUl3SUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TUM1amJHRnpjNVZSUzB0Q1FSUStrMis3WmRrRG9tMkxqSENVd28zaUlra29MRWpGL1hqdlVVZXVNell6dC9CbnRRcGE5QVA2VWRHNXQxWVJVUWZPNnp0blByN0R2TDIvdkFMQU9ld1hJUVhsSE96a1lKZEJ0aVdWZEcwR3FlUEtpRUc2b3dOa1VPcEpoYmZSWW94bUtNWWhJZVdlOWtVNEVrYkcvUmVZZGpOcEdYaFhTcUhwaE1KYXBMYmFrNW92UStFbTJpd2FQTUNGNXRibmZieVAwTHF1Tm5lUmRzSkpyZXhSdmRaa1VCaklxUkl1TWtSNTNkTm15aDl4ZkRibllpejVjTFhFUGs3UW9QS3g5VzBZQ09LaEJjdW5TQXFFdzRCZnJCemFlcVBaSnVMaVFFZkd4NjZNeFI3OEpLQTZGdytDN3IxVWZxaXRWTk1iZERNZDVHRFBnelJrR0p6KzV4WUdoNytvWjFENU14blVZSTIrS1RaR1RsSW9aNm5pbEdNa2MvSU03SW1LTmNoUnpDWmdGL0lVdmM4RktNQjY4dFJMdGpaZ004a2wyRXJRYllyRnhCbWhzZVUvQUZCTEF3UVVBQUFJQ0FDRWtHaFBFSi9NejFFQkFBQXNBZ0FBTVFBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRRdVkyeGhjM09WVWNsS0EwRVFmUjFqTnFQUnFGSEoxWU1MT2dHREJ4T0NHaFNFS0xqZ3dWdG5wb3dkSnQyeGU4YmxzendKSHZ3QVAwcXNqSjVFUkJ1cVhpMnZYMWZSYis4dnJ3RHFXQ3hnREhOWnpHZFJFY2cwbFZaUlN5QzljclY2eWRBMkFRbVVPa3JUU1R6b2tyMlEzWkFyNVk3eFpYZ3ByUnJsWDhWMGRLT2NRUEZJYTdMdFVEcEhuRzUwbFBHR29ZeXVqUjFzZXdFTmpPZDg3NHh1WTNMUm9iR25zWWxrcEl4MnkvV0dRT3FoSmlDdUJQTG5xcWRsRkZ1VzN1MFkyL1B1cWJ2VjkyUlhlUmVQUXpxamE3S2tmV3ArYXdhUzlaamd2TDBnc09SY284VzZoWE1UVzU4TzFXalVwWitlMyt6TE84bmJIbWcvTkU3cDNqRkZOeWJJWXFHSU5NWUYxdit4aVVEMWw1RUZWditzaFJwUy9FbWpJOWg0RXNZTVJ6dGNUekZtMXFyUEVFOGNwWkFkNVFsdkh6bjJsVThHOHBoSUZESW9ZcEw3YVV3bC9CS21FNXhCT2RHZVpWOUlUQ1EzZ2R3SFVFc0RCQlFBQUFnSUFJU1FhRTlxYkV1ck5BSUFBQm9FQUFBa0FBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VWtaUlUzUmhkSFZ6TG1Oc1lYTnpqVkx2VDlOUUZEMXY2OWF1bE1FcW9pQWl2NVJ0SUFXY2Z0bENJQWdKeVFKQ2NjbGkvTkIxajFuU3RhWS85bmZKU01Sb05IejJqekxlVnhjRGtZQ3Z5YjA1NzU1NzdubXY3K2V2cno4QVZGREpRY0tpaWlKS01zWmtsRlhrc1NUQ3NvSVJsWXJMZ3ZGY1FVSGtGUVc2eUlhTVZRYmxpTnZjNmZFMncwemQ4WTJQcmhXZCtFSDNsZEhtWGQ4SWJlTm85OUNNckNnT3E4Uit6VzNYOFFSNytERDJJLzRtOEh0T1cyQjVvYkZWZjd0ak1zeSt1MXNvMjdQY21JY004OFhTZjlDbGJiL05HVWJxTkhzLzdyWjRjR3kxWE5xUkU1MkRFNFpLc1g1cTlTekR0YnlPWVVhQjQzV3FwYnVWOWJwdlcyN0RDaHdoT0ZDVlBLdkxSZTBmUlhKZWN6d24ybUFZdjJIZ1hxbEIzZEVIaDA2V001Mk9SMU1DVWtvWFJVR3BpY3RMbXRldjlPNTRjYmQybDlNTkdxMmFmaHpZZk5jUkhuUEhQSXhXaElxR2UrSzNqMmxZd3pyRDlPMUtHaWJ3UXNNMG5tZ1l3YWlHZ2dnNlJobnkxejB4Wkd6WDkyaldXTEYweGU5QjY1VGJFZmw1ZWZVR3RsMHJES3MzL1lQcnF0WE5WWHA4ZVhxNTB1YUVjQUJRTGd5eUx2TG9wRGlSWUNDSCt4Z0h3d05DYzVURlV2dGduNUc2UlBvVElZYUhGTE5KYlovNEU1Z2M4Q3RJSmJ1cUxwVy9JSE1KU2ZCVDEvaVBLR3AvV0pqQzQ2Uk9WME5SS0t3aFRSOGdsNWVtTHBBOXU2VmR4b3l3anRtRU13Y0Y4NGxoSWZPZURpTFcxamRJVFYxT1gwQTVSeTRCcXBTQW9RUm9tUVFNWjc4VFN2ZnBCVFdsUG9iTVpxYVBZZk1jN096dmVWVWFBaHhna1V5a0JrTVg4RFRKejM0RFVFc0RCQlFBQUFnSUFJU1FhRSs2b2tRZWt3RUFBTFFDQUFBcUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VTJsdGNHeGxVM1J2Y21GblpTUTBMbU5zWVhOempWSkxieE14RVA2Y2JMTk5XR2dvVUI0RlZGVlJTVm9KSS9xNHRNb2xBZ2tVT0RSdDdzN3VkT3ZLc1NPdkErclA2cUdxeEtFL2dCOVZkYkwwQUJ3Z3Nqd3ZmelB6alRVL2IzNWNBOWpCNnpxcVdHa2d3dE1ZejJJOEY2aUZVMTIwM2dtMCt0ckppVkhoeFBueG5zeG83R1NSeW9FZVR3d05ndk1xcDMzR0gyaXJRMWZnVFh1ZWhNNVFJT3E1akFTVyt0clMxK2w0UlA1SWpReEhsdnN1Vldhb3ZKNzVkOEZvUmtnZytXUXQrWjVSUlVIc2JzelJyTFhEL09vRG5Wc1ZwcDVMZmU0N244dnZOTm8razJxazVkSDVoQTdwaER6WmxBNytlc3hVVUlFQmhjeUpPNnRBbVR6V05yemYzZHZ2Y3VIR3dFMTlTaDkxeWZ5UHhtL1AxRGZGQTM2d3FYR0Z0dmtYQ3FjdWkvRWl3U3BlSmxoQUxVR01WL3pMODR3aHNQb1A0Z0xyL3k4aVVNMHA4TCsxTzcvTk9mRXV1TlFabVRwUDhwQVRBL1dVTVR4ZXRkMFpZbzNYSStKTkVjM21qUFBNNGh0amtYV2RyUzRxZklERzV0WWx4T1lWS2hmc1ZkQmdXU3V4eDdqSGN1VVhDZ2tlQUtXMVVMNUhXQ3J4VFR3czlUSWVzWTd3R0U5d3Y4UXhrVElEdDFCTEF3UVVBQUFJQ0FDRWtHaFAySWI3MElFQkFBQ0NBZ0FBU0FBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkZKR1VWSmxZMlZwZG1Wa1JYWmxiblJTWlhOd2IyNXpaUzVqYkdGemM2VlJUVThVUVJCOXZidXdzSzd5b1NLb0Z4TVA0b0UrU0x4b1RGeGtFNUtKaHNWdzhkUXpVOHoyWnFacjdlNVpmNWNuRWc3OEFINlVzV1lnOFFLSkNaZjNxcm8rK3ZYcnF6OFhsd0QyOFhLQUxwNzFzZFBIYzRWdXlZWENYc0srMEw4b2ZUZlRjOCtSTXk1MXhwNTBSWEhLZWRDZXdweGRJSjF3OFVHaFkzT0JIeU9GRlJ0Q1Rmbm5xTENWek16QzZNckVxUjdaNHNoRktzaExkN2RPUzRYTjYzSnBYS0ZQb3JldVdiVDgwVG9iUDBuUG05MVRoZDRCNTZTd2xsaEhYK3NxSmYvZHBDVTF3NXlaOHRSNDIrUTNoNzA0dFVGaGV6SStubEJHZGtINTRZSmNuTnlJVlJnZU9VZitvRFFoa0hSK1NTenJlV25pR2Z2cXZjNnBZaDB5UGFHZk5ZVTRabjljY3pUUnl2RHJ1NWFLNk1FSjF6NmpzVzFFN053MnZkYzhkWWdoSHZieFFtRjAvMnNWMXYvWjl5MmRVU2FPNy83M1hyeENSLzRkNkVGOHc1SkVZajc2TGE5Z3RlVUJIclNzR3VHQ2p5VFRiUTRzdlQySCtpMUJCMnVDeTgyaEdtTmQ0dUYxQXpid3BLMC9iWEVMajRVSFV1dGdHNXRZL1F0UVN3TUVGQUFBQ0FnQWhKQm9UeUZjemlLZUFRQUEzZ0lBQURJQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE5DNWpiR0Z6YzVWU1hVOFRRUlE5VTVZdXJhc1VVQkJSNHdNUExaQU9Ca0pNSUgyd3NZbEpOYUhGdnBDWVRMZTNaY2gycHN6T1N2eFpQaGdTSC93Qi9DakMzZFVIWTR5QlRHYnV4NXh6N3oyWnViNzU4UlBBUGw1V01JZlZLZ0tzaFhnYVlsMmc3TTkwdXJrcnNOM1ZWczRTNWNmV1RRL2tpS1pXcHJIczBVVkdxZTlZZDV4WnI3eTJKajFrMnBFMjJyY0VtdlY3OEJvRGdhQnRSeVN3Mk5XR1BtYlRJYmtUTlV3NHM5eTFzVW9HeXVrOC9wME04dkVFb3ZmR2tHc25LazJKdytiZGUyNiszdWR4SzMwOU1jcG5qa3UydTlaTjVDVU45ODZsR21wNThuVkdQUnFUSXhQVDBWK1hJOFYxR0pES1QzNzhwdStkTnBQREZsZXM5bTNtWXVyb2ZNcjFmM1Z1bnFzdmlvVytNM0ZpVStaOUlIOW1SeUdlUmRqQTh3anpLRWNJOFVKZzV6NXlCRGIrSTBDZ2NlZGkvSXdUOHIzT3NVQzlmdnEyOFlmMm1iUGV4amFSc1hYRTVLbjExRlpKd3NybjZvMEJYdkZIQ3ZoUGlWb3QxNUY3dkVNc3NLMncxMEtKRjFEZDJ2NE9zWFdGMGplT1NxanlXUzZ3bi9HQXo5VmZLRVI0QkJUZWZIRWZZTEhBMTdCVTJHV3NzQTN3R0Uvd3NNRHhJQVVEdDFCTEF3UVVBQUFJQ0FDRWtHaFA1SDFlOEVjQkFBQWhBZ0FBTVFBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRJdVkyeGhjM09WVVV0UEFqRVFudkphd0ZVVUg0bng2a0UwV29QS0JjS0ZTS0pCRXdHNWQzY0hLRmxhN0hZMS9peFBKaDc4QWY0bzQrenF5Umlqazh6cjYvVHJOK25iKzhzckFKekNWaG15VUhWZzNZRU5Cb1dXVk5LMkdXVDNhaU1HdVk0T2tFR2xKeFZleDNNUHpWQjRJU0hWbnZaRk9CSkdKdjBYbUxOVEdURndMNVJDMHdsRkZDRzFoejJwK1NJVWRxek52TUVEbkdzZStieVBkekZHdHF2TlRheXRzRktyYUxmZVpGQWF5SWtTTmpiRWVOblRac0lmMER1WmNlRkpQbnhjWUIvSGFGRDUyUHAyR0FpaW9ZR0lUNUFFQ0lzQnY1WEsxczhhelRZUmx3YzZOajUyWmFKMSs2ZjNqMmJpWHRDNjU4b1BkU1RWNUFydFZBY09iTHFRZ3p5RGczK3N3bURuRi9FTWFuL21nbVBJMENjbHhzaEpDZVVDVlp4eWd1VDNuNEU5VVpFQmgySWhCZHRRcE9oK0RrQUpsdEtyYmpxMURDdHByc0JxaXE1UkxLZk9DRTJzK0FGUVN3TUVGQUFBQ0FnQWhKQm9UOG9qS21ZK0F3QUFrd2NBQURJQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE5pNWpiR0Z6YzcxVjYwNFRRUlQrcGhSV3lvcFZFZThLaU5vTHNpaUtsMVpVS3RXU2VzV1FHSC9vZERzc1M3WTdkWGNXOVVWOEFoOUFFKzhteHQ4K2xQSE0wc2pGQ3BnWTAzUm41cHR6dnZPZE0yZG52Ly80L0JYQVdWUzZzUjJuOUdNMGhWNVlLZVF4WnVCMEQ4NWczTURaSGhnNFoyREN3UGtVT25FaFJaWVhEVnd5VURCUVpEQ1h1RGM4SC9tMmNxWFBNRlNWZ1dNOUU3WHhSWXZYWEt2T0ZWY3ZtaUsweWkyYkFrT1hXbkRENFRHR2ZOV1ZWdFBqYWw0R2pRbXJMaHJTQ20zcnZuZ2FpVkNWWlhBdmt1UlBYcUYySzdxK3F5WVo3bWIrd205elFkazVobVJKMWdYRGpxcnJpOXRSb3lhQ0I3em1FYktyS20zdXpmSEExZXNXbU5RSlVPNFYzeGRCeWVOaEtHZzV1blZWdzZjbktLRWtNWHNNeHpQWlZTSlYxUFJJblNPSW1pdFJ0eDVvWUp6TWpVQ0VrYWNvVXJxNnlKZTRGU25YczZwdXFHaXpmNjFPeXJDbGRXeWRiZkdQQmRGT2hVbmlTazAvdDBVekZtcmdNa1Azck92NFhFVUIwWW10aUMwdXgyeHd0V0JOdVU3RlY4SVJRV0VaOWJqdldMTXFjSDJuME41T2EraWpPQ3ZtZDJxTHd0WnB2dndkWEpXZkxYMDdDZ0xoSzZ0RXBkVUZLUDRIdFhITlptVVUyS0xzNnBydmIzZm1vOXFiV216YXR6MFpFdDh0b1JaazNjQ2tpU3U0YW1JWGRwdElZNmVKUGx3ek1ZVVN3K0NtNmcxY056R05Nc09oalE3V3hBMmNvTEsyUzRFYWFuMnVXc05ORTRkd21HSGtiOXA2RGRmeUNURWMzdkNJR0hhdnVQeHFQWWJzbHVQUzNlQUlkYjk4anlHVGVUUzF1a09iZ1ZUU2xqcHdJTWk1SVpYUWdlbklPakw2elU5eDJ4WWhYVWRqZENFOS9zYzN5Ky92YWU5YWhGU1Fjb1k5bVVyYmZ0OUd1M1BjaTZoSUZ6Ti82djJOa2V3Y0J1alM3Z1gxSGhMcHRHNHhnRWJxTi9vRWROQy9EM3RvdDU5bUpTUmlaRWN1L3c0c04vSU9pZHdIZEx3aEtJRzk5T3dpUStBSjl0R3puekF5eFg0Y0JPS1pwbVQwbzc0aEdrMzRpankwMVV6dUxmRzlSZUlqa3RVdjZIeVk3L2lFcmdTK3dmaUViWXpHN254eUhaTEtkNjYzK1lDZTE3Rm9yZVVBY1FNMlROUXBzc0F3NWpFQkJ4VmFyK2liYWVrek1Za2pPRXJxQnVJVmF5R0ROQnNpSkVuak1lTFFtUjVQWDZNY1R0Qk01MkRGT1FHZHVmY3dYN2N0aGJsczBBcTFRcGRzRVo1RUpoNnp5TVY3ZVl5UWZDQkZWdHZqNHVFblVFc0RCQlFBQUFnSUFJU1FhRS9uQXQ3WVJnRUFBQ0VDQUFBeEFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na05TNWpiR0Z6YzVWUlMwOENNUkNlOGdaUkZCK0o4ZXBCTkZxTnlnWENBU0tKWmpVUkNQZXlPMExKMG1MYjFmQ3pQSmw0OEFmNG80eXpxeWRqakU0eXI2L1RyOStrYis4dnJ3QndCbHNsU0VNMUQrdDUyR0NRYTBvbFhZdEJlcTgyWkpEcDZBQVpWRHlwOENhYWpkQU14Q2drcE9wcFg0UkRZV1RjZjRFWk41R1dRZmxTS1RTZFVGaUwxQjU2VXZONUtOeWROck02RDNDbXVmVjVEKzhqdEs2cnpXMmtuWEJTSzd0NzNtQlE3TXV4RWk0eXhIamxhVFBtanpnNm5YSXhrbnl3bUdNUDc5Q2c4ckg1N1RBUVJFTURsbytSQkFpSEFXOHZITnFUZXFORnhLVytqb3lQWFJscjNmN3AvYU9wZUJDMDdvWHlRMjJsR2wram0rZ2dENXRseUVDV3djRS9WbUd3ODR0NEJyVS9jOEV4cE9pVFltUGtwSVJ5amlwT09VYXkrOC9BbnFoSVFaNWlMZ0hiVUtCWS9oeUFJaXdsVjh2SjFES3NKTGtDcXdtNlJyR1VPQ00wdHNJSFVFc0RCQlFBQUFnSUFJU1FhRS9pTnpzK1J3RUFBQ01DQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01URXVZMnhoYzNPVlVVdExRa0VVUHVQcnFsbVdQU0RhdHNnSUp5bmNLQzZTaE1LQ1ZOeVA5eDUxNURwak0zTUxmMWFyb0VVL29COFZuWHRyRlJGMTRMeStjK2JqTzh6Yis4c3JBSnpEWGhIU1VQRmcyNE1kQnJtV1ZOSzFHYVNQcWlNR21ZNE9rRUc1SnhYZVJvc3htcUVZaDRSVWV0b1g0VWdZR2ZkZllNYk5wR1ZRdWxJS1RTY1UxaUsxdFo3VWZCa0tOOUZtMGVBQkxqUzNQdS9qZllUV2RiVzVpN1FUVG1wbEQrdjFKb1BDUUU2VmNKRWh5dXVlTmxQK2lPT3pPUmRqeVllckpmWnhnZ2FWajYxdncwQVFEeTFZUGtWU0lCd0cvR0xsME5ZYnpUWVJGd2M2TWo1MlpTeDIveWNCdGJsNEVIVHZwZkpEYmFXYTNxQ2I2Y0NEM1JKa0lNdmc1RCszTURqNFJUMkQ2cC9KNEJSUzlFMnhNWEtTUWpsSEZhY2NJOW5qWjJCUFZLVEFvNWhMd0M3a0taWStGNkFBYThuVFVySzFEaHRKTHNObWdtNVJMQ2JPQ0kwdC93RlFTd01FRkFBQUNBZ0FoSkJvVHkrTXZPQlJBUUFBR2dJQUFDb0FBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5VGFXMXdiR1ZUZEc5eVlXZGxKREV1WTJ4aGMzT05VY3RPUWpFUVBVVUVRUlNmYU9MT0dLTXVxTytGR2paRUV3MjZFSFhocnR3N1hFb3VMZWt0UGo3TGxZa0xQOENQTWc1WE43cFFtMHpQUEU3UHpLUnY3eSt2QUhheFdNUUk1dktZejZNaWtEdlNSdnVhUUhidGR2MkdvVzVERWlnM3RLR0xRYTlGN2txMVlzN01OR3lnNGh2bDlERCtTbVo5UnljQ3BWTmp5TlZqbFNURTRXcERXOW1QbFc5YjE5dVhJZldzVEFMWjFMMStURTF2bllwb1pldFFJUE93S1NCdUJRcE5IUm5sQjQ0MXp4cldSZktlV2p0ZHFWcGFYajMyNlpMYTVNZ0VkUFNqR0NxdlBCTVNHUkdQb0R5Rjhsb2J2NzIzZjFqakRzV21IYmlBVG5TNndyY0pxbDExcDNqVFl4UEVOdEVtT2lmZnNXRWVDeVZrTVNxdzhwOHRCSlorR1ZkZytXOFJiQ0xEWHpJOGdvMTdNK2JZTytCOGhqRzNzZlFNOGNSZUJ2bGhuUEtxR09PNzhzbEFBZU9wUWc0bFRIQTlpOG1VWDhaVWl0T1lTYlZuK1M2bUp0S1h3TmdIVUVzREJCUUFBQWdJQUlTUWFFOEJOUFc2bHdFQUFMc0NBQUFxQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVMmx0Y0d4bFUzUnZjbUZuWlNRekxtTnNZWE56alZKQlQxTkJFUDYyUFBwc2ZVcEZRQVV4eGpUYVl1SWFVQzZRWGlva2tNcUJZdS9iOTRiSGt1MXVzMjhMOFdkeElDWWUrQUgrS09QMHlVRThhTFBablpuZGIyYStiek0vZm42L0FmQUJMMnFZdzBvZEVaN0VlQnJqbVVBMW5PbWkrVjZnMmROT2pvMEtwODZQdG1WR0l5ZUxWUGIxYUd5b0g1eFhPZTB3ZmxkYkhUb0NiMXF6SkxRSEFsSFhaU1N3ME5PV2ppYWpJZmtUTlRSOHM5aHpxVElENWZVMHZyMk1wb1FFa2dOcnlYZU5LZ3JpOFBVTXpacGJ6Sy9XMTdsVlllSzUxR0hQK1Z4ZTBuRHJYS3FobGlkZngzUk1wK1RKcHJUNzEyT21nZ29NS0dSTzNGa0Z5dVFYYmNQbXgrMmREaGV1OTkzRXA3U3ZTK1ozR3I4N1Z4ZUtCZTdaMUxoQzIvd3poVE9YeFZoTnNJYm5DZVpSVFJCam5YOTVGaGtDYS84Z0x2RHEvMFdZYjhFZVpaOVlGbjlmcS8ySDNMRjN3YVhPeUpRUjhwanpBM1dWTWF4eXJ0VWU0Q1ZQU2NRREl4cU5LZldweHp2R1BiWTE5anFvOEFMcUcyK3ZJVGErb1hMRlVRVjFQcXNsZGgvMytWejVqVUtDaDBEcHpaZnZFUlpLZkFPUFNydUl4MndqTEdFWkQwb2NFeWt6OEF0UVN3TUVGQUFBQ0FnQWhKQm9UNkl5MStkSUFRQUFJUUlBQURFQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRM0xtTnNZWE56bFZGTFR3SXhFSjdLWXdGUkZCK0o4ZXBCTkZyakF3OFFEaEpKTkt1SmdOekw3ckNVTEMxMnV4cC9saWNURC80QWY1UnhkdlZrak5GSjV2VjErdldiOU8zOTVSVUFqbUc5QkJtb09yRGl3Q3FEZkZNcWFWc01NdHUxQVlOc1cvdklvT0pLaGRmeGRJaW1MNFloSVZWWGV5SWNDQ09UL2d2TTJyR01HSlF2bEVMVERrVVVJYlY3cnRSOEZnbzcwbVphNXo1T05ZODgzc1c3R0NQYjBlWW0xbFpZcVZXMGRkcGdVT3pKUUFrYkcySzhkTFVKK0FNT2p5WmNEQ1h2UDg2d2l5TTBxRHhzZmp2MEJkSFFRTVFESkFIQ29zOXZwYktISi9WR2k0aExQUjBiRHpzeTBicngwL3Y3RTNFdmFOMXo1WVU2a2lxNFFqdld2Z05yWmNoQ2pzSHVQMVpoc1BtTGVBYTFQM1BCQWN6Ukp5WEd5RWtKNVR4Vm5IS0M1SGFlZ1QxUk1RY094WHdLbmtHQll2bHpBSW93bjE0dHAxTUxzSmptQ2l5bDZETEZVdXFNME1RS0gxQkxBd1FVQUFBSUNBQ0VrR2hQZllLcSs2UUJBQURsQWdBQU1nQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERXpMbU5zWVhOemxWSk5ieE14RUgxT3Qxa1NGaG9LTFpRQzR0QkQwcUlZNk1lbFZRNUVSQUlGcEtZbEZ5UWtaM2U2ZGJXeGc5Y0w0bWYxVUZYaXdBL29qNnFZWFRnZ2hGQXJ5NTRaKzgzNFBYc3VMci8vQUxDRkp3M01ZYm1KQVBkRFBBaXhJbEQzeHpwZmV5NndNZFJXempMbGo2eWI3c2lFcGxibXNSelI1NEp5UDdCdXY3QmVlVzFOdnN0cGU5cG8zeFBvdHErUjF4a0xCSDJia01EQ1VCdDZYMHduNUE3VkpPT2R4YUdOVlRaV1RwZng3ODJncENjUXZUR0dYRDlUZVU0Y2RxOSs1OXFMVGFiYk9OQ3BVYjV3WFBMdDBMcFVmcVhKNW9sVUV5MFB2ODFvUkVma3lNUzA5OWRob3JnT0EzS1pFak5RbmhMNVFSdi9jbnRudDhlRm13ZTJjREVOZEVsMjVWOEV1aWZxaTJLOXIwMmMyVnliOUIzNVk1dUVlQmhoRlk4aXpLTWVJY1JqZ1dmWFVTV3craDhkQXAwckYrUGZUTW1QQnZzQzdmYkhWNTAvbm1EbXJMZXh6V1JzSFhIeTFIcnFxeXhqNVhQdHpoaFB1WjhDYmkzUmFwVTZTbzluaUJ0c0crejFVT01CTk5jM3ppRFd6MUU3NWFpR0pxLzFDdnNKTjNsZC9vVkNoTnRBNWMxWDV3RVdLbndMZHlxN2lMdHNBOXpERW01Vk9DWlNaZUFuVUVzREJCUUFBQWdJQUlTUWFFL0hyeFZEb2dFQUFPY0NBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTVRjdVkyeGhjM09WVWwxUEZERVVQVjJHSFhZZFpRVkVFVFU4OExBTFppdW8rQURaQnplU1FGWVQrZGdYbnJvemw2Rmt0bDA3SFlnL3l3ZGo0b00vd0I5bHZEUDZRSWd4a0thOTk3Ym4zSjdUOU9ldjd6OEF2TUt6QnFhdzJFU0FoeUVlaFZnU3FQc3puYSsrRUZnZmFDc25tZktuMW8yM1pFSmpLL05ZSHRDbmduSy9hOTNId25ybHRUWDVOdE4ydE5HK0o5QnQzNExYR1FvRWZadVF3T3hBRy9wUWpFZmtqdFFvNDUyNWdZMVZObFJPbC9YZnphQ1VKeER0R1VPdW42azhKeTY3Tjc5emRlTU55MjBjNnRRb1h6aHV1VCt3THBXWE5IcDVMdFZJeTZQUEV6cWdVM0prWXRxNWRwZ283c09BWEtiRUNwU25SQjVyNHpkZmIyMzN1SEh6MEJZdXBsMWRpbDM2bDREdXVicFE3UGVkaVRPYmE1TytKMzlta3hDUEl5empTWVJwMUNPRWVDcncvRGF1QkpiLzQwT2djK05tQWpNcCtiSm1XcnQ5OHJaejVSRW16bm9iMjB6RzFoSFR4NHpxcXl4ajcxUHR6aEFyL0tNQy9seWkxU3FkbEJuUEVETWNHNXoxVU9NQk5OZld2MEtzZlVQdEMxYzFOSG10VjFpTE83d3Uva0Vod2oyZ3lxYXI4d0N6RmI2RisxV2N3enpIQUF0NGdMc1Zqb1ZVRFB3R1VFc0RCQlFBQUFnSUFJU1FhRStiVjhlWVFnRUFBQm9DQUFBeEFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na015NWpiR0Z6YzVWUlMwc0RNUkNlOUxWdFhhM1dCNGhYRDFiUkNCVVJXbm9wRm9SVnNLMjlwN3ZUbXJKTmFwSlYvRm1lQkEvK0FIK1VPTHQ2RWhFZG1OYzNNMTlteU52N3l5c0FuTUJXRmZKUTkyRGRndzBHcGJaVTBuVVk1UGNhSXdhRnJvNlFRUzJRQ3ErUytSak5VSXhqUXVxQkRrVThFa2FtK1JkWWNMZlNNdkF2bEVMVGpZVzFTT2xoSURWZnhNSk50Sm1mOGdqbm10dVE5L0V1UWV0NjJsd24yZ2tudGJLN3pSYUR5a0JPbFhDSkljWnVvTTJVUCtDNE9lTmlMUG53Y1lGOW5LQkJGV0w3V3pFU1JFTU5sdCs0eWRuQUdhbW1yUTR4VmdjNk1TSDJaTHJrOWs4UEg4M0V2YUE3ejFVWWEwdHpsK2h1ZGVUQnBnOEZLREk0K01jTkRIWisyWnBCNDg5Y2NBdzUrcDFVR0NsdFFyNUVFU2VmSXNYOVoyQlBGT1RBSTF2S3dBNlV5ZnFmRFZDQnBXelV6N3FXWVNYek5Wak4wRFd5MVV3Wm9hbVVQd0JRU3dNRUZBQUFDQWdBaEpCb1QzR2JTWkRTQXdBQU93a0FBQ29BQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVRhVzF3YkdWVGRHOXlZV2RsSkRVdVkyeGhjM090VmU5ejIwUVFmUmZiVWUyb3JRbEpDcVcwcFRXcDQveTRsTFNGa2hCd0hhY05WUnlJalV1QUdVYVJycktDTEJucG5LUi9ERitaNFZ0aGFFdGhodWxuL2lpR1BkbkV0REhFR1dxTlQ5TGU3cnUzZTN0UGYvejU2KzhBcnVHck5GN0JRZ2FqdUpiR1ZWelAwSEJEdzdzWnBKUWxoZmN5eU9IbUNON0hvb2FsRVdUd2dZWmxOZk9oR2o3U1VNd1F4QzBOSlEwckdzb013N0xoUnJsNWhwemhCcnpsbWZKK0VEWnZjRnMwQXg1WnZPbzJXNTZveWlBMEhiRkkva3V1NzhwbGhpdjVRUUttNmd6SlVtQUxodE9HNjR0S3U3a3R3cHE1N1pGbDFBZ3MwNnVib2F2ZXU4YWtJc1Nnci9tK0NFdWVHVVdDWGljSFdDeDNuZmlsekZiTGU4QndYaG1GdldKS3M5UXdmVWZZNVYzaHkwMFJ0UUkvb25XaXZCR0VEdDhUMndzN3ZCVUdNckFDajFzVXhKdENOZ0k3NG1IWG1SdUJzemcxQ0lQL1hwVG9KYnpBWVpnNzN0SU1JMExoMUUydkxTSU50NmwwNVo3aG5pc2Job0l0L0FOVzd2TlM0TXZRdEdUdXNDOUJucFFQV3NMdTFhUDBVdktiekJzNzVxN0pQWnJsRzlzN3dwSlV1VU1taGt4NTN4SXQ2VktjaGpzTTZhcnIrS1pzaDBUbCs4TUJpbHdvS0JsM1YrenorMjNmaWtQNWF2ZHA2WGdWZlFtNUxxc2txa0U3dE1TcUczZnpjK0Z6S2dWcStySnZlVUhrK3M1NnpFUERtbzZQY1ZmSEdNWjFUTURRc1k2S2pnMTh3bEQ4MzdSMHZJVkxPajdGcG9hcWpobytZempYSzQyNTdYS2JRdFhlUjd4R280NDY3akdNeFJWdm1yTEJiN25PbWkrRkkwSWRuMk5MeHhmWVlwZzVUbjExbk1kRmtwUkJ6aXhEOXNYZFpyaHd4SFpyK0pJaFAyaTNNN3phVytLZzd4Z3VIYzJQaENUcVcvQlZMOWpyQ0pZeGlKQjhTMndrTDhzRzlZb1VZVWROZWhuK2phWVVJcTgwODB5MXRyRlpYbGtwMW9xbE84WEs3ZkxLMStWNnVWS2owaGovdHAweEw5V1ZwbVdKaUVSOW5tVDl1NEZrK2dqTTR5cmxNV1FvNndpNTV0dGlYOWlkS1RwSSthNWl0S1hyY2NPTlZGS25ucmRRblNpUVlUeS8xbGRlVHRCc2pFZXRuZS92RVhoMjEyUEM2TmY5eXNjWGUxMmY4YjQ1NFNKOVRrZEJEUWFXemFvelRSL3FCUDBuY0lhc3I5SFRNb2JvQWpLRjZVZGdoU2NZK3BIZWh2QTZqY1BrQXpnNEcwZkVYbmdEYndMeGswSmpkTkZaNm1MOVFOaEp1cThYZmdiN0NZbnBYNUJjL3cycHJTY1lyc3dTdmpZNzh4Z25FaytSSHNJelpKNWloTkZkZjRTVDhVVHk4TVNwMlljSGRNNFNJV0FIT3I2aHhUMnlOZkVPZk54RkVGTXNkQlkvb0xpdXhJYW82U2ppTWlZSlpRdzNjUVY1SkxKRm9qMUZGa1Y3b1Z1Q2RHSDZHVTQvUnZaaDN3cm84WE82QzErZ2Y1SXMwelRPeFA2em1JdnZIUFB4M0ZVaWR5Nm1uYUJkNlB4U1pMMUFHRG1zNG0yay93SlFTd01FRkFBQUNBZ0FoSkJvVDRNRTlvYWpBUUFBNHdJQUFESUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhOUzVqYkdGemM1VlN3VzRUTVJCOVRyZlpKaXcwRkZvb0JjU2hoNlJGTVFoYVZXcVZBeEVSU0FHcGFja0ZDY25ablc1ZGJlelU2d1h4V1J3UVVnLzlnSDVVeGV6Q0FTR0VXbG4yekhqZWpOK3pmWEY1ZGc3Z0pSNDNNSWVWSmdMY0MzRS94S3BBM1IvcmZQMlp3T1pRV3puTGxEK3licm90RTVwYW1jZHlSS2NGNVg1ZzNYNWh2ZkxhbW55WHkvYTAwYjRuMEcxZm82NHpGZ2o2TmlHQnhhRTI5TDZZVHNnZHFrbkdPMHRERzZ0c3JKd3U0OStiUVVsUElIcHJETGwrcHZLY09PeGUvY3oxNTF0TXQzR2dVNk44NGJqbG02RjFxZnhDa3hjblVrMjBQUHc2b3hFZGtTTVQwOTVmeVVSeEh3YmtNaVZtb0R3bDhvTTJmbWUzeDIyYkI3WndNUTEwU1hYMVg4ZDNUOVJueFdwZm16aXp1VGJwTy9MSE5nbnhJTUlhSGthWVJ6MUNpRWNDVDYralNXRHRQeW9FT2xkdXhtK1praDhOOWdYYTdZK3ZPbjljd014WmIyT2J5ZGc2NHVLcDlkUlhXY2JLNTlxZE1aN3did3I0WTRsV3E5UlJlanhETExCdHNOZERqUWZRM05qOERySHhBN1Z2SE5YUTVMVmVZVC9oQnE4cnYxQ0ljQXVvdlBrcUgyQ3h3cmR3dTdKTHVNTTJ3RjBzNDJhRll5SlZCWDRDVUVzREJCUUFBQWdJQUlTUWFFK2haeCt6UmdFQUFDRUNBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTVM1amJHRnpjNVZSUzA4Q01SQ2U4Z1pSRkIrSjhlcEJORnFKaGd1RWcwUVN6V29pRU81bGQ0Q1NwY1cycStGbmVUTHg0QS93UnhsblYwL0dHSjFrWGwrblg3OUozOTVmWGdIZ0hIWktrSVpxSGpienNNVWcxNUpLdWphRDlFRnR5Q0RUMFFFeXFIaFM0VzAwSDZFWmlGRklTTlhUdmdpSHdzaTQvd0l6YmlvdGcvS1ZVbWc2b2JBV3FUMzJwT2FMVUxpeE52TUdEM0N1dWZWNUQrOGp0SzZyelYya25YQlNLN3RmYnpJbzl1VkVDUmNaWXJ6MnRKbndSeHlkemJnWVNUNVlMckNIWXpTb2ZHeDlPd3dFMGRDQTVSTWtBY0pod0MrV0RtMjkwV3dUY2FtdkkrTmpWOFphZDM5Ni8yUW1IZ1N0ZTZuOFVGdXBKamZvcGpySXczWVpNcEJsY1BTUFZSanMvU0tlUWUzUFhIQUtLZnFrMkJnNUthR2NvNHBUanBIczRUT3dKeXBTa0tlWVM4QTJGQ2lXUHdlZ0NDdkoxWEl5dFFwclNhN0Flb0p1VUN3bHpnaU5yZkFCVUVzREJCUUFBQWdJQUlTUWFFK2Q5dXVCTHdRQUFCa0tBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpndVkyeGhjM090Vm0xVEcxVVVmaTRrTEFsTEc5NmxyYlpXckNHOExGTEVLb2p5a21oMFNlVkZhbTIxYm5ZdnlUTEwzckI3UStHejAzL2lqRitySTYyMU0wNC8rMC84RTQ3bmJpS3hrRTdKMkNSN1g4NDU5N25QT1h2dXVmbno3OS8vQURDRG5RUUdjU09KSVh5UXdDdytURkl6cDJFK2liaVN4UEZSRXFOWTZNTEgrRVREWWhlU1dOS3dyRFFyU3BQVmtGT1RUMVh6bVlhODZqL1g4RVdTY0UwTnF4b0tHbTR5ZE1peUc0NU1NWXlacmpBcW5pVzNSYkE3YXpoOFZ4aWhiYXp6dlNvUFpVNEVhMVVoTGVrS1A1eWpaZk91NzhvRmhzbDBDK3RHdHhoaXk4TGhET2ROMStlRjZtNlJCNXRXMFNOSnJ5bHN5OXV5QWxmTjY4S1lvc2VnNTMyZkI4dWVGWWFjcHBObjMzTmsrZ2JSalZ1VmluZkk4TnA2Ym0yRjJ4N3Q3V1QzdVMvWGVWZ2hLOXBKcGswUmxJejd2SGg5eDZnRVFncGJlSVl0QW03c2Nsa1dUbWdFZFdQREZLVzUwUlk0dkdoWFl0YnVpWkp5cUtXOUdicTR3dG15UE5wTXd4cEZMOXNRM0hKbDJWU3dtZi9BeWdOaldmZ3lzR3c1Y3RxV0lMdmxZWVU3allDc3ZCb0hyNlhOSFd2Zk1qekxMeGszaXp2Y2xoUzdVeUtHWlBiQTVwVUlUOE02UTJMRExmbVdyQWJFNWFmVEN4UzdnSk0zN2o0L01MYXJ2aDB0TlhMMTBYeHJJWDBWemk0b0x6WkVOYkI1emxYWk85eHMvYVJ5aFE1QTFyYzlFYnArYVRYaW8yRkR4eWErMGpHTUN6b3VZa3ZITFh5dDR6YStZVmo2Ly9SMFhNTTdPdTdncm9admRYeUhld3lYR2pHeWlxN2hXQVJDV1JBYW05VHErQjVFTk5VSS9ZWU1pSytPSW13ZER1NHl0TjFaMHNHUjA3R05IRU4vWkx0cnliS3g1SmJ5dnVRbEh1Z29vY3d3M3NyNzBQRVczcVkxclp6ejU2aldzb1RoOGt2U1JJUExrRDdyTVdIb2EyeHhuSzhNbzJmbVNUVW9PUEdDY3A2NFg2dDI1bGxxVUlScFpHV1pja3p5b0ZhSUdpNytpNlpxUzFvVjNCNlZFTmxsTTEvSXJ0ekxibVVMbXhRVjgwVXZQbUtrOHRpeWJSNkdJek5UZERmODJFcVJmd2wwcTFXMmhRcVdLbkdaOXgxK3dKMmFpc3BpdWw1cnF0TDFETk1ObFcvbm5wZFFvR2dodzBBNjM3UXdkWkkyd3FQOFRqZTNDS3QwdjdnOFVMZll5ZU5DK2o1Q0tBai9CTGQ0c0wyWGR4aTBQUW9lVjZOT053eXIzRmtrTW9ObXM2TkVXQU5OQTRJcmRLOFBnYklMTEpWU0pZVCtSclRUY3hHWFNQbzZqUmJRUmw4Z21SazdBc3M4UnR2UE5HdkRHOVIya0ExWU55N1RlTEJtUlloWGdXaWswQmg5NlVqV3NmNGk3QmoxRHpLL2d2MkM5ckhmRUZ0OWl2anR4K2dvVEJDK05qSCtDSjN0VDVCb3d6TWtuNkNMVWE4Zm9Wc3B6cDFVbktmZkVWS1JMdFpVMXhQcDRpZDB2VWZvbTNoNDdNWlZkSkliS2Vpc0IvMnNGOE9zRDlPc0h3VTJnQjAyaUIvWVVPUmlwa2IrMk1VSHFqU1Nhem9Pa2NZWW9mVmpEK09ZUUh0cWtkeWVKSWx5KzNvOWhJbk0yRFAwUDhMQXc2WVIxTlVZaVRxOFFVK01KRlBVdmh2WlR4T1E2bWZ3WHFTYnhmdDRrMFlYS0txRHFIM2lKQjBoakZGOFNYUVQvd0JRU3dNRUZBQUFDQWdBaEpCb1Q3Z3VBTU1WSEFBQVdXa0FBQzhBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeTVqYkdGemM5VmNDWUFjUmJuK0s3dlozcDFNUWxoSUlJQUpSOERONXRpK3B6c2trZXhtQXlzaGdXd1NYQkN3cDZkbk0yUXpzOHpNaGtSOXlxbUlnQ0FpSXNvaENLaklvWkFRQWlLb3FPQ0pvbmlMOS9YdVMzbnY2ZnYvNnVxZW5tdDNKaGxlZUlUdHFxN2pQNy82NjYrZW5ubnVyNDkvRGdCMDlxY1l0REdaTG9yRTFFNm14ZUJXcHRQRm9JdEpsNFRFckU3NGlzUnNpUzJQUVp5ZEhHTXIyRXFKclpMWUcySXdtNTBpc2RVeDZLYXlQd2FIczFOaTBNVUdKTFpHWW9NeE9KS3RqY0VSN05STytKYkVUb3ZCTVRSdUtBYnpxWHhqREk2bDh2UVlIRS9sdWhnc3BQS01HSnpFMW5iQ0N4SmJINE5GYkVPTW5jbk9JamszZHNMM0pUWWNnMlZzVXlmOHFCTitLckhOTVZCcDFoWWFjSFludkN5eE44VWd3VTdwaEY5SWJDUUd5Nm4zbkM3c1BaZUd2RmxpNTgxZzU3TUxZdkFHOWhhcU9UTllrcmwwU1VuTWsxZzZCbXZaYUF3RzJkWXVyR1dvZGlFTjNEWURackF4Q1o2bjV1MTB5ZElsUjVUR2ljRkZNMWllRlNSV2pNRW10QVNiWURza2RqRngzUm1EczltdUdIc3JleHZWM2s1dGYwZFQzaUd4ZDhiZ2ZEYmFoUmZPNmhLcVhVcVh5K2h5T1YyeWRNbEo3SW9ZakpLSjI5aVZOUGxkRW50M0RMYlI1RzBzUTVkTDZYSVpYUzZuUzFaaVY4VWc3MDk1RDEydXBzdDc2WElOWGE3dFpOZFIrVDY2WEUrWEcranlmb25kMk1rK0lMR2JZbkFKRzVYWUIyTndHWlUzeCtBS3NzMDcySWM2MlMwUyszQU1ybUszU3V3ak1iaWErajhhZzJ1b3ZDMEcxMUY1ZXd5dVo2T2Q3QTZKM1JtREcybm94Mkp3RTNYZEZZT2JxYnc3QnJkUStYRUdSMjVjZTlZYXp4M0xaTDNVNEE0dlc5em9GY1p6MllMSElENlV6WHI1Z1RHblVQQUtESTQ2YXlKWDlEWjZycGZaVVRXV3lOVHA2dWdmV3I5NjR3aUQ3blVYT2p1Y3ZqRW5POW8zWE14bnNxTW5NNWc1Z0tPS1RyYTR4Um1id05FejFtNWVQM0RCcVlPYmtDRDJCbmRuYmQ2d2FaREJJZngremVEQXVxSDFnM3pFYk40eXZMbi9qS0ZnMEt4SUV4L2pONnp2MzdoaExkNFBCNU40QTUrRFRZY0huUG8zand4dVhMMW16Y2JCWVd3K2xQUWFIQmdjMmpLNDVvTEJMWVByTnpGWXNDNlhIKzI3MkV0cUYvWTV5VXhmeWlrNnhWM2pYcUdQYTQ1S0hjYXBWczRqV2tMMHNLMWpSU2FiS2E1aXNLdW4yam9SUHVQNVhESG41c2I2enFiYmFJK2IzelZlelBVTjVMMFVNczg0WTRXVGZVcmJuZUxXdnY3TTZGQzI2STE2K1RxdGk3WXdhQi9JcGREMGg2eERFS3lmMko3MDhwdWM1SmhISHN1NXp0Z1dKNStoZTlIWVh0eWFRVGdzWHBmSjlZMlBPY1YwTHIvZDdFdDUyM045QmJkdm8zZlJoRmNvcnMzbENTNU9NWVB1UllzYzR1YXl4YnpqRmxlblVubXZnUE9uYy9FUlZ2VzFSRFM0SmJVWXpKOWNiUWFkbzA3aHpIekdSU25uMWxiWEg3TXVzejFUWkJCYjQ0M25QZGNwZWlrRzh6Wk9JSjN0M3BaTUlZTjZyczVtQS9GRFl0dzNwVGxJck5CS3I1VjZpenY3VU1xK0FXR3pVMG1yM0k1TVN2anJNTGU2ZzhGSmpSRmc4UGI5RlJxcGJzbzcyUUpTUkx1YzRXU2QrcmlxajdidVloVU5Cc2ROeVliQmpoYkwzYkM5TzBhOUlnOGtQVDNuOWkrcXhkTE41VDJFL25ZTWtBUE8yQmdLT3kyRG1KcDJiajhDTGoyUjVZd1pIRjgzY3F3VlkzQm0xM0JtTk9zVUovS0k0bXNiWkxnaXFzekUrQmhTSFBVd2VCTk0relpSZzdaaU1qK1ZtYlRtdUZYNGp4YVBWK1RiQUlNN1d5YWFjWUNpbmR0ZlBkSVhONWJ5ZHpidXZGTlE0R0JvRlM0YmMrcjBmUHFpSWZSclo2WlFtUEJTcXpHR3ZQTUFxYTZvTzJhN1Y5eWFTeFg2OG1JbmpXS1liN1hqUmE3a2pNSkVFc09aY012R1NlU3BObE9EZXJkTkpNY1kzTkJ5MGdldWZKZXZQSGZ3bVQwdFYveDlMU2JaQW9XenlmeUdOT3FMMjlKSlBRMnFzYXFoZ1hXV0ljY1k1OG9oaG53UHdTalFQN0hMeTRlYitmSm1HSlN2VTB5OS9QQmFsajRpelEwOUIyU3NSVDZ6aVdKbXJHOWRwa0JwMlV5S3RhbFNacnFtOFJSbVliMzhsb3pqVVFQUFgxSHM3c0hTM2RtWjR0WjF1VkVHdmVXYlRiRFJMS3dlZTNMNUJpbTBZYkR5Z0l5QnVObEJYTWdRbVA1V202WXJtSTBheklsMHI4N25uVjFpek56eWJCQnRLVExDRlJYMFZqU3VMZm4vM0ZyOFZyVENOMFI5NW5EUmNiZWQ0WXh6WVNWMkR4NUdKWFl2ZzV0YWk2K1dDWHhrdnFKMzdWanVZdC9RNnhvUm1mUHJHeXh1WFpzWksvSmRDQVhMZXlUOURtOW5YMEFOT1hXaytRZ0cybjZRWmZEK0ZrclRNdXRkWEYrb05WN2FtUmdyOW8vbDNHMW5PbmtIaFN4UEF4c1pYdCthTVR6RzV2M2hEUHFhSklzNWhaZE5pY2xQSGh3ZFd1YUR1VUdXV0JuUzF6YkJvZjdUQnVSdzNvR0dqRW1va3dZM0g3ellNSVZrUjExVTFWK0tEeDg0U0N0eUNwbWZldTNqZVFvTlJJcFM5cUNzMEhRQ1VmTTVXNHMyd05xMFNmYUR1OC9WbDR2MnViTGVFbzRQNHM1U1g5Ny9IMUc1dnZ6dFl6a0h6NjUzSGF3SGpVMDlMN3puSUQ2amFrclFqLzdmUHdGc1NyNDdEc3BEczZaRTdFaDU0Mk81WFF5dXFMbkNXbW01aGs3TEQ3OEd4R2hpMWZQRi9lN0daRDR3cHpaa3ZVZGVHNUkwYThDcjk5L3BUY1dXaG15NDV6VWpUTE5tdlBhQXZOOTZTejcrV3BLbldXUEdITmYxQ29XRnNpd3p1S0NuaWRsVGY4NVE0L0hZdEoweVhSUmtQTGpUOWNZNUtZbmRWeEpFSVVHQ0c1VnU3bTZKVlA3bnBvMm5xZlRrYUZHNSt5Wi9wRFp0cDhwZ1dYTU1TcHBxVWJWMXV1bGNRVmtXLytDMnJZYytJb29ONXlieXJvZXBxRWNmSmRiUWZoblpPODQrd1Q0Wlo1OWk5ek5ZMUxEaDJGSFBtcklsbTdJdUc2cW1XN0ppbU9nS1JUWVNKbUxEa3RNcEkybGd2NHg5aG82bDR2ODVzcEtVTmNWV1RFMVRFclpzMEx5VXBpQXRuSytwTkZ1ejZaclcwbDZqUERUc29EN0w4dnMwdzVROVdYRnh0cFowVGRkSXVvcWkwQWlja1NocjFiRlYwMjIvTmFYb2ltdHJGbTlGdG41ck9xSFp0b3VTODFZbExWb2QyVlVNUmZOYjFRUnk5aVV3alNUMXk1YW5vdzVwM2k5YktYK1dZbmlhaDhyelZrVzMvRmJOVGFmMWxPSHlWbFZMK0syV1pTWDBwS3I2clpacUpJeGtTWE9pbXRSOUMyc20vYS9LbHFJSUt6bGF1WlhJSW9FUHJOQUhKTG1lSkltNWxkRUxsbTRwaGtxMFpQS0pYeUp0NUk4VzlHbTducEZJZXpRSHRUTWo0M0dNcktHY0tsSEJkcVhVWnlzRzhqVVVXOUMwOGM3U09HWDBDZFlDeVJXWlBJUXpaWnFQMU9TUUJ2Rk9heVN0SWZ2L2JQNUhZNG11UXRJSUtocTNMTTdXaUtzcHRFQXFHdWVCQnZJdFVDNGhVYmIxZ0xvaEIxYXhVUytiZUpQVkZUTmR4K3JvM0FhdGJoaGFtZFhOR2xibmMwT3JLNVpkeCtwNlRSNDEyaUp6dEtvVmFWYTMxUFNzdWYrZVRWdVRlRmJ4NUlZOHE2ckdmbnZXTEhtMnJuZFYwNHQ2MXl4NVY4VVZXaGw1S214c0tacUI0MDFrejNHQk9EUnNwSTh0bkJ2ZFU2aEMyWVQzdWVYUXc0cEIxaVVyV3ZqbjQ0cDByeTJWRlpIS3RxSlMxWkJKRlRLcFZUSXBYQUtWdHlnbGExdTh4blhuZmFiTzdjci9DL0dvcHZRb1h4cnArNEZxd1JqUExCc2pFK2ZBSno1dUxRMGppMDR6eXJobzJKRGdORENPUm1uWVByNDRKbVRmeXVRL1hRNlF4SDFxQ3cxbzU4Qit6Vlo5L2FJckFQK2hySmF1Y2VxMlNqS1JYZEFMZUdjYkJ1MG9scDJLeGdQdXRja3dvaG5wcWIxUmdROGxzTHNaU2oySjNSR3BVOXBkYzlRRHQ3dXJIMFM3T3ltM2h0MTFPWVZYVjdmS1Y4K2tLeWVZNHdVMDFEVGRHM3FVUm1Yc1EzbFVqQ0QxNlZiN0ZYWGlNVFRVMXJjUzFaQ0hnaldkcUpLWGJkU2VhalRYWDRsK0RwRklUWUVkM2VkQUVwVTRCUHgwb291U3F6eitJaHpKenlwWmgvWVVRN2RNMUlWSEFySFB5akxQdGxBbEhoMUlPbGtuLzVJUFVVSkNPUHJYTXVpT2hxRnZhR2ZYRFpVaUtYb041eEFuOUtZcW9yT2hLangzb1loTmZ0VFRKcytMS0FQQ3NZWk9pTUZTOVZjQStWN01NbjBzMjN3bHlMS1BGNnFwdEJja1VVZWVtZkJlc1Y3ODNaSXdTelJreEt1bCtwN2krd1duRnV3bzFkWkVmY3hhOWhTMjlMbHpPOXE2alN1V2tFbDAwbW1jcVhHTEtTRTJHOEdETmprZTBIZjhqMmo0M2xDU0FobUc1VXlCakVwTk9LL2dEclZSeURKY0k0WHZuUUU2Vk82L0FCMWFYWFRRaXRBaTZEQTRPZ3pabjI5RTBJRnJCbmNrWHdPbEFoMllGSmVodzZRTWUwcDAwS3dEUlllSjRiUlpkRmkxYkVxeElFQ0lyYWdpUitIV0pIL3l1cDJ3Ylp0YmdkREM5MTZoSlIraGk1VnZSdmtHT1JkRlBmSjlKTzdWd3BiV1dLeWhHTTBqVElBazA1bHFmOEx0dHBiZXBWVmhDUGtGVXN4VVJmNFJSRlNYVzRid1VBdXZaQlh1Y3o4cmtTbkNXQW5pYUJrOEl5YmtKUGhjNnZVelQwc1cwZDZuaHZRc3lwREpJMWJTU3BEY3RFZFpUbWxQMFRTeUxiWDQ0MnpUNTRuWm8wbEk5YjJJbk1pU3VtM2o4Yy95SXdONlViWVRTZ0xsUWJUejJFbFIwT0JJTjJ5TnBLVGR4eWE3Smt3ZTBmMW82V09mb3hCM0dsUDM4OW9nbitLN2pSWkVaWjdOaTN5ZGN1VndueWRiOEh4ZlZ2MXpzdUZuWnFxZlAzTWFZdTF5WFZYRkRkY3RMNFhGclJEUHRCRDhFemRhUkdCVktlRzIxam5kM3dlclQrOSt1OENXb0NuWFdFVlZXS29UWWYwelRka3BrMElHMXgrUDVQeGU4M09hQnZmRThsWHE4NG5hdXlRNVh3VnFvRDE1amJTcHpBc2k2eVBoWndZKzN2eThpN0lkN2xHRFk2eEdSa0VyMWxZU2FkM1FaQzloSWg0U3NxS21GQVZGUk1RNXlVVEN3Sk92b2VrNFJrbTRhVXllOFVTa3FTNmlPS1duM0pTdUplMkViRWZ5RVpPSFo4ejEvSnFPbUpTbmlCdjZmc1lOeTAxT0dUZHE3a0YxNDRhVjF2Y2piaVJxeGcyTHh3M2N3NEs2ajBhY2w0akVCek9NRDNaVmZMREQrR0FJemhxdWU1VmlBSEl4UlhTd01EcFFWS0FNM3VSUklvSFprQ0ZPb1NoSlZWd2dqN1UyTHRqMEpHbXF1R0NKOVV5WnhaUnhRUXV5UDZLSE52SGpnOGIxQ2VLRFZpYys2R0tGVjhlSFNMU3A4cUpOWHF6R1lTbVRKYi9TM21xYlZkYWduRk1KSkxVRVltVkYzT3RvZVQrRFVLMFVyVk91QmQyUlJSdy9LdmpuTFA5Smw0WE9SQzFVdm43bzJZOXFXYndGVnpjOWNER1NqbUxabWtaQk51bWxQZHhBVEMzaEdJNm02eDVhRGpjcGs0Si9XbllNVC9kY1d6TVR0cHB3TFZ2eHZHUTZnWGh5OGMvRHY1VC9oM3hVT2hrRmlDRFUyaHg5bEhQVFg5bFRFOGZXSm5scTRpU1NEVDAxY1Z4NXY1K2FHUFdmbVlTeHg2ZzZyU0Z1T0Y1a3UwYVdvL25QUDUyMDJYUTJva3dhVlpMS1ZQbU5IbUN2N2lrSzhVU1JoU05MRXpHREFvU0xxMTFEakFWeDNyRG9LSTg4VGJIR3VSK042dlZkYjgrYUhQMjE5aXpPVXlDZXk2THdySjFRNjYvNVJJQndtOGNqaWdxVU9mRlZFVVFnMWMreEVtbFhUNkNYa3A1bEptUVRjL3lVNjhxbWFxYVR1dVZoa0VrYVd0Sk51ZWtVSHJqTlpFbzIweWs5aWJ1UzdWZ3BaSmxNNFNxeFMzOGMxV0wzS01lMnYyUFZSTGNycTVPZ08razVEYUhiVmRPdGY5cnJLQUxiV2tVMkx2T3pobDlYSTNXOXh1Y2MyR09MMDBzUVB5MCtJbnJPRWs5ZjZYU2kxenJmbEo2NThGTVg2WTlucXZBVTVUcjhpU2pwN2VPRW5yQWdCNTY1VW45S0RTVHdwU1A4RW82Vm9EZmhQeVhnWTRKOWhyZmpYa2c3c1ZFNmowVk9XRGdtbVJBWXAvR2VmeUttdXFmNjdYYnc1QWIzSUpwTHo2S1FiOEFoZUZxdStMc0U5N25yV1lhWjloelZORXcxNGVBL0ZjOS9LSjZ0cC9XMEpxc0pPYUdrVWc0ZVBIVGIwYjEweWxNd1pVZ2FucDFLWXdLZnhFbVlhSmxwaFRMVXRJcngyRVFTWnRMVUU1cVpObDFUMHpVeU1icEkxdFE0UE1nK1RaY0g2UElnWFI1aWNPeFVIMVl5T0tiZUVIb0xuY0dpZXQybGJ4cjE3eXA2QmNVa2xnOUw3RE54OWxuMkNJT2p5eWNTdFkyNDcrUzlMSDJIY0VuamIxNHBHbEYrdExrNWVuUEREV0t4bThIeFUzL1MzQnhoYnBVOWRIbXN1WW1KNW9aYnpRMjNteHF1eXMwTlY1b2JyamFFc3MyWmJCRlhJNWx5cjhRZWo3Tjk3SWs0ZTVKOXJzeHI1Yk0zRjlPVy8ySVdUWHVxT2JFMEJvZlhlaDhoemo3UG5tNk9WSE5vVkEwR3N5dmZMSXZEcCtCKytvejdHUWFIMVhpblZXTDN4TmtYMkJkSjBTL0YyYlBzeXhLN044Nit3cjRhWjgreDV4bjBOUHFaUG9QK0EzOVpuY1JZR21kZlkxK1BzMit3UlhIMlRmTFd0OWkzNCt3Rjlud2NuZ084dkFoUHhPRUhjR2VjZllkOU53NTc0REdKdlJobjM0Tlhtck9YS2JIdng5bEw3QWNNbEtaZmJvMnpIN0lma2JnL2x0aFA0dXluN0dkeDluUDJjaHorQXEvRTRkTndQNE0xclhqWk9jNStRU2I0SmFvTDMwWHQyYS9nK2ViVVRNU1pSREk5UURJMTU2TTZQMFBRREhjcnptWVI5d2ZoSWJvUTBPQnB1bnlaQWNUWnI5bHY2UEpidXZ5T0xyOW44THBKWDBwaE1DT0NIZ2FMbTRoZlRZMVdteHJOZDVzL01KaFo1c3FtU09oRTRvOU5UVEdhR20wMk5UclIxR2pMOTB1QW1LYm1OcmV0S00xdEswcHoyNHFDYnA5VE0rWXhtRlgrZ2hhRDdsTERVSkUybkZ3K0NMUEljV2hEK05JV2d0cmJ5YWx3RElldm1KZUM1NjZlZy9jdTFueHZwK2RPK0huS0dSTmp4Y3o0bU1mSGJQU0tFM2tVWHE4djNHU3ZyNzIzMXB2T0IrMDNOYTU4ZGFWcCtMY0xybXVkSEszNStZZXJYbldCR3JiTmRQb0pneTFCSGxOS1ZRb01PdWhIUW1qUm5kaHpia1M2RGNrTFBiZm1kNHVYTmZNaUpERTE2dHFoUkxieW51YWQyZUwzUUpIazhUMFJSbTR1NjA3azhRUlU3S01WeXIvY1NJUG05ZFQzNlp6UzlJSGMySmpuaXQ5TjZmSzJqeGQzaWVqVlU4TnF4NGhZVURxNVJCektkVzBnRWt4K0hBb0dpaGVDNTlRd083ZEJsU1REMkZVUm1ad0c1SW1RNXorZDFLeUEyZGFGNXNhK0ZkOWV5THpWNCsreER1Rk56eEJab3pNVGJqQnp5L3dXYkR3NFQ5cnFGTmJqUHNPbm5vTlRzL3ptOEdCOGRNSDR2NkhDdHg1NWtwOEtxUE1lYnRzWVRUd01LYXpQWllleUtYUlZLdmk2ZlJ1MmtsZUhhbktsM3lzUlB5elY1cVJTRmU0UFZqTUtmMlM5ZUlQN3NNZDNydEszMCtiVS9KNFdjdGp1ak5OUElaUi9qeXY0OVpjeXlOYjdEbkUzeWp0UStVdEo1UllOZnptcjhDcC9INjMyT2ptcUhKd2Nrb05aTjhkL2dxakQ0elVHMmxRZ3JxblJMSFNSditvMjVjWXpMcDVwYWkzV2hyOGFHSDVSZlRaYXRRSTJuWVdKOGZHeERBa3Q4Vy9VMHMrNnpQYS9pQlI5akxLM3Aybzl2N3A3ZGlPYlk0UGZmWGhpUDJVL2tHMjFoZUkvMVVMVE41R2p0RkNEWjFycmdJT2p4SWtONUNuOFIrUjZ6bG0wQlk2RE5yZ1Y4S3dOUjhFZGNDY3crQmplVFlOMm1BZDNSZTVqZUg5MzVQNW92UDk0NUw0SDcrK0ozQy9GKzNzajl6TGUzeGU1Vi9EK0U1RjdFKzgvR2JtMzhmNVRjRC9XNTlIakVsNCt3TXNUVUxZSDRTR1UrMkc4eTRJRUhWak82dTF1WDd4azZiejJlZFAzd1BTSE9ZM1A0RFdHSmNEcE1CUFd3V2V4dHNvZkRZL0Fvd0M4dHB0enBkb2VlSXlQbmdWNzRYR2tUN1Y5OEFUeW85cVRXSnNPbitPem5zSy9EcHoxZVN4Sm1xZXhUanlUMkRxZHJCbElzd2M2S21YWkFEUGdUQzZMN284TlpZbUhzc1JEV2VLaExIRjRCcjZBM0lqZkZ5ZlRYcXJrdUFtMTM5eUU5bCtDWjV2Uy9zdjF0ZStzbE9WTnFQMUlFOW9Ic2dUYU0vZ0tmQlg3aU83dFNKUDZOdStEcnBIdVdQdVRNR09rYlIvRVJ4YnZnWm5EajhHc2ppZmhFR3FaUGRLN0J3NGRIbW5mQjkxVVBXeDRaUG8rT0p5cWMyamNIcGg3eGo0NFltUWZIRG5TdTJRUHpOc0RSejBVQ3Q3TlRmQm1tQVBud1VvNEg5YkFCVnlCWTMzbW9RS2I2ZmtqQ3JnR0RvV3Z3ZGR4OWpjNGpXOWkyN2RDb1I4VlFtL2pRaDlkTFhTbkVQb1lFdTkxWE9qNVZGM0FoVDZXcXNjTmozVHNnK09wZXNMd2lMUVBGbEwxeEhKVlR1S3F2TDZHS3R0UmxTd01RdzdPZ2ZHSUt0dENWYllKVmM2cFVPWGIyUFlDZkVlb2NpdDBjUit1NUtyMGRKU3JRb0xIUjVid0tncSthR1RwSHVnbEVSOEQ3Sis3dkwxM1h2dHVXRklwM0NXd0dDNkRaWEFsaG9SM1JZQ3lNaFJ1cFJDT2F0L0YyalJlZXhFQjJvWnpKQzV3dXhENGV6anUrL0NTRVBoaEZKZ1d3QkFYZUtuVWlNQms2V1VqaE9XK2lQRFRlK2ROcnlIODFaQ0FhMkE1WEEvOWNFTmt4UTJGd2crRndnK0Z3ZzhKNGFuMkExd0Q3VGpiVjJPNlVPT0hPT05IOE9PYWRwZHIySDBScWRITDFWaEdhdlJOYmZlYjBPNDNvOTAvakRhOGRVcTdrOEMrM1VuZ2Fydi9CTWY5Rkg0bUJONG1GdjlpTHJEU2hnS2pQTzBDNkNxQlZ4UGdYZGU3dUZ2ZkRVYWxlTFRXNzRCamtOa0p1RU9RZUhOOWtrSzhFNkNUQzhDRUFEL0gyc3QxQkRBckJFaVFBTllVQXR5REpPNUZBZTVEVnA5b1VJQmYxQkhBcmhCZ09RbHdja1NBRlRVRStEU1NlQUFGZUJCWlBkU0FBTC9FMnEvZzE3NEE3QUowa29UdDkvVitCbFl1M2cyck1FcThZV1RKWGppRlliUmR2UjVyL1hnV2FwL1h2aGNHR053Q2wxQnREUVg1d2VVSW83VWplK0RVNVIzek9najNwejBLUTM3dGpXMTc0ZlJwT0dqR1hsaEhnOC9BL3grRjlhSzN2YUpYZnhRMmlLN3BGVjBySG9Vemw4N3IyQTFublgzdjM5Nis5Q0crdDVEMnkzREhBTlN4QzdVOEF2Y0lBK1ZkaGZ2RGFiZ3pwbkZ2dkJSM3FZOGdITy9DUGVvZTNLR0NWYmNLUFBnTi9CWnJCa2E3MzhFZk9KenZDK0Y4SC93Ui9vUTI2a0pzL1QzOEE5cnBDRnl6L3dqL2hKYjZaMkZkdis5ZndyNS94YjUvdzc1RFlkcGZZWUVFL3k3QmYwanduNjlncFBLTi9tY2srQmQ0UlhqOWphZ0N1V2h1N3lPd2NmRmVHSjZHc200aVoyL2VEVnRLRHU3Z3ErcVppRlBuaG1MT2hmK0MvdzZkK2orYy9sOEYvUnlxUk5CWXNBL09IbG04cEhjM3ZHa1BqS3hmaWk1K0RNN1pEZWVlM2J0ME43eTV4R2dXanpMZnh2SUZ6S2Urd3huMitpUkNoZ3ZnYnlnTkNiU0FNVVl6WjZHK0pFU2JMd1NiQm95MWhjaTZReURyWlVUV2VZMGdhMjg1c3M1SFpGMFFRZFpiL0pwVGlTd0VTSEpTMExsMVFPZjNwdXJnRGlIcGlhNk9hbzdwRUpJREVVaWFtRkFCN2l0ZHVMTWNnUkhRd0FDOUNnUDBhUmlpWFl4OWwyTHN1eDNYL3VNWUJWN0VNUFJqSGdsK0dZSG1iZkFiMXM2aGVXOEl6WmRERjd3Y1F2T2xFSnJQVlVIenBSQ2EyTWVtMTRQbVU4SnJDREw2cEc4eWFJNFNOTGZXZ09adnA0WW02K1QwcDRibWVSRm9aaXFoK1djcy80TFFmR1Uvb2RtRlFzUkNhRjRxb1Brc1F2UENScUI1V3prMHR5RTB4eUxRM0Y0Zm10bEpvWm1iRkpyajlhRjVVWWkvOHlQNFV6RWRCalIxRi93TmprQTdHR2lNVmJnc1Q4Tmw2U0t1TGtVMDNJNE9meHdkOGpRNjVvdG9seEwyTGtmc3plRFl1eWJFM3JPaGpaOE5zZmRraUwwSHE3RDNaSWc5N0dQeGV0aTdXN2hsSnJwbDF1VFl5eFAyQ3RYWXc3bFRZKzhRVG45cTdGMFl3VjZ4QW52c2RUQ0x6WWQ1Yk1GK1ltODJkTEZEV2JjNG1yMEZrVWVXbmJVUDJrWjZ4WEZvb2xLNWhaRk15eitNQVFTSE1mOVlSc2MvLzFpMlR5U0ovbUdzdmNaaGpQZ2ZOaG4vSFpYOEYwM0pudzVnemZBL1hCd0dOMkVyV1RBZThOOERGMWR5WHhxeGREemtIZys1eDBQdC9lTmZHK2N3cHo2SG5aVWNsQ2s1QlBxVk9NeGxSd2dnblk1VVNPT1ozVzFJdjd1OWU5ZGo4TlpLRmtia0JEV1RFd1plSTlFWnJ4RmhjWUppUjNJRzh5Wmg4TFpLQm5ZZEJpUjVOWU9qT0lPalVXTmlzQVZSd0Evd25NRlNuOFBiS3ptc2lsaHBWc2hoVnFpQzcvdHBvZS9iaE85OWpzZFVZR0F1cnFSSnVQOWRKZmVCT3R3RC9TYm5Qai9LZlhZblc4Q09GY1pkamlYTjZ1akYwRCt0Y2t2cmpZU1ZEbmFjV09VZDdIaEtvZGtKUUxHV3NZVkk4Y1NXVXp5SnZWNWdlQkMxSWI5S2FKL2R3R3FUOUYwdmhTUWxKSGsvNzVkWUR5N2hhVWl5dC9Va0Y3ZVlKSFN5SmJqa2ZaSy93azJFL250a0g3eGpwUHVkd1pPYVMzREh2WlFmWVMvRDJ1WDhCSHNGMXE3MEQwZnYraXdkZW5IQ3U0T25KRmVOWUZoN0Q1OXhOWTU3TDU5eERkYXU1U2YzNjdEMlB2Nkk1SHFzM1JCU09ZOVRlYjhrcU54SVZEN0FxZHlFNHo3SXFkeU10UTl4S3JkZzdjUGgzQXRKZnNiMW44L1RpNVhRZzl1cUFxdnhuTkVQRjZPNVBnbHIwU2FEQ005bEhLUjk4RkdjTWcxdHRBMnQ5QkhVL1h3c2I4TnlMWmEzWTVrSC83OVJVVzRTNVhKUkprU3BpdklrVVM0VTVmR2lQRmFVODBWNWpDaVBGT1hob3V3VzVXeFIzc0t2blhDektHOFM1WTJpdkY2VTE0bnlHbEZlTGNxclJIbUZLQzhUNVNXaUhJUmI0ZmZROWI5UVN3TUVGQUFBQ0FnQWc1Qm9UelVnM2ZYYUFBQUEwUUVBQUJFQUFBQlRhVzF3YkdWVGRHOXlZV2RsTG5OdmJHMlB6WTdDTUF5RTcza0tIMEZDQ0E1N1FweVdONmpFRVNrazNxNmxOS2tTaHgrdGVQYzFLUzB0Y0xUSG52bW1qYnB1TktUZ3lCSmY0YkJhZmkzWEc2V1VDWjZqTmd3Vk5hM0Rpb09jSXZ3cGdFeWVvYzFIUndhUzdOSHVOR3Q1QXNBVGlsWU55KzlmN1d1MHMvSkMzdUlGTFFSbjk5cGxYTUJrN2ZGYzF2UGlKUG1KWXpaaTFYOFRrM2JkU1I5L3g0RVJCR3duZHh1UmIzZTNuK3dOVS9DUWtEdTdJVzFxVmJRZVVOekcvZDZpZW84Q0xPVWIrdFQ5V1hmVThKV3JGcTRCNVVSNGhvaWNvMC9RNGNva3IvTUhaYWU5d0luaFRmMERVRXNEQkJRQUFBZ0lBSU9RYUU4U2t4cjRvZ01BQUdvUUFBQVlBQUFBVW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5NdWMyOXM3VmROYjlzd0RMM25Wd2c5SlcyV3RJZnRVbVJBdDZGQUQwWFhEajBOMjJCYmRDYk1zVnhaemhvTS9lK2pKTXVTL0JHbldMZlRmR2xqVVJUNStCNHBGeUphYnlKUzhveFJKbmZrNituaTllTHNmREtaSkR5WElrb2t1WU9IQ2twNXljVnR4V1VrR2M5TDhtc3lJZmdzajhrci95RjNsN2ZrbWxQSVd1K1BsMllENU5WR0dYMUNSeFc2dVlNRTJCYm9uSHlBSkdPNStrOGRBeDhGM3pJSzlNbnNLNldvK21QQlVFajl4RHNKNWRrYnd1ZzVXUzdKZlFscGxaR1VDMUlJS0NGUGdHeEJzSlFsZW1lenIySzVKS3dzSzZBWDhyeDVqV2V5ZkUycU9IUHZYT2lsL21OVzZpQmhDK2dJVFd4V1V4ZlJQRHhsN25tZktiaDcwZFJJak9PcHpTeWlOMmtLb29FemhNLzQrNmVBK2JINWtQbkhpL1RoaXJyWEVhVjRPcHBYUlpFeEVEMFlhNjhOeW5ZRHl5azhBbTAyenNNVDNNOEh0ZjFxcENaQlJTMDdYK3FzNFpvckJTbThZS0RpMmsyQkliS0U1TEc0U1hFRFltcWNMY2wxVkpSRWZnZXNLWkZjLzRjR2VuVVRGUVdtMTVCeTliWlBUek9WUURsQ3lXY0ZxTGZzRDFHRE5CU2szajh6TnNPQktkeVNLQ2M4ejNZa0JpeE12R0ZTWW9uaUhZbElYTzFBREVSc2Exb0l0bFY1YWRzNlhteURSanhjVEdjMkxVOUIydTJLYk1yMUFnVkRXMnhOcXp6UlRXb044cDB5dlRCSE9WZGJCaitKQUZrSjdLcVdYVFB2QkxObVkvSjhiemhGWmVMcEttUHRmQnJ1ZTZpWWdLbUxqS3hXeHMzTWFlMWI0M0lZMVl5dk1kQis2UHdFMGRacmVBTVo5dmVRZWJ1SGJHRER4VTRwMFMyMWU2OWU4RlBXM1BxaFNpL0FNcC9BSXl0bDJZRkZrZnd6bzE4V1NFTEVCZU90QzY0ZUd4WVcxdGwxMmgwRzV4c0ViYzlFNkMvM3pJc0dQTVBWRUwraDV1U1FhUkJ1Q09CZ2pqblBScUZocGFjU3JSdU9MWDhNcXRQSFV4K3JZRlZOa3A0VkIyY1hSUjgvTkFoUWJJR0h5dzBIRnJiN2U2RTA3ZkRreFBrQXpDK1l5UXBhaDJvOWYxM09XbTJvZUJoUmhtbUVoMnBEVy85VmRYUUhyVnNMUjlQZ29CMFhsTzdCUTVJeURmb1FVZm1XQTdMeVRQcUY1Um0wN3hVNnpkQ2tkY1d3R2JmODlGMDRXaUp0RjdJejl3OVc3Zk8wdXErTjZaTXQ2UHFIai90QUVROFVmNmVvTGZtajkvY0MxTlIwcnFNYzcwVTRNUEVRT1VpMm5xR3BIbmNlR2hpd080S2QrMlJmMUJmZUduN3J2aFhqZlVGdGpBa1hHRWpCYzZvS1l5OUhOVzhhTUhzNlR2QmQwbTQ3NXBMVGFUemhSZFZkRnV0b245MkxBa1pTY3lsdHo0MTloUHpQdmo5ajM5RlJTTDc2dStCRjZNZFNNdTJqWU4vVTh5dDJBSFh0NTR2TDlPa3cvdnFmUG52Wk8wTGNwOGx2VUVzREJCUUFBQWdJQUgyUWFFK0tlZWs2b3dJQUFFd0pBQUJEQUFBQVRVVlVRUzFKVGtZdmJXRjJaVzR2WTI5dExtRnRZV3gwYnk1d2JHRjBabTl5YlRZdlpHVnRieTFoY0hBdGMyMWhjblF0WTI5dWRISmhZM1F2Y0c5dExuaHRiSzFXVzAvYk1CUis3NitvcWowaHhTNjNDU0VUWGhnU0VteVRZTk5lalhNYTNNVVgyVTRMbXZiZjU5aHBtclJKS05MNjFuTytjLytPVDhqMXF5aW1LekNXSzNrMU8wYnoyUlFrVXhtWCtkWHN4OU50Y2pHN1RpZEVHN1VFNXFZZUxlM1Y3TVU1ZllteG9DdVFpR3JLWGdBcGsrUHYzeDd3R1pwN0w1UHA1aGRNTGw4dGI4elc2elZhbndhRGsvbjhHUDk2dUgvMEhnUk51TFNPU2dadGM4c3ZiZERlSzBaZFNQUGQ4Tk1oeEt2Tm9qQUpPT1QvejlJUWpBaVZRZkV6ZGlJTldvSTdza25FNVVhVitpNUxtUktJQ2xvNGhYUkIzVUlaOFpuZ2pUWmlxWEY4UVpuemdneUVTcWpXaVJWZW1qQWxuZkVhZ2x1WWFGUlBJejFHSndTdnVzSDlIRFI0QTdCcDB5SVNxL1Q1YUY2QVFWYVZob0UzdnlDNFh6Vm82cWpKd2ZXYTFxcVlCbTduRVVVWmFKQ1o1MDQzdDBiOHRoVjIydWluZ3Rid2ZMcmM2VjBEYlBXSEtRUDdEV3VRcTJaNDUraTgxYm9HZ0hlemFVbGFwVHlYdkdqNUpyb29jOC9NbldoUjJoWHVWVlpUTC9heTlqTlE2RzZ4a2FaTGFwSm9OMXg0cC9oVGRGSXhkNi80QnVpWnQrQjVhY0l1N2V2ck5OZ0xYMEcvTmlLeTdLRks4QVlzTTF3N1pWSm55bW82KzRwaEw0Skt2Z0RyaGlHYllEZXdvR1hoN29RdVFJQjBJZnN2Zm9lcXVUV1JSMUdIeG5qVXdQaUNzOUVRdmFEaFF2SDdsVGJOT0N6ZmJvM0pEWFdRZnZvVGlSWUlqQndYM2hzVitpL0JmZWdEc2gxTnBTTGtBRTBJSG1HWmZ6MTZWdWV3ZlJwN0tRSzR0U01CbThRMSt0QUtuZjJQRmZLTC81dm04SlVLU0huclJLRHFFQ0RMZkJkYWlINGY4Ym4ybStTNGpMR3NZWDQ0WE9JbFhWRk04RDVpeUZQQk0rN2VIZ1ArMXIvb1kyek51UEhIWHBtM2JUd0RNWlIvdmJiYVlROWNzcUxNM2lWeERVdVBqdkNSUDA0RndSdkpDRG5IZlZjOU9hRFdEekowSTdHYnUxSGZpRWs0aGRXblVUcjVCMUJMQXdRVUFBQUlDQUNFa0doUGowQkhza2dBQUFCTUFBQUFTZ0FBQUUxRlZFRXRTVTVHTDIxaGRtVnVMMk52YlM1aGJXRnNkRzh1Y0d4aGRHWnZjbTAyTDJSbGJXOHRZWEJ3TFhOdFlYSjBMV052Ym5SeVlXTjBMM0J2YlM1d2NtOXdaWEowYVdWekRjbkJEWUFnREFYUU83dEFvZ2R2RE9BWVB3VU1DYVZOcWM0djcvcGczaHZJNzVKTFpZbFFqWXRoSGttbTI1N3dtTHk2bjRRVEdNTWw2WUEzTWI3Q1YyMTFtZmxJWi9nQlVFc0JBaFFERkFBQUNBZ0FoSkJvVDFDeEhYMmhBQUFBRXdFQUFCUUFBQUFBQUFBQUFBQUFBS1NCQUFBQUFFMUZWRUV0U1U1R0wwMUJUa2xHUlZOVUxrMUdVRXNCQWhRRENnQUFDQUFBaEpCb1R3QUFBQUFBQUFBQUFBQUFBQWtBQUFBQUFBQUFBQUFRQU8xQjB3QUFBRTFGVkVFdFNVNUdMMUJMQVFJVUF3b0FBQWdBQUlTUWFFOEFBQUFBQUFBQUFBQUFBQUFEQUFBQUFBQUFBQUFBRUFEdFFmb0FBQUJwYnk5UVN3RUNGQU1LQUFBSUFBQ0VrR2hQQUFBQUFBQUFBQUFBQUFBQURRQUFBQUFBQUFBQUFCQUE3VUViQVFBQWFXOHZjR3hoZEdadmNtMDJMMUJMQVFJVUF3b0FBQWdBQUlTUWFFOEFBQUFBQUFBQUFBQUFBQUFTQUFBQUFBQUFBQUFBRUFEdFFVWUJBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTlRU3dFQ0ZBTUtBQUFJQUFDRWtHaFBBQUFBQUFBQUFBQUFBQUFBRlFBQUFBQUFBQUFBQUJBQTdVRjJBUUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVFc0JBaFFEQ2dBQUNBQUFoSkJvVHdBQUFBQUFBQUFBQUFBQUFBOEFBQUFBQUFBQUFBQVFBTzFCcVFFQUFFMUZWRUV0U1U1R0wyMWhkbVZ1TDFCTEFRSVVBd29BQUFnQUFJU1FhRThBQUFBQUFBQUFBQUFBQUFBa0FBQUFBQUFBQUFBQUVBRHRRZFlCQUFCTlJWUkJMVWxPUmk5dFlYWmxiaTlqYjIwdVlXMWhiSFJ2TG5Cc1lYUm1iM0p0Tmk5UVN3RUNGQU1LQUFBSUFBQ0VrR2hQQUFBQUFBQUFBQUFBQUFBQVBBQUFBQUFBQUFBQUFCQUE3VUVZQWdBQVRVVlVRUzFKVGtZdmJXRjJaVzR2WTI5dExtRnRZV3gwYnk1d2JHRjBabTl5YlRZdlpHVnRieTFoY0hBdGMyMWhjblF0WTI5dWRISmhZM1F2VUVzQkFoUURGQUFBQ0FnQWhKQm9UOWp6cDhDaUFRQUE2QUlBQURJQUFBQUFBQUFBQUFBQUFLU0JjZ0lBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREkwTG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBaEpCb1Q4L0NvRTJnQVFBQTVRSUFBRElBQUFBQUFBQUFBQUFBQUtTQlpBUUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERTVMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FoSkJvVDhvdzg3NEdCQUFBd0FrQUFESUFBQUFBQUFBQUFBQUFBS1NCVkFZQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRJMkxtTnNZWE56VUVzQkFoUURGQUFBQ0FnQWhKQm9UNEM4MkZveERnQUFuVE1BQUNnQUFBQUFBQUFBQUFBQUFLU0JxZ29BQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlV1WTJ4aGMzTlFTd0VDRkFNVUFBQUlDQUNFa0doUHNsOGJkVmNEQUFBWUNBQUFNZ0FBQUFBQUFBQUFBQUFBcElFaEdRQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qSXVZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQ0VrR2hQbGdBQlliOFFBQUFUTFFBQUh3QUFBQUFBQUFBQUFBQUFwSUhJSEFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZWR1Z6ZEM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUlTUWFFOGMvczdjb0FFQUFPY0NBQUF5QUFBQUFBQUFBQUFBQUFDa2djUXRBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXlNQzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUU5b3dZK2JrQUVBQUp3Q0FBQklBQUFBQUFBQUFBQUFBQUNrZ2JRdkFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lSU1JsRkVaV05zYVc1bFpFVjJaVzUwVW1WemNHOXVjMlV1WTJ4aGMzTlFTd0VDRkFNVUFBQUlDQUNFa0doUDNkMnpVVkVCQUFBc0FnQUFNUUFBQUFBQUFBQUFBQUFBcElHcU1RQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na09TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRStXVWl3WlRnUUFBRlFLQUFBeUFBQUFBQUFBQUFBQUFBQ2tnVW96QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5Tnk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUlTUWFFK3c0SkR4bXdFQUFPQUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dlZzNBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhPQzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUU5NHI2S1huQUVBQU9JQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ2RNNUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU5TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRTlPMTdMZGxRRUFBTEFDQUFCS0FBQUFBQUFBQUFBQUFBQ2tnYjg3QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVJSZFc5MFpWSmxZMlZwZG1Wa1JYWmxiblJTWlhOd2IyNXpaUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUU4VDlKdkdZUUVBQUZZQ0FBQkhBQUFBQUFBQUFBQUFBQUNrZ2J3OUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlUYVcxd2JHVlRkRzl5WVdkbEpGTjBiM0psWkVSaGRHRkRhR0Z1WjJWa1JYWmxiblJTWlhOd2IyNXpaUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUUvRWd1ZmdRZ0VBQUJvQ0FBQXhBQUFBQUFBQUFBQUFBQUNrZ1lJL0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRNExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQWhKQm9UNXBMamNtWkFRQUEzUUlBQURJQUFBQUFBQUFBQUFBQUFLU0JFMEVBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl4TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBaEpCb1Q4V1N6am1qQVFBQTVnSUFBRElBQUFBQUFBQUFBQUFBQUtTQi9FSUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpESXpMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FoSkJvVDJOU081VlJBUUFBR2dJQUFDb0FBQUFBQUFBQUFBQUFBS1NCNzBRQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVa01pNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRTlvTWlHblNBRUFBQ01DQUFBeUFBQUFBQUFBQUFBQUFBQ2tnWWhHQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TWk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUlTUWFFL25mQVpjUmdFQUFDRUNBQUF4QUFBQUFBQUFBQUFBQUFDa2dTQklBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTJMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FoSkJvVDNJdHpmMUhBUUFBSXdJQUFESUFBQUFBQUFBQUFBQUFBS1NCdFVrQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFd0xtTnNZWE56VUVzQkFoUURGQUFBQ0FnQWhKQm9UeENmek05UkFRQUFMQUlBQURFQUFBQUFBQUFBQUFBQUFLU0JURXNBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKRFF1WTJ4aGMzTlFTd0VDRkFNVUFBQUlDQUNFa0doUGFteExxelFDQUFBYUJBQUFKQUFBQUFBQUFBQUFBQUFBcElIc1RBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VWtaUlUzUmhkSFZ6TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBaEpCb1Q3cWlSQjZUQVFBQXRBSUFBQ29BQUFBQUFBQUFBQUFBQUtTQllrOEFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtOQzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUUvWWh2dlFnUUVBQUlJQ0FBQklBQUFBQUFBQUFBQUFBQUNrZ1QxUkFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lSU1JsRlNaV05sYVhabFpFVjJaVzUwVW1WemNHOXVjMlV1WTJ4aGMzTlFTd0VDRkFNVUFBQUlDQUNFa0doUElWek9JcDRCQUFEZUFnQUFNZ0FBQUFBQUFBQUFBQUFBcElFa1V3QUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01UUXVZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQ0VrR2hQNUgxZThFY0JBQUFoQWdBQU1RQUFBQUFBQUFBQUFBQUFwSUVTVlFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUlTUWFFL0tJeXBtUGdNQUFKTUhBQUF5QUFBQUFBQUFBQUFBQUFDa2dhaFdBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhOaTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUUvbkF0N1lSZ0VBQUNFQ0FBQXhBQUFBQUFBQUFBQUFBQUNrZ1RaYUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRMUxtTnNZWE56VUVzQkFoUURGQUFBQ0FnQWhKQm9UK0kzT3o1SEFRQUFJd0lBQURJQUFBQUFBQUFBQUFBQUFLU0J5MXNBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREV4TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBaEpCb1R5K012T0JSQVFBQUdnSUFBQ29BQUFBQUFBQUFBQUFBQUtTQllsMEFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtNUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUU4Qk5QVzZsd0VBQUxzQ0FBQXFBQUFBQUFBQUFBQUFBQUNrZ2Z0ZUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlUYVcxd2JHVlRkRzl5WVdkbEpETXVZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQ0VrR2hQb2pMWDUwZ0JBQUFoQWdBQU1RQUFBQUFBQUFBQUFBQUFwSUhhWUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTnk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUlTUWFFOTlncXI3cEFFQUFPVUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dYRmlBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhNeTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUUvSHJ4VkRvZ0VBQU9jQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1dWa0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE55NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRStiVjhlWVFnRUFBQm9DQUFBeEFBQUFBQUFBQUFBQUFBQ2tnVmRtQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF6TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBaEpCb1QzR2JTWkRTQXdBQU93a0FBQ29BQUFBQUFBQUFBQUFBQUtTQjZHY0FBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVWtOUzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUUrREJQYUdvd0VBQU9NQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1FKc0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE5TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRStoWngrelJnRUFBQ0VDQUFBeEFBQUFBQUFBQUFBQUFBQ2tnZlZ0QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBaEpCb1Q1MzI2NEV2QkFBQUdRb0FBRElBQUFBQUFBQUFBQUFBQUtTQmltOEFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpESTRMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FoSkJvVDdndUFNTVZIQUFBV1drQUFDOEFBQUFBQUFBQUFBQUFBS1NCQ1hRQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBZzVCb1R6VWczZlhhQUFBQTBRRUFBQkVBQUFBQUFBQUFBQUFBQUtTQmE1QUFBRk5wYlhCc1pWTjBiM0poWjJVdWMyOXNVRXNCQWhRREZBQUFDQWdBZzVCb1R4S1RHdmlpQXdBQWFoQUFBQmdBQUFBQUFBQUFBQUFBQUtTQmRKRUFBRkpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6TG5OdmJGQkxBUUlVQXhRQUFBZ0lBSDJRYUUrS2VlazZvd0lBQUV3SkFBQkRBQUFBQUFBQUFBQUFBQUNrZ1V5VkFBQk5SVlJCTFVsT1JpOXRZWFpsYmk5amIyMHVZVzFoYkhSdkxuQnNZWFJtYjNKdE5pOWtaVzF2TFdGd2NDMXpiV0Z5ZEMxamIyNTBjbUZqZEM5d2IyMHVlRzFzVUVzQkFoUURGQUFBQ0FnQWhKQm9UNDlBUjdKSUFBQUFUQUFBQUVvQUFBQUFBQUFBQUFBQUFLU0JVSmdBQUUxRlZFRXRTVTVHTDIxaGRtVnVMMk52YlM1aGJXRnNkRzh1Y0d4aGRHWnZjbTAyTDJSbGJXOHRZWEJ3TFhOdFlYSjBMV052Ym5SeVlXTjBMM0J2YlM1d2NtOXdaWEowYVdWelVFc0ZCZ0FBQUFBMkFEWUFLUk1BQUFDWkFBQUFBQT09XCIsXCJ0YXJnZXRSb290XCI6XCIke1A2X0RBVEF9XCIsXCJ0YXJnZXRQYXRoXCI6XCIvbGliL2RlbW8tYXBwLXNtYXJ0LWNvbnRyYWN0LTEuMi5qYXJcIixcInByb3BzXCI6e30sXCJkZXBsb3llZFwiOnRydWUsXCJoYXNCeXRlc0F0dGFjaG1lbnRcIjp0cnVlLFwiYXR0YWNobWVudE5hbWVcIjpcImRlbW8tYXBwLXNtYXJ0LWNvbnRyYWN0LTEuMi5qYXJcIixcImF0dGFjaG1lbnRTaXplXCI6NDQwOTV9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTc2MDE3Mjg3MzY5fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmJ1bmRsZWRyZXNvdXJjZXMiLCJuYW1lIjoiUE9SZXZpZXciLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJQT1Jldmlld1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUZW1wbGF0ZSBmaWxlIGZvciBlbWFpbCBub3RpZmljYXRpb24gZnJvbSB0aGUgd29ya2Zsb3cgc2VydmljZSBmb3IgUHVyY2hhc2VPcmRlclwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU3NjAxNzI4NzQxNixcInJldmlzaW9uSWRcIjpcImIzNGY5ZWY5N2ZkMjAxM2QxYTZhY2NlYzE0NmZmYjk4XCIsXCJpdGVtQnl0ZXNcIjpcIlBDRmtiMk4wZVhCbElHaDBiV3crQ2p4b2RHMXNJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1TDNob2RHMXNJaUI0Yld4dWN6cDJQU0oxY200NmMyTm9aVzFoY3kxdGFXTnliM052Wm5RdFkyOXRPblp0YkNJZ2VHMXNibk02YnowaWRYSnVPbk5qYUdWdFlYTXRiV2xqY205emIyWjBMV052YlRwdlptWnBZMlU2YjJabWFXTmxJajRLQ1R4b1pXRmtQZ29KQ1R3aExTMGdUa0ZOUlRvZ01TQkRUMHhWVFU0Z0xTQkNRVTVFUlVRZ0xTMCtDZ2tKUENFdExWdHBaaUJuZEdVZ2JYTnZJREUxWFQ0S0NRazhlRzFzUGdvSkNRazhienBQWm1acFkyVkViMk4xYldWdWRGTmxkSFJwYm1kelBnb0pDUWs4YnpwQmJHeHZkMUJPUnk4K0Nna0pDVHh2T2xCcGVHVnNjMUJsY2tsdVkyZytPVFk4TDI4NlVHbDRaV3h6VUdWeVNXNWphRDRLQ1FrSlBDOXZPazltWm1salpVUnZZM1Z0Wlc1MFUyVjBkR2x1WjNNK0Nna0pQQzk0Yld3K0Nna0pQQ0ZiWlc1a2FXWmRMUzArQ2drSlBHMWxkR0VnWTJoaGNuTmxkRDBpVlZSR0xUZ2lQZ29KQ1R4dFpYUmhJR2gwZEhBdFpYRjFhWFk5SWxndFZVRXRRMjl0Y0dGMGFXSnNaU0lnWTI5dWRHVnVkRDBpU1VVOVpXUm5aU0krQ2drSlBHMWxkR0VnYm1GdFpUMGlkbWxsZDNCdmNuUWlJR052Ym5SbGJuUTlJbmRwWkhSb1BXUmxkbWxqWlMxM2FXUjBhQ3dnYVc1cGRHbGhiQzF6WTJGc1pUMHhJajRLQ1FrOGRHbDBiR1UrU1c1amIyMXBibWNnVUhWeVkyaGhjMlVnVDNKa1pYSWdkRzhnVW1WMmFXVjNQQzkwYVhSc1pUNEtDUWtLQ1FrOGMzUjViR1VnZEhsd1pUMGlkR1Y0ZEM5amMzTWlQZ29KQ1FrSmNIc0tDUWtKQ1FsdFlYSm5hVzQ2TVRCd2VDQXdPd29KQ1FrSkNYQmhaR1JwYm1jNk1Ec0tDUWtKQ1gwS0NRa0pDWFJoWW14bGV3b0pDUWtKQ1dKdmNtUmxjaTFqYjJ4c1lYQnpaVHBqYjJ4c1lYQnpaVHNLQ1FrSkNYMEtDUWtKQ1dneExHZ3lMR2d6TEdnMExHZzFMR2cyZXdvSkNRa0pDV1JwYzNCc1lYazZZbXh2WTJzN0Nna0pDUWtKYldGeVoybHVPakE3Q2drSkNRa0pjR0ZrWkdsdVp6b3dPd29KQ1FrSmZRb0pDUWtKYVcxbkxHRWdhVzFuZXdvSkNRa0pDV0p2Y21SbGNqb3dPd29KQ1FrSkNXaGxhV2RvZERwaGRYUnZPd29KQ1FrSkNXOTFkR3hwYm1VNmJtOXVaVHNLQ1FrSkNRbDBaWGgwTFdSbFkyOXlZWFJwYjI0NmJtOXVaVHNLQ1FrSkNYMEtDUWtKQ1dKdlpIa3NJMkp2WkhsVVlXSnNaU3dqWW05a2VVTmxiR3g3Q2drSkNRa0phR1ZwWjJoME9qRXdNQ1U3Q2drSkNRa0piV0Z5WjJsdU9qQTdDZ2tKQ1FrSmNHRmtaR2x1Wnpvd093b0pDUWtKQ1hkcFpIUm9PakV3TUNVN0Nna0pDUWw5Q2drSkNRa2piM1YwYkc5dmF5Qmhld29KQ1FrSkNYQmhaR1JwYm1jNk1Ec0tDUWtKQ1gwS0NRa0pDV2x0WjNzS0NRa0pDUWt0YlhNdGFXNTBaWEp3YjJ4aGRHbHZiaTF0YjJSbE9tSnBZM1ZpYVdNN0Nna0pDUWw5Q2drSkNRbDBZV0pzWlhzS0NRa0pDUWx0YzI4dGRHRmliR1V0YkhOd1lXTmxPakJ3ZERzS0NRa0pDUWx0YzI4dGRHRmliR1V0Y25Od1lXTmxPakJ3ZERzS0NRa0pDWDBLQ1FrSkNTNVNaV0ZrVFhOblFtOWtlWHNLQ1FrSkNRbDNhV1IwYURveE1EQWxPd29KQ1FrSmZRb0pDUWtKTGtWNGRHVnlibUZzUTJ4aGMzTjdDZ2tKQ1FrSmQybGtkR2c2TVRBd0pUc0tDUWtKQ1gwS0NRa0pDWEFzWVN4c2FTeDBaQ3hpYkc5amEzRjFiM1JsZXdvSkNRa0pDVzF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT21WNFlXTjBiSGs3Q2drSkNRbDlDZ2tKQ1FsaFcyaHlaV1plUFhSbGJGMHNZVnRvY21WbVhqMXpiWE5kZXdvSkNRa0pDV052Ykc5eU9tbHVhR1Z5YVhRN0Nna0pDUWtKWTNWeWMyOXlPbVJsWm1GMWJIUTdDZ2tKQ1FrSmRHVjRkQzFrWldOdmNtRjBhVzl1T201dmJtVTdDZ2tKQ1FsOUNna0pDUWx3TEdFc2JHa3NkR1FzWW05a2VTeDBZV0pzWlN4aWJHOWphM0YxYjNSbGV3b0pDUWtKQ1MxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9qRXdNQ1U3Q2drSkNRa0pMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9qRXdNQ1U3Q2drSkNRbDlDZ2tKQ1FrdVJYaDBaWEp1WVd4RGJHRnpjeXd1UlhoMFpYSnVZV3hEYkdGemN5QndMQzVGZUhSbGNtNWhiRU5zWVhOeklIUmtMQzVGZUhSbGNtNWhiRU5zWVhOeklHUnBkaXd1UlhoMFpYSnVZV3hEYkdGemN5QnpjR0Z1TEM1RmVIUmxjbTVoYkVOc1lYTnpJR1p2Ym5SN0Nna0pDUWtKYkdsdVpTMW9aV2xuYUhRNk1UQXdKVHNLQ1FrSkNYMEtDUWtKQ1dGYmVDMWhjSEJzWlMxa1lYUmhMV1JsZEdWamRHOXljMTE3Q2drSkNRa0pZMjlzYjNJNmFXNW9aWEpwZENBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hSbGVIUXRaR1ZqYjNKaGRHbHZianB1YjI1bElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSlptOXVkQzF6YVhwbE9tbHVhR1Z5YVhRZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1FsbWIyNTBMV1poYldsc2VUcHBibWhsY21sMElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSlptOXVkQzEzWldsbmFIUTZhVzVvWlhKcGRDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNXeHBibVV0YUdWcFoyaDBPbWx1YUdWeWFYUWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKQ1M1MFpXMXdiR0YwWlVOdmJuUmhhVzVsY25zS0NRa0pDUWx0WVhndGQybGtkR2c2TmpBd2NIZ2dJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKQ1dFdWJXTnVRblYwZEc5dWV3b0pDUWtKQ1dScGMzQnNZWGs2WW14dlkyczdDZ2tKQ1FsOUNna0pDUWt1YldOdVNXMWhaMlY3Q2drSkNRa0pkbVZ5ZEdsallXd3RZV3hwWjI0NlltOTBkRzl0T3dvSkNRa0pmUW9KQ1FrSkxtMWpibFJsZUhSRGIyNTBaVzUwZXdvSkNRa0pDWGR2Y21RdFluSmxZV3M2WW5KbFlXc3RkMjl5WkRzS0NRa0pDWDBLQ1FrSkNTNXRZMjVVWlhoMFEyOXVkR1Z1ZENCcGJXZDdDZ2tKQ1FrSmFHVnBaMmgwT21GMWRHOGdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKQ1M1dFkyNUVhWFpwWkdWeVFteHZZMnQ3Q2drSkNRa0pkR0ZpYkdVdGJHRjViM1YwT21acGVHVmtJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1VHRm5aUW9KQ1FsQWMyVmpkR2x2YmlCQ1lXTnJaM0p2ZFc1a0lGTjBlV3hsQ2drSkNVQjBhWEFnVTJWMElIUm9aU0JpWVdOclozSnZkVzVrSUdOdmJHOXlJR0Z1WkNCMGIzQWdZbTl5WkdWeUlHWnZjaUI1YjNWeUlHVnRZV2xzTGlCWmIzVWdiV0Y1SUhkaGJuUWdkRzhnWTJodmIzTmxJR052Ykc5eWN5QjBhR0YwSUcxaGRHTm9JSGx2ZFhJZ1kyOXRjR0Z1ZVNkeklHSnlZVzVrYVc1bkxnb0pDUWtxTHdvSkNRa0pZbTlrZVN3alltOWtlVlJoWW14bGV3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWlZV05yWjNKdmRXNWtMV052Ykc5eU9pTm1NbVl5WmpJN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQkNZV05yWjNKdmRXNWtJRk4wZVd4bENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUdGdVpDQjBiM0FnWW05eVpHVnlJR1p2Y2lCNWIzVnlJR1Z0WVdsc0xpQlpiM1VnYldGNUlIZGhiblFnZEc4Z1kyaHZiM05sSUdOdmJHOXljeUIwYUdGMElHMWhkR05vSUhsdmRYSWdZMjl0Y0dGdWVTZHpJR0p5WVc1a2FXNW5MZ29KQ1FrcUx3b0pDUWtKSTJKdlpIbERaV3hzZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5aWIzSmtaWEl0ZEc5d09qQTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUdGblpRb0pDUWxBYzJWamRHbHZiaUJJWldGa2FXNW5JREVLQ1FrSlFIUnBjQ0JUWlhRZ2RHaGxJSE4wZVd4cGJtY2dabTl5SUdGc2JDQm1hWEp6ZEMxc1pYWmxiQ0JvWldGa2FXNW5jeUJwYmlCNWIzVnlJR1Z0WVdsc2N5NGdWR2hsYzJVZ2MyaHZkV3hrSUdKbElIUm9aU0JzWVhKblpYTjBJRzltSUhsdmRYSWdhR1ZoWkdsdVozTXVDZ2tKQ1VCemRIbHNaU0JvWldGa2FXNW5JREVLQ1FrSktpOEtDUWtKQ1dneGV3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWpiMnh2Y2pvak5qQTJNRFl3T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMV1poYldsc2VUcEJjbWxoYkN3Z0owaGxiSFpsZEdsallTQk9aWFZsSnl3Z1NHVnNkbVYwYVdOaExDQnpZVzV6TFhObGNtbG1Pd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TXpCd2VEc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemRIbHNaVHB1YjNKdFlXdzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGQyVnBaMmgwT21KdmJHUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFeU5TVTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhsZEhSbGNpMXpjR0ZqYVc1bk9pMHhjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNSbGVIUXRZV3hwWjI0NmJHVm1kRHNLQ1FrSkNYMEtDUWtKTHlvS0NRa0pRSFJoWWlCUVlXZGxDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUnBibWNnTWdvSkNRbEFkR2x3SUZObGRDQjBhR1VnYzNSNWJHbHVaeUJtYjNJZ1lXeHNJSE5sWTI5dVpDMXNaWFpsYkNCb1pXRmthVzVuY3lCcGJpQjViM1Z5SUdWdFlXbHNjeTRLQ1FrSlFITjBlV3hsSUdobFlXUnBibWNnTWdvSkNRa3FMd29KQ1FrSmFESjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTTJNRFl3TmpBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0Wm1GdGFXeDVPa2hsYkhabGRHbGpZVHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMXphWHBsT2pJMGNIZzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMzUjViR1U2Ym05eWJXRnNPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYZGxhV2RvZERwaWIyeGtPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE1qVWxPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzWlhSMFpYSXRjM0JoWTJsdVp6b3RNWEI0T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5MFpYaDBMV0ZzYVdkdU9teGxablE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1VHRm5aUW9KQ1FsQWMyVmpkR2x2YmlCSVpXRmthVzVuSURNS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlHRnNiQ0IwYUdseVpDMXNaWFpsYkNCb1pXRmthVzVuY3lCcGJpQjViM1Z5SUdWdFlXbHNjeTRLQ1FrSlFITjBlV3hsSUdobFlXUnBibWNnTXdvSkNRa3FMd29KQ1FrSmFETjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTTJNRFl3TmpBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0Wm1GdGFXeDVPa2hsYkhabGRHbGpZVHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMXphWHBsT2pFNGNIZzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMzUjViR1U2Ym05eWJXRnNPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYZGxhV2RvZERwaWIyeGtPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE1qVWxPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzWlhSMFpYSXRjM0JoWTJsdVp6b3RNWEI0T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5MFpYaDBMV0ZzYVdkdU9teGxablE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1VHRm5aUW9KQ1FsQWMyVmpkR2x2YmlCSVpXRmthVzVuSURRS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlHRnNiQ0JtYjNWeWRHZ3RiR1YyWld3Z2FHVmhaR2x1WjNNZ2FXNGdlVzkxY2lCbGJXRnBiSE11SUZSb1pYTmxJSE5vYjNWc1pDQmlaU0IwYUdVZ2MyMWhiR3hsYzNRZ2IyWWdlVzkxY2lCb1pXRmthVzVuY3k0S0NRa0pRSE4wZVd4bElHaGxZV1JwYm1jZ05Bb0pDUWtxTHdvSkNRa0phRFI3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTURZd05qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2tobGJIWmxkR2xqWVRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qRTJjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjM1I1YkdVNmJtOXliV0ZzT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcGliMnhrT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c1pYUjBaWEl0YzNCaFkybHVaem90TVhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVSEpsYUdWaFpHVnlDZ2tKQ1VCelpXTjBhVzl1SUZCeVpXaGxZV1JsY2lCVGRIbHNaUW9KQ1FsQWRHbHdJRk5sZENCMGFHVWdZbUZqYTJkeWIzVnVaQ0JqYjJ4dmNpQmhibVFnWW05eVpHVnljeUJtYjNJZ2VXOTFjaUJsYldGcGJDZHpJSEJ5WldobFlXUmxjaUJoY21WaExnb0pDUWtxTHdvSkNRa0pJM1JsYlhCc1lYUmxVSEpsYUdWaFpHVnlld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpWVdOclozSnZkVzVrTFdOdmJHOXlPaU5tWm1abVptWTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMkp2Y21SbGNpMTBiM0E2TURzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlltOXlaR1Z5TFdKdmRIUnZiVG93T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5d1lXUmthVzVuTFhSdmNEb3ljSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNCaFpHUnBibWN0WW05MGRHOXRPakp3ZURzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQlFjbVZvWldGa1pYSUtDUWtKUUhObFkzUnBiMjRnVUhKbGFHVmhaR1Z5SUZSbGVIUUtDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJSGx2ZFhJZ1pXMWhhV3duY3lCd2NtVm9aV0ZrWlhJZ2RHVjRkQzRnUTJodmIzTmxJR0VnYzJsNlpTQmhibVFnWTI5c2IzSWdkR2hoZENCcGN5QmxZWE41SUhSdklISmxZV1F1Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWUWNtVm9aV0ZrWlhJZ0xtMWpibFJsZUhSRGIyNTBaVzUwTENOMFpXMXdiR0YwWlZCeVpXaGxZV1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFnY0hzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlkyOXNiM0k2SXpZMU5qVTJOVHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMW1ZVzFwYkhrNlZHRm9iMjFoTENCV1pYSmtZVzVoTENCVFpXZHZaU3dnYzJGdWN5MXpaWEpwWmpzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qRXdjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRTFNQ1U3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNSbGVIUXRZV3hwWjI0NmJHVm1kRHNLQ1FrSkNYMEtDUWtKTHlvS0NRa0pRSFJoWWlCUWNtVm9aV0ZrWlhJS0NRa0pRSE5sWTNScGIyNGdVSEpsYUdWaFpHVnlJRXhwYm1zS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlIbHZkWElnWlcxaGFXd25jeUJ3Y21Wb1pXRmtaWElnYkdsdWEzTXVJRU5vYjI5elpTQmhJR052Ykc5eUlIUm9ZWFFnYUdWc2NITWdkR2hsYlNCemRHRnVaQ0J2ZFhRZ1puSnZiU0I1YjNWeUlIUmxlSFF1Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWUWNtVm9aV0ZrWlhJZ0xtMWpibFJsZUhSRGIyNTBaVzUwSUdFc0kzUmxiWEJzWVhSbFVISmxhR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZENCd0lHRjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTTJOVFkxTmpVN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0ZDJWcFoyaDBPbTV2Y20xaGJEc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9uVnVaR1Z5YkdsdVpUc0tDUWtKQ1gwS0NRa0pMeW9LQ1FrSlFIUmhZaUJJWldGa1pYSUtDUWtKUUhObFkzUnBiMjRnU0dWaFpHVnlJRk4wZVd4bENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUdGdVpDQmliM0prWlhKeklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ2FHVmhaR1Z5SUdGeVpXRXVDZ2tKQ1NvdkNna0pDUWtqZEdWdGNHeGhkR1ZJWldGa1pYSjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMkpoWTJ0bmNtOTFibVF0WTI5c2IzSTZJMll5WmpKbU1qc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZbTl5WkdWeUxYUnZjRG93T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5aWIzSmtaWEl0WW05MGRHOXRPakE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNCaFpHUnBibWN0ZEc5d09qSXdjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNCaFpHUnBibWN0WW05MGRHOXRPakl3Y0hnN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdTR1ZoWkdWeUNna0pDVUJ6WldOMGFXOXVJRWhsWVdSbGNpQlVaWGgwQ2drSkNVQjBhWEFnVTJWMElIUm9aU0J6ZEhsc2FXNW5JR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdhR1ZoWkdWeUlIUmxlSFF1SUVOb2IyOXpaU0JoSUhOcGVtVWdZVzVrSUdOdmJHOXlJSFJvWVhRZ2FYTWdaV0Z6ZVNCMGJ5QnlaV0ZrTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFNHVmhaR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ3dqZEdWdGNHeGhkR1ZJWldGa1pYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MElIQjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTXpNek16TXpNN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0Wm1GdGFXeDVPbFJoYUc5dFlTd2dWbVZ5WkdGdVlTd2dVMlZuYjJVc0lITmhibk10YzJWeWFXWTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94Tm5CNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TlRBbE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdTR1ZoWkdWeUNna0pDVUJ6WldOMGFXOXVJRWhsWVdSbGNpQk1hVzVyQ2drSkNVQjBhWEFnVTJWMElIUm9aU0J6ZEhsc2FXNW5JR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdhR1ZoWkdWeUlHeHBibXR6TGlCRGFHOXZjMlVnWVNCamIyeHZjaUIwYUdGMElHaGxiSEJ6SUhSb1pXMGdjM1JoYm1RZ2IzVjBJR1p5YjIwZ2VXOTFjaUIwWlhoMExnb0pDUWtxTHdvSkNRa0pJM1JsYlhCc1lYUmxTR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZENCaExDTjBaVzF3YkdGMFpVaGxZV1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFnY0NCaGV3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWpiMnh2Y2pvak9EbGlZelUxT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcHViM0p0WVd3N0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzUmxlSFF0WkdWamIzSmhkR2x2YmpwMWJtUmxjbXhwYm1VN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdRbTlrZVFvSkNRbEFjMlZqZEdsdmJpQkNiMlI1SUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0JpYjNKa1pYSnpJR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdZbTlrZVNCaGNtVmhMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsUW05a2VYc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2pSa1pHUmtaR093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdGRHOXdPakE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKdmNtUmxjaTFpYjNSMGIyMDZNRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Y0dGa1pHbHVaeTEwYjNBNk9YQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTl3WVdSa2FXNW5MV0p2ZEhSdmJUb3hNbkI0T3dvSkNRa0pmUW9KQ1Frdktnb0pDUWxBZEdGaUlFSnZaSGtLQ1FrSlFITmxZM1JwYjI0Z1FtOWtlU0JVWlhoMENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWW05a2VTQjBaWGgwTGlCRGFHOXZjMlVnWVNCemFYcGxJR0Z1WkNCamIyeHZjaUIwYUdGMElHbHpJR1ZoYzNrZ2RHOGdjbVZoWkM0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpVSnZaSGtnTG0xamJsUmxlSFJEYjI1MFpXNTBMQ04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwSUhCN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNek16TXpNek03Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRabUZ0YVd4NU9sUmhhRzl0WVN3Z1ZtVnlaR0Z1WVN3Z1UyVm5iMlVzSUhOaGJuTXRjMlZ5YVdZN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzJsNlpUb3hOSEI0T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hOVEFsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5MFpYaDBMV0ZzYVdkdU9teGxablE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1FtOWtlUW9KQ1FsQWMyVmpkR2x2YmlCQ2IyUjVJRXhwYm1zS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlIbHZkWElnWlcxaGFXd25jeUJpYjJSNUlHeHBibXR6TGlCRGFHOXZjMlVnWVNCamIyeHZjaUIwYUdGMElHaGxiSEJ6SUhSb1pXMGdjM1JoYm1RZ2IzVjBJR1p5YjIwZ2VXOTFjaUIwWlhoMExnb0pDUWtxTHdvSkNRa0pJM1JsYlhCc1lYUmxRbTlrZVNBdWJXTnVWR1Y0ZEVOdmJuUmxiblFnWVN3amRHVnRjR3hoZEdWQ2IyUjVJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndJR0Y3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU00T1dKak5UVTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGQyVnBaMmgwT201dmNtMWhiRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292ZEdWNGRDMWtaV052Y21GMGFXOXVPblZ1WkdWeWJHbHVaVHNLQ1FrSkNYMEtDUWtKTHlvS0NRa0pRSFJoWWlCR2IyOTBaWElLQ1FrSlFITmxZM1JwYjI0Z1JtOXZkR1Z5SUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0JpYjNKa1pYSnpJR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdabTl2ZEdWeUlHRnlaV0V1Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWR2IyOTBaWEo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKaFkydG5jbTkxYm1RdFkyOXNiM0k2STJZeVpqSm1NanNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WW05eVpHVnlMWFJ2Y0Rvd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdFltOTBkRzl0T2pBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdGRHOXdPamx3ZURzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmNHRmtaR2x1WnkxaWIzUjBiMjA2T1hCNE93b0pDUWtKZlFvSkNRa3ZLZ29KQ1FsQWRHRmlJRVp2YjNSbGNnb0pDUWxBYzJWamRHbHZiaUJHYjI5MFpYSWdWR1Y0ZEFvSkNRbEFkR2x3SUZObGRDQjBhR1VnYzNSNWJHbHVaeUJtYjNJZ2VXOTFjaUJsYldGcGJDZHpJR1p2YjNSbGNpQjBaWGgwTGlCRGFHOXZjMlVnWVNCemFYcGxJR0Z1WkNCamIyeHZjaUIwYUdGMElHbHpJR1ZoYzNrZ2RHOGdjbVZoWkM0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpVWnZiM1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFzSTNSbGJYQnNZWFJsUm05dmRHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pOalUyTlRZMU93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFdaaGJXbHNlVHBVWVdodmJXRXNJRlpsY21SaGJtRXNJRk5sWjI5bExDQnpZVzV6TFhObGNtbG1Pd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRKd2VEc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZiR2x1WlMxb1pXbG5hSFE2TVRVd0pUc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZkR1Y0ZEMxaGJHbG5ianBqWlc1MFpYSTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnUm05dmRHVnlDZ2tKQ1VCelpXTjBhVzl1SUVadmIzUmxjaUJNYVc1ckNna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWm05dmRHVnlJR3hwYm10ekxpQkRhRzl2YzJVZ1lTQmpiMnh2Y2lCMGFHRjBJR2hsYkhCeklIUm9aVzBnYzNSaGJtUWdiM1YwSUdaeWIyMGdlVzkxY2lCMFpYaDBMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsUm05dmRHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQmhMQ04wWlcxd2JHRjBaVVp2YjNSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NDQmhld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pOalUyTlRZMU93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhkbGFXZG9kRHB1YjNKdFlXdzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM1JsZUhRdFpHVmpiM0poZEdsdmJqcDFibVJsY214cGJtVTdDZ2tKQ1FsOUNna0pDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMXBiaTEzYVdSMGFEbzNOamh3ZUNsN0Nna0pDUWt1ZEdWdGNHeGhkR1ZEYjI1MFlXbHVaWEo3Q2drSkNRa0pkMmxrZEdnNk5qQXdjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pDV0p2Wkhrc2RHRmliR1VzZEdRc2NDeGhMR3hwTEdKc2IyTnJjWFZ2ZEdWN0Nna0pDUWtKTFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPbTV2Ym1VZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1dKdlpIbDdDZ2tKQ1FrSmQybGtkR2c2TVRBd0pTQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNXMXBiaTEzYVdSMGFEb3hNREFsSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUWtqWW05a2VVTmxiR3g3Q2drSkNRa0pjR0ZrWkdsdVp5MTBiM0E2TVRCd2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSmZRb0pDUWw5Q1VCdFpXUnBZU0J2Ym14NUlITmpjbVZsYmlCaGJtUWdLRzFoZUMxM2FXUjBhRG9nTkRnd2NIZ3Bld29KQ1FrSkxtMWpia2x0WVdkbGV3b0pDUWtKQ1hkcFpIUm9PakV3TUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1M1dFkyNURZWEowUTI5dWRHRnBibVZ5TEM1dFkyNURZWEIwYVc5dVZHOXdRMjl1ZEdWdWRDd3ViV051VW1WalEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2l3dWJXTnVRMkZ3ZEdsdmJrSnZkSFJ2YlVOdmJuUmxiblFzTG0xamJsUmxlSFJEYjI1MFpXNTBRMjl1ZEdGcGJtVnlMQzV0WTI1Q2IzaGxaRlJsZUhSRGIyNTBaVzUwUTI5dWRHRnBibVZ5TEM1dFkyNUpiV0ZuWlVkeWIzVndRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051UTJGd2RHbHZia3hsWm5SVVpYaDBRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051UTJGd2RHbHZibEpwWjJoMFZHVjRkRU52Ym5SbGJuUkRiMjUwWVdsdVpYSXNMbTFqYmtOaGNIUnBiMjVNWldaMFNXMWhaMlZEYjI1MFpXNTBRMjl1ZEdGcGJtVnlMQzV0WTI1RFlYQjBhVzl1VW1sbmFIUkpiV0ZuWlVOdmJuUmxiblJEYjI1MFlXbHVaWElzTG0xamJrbHRZV2RsUTJGeVpFeGxablJVWlhoMFEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2l3dWJXTnVTVzFoWjJWRFlYSmtVbWxuYUhSVVpYaDBRMjl1ZEdWdWRFTnZiblJoYVc1bGNuc0tDUWtKQ1FsdFlYZ3RkMmxrZEdnNk1UQXdKU0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDWGRwWkhSb09qRXdNQ1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pDUzV0WTI1Q2IzaGxaRlJsZUhSRGIyNTBaVzUwUTI5dWRHRnBibVZ5ZXdvSkNRa0pDVzFwYmkxM2FXUjBhRG94TURBbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FrdWJXTnVTVzFoWjJWSGNtOTFjRU52Ym5SbGJuUjdDZ2tKQ1FrSmNHRmtaR2x1WnpvNWNIZ2dJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNTNXRZMjVEWVhCMGFXOXVUR1ZtZEVOdmJuUmxiblJQZFhSbGNpQXViV051VkdWNGRFTnZiblJsYm5Rc0xtMWpia05oY0hScGIyNVNhV2RvZEVOdmJuUmxiblJQZFhSbGNpQXViV051VkdWNGRFTnZiblJsYm5SN0Nna0pDUWtKY0dGa1pHbHVaeTEwYjNBNk9YQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNRa3ViV051U1cxaFoyVkRZWEprVkc5d1NXMWhaMlZEYjI1MFpXNTBMQzV0WTI1RFlYQjBhVzl1UW14dlkydEpibTVsY2lBdWJXTnVRMkZ3ZEdsdmJsUnZjRU52Ym5SbGJuUTZiR0Z6ZEMxamFHbHNaQ0F1YldOdVZHVjRkRU52Ym5SbGJuUjdDZ2tKQ1FrSmNHRmtaR2x1WnkxMGIzQTZNVGh3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSkNRbDlDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMWhlQzEzYVdSMGFEb2dORGd3Y0hncGV3b0pDUWtKTG0xamJrbHRZV2RsUTJGeVpFSnZkSFJ2YlVsdFlXZGxRMjl1ZEdWdWRIc0tDUWtKQ1Fsd1lXUmthVzVuTFdKdmRIUnZiVG81Y0hnZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1M1dFkyNUpiV0ZuWlVkeWIzVndRbXh2WTJ0SmJtNWxjbnNLQ1FrSkNRbHdZV1JrYVc1bkxYUnZjRG93SUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKY0dGa1pHbHVaeTFpYjNSMGIyMDZNQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pmUW9KQ1FsOUNVQnRaV1JwWVNCdmJteDVJSE5qY21WbGJpQmhibVFnS0cxaGVDMTNhV1IwYURvZ05EZ3djSGdwZXdvSkNRa0pMbTFqYmtsdFlXZGxSM0p2ZFhCQ2JHOWphMDkxZEdWeWV3b0pDUWtKQ1hCaFpHUnBibWN0ZEc5d09qbHdlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDWEJoWkdScGJtY3RZbTkwZEc5dE9qbHdlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pmUW9KQ1FsOUNVQnRaV1JwWVNCdmJteDVJSE5qY21WbGJpQmhibVFnS0cxaGVDMTNhV1IwYURvZ05EZ3djSGdwZXdvSkNRa0pMbTFqYmxSbGVIUkRiMjUwWlc1MExDNXRZMjVDYjNobFpGUmxlSFJEYjI1MFpXNTBRMjlzZFcxdWV3b0pDUWtKQ1hCaFpHUnBibWN0Y21sbmFIUTZNVGh3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hCaFpHUnBibWN0YkdWbWREb3hPSEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUWt1YldOdVNXMWhaMlZEWVhKa1RHVm1kRWx0WVdkbFEyOXVkR1Z1ZEN3dWJXTnVTVzFoWjJWRFlYSmtVbWxuYUhSSmJXRm5aVU52Ym5SbGJuUjdDZ2tKQ1FrSmNHRmtaR2x1WnkxeWFXZG9kRG94T0hCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSmNHRmtaR2x1WnkxaWIzUjBiMjA2TUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hCaFpHUnBibWN0YkdWbWREb3hPSEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUWt1YldOd2NtVjJhV1YzTFdsdFlXZGxMWFZ3Ykc5aFpHVnlld29KQ1FrSkNXUnBjM0JzWVhrNmJtOXVaU0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDWGRwWkhSb09qRXdNQ1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pMeW9LQ1FrSlFIUmhZaUJOYjJKcGJHVWdVM1I1YkdWekNna0pDVUJ6WldOMGFXOXVJRWhsWVdScGJtY2dNUW9KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJR1pwY25OMExXeGxkbVZzSUdobFlXUnBibWR6SUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNXZ3hld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRod2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE1qVWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklESUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQnpaV052Ym1RdGJHVjJaV3dnYUdWaFpHbHVaM01nYkdGeVoyVnlJR2x1SUhOcGVtVWdabTl5SUdKbGRIUmxjaUJ5WldGa1lXSnBiR2wwZVNCdmJpQnpiV0ZzYkNCelkzSmxaVzV6TGdvSkNRa3FMd29KQ1FrSmFESjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94Tm5CNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFeU5TVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkx5b0tDUWtKUUhSaFlpQk5iMkpwYkdVZ1UzUjViR1Z6Q2drSkNVQnpaV04wYVc5dUlFaGxZV1JwYm1jZ013b0pDUWxBZEdsd0lFMWhhMlVnZEdobElIUm9hWEprTFd4bGRtVnNJR2hsWVdScGJtZHpJR3hoY21kbGNpQnBiaUJ6YVhwbElHWnZjaUJpWlhSMFpYSWdjbVZoWkdGaWFXeHBkSGtnYjI0Z2MyMWhiR3dnYzJOeVpXVnVjeTRLQ1FrSktpOEtDUWtKQ1dnemV3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhOcGVtVTZNVFp3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TWpVbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1M4cUNna0pDVUIwWVdJZ1RXOWlhV3hsSUZOMGVXeGxjd29KQ1FsQWMyVmpkR2x2YmlCSVpXRmthVzVuSURRS0NRa0pRSFJwY0NCTllXdGxJSFJvWlNCbWIzVnlkR2d0YkdWMlpXd2dhR1ZoWkdsdVozTWdiR0Z5WjJWeUlHbHVJSE5wZW1VZ1ptOXlJR0psZEhSbGNpQnlaV0ZrWVdKcGJHbDBlU0J2YmlCemJXRnNiQ0J6WTNKbFpXNXpMZ29KQ1FrcUx3b0pDUWtKYURSN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzJsNlpUb3hObkI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUVKdmVHVmtJRlJsZUhRS0NRa0pRSFJwY0NCTllXdGxJSFJvWlNCaWIzaGxaQ0IwWlhoMElHeGhjbWRsY2lCcGJpQnphWHBsSUdadmNpQmlaWFIwWlhJZ2NtVmhaR0ZpYVd4cGRIa2diMjRnYzIxaGJHd2djMk55WldWdWN5NGdWMlVnY21WamIyMXRaVzVrSUdFZ1ptOXVkQ0J6YVhwbElHOW1JR0YwSUd4bFlYTjBJREUyY0hndUNna0pDU292Q2drSkNRa3ViV051UW05NFpXUlVaWGgwUTI5dWRHVnVkRU52Ym5SaGFXNWxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNMbTFqYmtKdmVHVmtWR1Y0ZEVOdmJuUmxiblJEYjI1MFlXbHVaWElnTG0xamJsUmxlSFJEYjI1MFpXNTBJSEI3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5IQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRTFNQ1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pMeW9LQ1FrSlFIUmhZaUJOYjJKcGJHVWdVM1I1YkdWekNna0pDVUJ6WldOMGFXOXVJRkJ5WldobFlXUmxjaUJXYVhOcFltbHNhWFI1Q2drSkNVQjBhWEFnVTJWMElIUm9aU0IyYVhOcFltbHNhWFI1SUc5bUlIUm9aU0JsYldGcGJDZHpJSEJ5WldobFlXUmxjaUJ2YmlCemJXRnNiQ0J6WTNKbFpXNXpMaUJaYjNVZ1kyRnVJR2hwWkdVZ2FYUWdkRzhnYzJGMlpTQnpjR0ZqWlM0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpWQnlaV2hsWVdSbGNuc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZaR2x6Y0d4aGVUcHViMjVsSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUzhxQ2drSkNVQjBZV0lnVFc5aWFXeGxJRk4wZVd4bGN3b0pDUWxBYzJWamRHbHZiaUJRY21Wb1pXRmtaWElnVkdWNGRBb0pDUWxBZEdsd0lFMWhhMlVnZEdobElIQnlaV2hsWVdSbGNpQjBaWGgwSUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpWQnlaV2hsWVdSbGNpQXViV051VkdWNGRFTnZiblJsYm5Rc0kzUmxiWEJzWVhSbFVISmxhR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZENCd2V3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhOcGVtVTZNVEp3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TlRBbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1M4cUNna0pDVUIwWVdJZ1RXOWlhV3hsSUZOMGVXeGxjd29KQ1FsQWMyVmpkR2x2YmlCSVpXRmtaWElnVkdWNGRBb0pDUWxBZEdsd0lFMWhhMlVnZEdobElHaGxZV1JsY2lCMFpYaDBJR3hoY21kbGNpQnBiaUJ6YVhwbElHWnZjaUJpWlhSMFpYSWdjbVZoWkdGaWFXeHBkSGtnYjI0Z2MyMWhiR3dnYzJOeVpXVnVjeTRLQ1FrSktpOEtDUWtKQ1NOMFpXMXdiR0YwWlVobFlXUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNJM1JsYlhCc1lYUmxTR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZENCd2V3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhOcGVtVTZNVFp3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TlRBbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1M4cUNna0pDVUIwWVdJZ1RXOWlhV3hsSUZOMGVXeGxjd29KQ1FsQWMyVmpkR2x2YmlCQ2IyUjVJRlJsZUhRS0NRa0pRSFJwY0NCTllXdGxJSFJvWlNCaWIyUjVJSFJsZUhRZ2JHRnlaMlZ5SUdsdUlITnBlbVVnWm05eUlHSmxkSFJsY2lCeVpXRmtZV0pwYkdsMGVTQnZiaUJ6YldGc2JDQnpZM0psWlc1ekxpQlhaU0J5WldOdmJXMWxibVFnWVNCbWIyNTBJSE5wZW1VZ2IyWWdZWFFnYkdWaGMzUWdNVFp3ZUM0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpVSnZaSGtnTG0xamJsUmxlSFJEYjI1MFpXNTBMQ04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwSUhCN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzJsNlpUb3hOSEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUVadmIzUmxjaUJVWlhoMENna0pDVUIwYVhBZ1RXRnJaU0IwYUdVZ1ptOXZkR1Z5SUdOdmJuUmxiblFnZEdWNGRDQnNZWEpuWlhJZ2FXNGdjMmw2WlNCbWIzSWdZbVYwZEdWeUlISmxZV1JoWW1sc2FYUjVJRzl1SUhOdFlXeHNJSE5qY21WbGJuTXVDZ2tKQ1NvdkNna0pDUWtqZEdWdGNHeGhkR1ZHYjI5MFpYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MExDTjBaVzF3YkdGMFpVWnZiM1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFnY0hzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qRXpjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmJHbHVaUzFvWldsbmFIUTZNVFV3SlNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSmZUd3ZjM1I1YkdVK1BDOW9aV0ZrUGdvSlBHSnZaSGtnYzNSNWJHVTlJbWhsYVdkb2REb2dNVEF3SlR0dFlYSm5hVzQ2SURBN2NHRmtaR2x1WnpvZ01EdDNhV1IwYURvZ01UQXdKVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ0kyWXlaakptTWpzaVBnb0pDVHhqWlc1MFpYSStDZ2tKUEhSaFlteGxJR0ZzYVdkdVBTSmpaVzUwWlhJaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCb1pXbG5hSFE5SWpFd01DVWlJSGRwWkhSb1BTSXhNREFsSWlCcFpEMGlZbTlrZVZSaFlteGxJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHRvWldsbmFIUTZJREV3TUNVN2JXRnlaMmx1T2lBd08zQmhaR1JwYm1jNklEQTdkMmxrZEdnNklERXdNQ1U3WW1GamEyZHliM1Z1WkMxamIyeHZjam9nSTJZeVpqSm1NanNpUGdvSkNRazhkSEkrQ2drSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSjBiM0FpSUdsa1BTSmliMlI1UTJWc2JDSWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0b1pXbG5hSFE2SURFd01DVTdiV0Z5WjJsdU9pQXdPM0JoWkdScGJtYzZJREE3ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFhSdmNEb2dNRHNpUGdvSkNRa0pDVHdoTFMwZ1FrVkhTVTRnVkVWTlVFeEJWRVVnTHk4Z0xTMCtDZ2tKQ1FrSlBIUmhZbXhsSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlNVEF3SlNJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGlkRzl3SWlCcFpEMGlkR1Z0Y0d4aGRHVklaV0ZrWlhJaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3WW1GamEyZHliM1Z1WkMxamIyeHZjam9nSTJZeVpqSm1NanRpYjNKa1pYSXRkRzl3T2lBd08ySnZjbVJsY2kxaWIzUjBiMjA2SURBN2NHRmtaR2x1WnkxMGIzQTZJREl3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURJd2NIZzdJajRLQ1FrSkNRa0pDUWs4SVMwdFcybG1JR2QwWlNCdGMyOGdPVjArQ2drSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSmpaVzUwWlhJaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCM2FXUjBhRDBpTmpBd0lpQnpkSGxzWlQwaWQybGtkR2c2TmpBd2NIZzdJajRLQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGlkRzl3SWlCM2FXUjBhRDBpTmpBd0lpQnpkSGxzWlQwaWQybGtkR2c2TmpBd2NIZzdJajRLQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUltTmxiblJsY2lJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWRHVnRjR3hoZEdWRGIyNTBZV2x1WlhJaUlITjBlV3hsUFNKaWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE8yMWhlQzEzYVdSMGFEb2dOakF3Y0hnZ0lXbHRjRzl5ZEdGdWREc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdkbUZzYVdkdVBTSjBiM0FpSUdOc1lYTnpQU0pvWldGa1pYSkRiMjUwWVdsdVpYSWlJSE4wZVd4bFBTSnRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNDhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVTVzFoWjJWQ2JHOWpheUlnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNUlHTnNZWE56UFNKdFkyNUpiV0ZuWlVKc2IyTnJUM1YwWlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKd1lXUmthVzVuT2lBd2NIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SWdZMnhoYzNNOUltMWpia2x0WVdkbFFteHZZMnRKYm01bGNpSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUIzYVdSMGFEMGlNVEF3SlNJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUdOc1lYTnpQU0p0WTI1SmJXRm5aVU52Ym5SbGJuUkRiMjUwWVdsdVpYSWlJSE4wZVd4bFBTSnRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR05zWVhOelBTSnRZMjVKYldGblpVTnZiblJsYm5RaUlIWmhiR2xuYmowaWRHOXdJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp5MXlhV2RvZERvZ01IQjRPM0JoWkdScGJtY3RiR1ZtZERvZ01IQjRPM0JoWkdScGJtY3RkRzl3T2lBd08zQmhaR1JwYm1jdFltOTBkRzl0T2lBd08zUmxlSFF0WVd4cFoyNDZJR05sYm5SbGNqdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThhVzFuSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0ZzZEQwaUlpQnpjbU05SW1oMGRIQnpPaTh2ZDNkM0xuQnNZWFJtYjNKdE5pNXBieTkzY0MxamIyNTBaVzUwTDNWd2JHOWhaSE12TWpBeE9DOHdPUzlzYjJkdkxYQnNZWFJtYjNKdE5pMW9aV0ZrWlhJdGNtVjBhVzVoTG5CdVp5SWdkMmxrZEdnOUlqSTJNQ0lnYzNSNWJHVTlJbTFoZUMxM2FXUjBhRG9nTWpZd2NIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEQTdaR2x6Y0d4aGVUb2dhVzVzYVc1bElDRnBiWEJ2Y25SaGJuUTdkbVZ5ZEdsallXd3RZV3hwWjI0NklHSnZkSFJ2YlR0aWIzSmtaWEk2SURBN2FHVnBaMmgwT2lCaGRYUnZPMjkxZEd4cGJtVTZJRzV2Ym1VN2RHVjRkQzFrWldOdmNtRjBhVzl1T2lCdWIyNWxPeTF0Y3kxcGJuUmxjbkJ2YkdGMGFXOXVMVzF2WkdVNklHSnBZM1ZpYVdNN0lpQmpiR0Z6Y3owaWJXTnVTVzFoWjJVaVBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK0Nna0pDUWtKQ1FrSkNRa0pDUWs4TDNSaFlteGxQand2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JR2QwWlNCdGMyOGdPVjArQ2drSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNUd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSjBiM0FpSUdsa1BTSjBaVzF3YkdGMFpVSnZaSGtpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMFpHUmtaR1JqdGliM0prWlhJdGRHOXdPaUF3TzJKdmNtUmxjaTFpYjNSMGIyMDZJREE3Y0dGa1pHbHVaeTEwYjNBNklEbHdlRHR3WVdSa2FXNW5MV0p2ZEhSdmJUb2dNVEp3ZURzaVBnb0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ1ozUmxJRzF6YnlBNVhUNEtDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnWW05eVpHVnlQU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJSGRwWkhSb1BTSTJNREFpSUhOMGVXeGxQU0ozYVdSMGFEbzJNREJ3ZURzaVBnb0pDUWtKQ1FrSkNRazhkSEkrQ2drSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKMGIzQWlJSGRwWkhSb1BTSTJNREFpSUhOMGVXeGxQU0ozYVdSMGFEbzJNREJ3ZURzaVBnb0pDUWtKQ1FrSkNRa0pDVHdoVzJWdVpHbG1YUzB0UGdvSkNRa0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpWTJWdWRHVnlJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0owWlcxd2JHRjBaVU52Ym5SaGFXNWxjaUlnYzNSNWJHVTlJbUp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3YldGNExYZHBaSFJvT2lBMk1EQndlQ0FoYVcxd2IzSjBZVzUwT3lJK0Nna0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCMllXeHBaMjQ5SW5SdmNDSWdZMnhoYzNNOUltSnZaSGxEYjI1MFlXbHVaWElpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajQ4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051VkdWNGRFSnNiMk5ySWlCemRIbHNaVDBpYldsdUxYZHBaSFJvT2lBeE1EQWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIa2dZMnhoYzNNOUltMWpibFJsZUhSQ2JHOWphMDkxZEdWeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVKc2IyTnJTVzV1WlhJaUlITjBlV3hsUFNKd1lXUmthVzVuTFhSdmNEb2dPWEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUIzYVdSMGFEMGlNVEF3SlNJZ2MzUjViR1U5SW5kcFpIUm9PakV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnZDJsa2RHZzlJall3TUNJZ2MzUjViR1U5SW5kcFpIUm9Pall3TUhCNE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdjM1I1YkdVOUltMWhlQzEzYVdSMGFEb2dNVEF3SlR0dGFXNHRkMmxrZEdnNklERXdNQ1U3WW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051VkdWNGRFTnZiblJsYm5SRGIyNTBZV2x1WlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdkbUZzYVdkdVBTSjBiM0FpSUdOc1lYTnpQU0p0WTI1VVpYaDBRMjl1ZEdWdWRDSWdjM1I1YkdVOUluQmhaR1JwYm1jNklEQndlQ0F4T0hCNElEbHdlRHRtYjI1MExXWmhiV2xzZVRvZ1ZHRm9iMjFoTENCV1pYSmtZVzVoTENCVFpXZHZaU3dnYzJGdWN5MXpaWEpwWmp0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3ZDI5eVpDMWljbVZoYXpvZ1luSmxZV3N0ZDI5eVpEdGpiMnh2Y2pvZ0l6TXpNek16TXp0bWIyNTBMWE5wZW1VNklERTBjSGc3YkdsdVpTMW9aV2xuYUhRNklERTFNQ1U3ZEdWNGRDMWhiR2xuYmpvZ2JHVm1kRHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeG9NeUJ6ZEhsc1pUMGlkR1Y0ZEMxaGJHbG5iam9nYkdWbWREdGthWE53YkdGNU9pQmliRzlqYXp0dFlYSm5hVzQ2SURBN2NHRmtaR2x1WnpvZ01EdGpiMnh2Y2pvZ0l6WXdOakEyTUR0bWIyNTBMV1poYldsc2VUb2dTR1ZzZG1WMGFXTmhPMlp2Ym5RdGMybDZaVG9nTVRod2VEdG1iMjUwTFhOMGVXeGxPaUJ1YjNKdFlXdzdabTl1ZEMxM1pXbG5hSFE2SUdKdmJHUTdiR2x1WlMxb1pXbG5hSFE2SURFeU5TVTdiR1YwZEdWeUxYTndZV05wYm1jNklDMHhjSGc3SWo1SmJtSnZkVzVrSUZCMWNtTm9ZWE5sSUU5eVpHVnlJSFJ2SUhKbGRtbGxkend2YURNK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEdScGRpQnpkSGxzWlQwaWRHVjRkQzFoYkdsbmJqb2diR1ZtZERzaVBqeGljajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ05wWmlCMWMyVnlMbVpwY25OMFRtRnRaVDgvSUNZbUlIVnpaWEl1Wm1seWMzUk9ZVzFsUDJoaGMxOWpiMjUwWlc1MFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQQ05wWmlCMWMyVnlMbXhoYzNST1lXMWxQejhnSmlZZ2RYTmxjaTVzWVhOMFRtRnRaVDlvWVhOZlkyOXVkR1Z1ZEQ0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JJWld4c2J5QWtlM1Z6WlhJdVptbHljM1JPWVcxbGZTd0tJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHdqWld4elpUNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCSVpXeHNieUFrZTNWelpYSXVabWx5YzNST1lXMWxmU3dLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR3dkkybG1QZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThJMlZzYzJVK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQklaV3hzYnlBa2UzVnpaWEl1WlcxaGFXeDlMQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThMeU5wWmo0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEdKeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOFluSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNWbHZkU0JvWVhabElHRWdibVYzSUdsdVltOTFibVFnVDNKa1pYSWdkRzhnY21WMmFXVjNMaUJRYkdWaGMyVWdQR0VnYUhKbFpqMGlKSHRvY21WbWZTSWdkR0Z5WjJWMFBTSmZZbXhoYm1zaVBteHZaeUJ2YmlCaGJtUWdZV05qWlhCMElHOXlJSEpsYW1WamRDNDhMMkUrUEdKeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1NadVluTndPend2WkdsMlBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDRLQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0ZpYkdVK1BIUmhZbXhsSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJrUnBkbWxrWlhKQ2JHOWpheUlnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPM1JoWW14bExXeGhlVzkxZERvZ1ptbDRaV1FnSVdsdGNHOXlkR0Z1ZERzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJ0UGRYUmxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1kyeGhjM005SW0xamJrUnBkbWxrWlhKQ2JHOWphMGx1Ym1WeUlpQnpkSGxzWlQwaWJXbHVMWGRwWkhSb09pQXhNREFsTzNCaFpHUnBibWM2SURWd2VDQXhPSEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRMjl1ZEdWdWRDSWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxMGIzQXRkMmxrZEdnNklESndlRHRpYjNKa1pYSXRkRzl3TFhOMGVXeGxPaUJ1YjI1bE8ySnZjbVJsY2kxMGIzQXRZMjlzYjNJNklDTkZRVVZCUlVFN1ltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhjM0JoYmo0OEwzTndZVzQrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMwS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmpiR0Z6Y3owaWJXTnVSR2wyYVdSbGNrSnNiMk5yU1c1dVpYSWlJSE4wZVd4bFBTSndZV1JrYVc1bk9pQXhPSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHaHlJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRMjl1ZEdWdWRDSWdjM1I1YkdVOUltSnZjbVJsY2kxaWIzUjBiMjB0WTI5c2IzSTZibTl1WlRzZ1ltOXlaR1Z5TFd4bFpuUXRZMjlzYjNJNmJtOXVaVHNnWW05eVpHVnlMWEpwWjJoMExXTnZiRzl5T201dmJtVTdJR0p2Y21SbGNpMWliM1IwYjIwdGQybGtkR2c2TURzZ1ltOXlaR1Z5TFd4bFpuUXRkMmxrZEdnNk1Ec2dZbTl5WkdWeUxYSnBaMmgwTFhkcFpIUm9PakE3SUcxaGNtZHBiaTEwYjNBNk1Ec2diV0Z5WjJsdUxYSnBaMmgwT2pBN0lHMWhjbWRwYmkxaWIzUjBiMjA2TURzZ2JXRnlaMmx1TFd4bFpuUTZNRHNpSUM4K0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkxTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrQ2drSkNRa0pDUWtKQ1FrSkNRazhMM1JoWW14bFBqd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSlBDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRazhJUzB0VzJsbUlHZDBaU0J0YzI4Z09WMCtDZ2tKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWs4ZEhJK0Nna0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKMGIzQWlJR2xrUFNKMFpXMXdiR0YwWlVadmIzUmxjaUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdGlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpaakptTW1ZeU8ySnZjbVJsY2kxMGIzQTZJREE3WW05eVpHVnlMV0p2ZEhSdmJUb2dNRHR3WVdSa2FXNW5MWFJ2Y0RvZ09YQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQTVjSGc3SWo0S0NRa0pDUWtKQ1FrOElTMHRXMmxtSUdkMFpTQnRjMjhnT1YwK0Nna0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQjNhV1IwYUQwaU5qQXdJaUJ6ZEhsc1pUMGlkMmxrZEdnNk5qQXdjSGc3SWo0S0NRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQjNhV1IwYUQwaU5qQXdJaUJ6ZEhsc1pUMGlkMmxrZEdnNk5qQXdjSGc3SWo0S0NRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbU5sYm5SbGNpSWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGlkR1Z0Y0d4aGRHVkRiMjUwWVdsdVpYSWlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPMjFoZUMxM2FXUjBhRG9nTmpBd2NIZ2dJV2x0Y0c5eWRHRnVkRHNpUGdvSkNRa0pDUWtKQ1FrSkNRazhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlHTnNZWE56UFNKbWIyOTBaWEpEYjI1MFlXbHVaWElpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajQ4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051Um05c2JHOTNRbXh2WTJzaUlITjBlV3hsUFNKdGFXNHRkMmxrZEdnNklERXdNQ1U3WW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlU0JqYkdGemN6MGliV051Um05c2JHOTNRbXh2WTJ0UGRYUmxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdjM1I1YkdVOUluQmhaR1JwYm1jNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUJqYkdGemN6MGliV051Um05c2JHOTNRbXh2WTJ0SmJtNWxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnWTJ4aGMzTTlJbTFqYmtadmJHeHZkME52Ym5SbGJuUkRiMjUwWVdsdVpYSWlJSE4wZVd4bFBTSnRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlITjBlV3hsUFNKd1lXUmthVzVuTFd4bFpuUTZJRGx3ZUR0d1lXUmthVzVuTFhKcFoyaDBPaUE1Y0hnN2JYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdjM1I1YkdVOUltMXBiaTEzYVdSMGFEb2dNVEF3SlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwTnZiblJsYm5RaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGlkRzl3SWlCemRIbHNaVDBpY0dGa1pHbHVaeTEwYjNBNklEbHdlRHR3WVdSa2FXNW5MWEpwWjJoME9pQTVjSGc3Y0dGa1pHbHVaeTFzWldaME9pQTVjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKalpXNTBaWElpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaVkyVnVkR1Z5SWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0krQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoVzJWdVpHbG1YUzB0UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJUzB0VzJsbUlHMXpiMTArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKMGIzQWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpYkdWbWRDSWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlITjBlV3hsUFNKa2FYTndiR0Y1T2lCcGJteHBibVU3WW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWNHRmtaR2x1WnkxeWFXZG9kRG9nTVRCd2VEdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ09YQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJR05zWVhOelBTSnRZMjVHYjJ4c2IzZERiMjUwWlc1MFNYUmxiVU52Ym5SaGFXNWxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwTnZiblJsYm5SSmRHVnRJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKc1pXWjBJaUIyWVd4cFoyNDlJbTFwWkdSc1pTSWdjM1I1YkdVOUluQmhaR1JwYm1jdGRHOXdPaUExY0hnN2NHRmtaR2x1WnkxeWFXZG9kRG9nTVRCd2VEdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ05YQjRPM0JoWkdScGJtY3RiR1ZtZERvZ09YQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaWJHVm1kQ0lnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSGRwWkhSb1BTSWlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJbTFwWkdSc1pTSWdkMmxrZEdnOUlqSTBJaUJqYkdGemN6MGliV051Um05c2JHOTNTV052YmtOdmJuUmxiblFpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOFlTQm9jbVZtUFNKb2RIUndPaTh2ZDNkM0xtRnRZV3gwYnk1amIyMHZJaUIwWVhKblpYUTlJbDlpYkdGdWF5SWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBqeHBiV2NnYzNKalBTSm9kSFJ3T2k4dlkyUnVMV2x0WVdkbGN5NXRZV2xzWTJocGJYQXVZMjl0TDJsamIyNXpMM052WTJsaGJDMWliRzlqYXkxMk1pOWpiMnh2Y2kxc2FXNXJMVFE0TG5CdVp5SWdjM1I1YkdVOUltUnBjM0JzWVhrNklHSnNiMk5yTzJKdmNtUmxjam9nTUR0b1pXbG5hSFE2SUdGMWRHODdiM1YwYkdsdVpUb2dibTl1WlR0MFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUc1dmJtVTdMVzF6TFdsdWRHVnljRzlzWVhScGIyNHRiVzlrWlRvZ1ltbGpkV0pwWXpzaUlHaGxhV2RvZEQwaU1qUWlJSGRwWkhSb1BTSXlOQ0lnWTJ4aGMzTTlJaUkrUEM5aFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdsdWJHbHVaVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKd1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwTnZiblJsYm5SSmRHVnRRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZEVsMFpXMGlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW14bFpuUWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQnpkSGxzWlQwaWNHRmtaR2x1WnkxMGIzQTZJRFZ3ZUR0d1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBMWNIZzdjR0ZrWkdsdVp5MXNaV1owT2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlpSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQjNhV1IwYUQwaU1qUWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZEpZMjl1UTI5dWRHVnVkQ0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4aElHaHlaV1k5SW1oMGRIQnpPaTh2ZDNkM0xtWmhZMlZpYjI5ckxtTnZiUzloYldGc2RHOTBaV05vYm05c2IyZHBaWE1pSUhSaGNtZGxkRDBpWDJKc1lXNXJJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStQR2x0WnlCemNtTTlJbWgwZEhBNkx5OWpaRzR0YVcxaFoyVnpMbTFoYVd4amFHbHRjQzVqYjIwdmFXTnZibk12YzI5amFXRnNMV0pzYjJOckxYWXlMMk52Ykc5eUxXWmhZMlZpYjI5ckxUUTRMbkJ1WnlJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdKc2IyTnJPMkp2Y21SbGNqb2dNRHRvWldsbmFIUTZJR0YxZEc4N2IzVjBiR2x1WlRvZ2JtOXVaVHQwWlhoMExXUmxZMjl5WVhScGIyNDZJRzV2Ym1VN0xXMXpMV2x1ZEdWeWNHOXNZWFJwYjI0dGJXOWtaVG9nWW1samRXSnBZenNpSUdobGFXZG9kRDBpTWpRaUlIZHBaSFJvUFNJeU5DSWdZMnhoYzNNOUlpSStQQzloUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJblJ2Y0NJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnYzNSNWJHVTlJbVJwYzNCc1lYazZJR2x1YkdsdVpUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVQ0OGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdkbUZzYVdkdVBTSjBiM0FpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWEpwWjJoME9pQXhNSEI0TzNCaFpHUnBibWN0WW05MGRHOXRPaUE1Y0hnN2JYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBOdmJuUmxiblJKZEdWdFEyOXVkR0ZwYm1WeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcwaUlITjBlV3hsUFNKaWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVQ0OGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbXhsWm5RaUlIWmhiR2xuYmowaWJXbGtaR3hsSWlCemRIbHNaVDBpY0dGa1pHbHVaeTEwYjNBNklEVndlRHR3WVdSa2FXNW5MWEpwWjJoME9pQXhNSEI0TzNCaFpHUnBibWN0WW05MGRHOXRPaUExY0hnN2NHRmtaR2x1Wnkxc1pXWjBPaUE1Y0hnN2JYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWlJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlIWmhiR2xuYmowaWJXbGtaR3hsSWlCM2FXUjBhRDBpTWpRaUlHTnNZWE56UFNKdFkyNUdiMnhzYjNkSlkyOXVRMjl1ZEdWdWRDSWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHhoSUdoeVpXWTlJbWgwZEhCek9pOHZkM2QzTG14cGJtdGxaR2x1TG1OdmJTOWpiMjF3WVc1NUwyRnRZV3gwYnkxMFpXTm9ibTlzYjJkcFpYTWlJSFJoY21kbGREMGlYMkpzWVc1cklpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK1BHbHRaeUJ6Y21NOUltaDBkSEE2THk5alpHNHRhVzFoWjJWekxtMWhhV3hqYUdsdGNDNWpiMjB2YVdOdmJuTXZjMjlqYVdGc0xXSnNiMk5yTFhZeUwyTnZiRzl5TFd4cGJtdGxaR2x1TFRRNExuQnVaeUlnYzNSNWJHVTlJbVJwYzNCc1lYazZJR0pzYjJOck8ySnZjbVJsY2pvZ01EdG9aV2xuYUhRNklHRjFkRzg3YjNWMGJHbHVaVG9nYm05dVpUdDBaWGgwTFdSbFkyOXlZWFJwYjI0NklHNXZibVU3TFcxekxXbHVkR1Z5Y0c5c1lYUnBiMjR0Ylc5a1pUb2dZbWxqZFdKcFl6c2lJR2hsYVdkb2REMGlNalFpSUhkcFpIUm9QU0l5TkNJZ1kyeGhjM005SWlJK1BDOWhQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJUzB0VzJsbUlHMXpiMTArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdiWE52WFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQjJZV3hwWjI0OUluUnZjQ0krQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdjM1I1YkdVOUltUnBjM0JzWVhrNklHbHViR2x1WlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ2RtRnNhV2R1UFNKMGIzQWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYSnBaMmgwT2lBeE1IQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQTVjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUlnWTJ4aGMzTTlJbTFqYmtadmJHeHZkME52Ym5SbGJuUkpkR1Z0UTI5dWRHRnBibVZ5SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRFbDBaVzBpSUhOMGVXeGxQU0ppYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUlteGxablFpSUhaaGJHbG5iajBpYldsa1pHeGxJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp5MTBiM0E2SURWd2VEdHdZV1JrYVc1bkxYSnBaMmgwT2lBeE1IQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQTFjSGc3Y0dGa1pHbHVaeTFzWldaME9pQTVjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnZDJsa2RHZzlJaUlnYzNSNWJHVTlJbUp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpYldsa1pHeGxJaUIzYVdSMGFEMGlNalFpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2RKWTI5dVEyOXVkR1Z1ZENJZ2MzUjViR1U5SW0xemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeGhJR2h5WldZOUltaDBkSEJ6T2k4dmRIZHBkSFJsY2k1amIyMHZRVzFoYkhSdklpQjBZWEpuWlhROUlsOWliR0Z1YXlJZ2MzUjViR1U5SW0xemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGp4cGJXY2djM0pqUFNKb2RIUndPaTh2WTJSdUxXbHRZV2RsY3k1dFlXbHNZMmhwYlhBdVkyOXRMMmxqYjI1ekwzTnZZMmxoYkMxaWJHOWpheTEyTWk5amIyeHZjaTEwZDJsMGRHVnlMVFE0TG5CdVp5SWdjM1I1YkdVOUltUnBjM0JzWVhrNklHSnNiMk5yTzJKdmNtUmxjam9nTUR0b1pXbG5hSFE2SUdGMWRHODdiM1YwYkdsdVpUb2dibTl1WlR0MFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUc1dmJtVTdMVzF6TFdsdWRHVnljRzlzWVhScGIyNHRiVzlrWlRvZ1ltbGpkV0pwWXpzaUlHaGxhV2RvZEQwaU1qUWlJSGRwWkhSb1BTSXlOQ0lnWTJ4aGMzTTlJaUkrUEM5aFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdsdWJHbHVaVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKd1lXUmthVzVuTFhKcFoyaDBPaUF3TzNCaFpHUnBibWN0WW05MGRHOXRPaUE1Y0hnN2JYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBOdmJuUmxiblJKZEdWdFEyOXVkR0ZwYm1WeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcwaUlITjBlV3hsUFNKaWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVQ0OGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbXhsWm5RaUlIWmhiR2xuYmowaWJXbGtaR3hsSWlCemRIbHNaVDBpY0dGa1pHbHVaeTEwYjNBNklEVndlRHR3WVdSa2FXNW5MWEpwWjJoME9pQXhNSEI0TzNCaFpHUnBibWN0WW05MGRHOXRPaUExY0hnN2NHRmtaR2x1Wnkxc1pXWjBPaUE1Y0hnN2JYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWlJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlIWmhiR2xuYmowaWJXbGtaR3hsSWlCM2FXUjBhRDBpTWpRaUlHTnNZWE56UFNKdFkyNUdiMnhzYjNkSlkyOXVRMjl1ZEdWdWRDSWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHhoSUdoeVpXWTlJbWgwZEhCek9pOHZkM2QzTG5sdmRYUjFZbVV1WTI5dEwyTm9ZVzV1Wld3dlZVTTVWMWd0YWtWaFExaHRPRlJXTTNKa1kwTnBOMk4zSWlCMFlYSm5aWFE5SWw5aWJHRnVheUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQanhwYldjZ2MzSmpQU0pvZEhSd09pOHZZMlJ1TFdsdFlXZGxjeTV0WVdsc1kyaHBiWEF1WTI5dEwybGpiMjV6TDNOdlkybGhiQzFpYkc5amF5MTJNaTlqYjJ4dmNpMTViM1YwZFdKbExUUTRMbkJ1WnlJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdKc2IyTnJPMkp2Y21SbGNqb2dNRHRvWldsbmFIUTZJR0YxZEc4N2IzVjBiR2x1WlRvZ2JtOXVaVHQwWlhoMExXUmxZMjl5WVhScGIyNDZJRzV2Ym1VN0xXMXpMV2x1ZEdWeWNHOXNZWFJwYjI0dGJXOWtaVG9nWW1samRXSnBZenNpSUdobGFXZG9kRDBpTWpRaUlIZHBaSFJvUFNJeU5DSWdZMnhoYzNNOUlpSStQQzloUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBnb0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFlXSnNaVDQ4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051UkdsMmFXUmxja0pzYjJOcklpQnpkSGxzWlQwaWJXbHVMWGRwWkhSb09pQXhNREFsTzJKdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN2RHRmliR1V0YkdGNWIzVjBPaUJtYVhobFpDQWhhVzF3YjNKMFlXNTBPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrZ1kyeGhjM005SW0xamJrUnBkbWxrWlhKQ2JHOWphMDkxZEdWeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JqYkdGemN6MGliV051UkdsMmFXUmxja0pzYjJOclNXNXVaWElpSUhOMGVXeGxQU0p0YVc0dGQybGtkR2c2SURFd01DVTdjR0ZrWkdsdVp6b2dOWEI0SURFNGNIZ2dNakJ3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JqYkdGemN6MGliV051UkdsMmFXUmxja052Ym5SbGJuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdGliM0prWlhJdGRHOXdMWGRwWkhSb09pQXljSGc3WW05eVpHVnlMWFJ2Y0MxemRIbHNaVG9nYzI5c2FXUTdZbTl5WkdWeUxYUnZjQzFqYjJ4dmNqb2dJMFZGUlVWRlJUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJSE4wZVd4bFBTSnRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHh6Y0dGdVBqd3ZjM0JoYmo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJ0SmJtNWxjaUlnYzNSNWJHVTlJbkJoWkdScGJtYzZJREU0Y0hnN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhhSElnWTJ4aGMzTTlJbTFqYmtScGRtbGtaWEpEYjI1MFpXNTBJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXSnZkSFJ2YlMxamIyeHZjanB1YjI1bE95QmliM0prWlhJdGJHVm1kQzFqYjJ4dmNqcHViMjVsT3lCaWIzSmtaWEl0Y21sbmFIUXRZMjlzYjNJNmJtOXVaVHNnWW05eVpHVnlMV0p2ZEhSdmJTMTNhV1IwYURvd095QmliM0prWlhJdGJHVm1kQzEzYVdSMGFEb3dPeUJpYjNKa1pYSXRjbWxuYUhRdGQybGtkR2c2TURzZ2JXRnlaMmx1TFhSdmNEb3dPeUJ0WVhKbmFXNHRjbWxuYUhRNk1Ec2diV0Z5WjJsdUxXSnZkSFJ2YlRvd095QnRZWEpuYVc0dGJHVm1kRG93T3lJZ0x6NEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa3RMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0S0NRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdGaWJHVStQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUltMWpibFJsZUhSQ2JHOWpheUlnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrZ1kyeGhjM005SW0xamJsUmxlSFJDYkc5amEwOTFkR1Z5SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWs4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnWTJ4aGMzTTlJbTFqYmxSbGVIUkNiRzlqYTBsdWJtVnlJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp5MTBiM0E2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGliR1ZtZENJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQnpkSGxzWlQwaWQybGtkR2c2TVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCMllXeHBaMjQ5SW5SdmNDSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGliR1ZtZENJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhOMGVXeGxQU0p0WVhndGQybGtkR2c2SURFd01DVTdiV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJsUmxlSFJEYjI1MFpXNTBRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHSnZaSGsrUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJSFpoYkdsbmJqMGlkRzl3SWlCamJHRnpjejBpYldOdVZHVjRkRU52Ym5SbGJuUWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYUnZjRG9nTUR0d1lXUmthVzVuTFhKcFoyaDBPaUF4T0hCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBNWNIZzdjR0ZrWkdsdVp5MXNaV1owT2lBeE9IQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdDNiM0prTFdKeVpXRnJPaUJpY21WaGF5MTNiM0prTzJOdmJHOXlPaUFqTmpVMk5UWTFPMlp2Ym5RdFptRnRhV3g1T2lCVVlXaHZiV0VzSUZabGNtUmhibUVzSUZObFoyOWxMQ0J6WVc1ekxYTmxjbWxtTzJadmJuUXRjMmw2WlRvZ01USndlRHRzYVc1bExXaGxhV2RvZERvZ01UVXdKVHQwWlhoMExXRnNhV2R1T2lCalpXNTBaWEk3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHUnBkaUJ6ZEhsc1pUMGlkR1Y0ZEMxaGJHbG5iam9nWTJWdWRHVnlPeUkrVUd4bFlYTmxJR1J2SUc1dmRDQnlaWEJzZVNCMGJ5QjBhR2x6SUdVdGJXRnBiQzRnVkdobElITmxibVJsY2lCbGJXRnBiQ0JoWkdSeVpYTnpJR2x6SUc1dmRDQnRiMjVwZEc5eVpXUXVQR0p5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVVp2Y2lCaGJua2djWFZsYzNScGIyNHNJSEJzWldGelpTQThZU0JvY21WbVBTSnRZV2xzZEc4NlkyOXVkR0ZqZEVCd2JHRjBabTl5YlRZdWFXOGlJSFJoY21kbGREMGlYMkpzWVc1cklpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsTzJOdmJHOXlPaUFqTmpVMk5UWTFPMlp2Ym5RdGQyVnBaMmgwT2lCdWIzSnRZV3c3ZEdWNGRDMWtaV052Y21GMGFXOXVPaUIxYm1SbGNteHBibVU3SWo1elpXNWtJSFZ6SUdFZ2JXVnpjMkZuWlR3dllUNHVQR0p5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHhpY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4YzNSeWIyNW5QbEJzWVhSbWIzSnRJRFlnWW5rZ1FXMWhiSFJ2SUZSbFkyaHViMnh2WjJsbGN6d3ZjM1J5YjI1blBqeGljajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhZbkkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRbkNxU1p1WW5Od095UjdMbTV2ZHo5emRISnBibWN1ZVhsNWVYMG1ibUp6Y0R0RGIzQjVjbWxuYUhRdUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVQQzlrYVhZK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0S0NRa0pDUWtKQ1FrSkNRa0pQQzkwWVdKc1pUNDhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCbmRHVWdiWE52SURsZFBnb0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRazhMM1JoWW14bFBnb0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pQQzkwY2o0S0NRa0pDVHd2ZEdGaWJHVStDZ2tKQ1FrOElTMHRJQzh2SUVWT1JDQlVSVTFRVEVGVVJTQXRMVDRLQ1FrSlBDOTBaRDRLQ1FrOEwzUnlQZ29KUEM5MFlXSnNaVDRLQ1R3dlkyVnVkR1Z5UGdvOEwySnZaSGsrQ2p3dmFIUnRiRDRLXCIsXCJ0YXJnZXRSb290XCI6XCIke1A2X0RBVEF9XCIsXCJ0YXJnZXRQYXRoXCI6XCIvcmVzb3VyY2VzL3RlbXBsYXRlcy9wNmRlbW9fUE9SZXZpZXcuZnRsXCIsXCJwcm9wc1wiOnt9LFwiZGVwbG95ZWRcIjp0cnVlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJwNmRlbW9fUE9SZXZpZXcuZnRsXCIsXCJhdHRhY2htZW50U2l6ZVwiOjQ4MDg0fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU3NjAxNzI4NzQxNn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5idW5kbGVkcmVzb3VyY2VzIiwibmFtZSI6IlRhYmxlSXRlbXNEYXRhIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVGFibGVJdGVtc0RhdGFcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQ1NWIGZpbGUgdG8gaW1wb3J0IGludG8gdGFibGUgSXRlbXNcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NzYwMTcyODc0NDUsXCJyZXZpc2lvbklkXCI6XCI0NGFjNTY1OTEyYmJjM2NiZjY0YTEzMWViM2Q1NzY5M1wiLFwiaXRlbUJ5dGVzXCI6XCJTV1FzUkdWelkzSnBjSFJwYjI0c1ZXNXBkRkJ5YVdObExFTjFjbkpsYm1ONUxGVlBUU3hEWVhSbFoyOXllUW93TURNME16UTFMRk5wYkhabGNpQklaV3h0WlhRc01qQXNWVk5FTEVWQkxFaGxiRzFsZEFveE1URXhNVEVzVTJ4dmRIUmxaQ0JUWTNKbGQyUnlhWFpsY2l3eU5TeFZVMFFzUlVFc1UyTnlaWGRrY21sMlpYSUtNVE01TkRVeE1URXNVR3hoYzNScFl5QklaV3h0WlhRc01UTXNWVk5FTEVWQkxFaGxiRzFsZEFveE5qYzJOemdzUTJ4aGR5QklZVzF0WlhJc01UVXNWVk5FTEVWQkxFaGhiVzFsY2dveU1qSXlNaklzVUdocGJHbHdjeUJUWTNKbGQyUnlhWFpsY2l3eU55eFZVMFFzUlVFc1UyTnlaWGRrY21sMlpYSUtNakl5TWpJMExGQnZlbWxrY21sMklGTmpjbVYzWkhKcGRtVnlMRE13TEZWVFJDeEZRU3hUWTNKbGQyUnlhWFpsY2dvME5EUTFOallzUTJ4MVlpQklZVzF0WlhJc01qQXNWVk5FTEVWQkxFaGhiVzFsY2dvNE9UTXlNak1zVTJ4bFpHZGxJRWhoYlcxbGNpd3hNREFzVlZORUxFVkJMRWhoYlcxbGNnbz1cIixcInRhcmdldFJvb3RcIjpcIiR7VE1QfVwiLFwidGFyZ2V0UGF0aFwiOlwiL3A2X2RlbW9faXRlbXMuY3N2XCIsXCJwcm9wc1wiOnt9LFwiZGVwbG95ZWRcIjp0cnVlLFwiaGFzQnl0ZXNBdHRhY2htZW50XCI6dHJ1ZSxcImF0dGFjaG1lbnROYW1lXCI6XCJ0YWJsZV9wNl9kZW1vLkl0ZW1zX2RhdGFfZXhwb3J0LmNzdlwiLFwiYXR0YWNobWVudFNpemVcIjozODZ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTc2MDE3Mjg3NDQ1fV0sInBsYXRmb3JtNi5zdG9yZWRwcm9jZWR1cmVzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zdG9yZWRwcm9jZWR1cmVzIiwibmFtZSI6IkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9ucyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEZWxldGUgYWxsIHA2X2RlbW8gdHJhbnNhY3Rpb24gLSBhdXRvbWF0aWNhbGx5IGNhbGxlZCB3aGVuIHA2X2RlbW8gYXBwbGljYXRpb24gaXMgdW5pbnN0YWxsZWRcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1NzU5ODg2MTU2ODAsXCJyZXZpc2lvbklkXCI6XCI2N2Y1NTU5ZmQ0YzY0YjI2NTY1MDRmZmI3NDk4YjkwZFwiLFwidHlwZVwiOlwiVXNlckRlZmluZWRcIixcInVzZXJRdWVyeVZhbHVlXCI6XCJkZWxldGVcXG5mcm9tIHA2Y29yZS50cmFuc2FjdGlvblxcbndoZXJlIGRhdGFUeXBlID0gJ3A2X2RlbW8uVHJhbnNhY3Rpb25JbmZvJztcXG5cXG5kZWxldGVcXG5mcm9tIHA2Y29yZS50cmFuc2FjdGlvblxcbndoZXJlIHhwYXRoX2V4aXN0cygnL1dvcmtmbG93VGFzay9mbGluay92aWV3Wy49XFxcInA2X2RlbW8uVHJhbnNhY3Rpb25zXFxcIl0nICwgY29udGVudCk7XFxuXCIsXCJ0YXJnZXREYXRhU291cmNlTmFtZVwiOm51bGwsXCJkZWZpbmVkUGFyYW1ldGVyc1wiOnt9LFwiY2FjaGluZ092ZXJyaWRlXCI6ZmFsc2UsXCJhcHBlbmRUYXJnZXREYXRhU291cmNlXCI6ZmFsc2V9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTc1OTg4NjE1NjgwfV19", "version": "1.0.1", "installed": false, "signature": "iusM33gWtbn91lzxRRKQm7CXaQd0NWafJEYk3NjGOYY7KxngelhUwljLmf4eh+YYmyjADNmbkOBocc0BFjWLrf64RiKzdEJp5cwbtBOIKavfG/VHqxxP+nQJ3GJ2H3WCAhR4AcOeZndi1v7Gw7843DNcvZYfdQQUqYi+/BtFyu4=", "createDate": 1584450075595, "expiryDays": 0, "revisionId": "6eb54bbea6720c8642751e1db359273c", "contentMode": "READ", "description": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "publisherId": "4d8c4ac1-9db1-44d9-8d4e-604a845478e9", "appProperties": {}, "publisherName": "Platform 6", "lastModifiedBy": "choucri.fahed@amalto.com", "applicationName": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "componentBundle": null, "installationDate": null, "lastModifiedDate": 1584536294088, "underDevelopment": false, "uninstallScriptId": "UninstallApplication", "maxInstanceVersion": "", "minInstanceVersion": "6.0.1", "preInstallScriptId": "PreInstallApplication", "postInstallScriptId": "PostInstallApplication"} \N 1584536294111 +bfe0c4bb06704ca9b1f744c017c8a142 p6_demo applications {"logo": "data:image/jpeg;base64,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", "name": "bfe0c4bb06704ca9b1f744c017c8a142", "appKey": "p6_demo", "status": "6.0.2", "content": "eyJwbGF0Zm9ybTYuc2NyaXB0cyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJWaWV3X1dvcmtmbG93IFRhc2tzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVmlld19Xb3JrZmxvdyBUYXNrc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIGh0bWwgZGlzcGxheSBvZiBXb3JrZmxvdyBUYXNrc1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDAwNixcInJldmlzaW9uSWRcIjpcIjc1ZGY1NmE0NjVkMjcyNDY0MjQ4ZmY3ODhiMjFiYWRmXCIsXCJtYWluU2NyaXB0XCI6XCJkZWYgcmVzdWx0cyA9IHA2LnhzbHQucHJvY2VzcyhcXFwiVmlld19Xb3JrbG93IFRhc2tzXFxcIiwgcDYucmVzb3VyY2UuZ2V0KCdXb3JrZmxvd19UYXNrX3RvX0hUTUwnKSwgcDYucGlwZWxpbmUuZ2V0KCAneG1sJykpXFxuXFxucDYucGlwZWxpbmUucHV0ICdwb3J0YWxIdG1sJywgcmVzdWx0cywgJ3RleHQvaHRtbCdcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W3tcIm5hbWVcIjpcIldvcmtmbG93X1Rhc2tfdG9fSFRNTFwiLFwidHlwZVwiOlwiWFNMVFwiLFwiY29udGVudFwiOlwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIiBlbmNvZGluZz1cXFwiVVRGLThcXFwiPz5cXG48eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPVxcXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm1cXFwiIHZlcnNpb249XFxcIjIuMFxcXCI+XFxuICAgIDx4c2w6b3V0cHV0IG1ldGhvZD1cXFwiaHRtbFxcXCIgaW5kZW50PVxcXCJ5ZXNcXFwiIG9taXQteG1sLWRlY2xhcmF0aW9uPVxcXCJ5ZXNcXFwiIC8+XFxuICAgIFxcbiAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPVxcXCIvV29ya2Zsb3dUYXNrXFxcIj5cXG5cXG5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmlldy13cmFwcGVyXFxcIj5cXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgdGV4dC1tZWRpdW1cXFwiIHN0eWxlPVxcXCJtYXJnaW4tYm90dG9tOiA1cHg7XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9XFxcIml0ZW1BdHRyaWJ1dGVzW2tleT0nVHJhbnNhY3Rpb25UeXBlJ10vdmFsdWVzL190ZXh0XFxcIi8+PHhzbDp0ZXh0PiAjIDwveHNsOnRleHQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9XFxcIml0ZW1BdHRyaWJ1dGVzW2tleT0nVHJhbnNhY3Rpb25OdW1iZXInXS92YWx1ZXMvX3RleHRcXFwiLz48L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgdGV4dC1tZWRpdW1cXFwiIHN0eWxlPVxcXCJtYXJnaW4tYm90dG9tOiA1cHg7XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+QXNzaWduZWQgdG86PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XFxcIiNcXFwiIGRhdGEtdG9nZ2xlPVxcXCJtb2RhbFxcXCIgZGF0YS10YXJnZXQ9XFxcIiNhc3NpZ25lZXNEaWFsb2dcXFwiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J0Fzc2lnbmVkVG8nXS92YWx1ZXMvRU5cXFwiLz48L2E+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIFxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1sZy00XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlN0YXR1czwvZGl2PlxcblxcdCAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J1N0YXR1cyddL3ZhbHVlcy9FTlxcXCIvPjwvZGl2PlxcblxcdFxcdFxcdFxcdDwvZGl2PlxcblxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1sZy00XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlN0YXJ0IGRhdGU8L2Rpdj5cXG5cXHQgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdTdGFydERhdGUnXS92YWx1ZXMvX3RleHRcXFwiLz48L2Rpdj5cXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHQ8L2Rpdj5cXG4gICAgICAgIFxcbiAgICAgICAgPGRpdiBpZD1cXFwiYXNzaWduZWVzRGlhbG9nXFxcIiBjbGFzcz1cXFwibW9kYWwgZmFkZVxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtZGlhbG9nXFxcIj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtY29udGVudFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1oZWFkZXJcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiY2xvc2VcXFwiIGRhdGEtZGlzbWlzcz1cXFwibW9kYWxcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4mIzIxNTs8L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVxcXCJtb2RhbC10aXRsZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPkFzc2lnbmVkIHRvOjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9XFxcIml0ZW1BdHRyaWJ1dGVzW2tleT0nQXNzaWduZWRUbyddL3ZhbHVlcy9FTlxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWJvZHlcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cXFwiYmFzaWMtbGlzdCBuby1ib3R0b20tbWFyZ2luXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9XFxcImFzc2lnbmVlcy9hc3NpZ25lZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9XFxcIi5cXFwiLz48L2xpPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDpmb3ItZWFjaD5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuXFx0PC94c2w6dGVtcGxhdGU+XFxuXFxuPC94c2w6c3R5bGVzaGVldD5cIixcImJ5dGVDb250ZW50XCI6bnVsbH1dfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM5MDAwNn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlJGUVNtYXJ0Q29udHJhY3RIZWxwZXIiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSRlFTbWFydENvbnRyYWN0SGVscGVyXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlJGUSBTbWFydCBDb250cmFjdCBIZWxwZXJcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzOTAyNDMsXCJyZXZpc2lvbklkXCI6XCJiNzhlOWU0YjBmMWZlODZmZTc3ODYxMmNjOTAzMGI1YVwiLFwibWFpblNjcmlwdFwiOlwiZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuLy8gVGVzdCBwcm90ZWN0aW5nIHByaXZhdGUga2V5IHdpdGggYSBwYXNzd29yZCBpbiBhIHdhbGxldFxcbmRlZiBwYXNzd29yZCA9IFxcXCJBRHVtbXlQYXNzd29yZFxcXCJcXG5kZWYgcHJpdmF0ZUtleSA9IFxcXCIweGM4NzUwOWExYzA2N2JiZGU3OGJlYjc5M2U2ZmE3NjUzMGI2MzgyYTRjMDI0MWU1ZTRhOWVjMGEwZjQ0ZGMwZDNcXFwiXFxubG9nLmRlYnVnIFxcXCJXYWxsZXQgZmlsZSBcXFwiICsgaGVscGVyLmdlbmVyYXRlV2FsbGV0SlNPTkZyb21Qcml2YXRlS2V5KHByaXZhdGVLZXksIHBhc3N3b3JkKVxcblxcbi8vIFRlc3QgcmVhZGluZyBjcmVkZW50aWFsc1xcbmRlZiBjcmVkZW50aWFscyA9IGhlbHBlci5yZWFkQ3JlZGVudGlhbHMoKVxcbmxvZy5kZWJ1ZyBcXFwiQWNjb3VudCBhZGRyZXNzIGlzOiBcXFwiICsgY3JlZGVudGlhbHMuZ2V0QWRkcmVzcygpXFxubG9nLmRlYnVnIFxcXCJBY2NvdW50IHByaXZhdGUga2V5IGlzOiAweFxcXCIgKyBjcmVkZW50aWFscy5nZXRFY0tleVBhaXIoKS5nZXRQcml2YXRlS2V5KCkudG9TdHJpbmcoMTYpXFxuXFxuLy8gVGVzdCBFdGggY2xpZW50IGNvbm5lY3Rpb25cXG5kZWYgY29udHJhY3QgPSBoZWxwZXIuZ2V0U21hcnRDb250cmFjdCgpXFxubG9nLmRlYnVnIFxcXCJHZXQgbnVtYmVyIG9mIFJGUXNcXFwiXFxuZGVmIG5ick9mUkZRcyA9IGNvbnRyYWN0Lm5ick9mUkZRcygpLnNlbmQoKVxcbmxvZy5kZWJ1ZyBcXFwiQ3VycmVudCBudW1iZXIgb2YgUkZRcyBpczogXFxcIiArIG5ick9mUkZRc1xcblxcbmxvZy5kZWJ1ZyBcXFwiR2V0IG51bWJlciBvZiBxdW90ZXNcXFwiXFxuZGVmIG5ick9mUXVvdGVzID0gY29udHJhY3QubmJyT2ZRdW90ZXMoKS5zZW5kKClcXG5sb2cuZGVidWcgXFxcIkN1cnJlbnQgbnVtYmVyIG9mIHF1b3RlcyBpczogXFxcIiArIG5ick9mUXVvdGVzXFxuXFxuLy8gVGVzdCBSRlEgc3VibWlzc2lvblxcbmRlZiByZnFJZCA9IFVVSUQucmFuZG9tVVVJRCgpXFxubG9nLmRlYnVnIFxcXCJSRlEgaWQgaXMgXFxcIiArIHJmcUlkXFxuXFxuZGVmIG5vdyA9IGhlbHBlci5ub3coKVxcbmRlZiB1YmwgPSBcXFwiPC4uLj5cXFwiXFxuXFxuZGVmIHJlY2VpcHQgPSBoZWxwZXIuc3VibWl0UkZRKHJmcUlkLCBub3csIHVibClcXG5sb2cuZGVidWcgcmVjZWlwdC50b1N0cmluZygpXFxuXFxuZGVmIChyZWFkSXNzdWVkQXQsIHJlYWRVQkwsIHJlYWRTdGF0dXMpID0gaGVscGVyLmdldFJGUShyZnFJZClcXG5sb2cuZGVidWcgXFxcIlJGUSBpcyBpc3N1ZWQgYXQ6IFxcXCIgKyByZWFkSXNzdWVkQXRcXG5sb2cuZGVidWcgXFxcIlJGUSBVQkwgaXM6IFxcXCIgKyByZWFkVUJMXFxubG9nLmRlYnVnIFxcXCJSRlEgc3RhdHVzIGlzOiBcXFwiICsgcmVhZFN0YXR1c1xcblxcbi8vIFJlYWQgUkZRUmVjZWl2ZWQgZXZlbnRzXFxuLy9kZWYgdG9waWNPZlJGUVJlY2VpdmVkID0gSGFzaC5zaGEzU3RyaW5nKFxcXCJSRlFSZWNlaXZlZChieXRlczE2LHVpbnQyNTYsc3RyaW5nKVxcXCIpXFxubG9nLmRlYnVnIFxcXCJUb3BpYyBvZiBSRlFSZWNlaXZlZDogXFxcIiArIGhlbHBlci5SRlFSZWNlaXZlZEV2ZW50SGFzaFxcblxcbi8vIFRlc3QgZGVjbGluaW5nIGEgUkZRXFxuZGVmIGRlY2xpbmVJZCA9IFVVSUQucmFuZG9tVVVJRCgpXFxucmVjZWlwdCA9IGhlbHBlci5kZWNsaW5lUkZRKGRlY2xpbmVJZCwgcmZxSWQsIG5vdylcXG5sb2cuZGVidWcgcmVjZWlwdC50b1N0cmluZygpXFxuXFxuZGVmIChyZWFkRGVjbGluZUlzc3VlZEF0LCByZWFkRGVjbGluZVVCTCwgcmVhZERlY2xpbmVTdGF0dXMsIHJlYWREZWNsaW5lUkZRSWQsIHJlYWREZWNsaW5lU3VwcGxpZXJBZGRyZXNzKSA9IGhlbHBlci5nZXRRdW90ZShkZWNsaW5lSWQpXFxubG9nLmRlYnVnIFxcXCJEZWNsaW5lIGlzIGlzc3VlZCBhdDogXFxcIiArIHJlYWREZWNsaW5lSXNzdWVkQXRcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmUgVUJMIGlzOiBcXFwiICsgcmVhZERlY2xpbmVVQkwgLy8gc2hvdWxkIGJlIGVtcHR5XFxubG9nLmRlYnVnIFxcXCJEZWNsaW5lIHN0YXR1cyBpczogXFxcIiArIHJlYWREZWNsaW5lU3RhdHVzIC8vIHNob3VsZCBiZSBEZWNsaW5lXFxubG9nLmRlYnVnIFxcXCJEZWNsaW5lZCBSRlEgaXM6IFxcXCIgKyByZWFkRGVjbGluZVJGUUlkIC8vIHNob3VsZCBiZSByZnFJZFxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZSBzdXBwbGllciBhZGRyZXNzIGlzOiBcXFwiICsgcmVhZERlY2xpbmVTdXBwbGllckFkZHJlc3NcXG5cXG5kZWYgcmVhZERlY2xpbmVkUkZRU3RhdHVzID0gaGVscGVyLmdldFJGUShyZnFJZClbMl1cXG5sb2cuZGVidWcgXFxcIkRlY2xpbmVkIFJGUSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkRGVjbGluZWRSRlFTdGF0dXMgLy8gc2hvdWxkIGJlIERlY2xpbmVkXFxuXFxuLy8gVGVzdCBzdWJtaXR0aW5nIGEgcXVvdGVcXG5kZWYgcXVvdGVJZCA9IFVVSUQucmFuZG9tVVVJRCgpXFxuZGVmIHF1b3RlVWJsID0gXFxcIjxxdW90ZSAvPlxcXCJcXG5yZWNlaXB0ID0gaGVscGVyLnN1Ym1pdFF1b3RlKHF1b3RlSWQsIHJmcUlkLCBub3csIHF1b3RlVWJsKVxcbmxvZy5kZWJ1ZyByZWNlaXB0LnRvU3RyaW5nKClcXG5cXG5kZWYgKHJlYWRRdW90ZUlzc3VlZEF0LCByZWFkUXVvdGVVQkwsIHJlYWRRdW90ZVN0YXR1cywgcmVhZFF1b3RlUkZRSWQsIHJlYWRRdW90ZVN1cHBsaWVyQWRkcmVzcykgPSBoZWxwZXIuZ2V0UXVvdGUocXVvdGVJZClcXG5sb2cuZGVidWcgXFxcIlF1b3RlIGlzIGlzc3VlZCBhdDogXFxcIiArIHJlYWRRdW90ZUlzc3VlZEF0XFxubG9nLmRlYnVnIFxcXCJRdW90ZSBVQkwgaXM6IFxcXCIgKyByZWFkUXVvdGVVQkxcXG5sb2cuZGVidWcgXFxcIlF1b3RlIHN0YXR1cyBpczogXFxcIiArIHJlYWRRdW90ZVN0YXR1cyAvLyBzaG91bGQgYmUgT2ZmZXJcXG5sb2cuZGVidWcgXFxcIlF1b3RlIFJGUSBpczogXFxcIiArIHJlYWRRdW90ZVJGUUlkIC8vIHNob3VsZCBiZSByZnFJZFxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgc3VwcGxpZXIgYWRkcmVzcyBpczogXFxcIiArIHJlYWRRdW90ZVN1cHBsaWVyQWRkcmVzc1xcblxcbmRlZiByZWFkUkZRU3RhdHVzID0gaGVscGVyLmdldFJGUShyZnFJZClbMl1cXG5sb2cuZGVidWcgXFxcIk5ldyBSRlEgc3RhdHVzIGlzOiBcXFwiICsgcmVhZFJGUVN0YXR1cyAvLyBzaG91bGQgYmUgUXVvdGVQcm92aWRlZFxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e1wiUkZRU21hcnRDb250cmFjdEhlbHBlclwiOlwiaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXJcXG5cXG5pbXBvcnQgaW8ucGxhdGZvcm02LmRlbW8uc2MuUmVxdWVzdEZvclF1b3RhdGlvbnNcXG5cXG5pbXBvcnQgamF2YS50aW1lLipcXG5cXG5pbXBvcnQgb3JnLndlYjNqLmFiaS5FdmVudEVuY29kZXJcXG5pbXBvcnQgb3JnLndlYjNqLmFiaS5FdmVudFZhbHVlc1xcbmltcG9ydCBvcmcud2ViM2ouYWJpLkZ1bmN0aW9uUmV0dXJuRGVjb2RlclxcbmltcG9ydCBvcmcud2ViM2ouYWJpLlR5cGVSZWZlcmVuY2VcXG5pbXBvcnQgb3JnLndlYjNqLmFiaS5kYXRhdHlwZXMuRXZlbnRcXG5pbXBvcnQgb3JnLndlYjNqLmFiaS5kYXRhdHlwZXMuVHlwZVxcbmltcG9ydCBvcmcud2ViM2ouY3J5cHRvLipcXG5pbXBvcnQgb3JnLndlYjNqLnByb3RvY29sLmNvcmUubWV0aG9kcy5yZXNwb25zZS5UcmFuc2FjdGlvblJlY2VpcHRcXG5pbXBvcnQgb3JnLndlYjNqLnR4LipcXG5pbXBvcnQgb3JnLndlYjNqLnV0aWxzLk51bWVyaWNcXG5cXG5cXG5lbnVtIFJGUVN0YXR1cyB7XFxuICAgIFJlY2VpdmVkLCBEZWNsaW5lZCwgUXVvdGVQcm92aWRlZFxcbn1cXG5cXG5lbnVtIFF1b3RlU3RhdHVzIHtcXG4gICAgT2ZmZXIsIERlY2xpbmVcXG59XFxuXFxuY2xhc3MgUkZRU21hcnRDb250cmFjdEhlbHBlciB7XFxuXFxuICAgIC8vICEhISBGb3IgZGVtbyBwdXJwb3NlcywgZG9uJ3QgZG8gdGhpcyBpbiBwcm9kdWN0aW9uISBBbHdheXMgYXNrIHRoZSB1c2VyIGZvciBoaXMvaGVyIHBhc3N3b3JkIG9yIHN0b3JlIHlvdXIgcHJpdmF0ZSBrZXkgaW4gYSB2YXVsdC9IRCB3YWxsZXQhXFxuICAgIHN0YXRpYyBkZWYgcGFzc3dvcmQgPSBcXFwiQUR1bW15UGFzc3dvcmRcXFwiXFxuXFxuICAgIC8vIEhlbHBlciBzdGF0ZVxcbiAgICBkZWYgY29udGV4dFxcbiAgICBkZWYgd2ViM2pcXG4gICAgZGVmIHNtYXJ0Q29udHJhY3RcXG5cXG4gICAgUkZRU21hcnRDb250cmFjdEhlbHBlcihkZWYgY29udGV4dCkge1xcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxcblxcbiAgICAgICAgZGVmIGV0aENsaWVudFVSTCAgPSBjb250ZXh0LnA2LmFwcGNvbmZpZy5nZXQoJ2V0aENsaWVudFVSTCcpXFxuICAgICAgICB0aGlzLndlYjNqID0gY29udGV4dC5wNi5ldGhlcmV1bXJwYy5idWlsZChldGhDbGllbnRVUkwpXFxuXFxuICAgICAgICAvLyBEZWZpbmUgYSBjdXN0b20gdHJhbnNhY3Rpb24gbWFuYWdlciB3aXRoIGEgcG9sbGluZyBmcmVxdWVuY3kgb2YgMiBzZWNvbmRzXFxuICAgICAgICBkZWYgdHJhbnNhY3Rpb25NYW5hZ2VyID0gY29udGV4dC5wNi5ldGhlcmV1bXJwYy5wb2xsaW5nVHJhbnNhY3Rpb25NYW5hZ2VyKHdlYjNqLCByZWFkQ3JlZGVudGlhbHMoKSwgMjAwMEwpXFxuXFxuICAgICAgICBkZWYgY29udHJhY3RBZGRyZXNzID0gY29udGV4dC5wNi5hcHBjb25maWcuZ2V0KCdjb250cmFjdEFkZHJlc3MnKVxcbiAgICAgICAgdGhpcy5zbWFydENvbnRyYWN0ID0gUmVxdWVzdEZvclF1b3RhdGlvbnMubG9hZChjb250cmFjdEFkZHJlc3MsIHdlYjNqLCB0cmFuc2FjdGlvbk1hbmFnZXIsIGNvbnRleHQucDYuZXRoZXJldW1ycGMuREVGQVVMVF9HQVNfUFJPVklERVIpXFxuICAgIH1cXG5cXG4gICAgQ3JlZGVudGlhbHMgcmVhZENyZWRlbnRpYWxzKCkge1xcbiAgICAgICAgcmV0dXJuIGNvbnRleHQucDYuZXRoZXJldW1ycGMuZ2V0Q3JlZGVudGlhbHMoY29udGV4dC5wNi5hcHBjb25maWcuZ2V0KFxcXCJkZW1vV2FsbGV0XFxcIiksIHBhc3N3b3JkKVxcbiAgICB9XFxuXFxuICAgIFRyYW5zYWN0aW9uUmVjZWlwdCBzdWJtaXRSRlEoVVVJRCBpZCwgWm9uZWREYXRlVGltZSBub3csIFN0cmluZyB1YmwpIHtcXG4gICAgICAgIHJldHVybiBzbWFydENvbnRyYWN0LnN1Ym1pdFJGUShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLnpkdFRvQmlnSW50ZWdlcihub3cpLFxcbiAgICAgICAgICAgIHVibCkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UkZRKFVVSUQgaWQpIHtcXG4gICAgICAgIGRlZiByZXN1bHQgPSBzbWFydENvbnRyYWN0LmdldFJGUShjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCkpLnNlbmQoKVxcblxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVChyZXN1bHQuZ2V0VmFsdWUxKCkpXFxuICAgICAgICBkZWYgdWJsID0gcmVzdWx0LmdldFZhbHVlMigpXFxuICAgICAgICBkZWYgc3RhdHVzID0gUkZRU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IGRlY2xpbmVSRlEoVVVJRCBkZWNsaW5lSWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93KSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5kZWNsaW5lUkZRKFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRCeXRlc0Zyb21VVUlEKGRlY2xpbmVJZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UXVvdGUoVVVJRCBpZCkge1xcbiAgICAgICAgZGVmIHJlc3VsdCA9IHNtYXJ0Q29udHJhY3QuZ2V0UXVvdGUoY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQoaWQpKS5zZW5kKClcXG5cXG4gICAgICAgIGRlZiBpc3N1ZWRBdCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5iaWdJbnRlZ2VyVG9aRFQocmVzdWx0LmdldFZhbHVlMSgpKVxcbiAgICAgICAgZGVmIHVibCA9IHJlc3VsdC5nZXRWYWx1ZTIoKVxcbiAgICAgICAgZGVmIHN0YXR1cyA9IFF1b3RlU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMocmVzdWx0LmdldFZhbHVlNCgpKVxcbiAgICAgICAgZGVmIHN1cHBsaWVyQWRkcmVzcyA9IHJlc3VsdC5nZXRWYWx1ZTUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMsIHJmcUlkLCBzdXBwbGllckFkZHJlc3MpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IHN1Ym1pdFF1b3RlKFVVSUQgaWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93LCBTdHJpbmcgdWJsKSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5zdWJtaXRRdW90ZShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSwgdWJsKS5zZW5kKClcXG4gICAgfVxcblxcbiAgICAvLyBSZWFkIGV2ZW50c1xcblxcbiAgICBmaW5hbCBzdGF0aWMgU3RyaW5nIFJGUVJlY2VpdmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5SRlFSRUNFSVZFRF9FVkVOVClcXG5cXG4gICAgVHVwbGUgcmVhZFJGUVJlY2VpdmVkRXZlbnQoTGlzdDxTdHJpbmc+IGxvZ1RvcGljcywgU3RyaW5nIGxvZ0RhdGEpIHtcXG4gICAgICAgIGRlZiBldmVudCA9IGV4dHJhY3RFdmVudChSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5SRlFSRUNFSVZFRF9FVkVOVCwgbG9nVG9waWNzLCBsb2dEYXRhKVxcblxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgwKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVCgoQmlnSW50ZWdlcikgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgxKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHVibCA9IChTdHJpbmcpIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMikuZ2V0VmFsdWUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShyZnFJZCwgaXNzdWVkQXQsIHVibClcXG4gICAgfVxcblxcbiAgICBmaW5hbCBzdGF0aWMgU3RyaW5nIFJGUURlY2xpbmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5SRlFERUNMSU5FRF9FVkVOVClcXG5cXG4gICAgVHVwbGUgcmVhZFJGUURlY2xpbmVkRXZlbnQoTGlzdDxTdHJpbmc+IGxvZ1RvcGljcywgU3RyaW5nIGxvZ0RhdGEpIHtcXG4gICAgICAgIGRlZiBldmVudCA9IGV4dHJhY3RFdmVudChSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5SRlFERUNMSU5FRF9FVkVOVCwgbG9nVG9waWNzLCBsb2dEYXRhKVxcblxcbiAgICAgICAgZGVmIHN1cHBsaWVyID0gKFN0cmluZykgZXZlbnQuZ2V0SW5kZXhlZFZhbHVlcygpLmdldCgwKS5nZXRWYWx1ZSgpXFxuICAgICAgICBkZWYgcmZxSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgcXVvdGVJZCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRVVUlERnJvbUJ5dGVzKChieXRlW10pIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMSkuZ2V0VmFsdWUoKSlcXG4gICAgICAgIGRlZiBpc3N1ZWRBdCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5iaWdJbnRlZ2VyVG9aRFQoKEJpZ0ludGVnZXIpIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMikuZ2V0VmFsdWUoKSlcXG5cXG4gICAgICAgIHJldHVybiBuZXcgVHVwbGUoc3VwcGxpZXIsIHJmcUlkLCBxdW90ZUlkLCBpc3N1ZWRBdClcXG4gICAgfVxcblxcbiAgICBmaW5hbCBzdGF0aWMgU3RyaW5nIFF1b3RlUmVjZWl2ZWRFdmVudEhhc2ggPSBFdmVudEVuY29kZXIuZW5jb2RlKFJlcXVlc3RGb3JRdW90YXRpb25zLlFVT1RFUkVDRUlWRURfRVZFTlQpXFxuXFxuICAgIFR1cGxlIHJlYWRRdW90ZVJlY2VpdmVkRXZlbnQoTGlzdDxTdHJpbmc+IGxvZ1RvcGljcywgU3RyaW5nIGxvZ0RhdGEpIHtcXG4gICAgICAgIGRlZiBldmVudCA9IGV4dHJhY3RFdmVudChSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5RVU9URVJFQ0VJVkVEX0VWRU5ULCBsb2dUb3BpY3MsIGxvZ0RhdGEpXFxuXFxuICAgICAgICBkZWYgc3VwcGxpZXIgPSAoU3RyaW5nKSBldmVudC5nZXRJbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKClcXG4gICAgICAgIGRlZiByZnFJZCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRVVUlERnJvbUJ5dGVzKChieXRlW10pIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKSlcXG4gICAgICAgIGRlZiBxdW90ZUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgxKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVCgoQmlnSW50ZWdlcikgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgyKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHVibCA9IChTdHJpbmcpIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMykuZ2V0VmFsdWUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0LCB1YmwpXFxuICAgIH1cXG5cXG4gICAgLy8gRXZlbnQgaGVscGVyIG1ldGhvZHNcXG5cXG4gICAgc3RhdGljIEV2ZW50VmFsdWVzIGV4dHJhY3RFdmVudChFdmVudCBldmVudCwgTGlzdDxTdHJpbmc+IGxvZ1RvcGljcywgU3RyaW5nIGxvZ0RhdGEpIHtcXG4gICAgICAgIFN0cmluZyBlbmNvZGVkRXZlbnRTaWduYXR1cmUgPSBFdmVudEVuY29kZXIuZW5jb2RlKGV2ZW50KVxcblxcbiAgICAgICAgaWYgKGxvZ1RvcGljc1swXSAhPSBlbmNvZGVkRXZlbnRTaWduYXR1cmUpIHtcXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxcbiAgICAgICAgfVxcblxcbiAgICAgICAgTGlzdDxUeXBlPiBpbmRleGVkVmFsdWVzID0gbmV3IEFycmF5TGlzdDw+KClcXG4gICAgICAgIExpc3Q8VHlwZT4gbm9uSW5kZXhlZFZhbHVlcyA9IEZ1bmN0aW9uUmV0dXJuRGVjb2Rlci5kZWNvZGUobG9nRGF0YSwgZXZlbnQuZ2V0Tm9uSW5kZXhlZFBhcmFtZXRlcnMoKSlcXG5cXG4gICAgICAgIExpc3Q8VHlwZVJlZmVyZW5jZTxUeXBlPj4gaW5kZXhlZFBhcmFtZXRlcnMgPSBldmVudC5nZXRJbmRleGVkUGFyYW1ldGVycygpXFxuICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluZGV4ZWRQYXJhbWV0ZXJzLnNpemUoKTsgaSsrKSB7XFxuICAgICAgICAgICAgVHlwZSB2YWx1ZSA9IEZ1bmN0aW9uUmV0dXJuRGVjb2Rlci5kZWNvZGVJbmRleGVkVmFsdWUobG9nVG9waWNzW2kgKyAxXSwgaW5kZXhlZFBhcmFtZXRlcnMuZ2V0KGkpKVxcbiAgICAgICAgICAgIGluZGV4ZWRWYWx1ZXMuYWRkKHZhbHVlKVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBFdmVudFZhbHVlcyhpbmRleGVkVmFsdWVzLCBub25JbmRleGVkVmFsdWVzKVxcbiAgICB9XFxuXFxuICAgIHN0YXRpYyBnZW5lcmF0ZVdhbGxldEpTT05Gcm9tUHJpdmF0ZUtleShTdHJpbmcgcHJpdmF0ZUtleUluSGV4LCBTdHJpbmcgcGFzc3dvcmQpIHtcXG4gICAgICAgIGRlZiBwcml2YXRlS2V5ID0gbmV3IEJpZ0ludGVnZXIoTnVtZXJpYy5jbGVhbkhleFByZWZpeChwcml2YXRlS2V5SW5IZXgpLCAxNilcXG4gICAgICAgIGRlZiBrZXlQYWlyID0gRUNLZXlQYWlyLmNyZWF0ZShwcml2YXRlS2V5KVxcbiAgICAgICAgZGVmIHdhbGxldEZpbGUgPSBXYWxsZXQuY3JlYXRlU3RhbmRhcmQocGFzc3dvcmQsIGtleVBhaXIpXFxuICAgICAgICBkZWYgb2JqZWN0TWFwcGVyID0gbmV3IE9iamVjdE1hcHBlcigpXFxuICAgICAgICByZXR1cm4gb2JqZWN0TWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyh3YWxsZXRGaWxlKVxcbiAgICB9XFxuXFxuICAgIC8vIERhdGUgLyBUaW1lIGhlbHBlciBmdW5jdGlvbnNcXG5cXG4gICAgc3RhdGljIFpvbmVkRGF0ZVRpbWUgbm93KCkge1xcbiAgICAgICAgcmV0dXJuIFpvbmVkRGF0ZVRpbWUubm93KFpvbmVJZC5zeXN0ZW1EZWZhdWx0KCkpXFxuICAgIH1cXG59XFxuXCJ9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1MzkwMjQzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiUmVjZWl2ZVJGUVRyYW5zYWN0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUmVjZWl2ZVJGUVRyYW5zYWN0aW9uXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkhhbmRsZSB0aGUgcmVjZXB0aW9uIG9mIGFuIFJGUSAoY3JlYXRpb24gb2YgdGhlIFJGUSBUcmFuc2FjdGlvbkluZm8sIHN0b3JhZ2UgdG8gZmlsZSBzeXN0ZW3igKYpIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgQmxvY2tjaGFpbkV2ZW50SGFuZGxlciBzY3JpcHRcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzOTAwMjEsXCJyZXZpc2lvbklkXCI6XCJjMjI5YzZmYTE2YzBkMTkyMTk0NWZjZWY2ZDY5M2M0ZlwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5pby5GaWxlVXRpbHNcXG5pbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXRcXG5cXG4vLyBUaGlzIHNjcmlwdCByZWFkcyB0aGUgaW5jb21pbmcgUkZRLCBwYXJzZXMgaXRzIGNvbnRlbnQgYW5kIHdyaXRlcyB0aGUgdHJhbnNhY3Rpb24gaW4gUDYgZGF0YWJhc2UgdXNpbmcgaXRzIGludGVybmFsIFRyYW5zYWN0aW9uSW5mbyBtb2RlbCAoY2hlY2sgdGhlIERhdGEgTW9kZWxzIG1lbnUgZm9yIG1vcmUgaW5mbylcXG5kZWYgcmZxQ29udGVudCA9IHA2LnBpcGVsaW5lLmdldCAndWJsJ1xcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKGZhbHNlLCB0cnVlKVxcbmRlZiByZnEgPSBzbHVycGVyLnBhcnNlVGV4dChyZnFDb250ZW50KVxcblxcbmRlZiBpbnN0YW5jZUlkID0gcDYuY29uZmlndXJhdGlvbi5nZXQoXFxcImluc3RhbmNlLmlkXFxcIilcXG5cXG5kZWYgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXFxuU2ltcGxlRGF0ZUZvcm1hdCB0cmFuc2FjdGlvblNERiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KFxcXCJ5eXl5TU1kZCdUJ0hIOm1tOnNzXFxcIilcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IHRyYW5zYWN0aW9uU0RGLmZvcm1hdChjdXJyZW50RGF0ZSlcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHJmcS5JRC50ZXh0KClcXG5kZWYgY29tbWVudHMgPSByZnEuTm90ZS50ZXh0KClcXG5kZWYgaXNzdWVEYXRlID0gcmZxLklzc3VlRGF0ZS50ZXh0KClcXG5cXG5pbnQgbmJMaW5lcyA9IHJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5zaXplKClcXG5cXG5kZWYgc2VsbGVyTmFtZSA9IHJmcS5TZWxsZXJTdXBwbGllclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiBidXllck5hbWUgPSByZnEuT3JpZ2luYXRvckN1c3RvbWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdSZXF1ZXN0Rm9yUXVvdGF0aW9uJ1xcbmRlZiBzdGF0dXMgPSAnUmVjZWl2ZWQnXFxuZGVmIHN0YXR1c01lc3NhZ2UgPSAnUmVjZWl2ZWQgYnkgRGVtbyBBcHAnXFxuXFxuLy8gV3JpdGUgdGhlIHRyYW5zYWN0aW9uIG9uIHRoZSBmaWxlIHN5c3RlbVxcbmRlZiBzb3VyY2VVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUmVxdWVzdEZvclF1b3RhdGlvbi9pbi9cXFwiICsgdHJhbnNhY3Rpb25JZCArIFxcXCIueG1sXFxcIlxcbmRlZiBzb3VyY2VGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHNvdXJjZVVSSSlcXG5GaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUoc291cmNlRmlsZSwgcmZxQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0YXJnZXRVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUmVxdWVzdEZvclF1b3RhdGlvbi9cXFwiICsgdHJhbnNhY3Rpb25JZCArIFxcXCIueG1sXFxcIlxcbmRlZiB0YXJnZXRGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHRhcmdldFVSSSlcXG5GaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUodGFyZ2V0RmlsZSwgcmZxQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHt0cmFuc2FjdGlvbklkfTwvSWQ+XFxuICAgIDxDcmVhdGlvbkRhdGU+JHtmb3JtYXR0ZWREYXRlfTwvQ3JlYXRpb25EYXRlPlxcbiAgICA8VHJhbnNhY3Rpb25UeXBlPlJlcXVlc3QgRm9yIFF1b3RhdGlvbjwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHt0cmFuc2FjdGlvbklkfTwvVHJhbnNhY3Rpb25OdW1iZXI+XFxuICAgIDxTb3VyY2VTeXN0ZW0+RGVtbyBBcHA8L1NvdXJjZVN5c3RlbT5cXG4gICAgPFRhcmdldFN5c3RlbS8+XFxuICAgIDxTZW5kZXIvPlxcbiAgICA8RmluYWxSZWNpcGllbnQ+U3VwcGxpZXI8L0ZpbmFsUmVjaXBpZW50PlxcbiAgICA8VHJhbnNmZXJQcm90b2NvbD5CbG9ja2NoYWluPC9UcmFuc2ZlclByb3RvY29sPlxcbiAgICA8RGVsaXZlcmVkVmlhPkV0aGVyZXVtIEJsb2NrY2hhaW48L0RlbGl2ZXJlZFZpYT5cXG4gICAgPFNvdXJjZURvY3VtZW50Rm9ybWF0PlVCTDwvU291cmNlRG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxTb3VyY2VEb2N1bWVudFVSST4ke3NvdXJjZVVSSX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1Bpdm90RG9jdW1lbnRVUkk+XFxuICAgIDxQaXZvdERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1Bpdm90RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRhcmdldERvY3VtZW50Rm9ybWF0PlVCTDwvVGFyZ2V0RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxUYXJnZXREb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1RhcmdldERvY3VtZW50VVJJPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRlY2huaWNhbFN0YXR1c0NvZGU+JHtzdGF0dXN9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3N0YXR1c01lc3NhZ2V9PC9UZWNobmljYWxTdGF0dXNNZXNzYWdlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9UZWNobmljYWxTdGF0dXNEYXRlPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0NvZGUvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0RhdGUvPlxcbiAgICA8RmxhZ3M+e1xcXCJhYXZpc2libGVcXFwiOiB0cnVlfTwvRmxhZ3M+XFxuICAgIDxPcmdQYXRoPi8ke2luc3RhbmNlSWR9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkJ1eWVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoYnV5ZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT48L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoJ3A2X2RlbW8uVHJhbnNhY3Rpb25JbmZvJywgdHJhbnNhY3Rpb25JZClcXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUodHJhbnNhY3Rpb25JbmZvLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1MzkwMDIxfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiVmlld19UcmFuc2FjdGlvbnMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJWaWV3X1RyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIGh0bWwgZGlzcGxheSBvZiBUcmFuc2FjdGlvbnNcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzOTAyMjMsXCJyZXZpc2lvbklkXCI6XCIyMGFjMGMyMjQyZDEyMTQ3MTVlZWMzYmYwYzIwMzRlOVwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0O1xcblxcbmxvZy5kZWJ1ZyAnUDZfREVNTydcXG5cXG5EZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoXFxcIiMjIywjIyMuMDBcXFwiKTtcXG5cXG4vLyBEaXNwbGF5IHBpcGVsaW5lIHZhcmlhYmxlc1xcbi8vIHBpcGVsaW5lLnZhcmlhYmxlcygpLmVhY2goKSB7IFxcbi8vICAgICBsb2cuZGVidWcgXFxcIlBJUEVMSU5FIFZBUiAke2l0fVxcXCIgXFxuLy8gfVxcblxcbi8vIEdldCBhbmQgZGlzcGxheSByYXcgWG1sIGZvciB0ZXN0XFxuZGVmIHByZXR0eVhtbCA9IHA2LnBpcGVsaW5lLmdldCAneG1sJ1xcblxcbi8vIEdldCBzbHVycGVkIHhtbFxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBwNi5waXBlbGluZS5nZXRYbWwgJ3htbCdcXG5cXG4vLyBSZXR1cm4gZmlsZSBleHRlbnNpb25cXG5kZWYgZ2V0X2ZpbGVfZXh0ZW5zaW9uID0geyBTdHJpbmcgcGF0aCAtPiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKSB9XFxuXFxuLy8gUmV0dXJuIGZpbGUgbmFtZVxcbmRlZiBnZXRfZmlsZV9uYW1lID0geyBTdHJpbmcgcGF0aCAtPiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCcvJykgKyAxKSB9IFxcblxcbi8vIEtleVxcbmRlZiBJZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5kZWYgQnVzaW5lc3NEb2NOYW1lID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uVHlwZS50ZXh0KClcXG5kZWYgQnVzaW5lc3NEb2NOdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uVHJhbnNhY3Rpb25OdW1iZXIudGV4dCgpXFxuZGVmIEVuZHBvaW50ID0gdHJhbnNhY3Rpb25JbmZvLkRlbGl2ZXJlZFZpYS50ZXh0KClcXG4vL2RlZiBNZXNzYWdlID0gbWVzc2FnZUluZm8uTWVzc2FnZS50ZXh0KClcXG5cXG4vLyBUcmFuc2FjdGlvblN0YXR1c0luZm9ybWF0aW9uIGJsb2NrIHN0YXJ0XFxuZGVmIFRlY2huaWNhbFN0YXR1c0NvZGUgPSB0cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZS50ZXh0KClcXG5kZWYgVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IHRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNEYXRlLnRleHQoKVxcbmRlZiBUZWNobmljYWxTdGF0dXNNZXNzYWdlID0gdHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c01lc3NhZ2UudGV4dCgpXFxuXFxuXFxuZGVmIEZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gdHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlLnRleHQoKVxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IHRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZS50ZXh0KClcXG5kZWYgRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSB0cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UudGV4dCgpXFxuLy8gVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiBibG9jayBlbmRcXG5cXG5kZWYgU291cmNlRG9jdW1lbnRVUkkgPSB0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpXFxuZGVmIHNyY0RvY0V4dGVuc2lvbiA9IGdldF9maWxlX2V4dGVuc2lvbihTb3VyY2VEb2N1bWVudFVSSSlcXG5kZWYgc3JjRG9jRmlsZU5hbWUgPSBnZXRfZmlsZV9uYW1lKFNvdXJjZURvY3VtZW50VVJJKVxcblxcbmRlZiBTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlID0gdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50Q29udGVudFR5cGUudGV4dCgpXFxuXFxuZGVmIEN1cnJlbnREb2N1bWVudFVSSSA9IHRyYW5zYWN0aW9uSW5mby5UYXJnZXREb2N1bWVudFVSSS50ZXh0KClcXG5kZWYgY3VyRG9jRXh0ZW5zaW9uID0gZ2V0X2ZpbGVfZXh0ZW5zaW9uKEN1cnJlbnREb2N1bWVudFVSSSlcXG5kZWYgY3VyRG9jRmlsZU5hbWUgPSBnZXRfZmlsZV9uYW1lKEN1cnJlbnREb2N1bWVudFVSSSlcXG5cXG5kZWYgQ3VycmVudERvY3VtZW50Q29udGVudFR5cGUgPSB0cmFuc2FjdGlvbkluZm8uVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZS50ZXh0KClcXG5cXG5kZWYgQXR0YWNobWVudHMgPSB0cmFuc2FjdGlvbkluZm8uQXR0YWNobWVudHNcXG5kZWYgRGlzcGxheWFibGVBdHRhY2htZW50cyA9IFxcXCJcXFwiXFxuXFxuQXR0YWNobWVudHMuZWFjaCB7XFxuICAgIGRlZiBVUkkgPSBpdC5BdHRhY2htZW50LlVSSS50ZXh0KClcXG4gICAgZGVmIENvbnRlbnRUeXBlID0gaXQuQXR0YWNobWVudC5Db250ZW50VHlwZS50ZXh0KClcXG4gICAgZGVmIGF0dGFjaG1lbnRFeHRlbnNpb24gPSBnZXRfZmlsZV9leHRlbnNpb24oVVJJKVxcbiAgICBkZWYgYXR0YWNobWVudEZpbGVOYW1lID0gZ2V0X2ZpbGVfbmFtZShVUkkpXFxuICAgIGRlZiBjdXJyZW50QXR0YWNobWVudCA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJpbmxpbmUtYmxvY2tcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj48Y2VudGVyPkF0dGFjaG1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke2F0dGFjaG1lbnRFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1leHRlbnNpb249XFxcIiR7YXR0YWNobWVudEV4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICBkYXRhLWlkcz0ke0lkfVxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiRVUkl9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50LXR5cGU9XFxcIiR7Q29udGVudFR5cGV9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS12aWV3PVxcXCJ7e1ZJRVdOQU1FfX1cXFwiPlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPVxcXCJhdHRhY2htZW50RmlsZU5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9XFxcImdldC1maWxlLW5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPVxcXCJwYXRoXFxcIiBzZWxlY3Q9XFxcIlVSSVxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+XFxuICAgICAgICAgICAgICAgICAgICA8L3hzbDp2YXJpYWJsZT5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGUtbmFtZVxcXCIgdGl0bGU9XFxcIiR7YXR0YWNobWVudEZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAke2F0dGFjaG1lbnRGaWxlTmFtZX1cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgRGlzcGxheWFibGVBdHRhY2htZW50cyA9IFxcXCIke0Rpc3BsYXlhYmxlQXR0YWNobWVudHN9JHtjdXJyZW50QXR0YWNobWVudH1cXFwiXFxufVxcblxcbi8vIFdpbGwgZGlzcGxheSBpbmZvIG9uIEVycm9ycyBjYXB0dXJlZCB0aGUgXFxcIm9sZFxcXCIgd2F5XFxuZGVmIElzc3VlID0gdHJhbnNhY3Rpb25JbmZvLklzc3VlXFxuZGVmIElzc3VlTGV2ZWxFUlJPUiA9IElzc3VlLmZpbmRBbGwgeyBpdC5sZXZlbCA9PSAnRVJST1InIH1cXG5kZWYgZXJyb3JzID0gW11cXG5cXG5Jc3N1ZUxldmVsRVJST1IuZWFjaCB7XFxuICAgIGlmIChpdC5sZXZlbCA9PSAnRVJST1InKSB7XFxuICAgICAgICBlcnJvcnMgPSB0b2tlbml6ZSggaXQuVGV4dCwgJyYjeEE7JyApXFxuICAgIH1cXG59XFxuXFxuZGVmIElzc3VlRXJyb3JMaW5lID0gXFxcIlxcXCJcXG5cXG5lcnJvcnMuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcIm1pLWxpbmVcXFwiPlxcbiAgICAgICAgPHN0cm9uZz48c3BhbiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke3Rva2VuaXplKGl0LCdcXFxcXFxcXHwnKVsxXX08L3NwYW4+PC9zdHJvbmc+IDxzcGFuPiAtIDwvc3Bhbj5cXG4gICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7dG9rZW5pemUoaXQsJ1xcXFxcXFxcfCcpWzJdfTwvc3Bhbj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgSXNzdWVFcnJvckxpbmUgPSBcXFwiJHtJc3N1ZUVycm9yTGluZX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgSXNzdWVMZXZlbEVycm9yT2xkV2F5ID0gKElzc3VlTGV2ZWxFUlJPUi5zaXplKCkgIT0gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkludmFsaWQgZG9jdW1lbnQgZHVlIHRvIDxzdHJvbmc+JHtlcnJvcnMuc2l6ZSgpfSBlcnJvcihzKTwvc3Ryb25nPjwvZGl2PlxcbiAgICAgICAgXFxuICAgICAgICAke0lzc3VlRXJyb3JMaW5lfVxcblxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbi8vIFdpbGwgZGlzcGxheSBpbmZvIG9uIEVycm9ycyBjYXB0dXJlZCB0aGUgXFxcIm5ld1xcXCIgd2F5XFxuZGVmIElzc3VlcyA9IHRyYW5zYWN0aW9uSW5mby5Jc3N1ZXNcXG5kZWYgSXNzdWVzTGV2ZWxFUlJPUiA9IElzc3Vlcy5Jc3N1ZS5maW5kQWxsIHsgaXQubGV2ZWwgPT0gJ0VSUk9SJyB9XFxuXFxuZGVmIElzc3Vlc0Vycm9yTGluZSA9IFxcXCJcXFwiXFxuXFxuSXNzdWVzTGV2ZWxFUlJPUi5lYWNoIHtcXG4gICAgZGVmIGxpbmUgPSBcXFwiXFxcIlxcXCJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1pLWxpbmVcXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPuKAoiAke2l0Lk1lc3NhZ2V9PC9zcGFuPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgaXNzdWVzTGV2ZWxFcnJvck5ld1dheSA9IFxcXCIke2lzc3Vlc0xldmVsRXJyb3JOZXdXYXl9JHtsaW5lfVxcXCJcXG59XFxuXFxuZGVmIGlzc3Vlc0xldmVsRXJyb3JOZXdXYXkgPSAoSXNzdWVzTGV2ZWxFUlJPUi5zaXplKCkgIT0gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkNvbnRlbnQgY2hlY2sgaGFzIGlkZW50aWZpZWQgPHN0cm9uZz4ke0lzc3Vlc0xldmVsRVJST1Iuc2l6ZSgpfSBlcnJvcihzKTwvc3Ryb25nPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAke2lzc3Vlc0xldmVsRXJyb3JOZXdXYXl9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbmRlZiBBdWRpdFRyYWlsID0gdHJhbnNhY3Rpb25JbmZvLkF1ZGl0VHJhaWxcXG5kZWYgQXVkaW9UcmFpbFJlY29yZCA9IEF1ZGl0VHJhaWwuUmVjb3JkID86IFtdXFxuZGVmIEF1ZGlvVHJhaWxSZWNvcmREaXNwbGF5ID0gXFxcIlxcXCJcXG5cXG5BdWRpb1RyYWlsUmVjb3JkLmVhY2gge1xcbiAgICBkZWYgYXVkaXRUeXBlID0gKGl0LlR5cGUgPT0gXFxcIkZ1bmN0aW9uYWxTdGF0dXNcXFwiKSA/IFxcXCJGdW5jdGlvbmFsIHN0YXR1c1xcXCIgOiAoaXQuVHlwZSA9PSBcXFwiVGVjaG5pY2FsU3RhdHVzXFxcIikgPyBcXFwiVGVjaG5pY2FsIHN0YXR1c1xcXCIgOiAnJ1xcbiAgICBkZWYgbGluZSA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgcm93LWl0ZW0tc2VwYXJhdGVkXFxcIj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0xXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlR5cGU8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPlxcbiAgICAgICAgICAgICAgICAke2F1ZGl0VHlwZX1cXG4gICAgICAgICAgICAvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuQ29kZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTNcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5EYXRlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctNlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5NZXNzYWdlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0Lk1lc3NhZ2V9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgQXVkaW9UcmFpbFJlY29yZERpc3BsYXkgPSBcXFwiJHtBdWRpb1RyYWlsUmVjb3JkRGlzcGxheX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgQXVkaW9UcmFpbERpc3BsYXkgPSAoQXVkaW9UcmFpbFJlY29yZC5zaXplKCkgPiAwKSA/IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgdG9wLW1hcmdpblxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiIHN0eWxlPVxcXCJtYXJnaW4tYm90dG9tOiA1cHg7XFxcIj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cXFwiYnRuIGJ0bi14cyBidG4tc3VjY2Vzc1xcXCIgZGF0YS10b2dnbGU9XFxcImNvbGxhcHNlXFxcIiBkYXRhLXRhcmdldD1cXFwiI2F1ZGl0VHJhaWxcXFwiPlN0YXR1cyBoaXN0b3J5PC9idXR0b24+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBpZD1cXFwiYXVkaXRUcmFpbFxcXCIgY2xhc3M9XFxcImNvbGxhcHNlIHNpZGUtcGFkZGVkXFxcIj48ZGl2PjwvZGl2PlxcbiAgICAgICAgICAgICAgICAke0F1ZGlvVHJhaWxSZWNvcmREaXNwbGF5fVxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgIDwvZGl2PlxcblxcXCJcXFwiXFxcIiA6IFxcXCJcXFwiXFxuXFxuZGVmIFdvcmtmbG93ID0gdHJhbnNhY3Rpb25JbmZvLldvcmtmbG93XFxuZGVmIFdvcmtmbG93SW5zdGFuY2UgPSB0cmFuc2FjdGlvbkluZm8uV29ya2Zsb3cuSW5zdGFuY2VcXG5kZWYgV29ya2Zsb3dJbnN0YW5jZURpc3BsYXkgPSBcXFwiXFxcIlxcblxcblxcbldvcmtmbG93SW5zdGFuY2UuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvdyByb3ctaXRlbS1zZXBhcmF0ZWRcXFwiPlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+V29ya2Zsb3cgVHlwZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGVwLnN0ZXBJZH08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhcnQgRGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGFydERhdGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkVuZCBEYXRlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LmVuZERhdGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc2lnbmVkIHRvPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LnN0ZXAuYXNzaWduZWRUb05hbWV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkhhbmRsZWQgYnk8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuc3RlcC5hY3Rpb25lZEJ5RW1haWx9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlN0YXR1czwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGF0dXN9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgV29ya2Zsb3dJbnN0YW5jZURpc3BsYXkgPSBcXFwiJHtXb3JrZmxvd0luc3RhbmNlRGlzcGxheX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgV29ya2Zsb3dEaXNwbGF5ID0gKFdvcmtmbG93SW5zdGFuY2Uuc2l6ZSgpID4gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwicm93IHRvcC1tYXJnaW5cXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XFxcImJ0biBidG4teHMgYnRuLXN1Y2Nlc3NcXFwiIGRhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCIgZGF0YS10YXJnZXQ9XFxcIiNoaXN0b3J5VHJhaWxcXFwiPldvcmtmbG93IGhpc3Rvcnk8L2J1dHRvbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGlkPVxcXCJoaXN0b3J5VHJhaWxcXFwiIGNsYXNzPVxcXCJjb2xsYXBzZSBzaWRlLXBhZGRlZFxcXCI+PGRpdj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgJHtXb3JrZmxvd0luc3RhbmNlRGlzcGxheX1cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbi8vIEtleVZhbHVlXFxuZGVmIFNlbGxlck5hbWUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIlNlbGxlciBOYW1lXFxcIn0uVmFsdWUudGV4dCgpXFxuZGVmIEJ1eWVyTmFtZSA9IHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5maW5ke2l0LktleSA9PSBcXFwiQnV5ZXIgTmFtZVxcXCJ9LlZhbHVlLnRleHQoKVxcbmRlZiBJc3N1ZURhdGUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIklzc3VlIERhdGVcXFwifS5WYWx1ZS50ZXh0KClcXG5kZWYgQ3VycmVuY3kgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkN1cnJlbmN5XFxcIn0uVmFsdWUudGV4dCgpXFxuXFxuZGVmIFRvdGFsQW1vdW50ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09IFxcXCJUb3RhbCBBbW91bnRcXFwifS5WYWx1ZS50ZXh0KClcXG5cXG5wcmludCBcXFwiVE9UQUwgQU1PVU5UXFxcIiArIFRvdGFsQW1vdW50XFxuZGVmIEZvcm1hdHRlZFRvdGFsQW1vdXQgPSBUb3RhbEFtb3VudCA/IGRmLmZvcm1hdChEb3VibGUudmFsdWVPZihUb3RhbEFtb3VudCkpIDogXFxcIlxcXCJcXG5cXG5sb2cuZGVidWcgJ1A2X0RFTU8gRm9ybWF0dGVkVG90YWxBbW91dCA9ICcrRm9ybWF0dGVkVG90YWxBbW91dFxcblxcblxcbmRlZiBMaW5lSXRlbXMgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkxpbmUgaXRlbXNcXFwifS5WYWx1ZS50ZXh0KClcXG5cXG5kZWYgVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiA9IChUZWNobmljYWxTdGF0dXNDb2RlICE9ICcnKVxcbiAgICA/IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlRlY2huaWNhbCBzdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7VGVjaG5pY2FsU3RhdHVzQ29kZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZSAtIGFzIG9mICR7VGVjaG5pY2FsU3RhdHVzRGF0ZX08L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7VGVjaG5pY2FsU3RhdHVzTWVzc2FnZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgXFxcIlxcXCJcXFwiXFxuICAgIDogXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhdHVzPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj48L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG5sb2cuZGVidWcgJ1A2REVNTyBWaWV3X0RlbW8gVHJhbnNhY3Rpb24gc2NyaXB0IExJTkUgMzA2JyAgXFxuICAgIFxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzSW5mb3JtYXRpb24gPSAoRnVuY3Rpb25hbFN0YXR1c0NvZGUgIT0gJycpXFxuICAgID8gXFxcIlxcXCJcXFwiXFxuICAgIDxoci8+XFx0XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RnVuY3Rpb25hbCBzdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7RnVuY3Rpb25hbFN0YXR1c0NvZGV9PC9kaXY+XFxuXFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtOFxcXCI+XFxuICAgICAgICBcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZSAtIGFzIG9mICR7RnVuY3Rpb25hbFN0YXR1c0RhdGV9PC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0Z1bmN0aW9uYWxTdGF0dXNNZXNzYWdlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgIDwvZGl2PiBcXG4gICAgXFxcIlxcXCJcXFwiXFxuICAgIDogJydcXG5cXG4vLyBkZWYgbXlfaHRtbCA9IFxcXCJcXFwiXFxcIjxkaXY+VEVTVDwvZGl2PlxcXCJcXFwiXFxcIlxcblxcbmxvZy5kZWJ1ZyAnUDZERU1PIFZpZXdfRGVtbyBUcmFuc2FjdGlvbiBzY3JpcHQgTElORSAzMzEnXFxuXFxuZGVmIG15X2h0bWwgPSBcXFwiXFxcIlxcXCJcXG48ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmlldy13cmFwcGVyXFxcIj5cXG5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtc20tNiBtZXNzYWdlLWluZm8tc2VjdGlvblxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWhlYWRlclxcXCI+VHJhbnNhY3Rpb246IDxzdHJvbmc+PHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+JHtCdXNpbmVzc0RvY05hbWV9PC9zcGFuPiAke0J1c2luZXNzRG9jTnVtYmVyfTwvc3Ryb25nPjwvZGl2PlxcblxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlNlbGxlciBuYW1lPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7U2VsbGVyTmFtZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+QnV5ZXIgbmFtZTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0J1eWVyTmFtZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGVsaXZlcmVkIHZpYTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0VuZHBvaW50fTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgeHMtc3RhY2tlZC1zcGFjZXIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkFkZGl0aW9uYWwgaW5mb3JtYXRpb248L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcblxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5EYXRlPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0lzc3VlRGF0ZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5Ub3RhbCBBbW91bnQ8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+JHtDdXJyZW5jeX08L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Rm9ybWF0dGVkVG90YWxBbW91dH1cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkxpbmUgaXRlbXM8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7TGluZUl0ZW1zfTwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcblxcbiAgICAgICAgXFxuICAgIDwvZGl2PlxcblxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgdG9wLW1hcmdpblxcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgeHMtc3RhY2tlZC1zcGFjZXIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPlRyYW5zYWN0aW9uIHN0YXR1cyBpbmZvcm1hdGlvbjwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgICR7VHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbn0gXFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgJHtGdW5jdGlvbmFsU3RhdHVzSW5mb3JtYXRpb259XFxuICAgICAgICAgICAgXFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIFxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1zbS02IG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIj5Eb2N1bWVudHMgYW5kIEF0dGFjaG1lbnQocyk8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2PlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbmxpbmUtYmxvY2tcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj48Y2VudGVyPlNvdXJjZSBkb2N1bWVudDwvY2VudGVyPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tZmlsZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgb25jbGljaz1cXFwicGxhdGZvcm02LnRyYW5zYWN0aW9uRG93bmxvYWQodGhpcylcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cXFwiZnQtaWNvbiBmdC1pY29uLSR7c3JjRG9jRXh0ZW5zaW9ufVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZXh0ZW5zaW9uPVxcXCIke3NyY0RvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWlkcz1cXFwiJHtJZH1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXVyaT1cXFwiJHtTb3VyY2VEb2N1bWVudFVSSX1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQtdHlwZT1cXFwiJHtTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke3NyY0RvY0ZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3NyY0RvY0ZpbGVOYW1lfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5saW5lLWJsb2NrXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+PGNlbnRlcj5UYXJnZXQgZG9jdW1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke2N1ckRvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWV4dGVuc2lvbj1cXFwiJHtjdXJEb2NFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1pZHM9XFxcIiR7SWR9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiR7Q3VycmVudERvY3VtZW50VVJJfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtY29udGVudC10eXBlPVxcXCIke0N1cnJlbnREb2N1bWVudENvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT1cXFwiY3VyRG9jRmlsZU5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9XFxcImdldC1maWxlLW5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPVxcXCJwYXRoXFxcIiBzZWxlY3Q9XFxcIkN1cnJlbnREb2N1bWVudFVSSVxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6dmFyaWFibGU+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke2N1ckRvY0ZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2N1ckRvY0ZpbGVOYW1lfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgXFxuXFxuICAgICAgICAgICAgICAgICR7RGlzcGxheWFibGVBdHRhY2htZW50c31cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcblxcbiAgICAgICAgPCEtLSBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJvbGRcXFwiIHdheSAtLT5cXG4gICAgICAgIFxcbiAgICAgICAgJHtJc3N1ZUxldmVsRXJyb3JPbGRXYXl9IFxcblxcbiAgICAgICAgPCEtLSBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJuZXdcXFwiIHdheSAtLT5cXG4gICAgICAgIFxcbiAgICAgICAgJHtpc3N1ZXNMZXZlbEVycm9yTmV3V2F5fVxcblxcbiAgICBcXG4gICAgPC9kaXY+XFxuXFxuICAgICR7QXVkaW9UcmFpbERpc3BsYXl9ICAgICAgICAgICAgXFxuICAgIFxcbiAgICAke1dvcmtmbG93RGlzcGxheX0gICAgICAgICAgICAgXFxuICAgIFxcbiAgICBcXG48L2Rpdj5cXG5cXFwiXFxcIlxcXCJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ3BvcnRhbEh0bWwnLCBteV9odG1sLCAndGV4dC9odG1sJ1xcblxcbmxvZy5kZWJ1ZyAnUDZERU1PIFZpZXdfRGVtbyBUcmFuc2FjdGlvbiBzY3JpcHQgZXhlY3V0aW9uIGlzIE9WRVInXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM5MDIyM30seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlVuaW5zdGFsbEFwcGxpY2F0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVW5pbnN0YWxsQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVsZXRlIGFsbCBTZXJ2aWNlIEl0ZW1zLCBUcmFuc2FjdGlvbnMgYW5kIFdvcmtmbG93IFRhc2tzIHJlbGF0ZWQgdG8gcDZfZGVtb1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDA5NyxcInJldmlzaW9uSWRcIjpcIjkyNTQxZmNkYzhiNzYxMzQ4NTVlOTRjMDkxY2Q3NTg0XCIsXCJtYWluU2NyaXB0XCI6XCIvLyBUaGlzIHNjcmlwdCBpcyBleGVjdXRlZCB0byBjbGVhbiB1cCBhbGwgdGhlIGFwcGxpY2F0aW9ucyByZXNvdXJjZXNcXG5cXG4vLyBEZWxldGUgYWxsIHRyYW5zYWN0aW9ucyBhbmQgd29ya2Zsb3cgdGFza3NcXG5wNi5zcHJvYy5leGVjdXRlKCdwNl9kZW1vLkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9ucycpXFxubG9nLmRlYnVnICdEZW1vIGFwcCB0cmFuc2FjdGlvbnMgYW5kIHdvcmtmbG93IHRhc2tzIGRlbGV0ZWQnXFxuXFxuLy8gRGVzdHJveSByb3V0ZXNcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gV2ViM2ogLSBCbG9ja2NoYWluRXZlbnRIYW5kbGVyJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBSdWxlcyBEaXNwYXRjaGVyJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUXVvdGVzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnMnKVxcbnA2LmNhbWVsLmRlc3Ryb3lSb3V0ZSgncDZfZGVtbyBTY2hlZHVsZWQgY3JlYXRpb24gb2YgUkZRcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSRlFzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFF1b3RlcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRBY2NlcHRlZFBPcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSZWplY3RlZFBPcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzJylcXG5cXG4vLyBVbmRlcGxveSBidW5kbGVkIHJlc291cmNlc1xcbnA2LmJ1bmRsZWQudW5kZXBsb3koJ3A2X2RlbW8uUE9SZXZpZXcnKVxcbnA2LmJ1bmRsZWQudW5kZXBsb3koJ3A2X2RlbW8uVGFibGVJdGVtc0RhdGEnKVxcbmxvZy5kZWJ1ZyAnQnVuZGxlZCByZXNvdXJjZXMgZGVsZXRlZCBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbSdcXG5cXG4vLyBOb3RpZnkgUDYgdGhhdCB1bi1pbnN0YWxsYXRpb24gd2FzIHN1Y2Nlc3NmdWxcXG5wNi5waXBlbGluZS5wdXQoXFxcImluc3RhbGxTY3JpcHRSZXN1bHRcXFwiLCBcXFwidHJ1ZVxcXCIpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM5MDA5N30seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlNlbmRRdW90ZVRvQmxvY2tjaGFpbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNlbmRRdW90ZVRvQmxvY2tjaGFpblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJXcml0ZSBRdW90ZSBpbiBhbiBFdGhlcmV1bSBzbWFydCBjb250cmFjdFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDExNSxcInJldmlzaW9uSWRcIjpcImRmMGY0N2IzZTM5OGMyZmI1ZjY3ODUzOTRmN2Y5MjQ4XCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5pbXBvcnQgamF2YS51dGlsLlVVSURcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIHF1b3RlSWRTdHJpbmcgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG4vLyBGZXRjaCB0aGUgcXVvdGUgdHJhbnNhY3Rpb24gaW5mb1xcbmRlZiBxdW90ZVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgcXVvdGVJZFN0cmluZylcXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmdldChxdW90ZVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCh0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpKVxcblN0cmluZyBxdW90ZUNvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZyhzcmNGaWxlKVxcblxcbi8vIFVwZGF0ZSB0cmFuc2FjdGlvbiBpbmZvIHN0YXR1c1xcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnU2VudCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlUGspXFxuXFxuLy8gV3JpdGUgcXVvdGUgaW4gdGhlIGJsb2NrY2hhaW5cXG5kZWYgcXVvdGVJZCA9IFVVSUQuZnJvbVN0cmluZyhxdW90ZUlkU3RyaW5nKVxcblxcbmRlZiBxdW90ZVhNTCA9IHNsdXJwZXIucGFyc2VUZXh0KHF1b3RlQ29udGVudClcXG5kZWYgcmZxSWQgPSBVVUlELmZyb21TdHJpbmcocXVvdGVYTUwuUmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlLlVVSUQudGV4dCgpKVxcblxcbmhlbHBlci5zdWJtaXRRdW90ZShxdW90ZUlkLCByZnFJZCwgbm93LCBxdW90ZUNvbnRlbnQpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM5MDExNX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IkNyZWF0ZVJGUVRyYW5zYWN0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ3JlYXRlUkZRVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQ3JlYXRlIGEgUmVxdWVzdEZvclF1b3RhdGlvbiBVQkwgRG9jdW1lbnQgYW5kIHdyaXRlIGl0IGluIGFuIEV0aGVyZXVtIHNtYXJ0IGNvbnRyYWN0XCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1MzkwMTM3LFwicmV2aXNpb25JZFwiOlwiMzUyMzAwMGFmN2ExNjc5NzQ2YjhjNDA2ZDAwZWM1NGRcIixcIm1haW5TY3JpcHRcIjpcIi8qKlxcbiAqIFlvdSBjYW4gY2FsbCBhbm90aGVyIHNjcmlwdCBieSB1c2luZyAnSW5jbHVkZScgdGFnc1xcbiAqIFxcbiAqIEBpbmNsdWRlIFJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcXG4gKi9cXG5cXG5pbXBvcnQgamF2YS50aW1lLmZvcm1hdC5EYXRlVGltZUZvcm1hdHRlclxcbmltcG9ydCBqYXZhLnV0aWwuVVVJRFxcbmltcG9ydCBqYXZhLnV0aWwuUmFuZG9tXFxuXFxuXFxuLy8gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGJ1eWVyIGluIHRoZSBzeXN0ZW0gdG8ga2VlcCB0aGUgRGVtbyBBcHAgc2ltcGxlXFxuZGVmIGJ1eWVySWQgPSAnMSdcXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG4vLyBDYWxjdWxhdGUgaXNzdWUgZGF0ZSBhbmQgdGltZSBmb3IgZ2VuZXJhdGVkIFJGUSB0cmFuc2FjdGlvblxcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgaXNzdWVEYXRlID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJ5eXl5LU1NLWRkXFxcIikuZm9ybWF0KG5vdylcXG5kZWYgaXNzdWVUaW1lID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxuUmFuZG9tIHJhbmQgPSBuZXcgUmFuZG9tKClcXG5cXG4vLyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBjYXRlZ29yaWVzIGZyb20gSXRlbXMgdGFibGVcXG5kZWYgaXRlbVJlY29yZHMgPSBwNi50YWJsZS5sb29rdXAoJ3A2X2RlbW8uSXRlbXMnLCBbOl0pXFxuXFxuU2V0PFN0cmluZz4gY2F0ZWdvcmllcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKVxcbk1hcDxTdHJpbmcsU3RyaW5nPiBjYXRfdG9fdW9tID0gbmV3IEhhc2hNYXA8U3RyaW5nLFN0cmluZz4oKVxcblxcbmZvciAobXlSZWNvcmQgaW4gaXRlbVJlY29yZHMpIHtcXG4gICAgZGVmIGNhdGVnb3J5ID0gbXlSZWNvcmQuQ2F0ZWdvcnlcXG4gICAgZGVmIHVvbSA9IG15UmVjb3JkLlVPTVxcblxcbiAgICBpZiAoIWNhdGVnb3JpZXMuY29udGFpbnMoY2F0ZWdvcnkpKSB7XFxuICAgICAgICBjYXRlZ29yaWVzLmFkZChjYXRlZ29yeSlcXG4gICAgICAgIGNhdF90b191b20ucHV0KGNhdGVnb3J5LCB1b20pXFxuICAgIH1cXG59XFxuXFxuLy8gR2VuZXJhdGUgcmFuZG9tIFJGUSBsaW5lcyBmcm9tIGF2YWlsYWJsZSBpdGVtc1xcbmludCBuYkxpbmVNYXggPSBjYXRlZ29yaWVzLnNpemUoKVxcbmludCBxdWFudGl0eU1heCA9IDEwXFxuaW50IG5iTGluZXMgPSByYW5kLm5leHRJbnQobmJMaW5lTWF4KSArIDFcXG5cXG5kZWYgcmZxTGluZXM9ICcnXFxuZm9yIChpbnQgaSA9MDsgaTwgbmJMaW5lczsgaSsrKSB7XFxuICAgIFxcbiAgICBpbnQgY2F0ZWdvcnlJbmRleCA9IHJhbmQubmV4dEludChjYXRlZ29yaWVzLnNpemUoKSlcXG4gICAgZGVmIGNhdGVnb3J5QXJyYXkgPSBjYXRlZ29yaWVzLnRvQXJyYXkoKVxcbiAgICBcXG4gICAgZGVmIGNhdGVnb3J5ID0gY2F0ZWdvcnlBcnJheVtjYXRlZ29yeUluZGV4XVxcbiAgICBjYXRlZ29yaWVzLnJlbW92ZShjYXRlZ29yeSlcXG5cXG4gICAgZGVmIHF1YW50aXR5ID0gcmFuZC5uZXh0SW50KHF1YW50aXR5TWF4ICsgMSkgKyAxXFxuICAgIGRlZiB1b20gPSBjYXRfdG9fdW9tLmdldChjYXRlZ29yeSlcXG4gICAgICAgIFxcbiAgICByZnFMaW5lcyArPSBcXFwiXFxcIlxcXCI8Y2FjOlJlcXVlc3RGb3JRdW90YXRpb25MaW5lPlxcbiAgICAgIDxjYmM6SUQ+JHtpKzF9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpOb3RlPnNhbXBsZTwvY2JjOk5vdGU+XFxuICAgICAgPGNhYzpMaW5lSXRlbT5cXG4gICAgICAgICA8Y2JjOklEPiR7aSsxfTwvY2JjOklEPlxcbiAgICAgICAgIDxjYmM6UXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7dW9tfVxcXCI+JHtxdWFudGl0eX08L2NiYzpRdWFudGl0eT5cXG4gICAgICAgICA8Y2FjOkl0ZW0+XFxuICAgICAgICAgICAgPGNiYzpEZXNjcmlwdGlvbj48L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8Y2JjOk5hbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoY2F0ZWdvcnkpfTwvY2JjOk5hbWU+XFxuICAgICAgICAgICAgPGNhYzpCdXllcnNJdGVtSWRlbnRpZmljYXRpb24+XFxuICAgICAgICAgICAgICAgPGNiYzpJRD4ke2J1eWVySWR9PC9jYmM6SUQ+XFxuICAgICAgICAgICAgPC9jYWM6QnV5ZXJzSXRlbUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgIDwvY2FjOkl0ZW0+XFxuICAgICAgPC9jYWM6TGluZUl0ZW0+XFxuICAgPC9jYWM6UmVxdWVzdEZvclF1b3RhdGlvbkxpbmU+XFxuICAgIFxcXCJcXFwiXFxcIlxcbn1cXG5cXG4vLyBHZW5lcmF0ZSB0aGUgdHJhbnNhY3Rpb24gSUQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIFVCTFxcbmRlZiB0cmFuc2FjdGlvbklkID0gVVVJRC5yYW5kb21VVUlEKClcXG5cXG5kZWYgcmVxdWVzdEZvclF1b3RhdGlvblVCTCA9IFxcXCJcXFwiXFxcIjxSZXF1ZXN0Rm9yUXVvdGF0aW9uIHhtbG5zPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpSZXF1ZXN0Rm9yUXVvdGF0aW9uLTJcXFwiIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIiB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gICA8Y2JjOlVCTFZlcnNpb25JRD4yLjA8L2NiYzpVQkxWZXJzaW9uSUQ+XFxuICAgPGNiYzpJRD4ke3RyYW5zYWN0aW9uSWR9PC9jYmM6SUQ+XFxuICAgPGNiYzpJc3N1ZURhdGU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVEYXRlKX08L2NiYzpJc3N1ZURhdGU+XFxuICAgPGNiYzpJc3N1ZVRpbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICAgPGNiYzpOb3RlPkF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFJGUTwvY2JjOk5vdGU+XFxuICAgPGNhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICAgICA8Y2FjOlBhcnR5PlxcbiAgICAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6TmFtZT5CdXllciBDb3JwLjwvY2JjOk5hbWU+XFxuICAgICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QXZvbiBXYXk8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOYW1lPlRoZXJlYWJvdXRzPC9jYmM6QnVpbGRpbmdOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+NTZBPC9jYmM6QnVpbGRpbmdOdW1iZXI+XFxuICAgICAgICAgICAgPGNiYzpDaXR5TmFtZT5CcmlkZ3RvdzwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6UG9zdGFsWm9uZT5aWjk5IDFaWjwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PkF2b248L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICAgIDxjYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgICAgPGNiYzpMaW5lPjNyZCBGbG9vciwgUm9vbSA1PC9jYmM6TGluZT5cXG4gICAgICAgICAgICA8L2NhYzpBZGRyZXNzTGluZT5cXG4gICAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+R0I8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5PlxcbiAgIDwvY2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcbiAgIDxjYWM6U2VsbGVyU3VwcGxpZXJQYXJ0eT5cXG4gICAgICA8Y2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+Q08wMDE8L2NiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPlxcbiAgICAgIDxjYWM6UGFydHk+XFxuICAgICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICAgICAgPGNiYzpOYW1lPlNlbGxlciBJbmMuPC9jYmM6TmFtZT5cXG4gICAgICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgICAgIDxjYmM6U3RyZWV0TmFtZT5CdXN5IFN0cmVldDwvY2JjOlN0cmVldE5hbWU+XFxuICAgICAgICAgICAgPGNiYzpCdWlsZGluZ05hbWU+VGhlcmVhYm91dHM8L2NiYzpCdWlsZGluZ05hbWU+XFxuICAgICAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj41NkE8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgICAgICA8Y2JjOkNpdHlOYW1lPkZhcnRoaW5nPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICAgICAgPGNiYzpQb3N0YWxab25lPkFBOTkgMUJCPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+SGVyZW1vdXRoc2hpcmU8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICAgIDxjYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgICAgPGNiYzpMaW5lPlRoZSBSb3VuZGFib3V0PC9jYmM6TGluZT5cXG4gICAgICAgICAgICA8L2NhYzpBZGRyZXNzTGluZT5cXG4gICAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+R0I8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5PlxcbiAgIDwvY2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgJHtyZnFMaW5lc31cXG48L1JlcXVlc3RGb3JRdW90YXRpb24+XFxuXFxcIlxcXCJcXFwiXFxuXFxuLy8gV3JpdGUgdGhlIHRyYW5zYWN0aW9uIGluIHRoZSBibG9ja2NoYWluXFxuaGVscGVyLnN1Ym1pdFJGUSh0cmFuc2FjdGlvbklkLCBub3csIHJlcXVlc3RGb3JRdW90YXRpb25VQkwpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM5MDEzN30seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIHRoZSBmb3JtIHN1cHBvcnRpbmcgdGhlIGNyZWF0aW9uIG9mIGEgcXVvdGVcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzODk4OTUsXCJyZXZpc2lvbklkXCI6XCIyNmU2NmFhZDU4ZjIzNGMwODU4MjMwMTNlOWJjMzFhZlwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcbmRlZiB4bWwgXFx0XFx0PSBwNi5waXBlbGluZS5nZXRYbWwgJ3htbCdcXG5sb2cuZGVidWcgJ1hNTCA9PT09PT0+ICcrIHhtbFxcblxcbnA2LnBpcGVsaW5lLnZhcmlhYmxlcygpLmVhY2goKSB7IGxvZy5kZWJ1ZyBcXFwiUElQRUxJTkUgVkFSICR7aXR9XFxcIiB9XFxuXFxuZGVmIG1wayBcXHRcXHQ9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoeG1sLml0ZW1EYXRhVHlwZS50ZXh0KCksIHhtbC5pdGVtSWRzLnRleHQoKS5zcGxpdCgnXFxcXFxcXFwuJykpXFxuZGVmIG1lc3NhZ2UgXFx0PSBwNi50cmFuc2FjdGlvbi5nZXQobXBrKVxcblxcbmxvZy5kZWJ1ZyAnTUVTU0FHRSA9PT09PT0+ICcrIG1lc3NhZ2VcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcihmYWxzZSwgdHJ1ZSlcXG5kZWYgdHJhbnNhY3Rpb24gPSBzbHVycGVyLnBhcnNlVGV4dChtZXNzYWdlKVxcblxcbmRlZiBteVVSSSA9IHRyYW5zYWN0aW9uLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKVxcbiAgICAgICAgXFxuZGVmICBzcmNGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKG15VVJJKVxcbiAgICAgICAgXFxuU3RyaW5nIHJmcUNvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZyhzcmNGaWxlKVxcblxcbmRlZiByZnEgPSBzbHVycGVyLnBhcnNlVGV4dChyZnFDb250ZW50KVxcblxcbmRlZiByZnFMaW5lcyA9IFxcXCJcXFwiXFxucmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLmVhY2h7IHJmcUxpbmUgLT4gXFxuXFxuICAgIGRlZiBpdGVtQ2F0ZWdvcnkgPSByZnFMaW5lLkxpbmVJdGVtLkl0ZW0uTmFtZS50ZXh0KClcXG4gICAgXFxuICAgIGRlZiBpdGVtUmVjb3JkcyA9IHA2LnRhYmxlLmxvb2t1cCgncDZfZGVtby5JdGVtcycsIFsnQ2F0ZWdvcnknOml0ZW1DYXRlZ29yeV0pXFxuXFxuICAgIGRlZiBpdGVtcz0gJydcXG4gICAgZm9yKG15UmVjb3JkIGluIGl0ZW1SZWNvcmRzKSB7XFxuICAgICAgICBkZWYgZGVzY3JpcHRpb24gPSBteVJlY29yZC5EZXNjcmlwdGlvblxcbiAgICAgICAgZGVmIGlkID0gbXlSZWNvcmQuSWRcXG4gICAgICAgIGRlZiB1b20gPSBteVJlY29yZC5VT01cXG4gICAgICAgIGRlZiB1bml0UHJpY2UgPSBteVJlY29yZC5Vbml0UHJpY2VcXG4gICAgICAgIGRlZiBjdXJyZW5jeSA9IG15UmVjb3JkLkN1cnJlbmN5XFxuICAgIFxcbiAgICAgICAgaWYgKCEnJy5lcXVhbHMoaXRlbXMpKSB7XFxuICAgICAgICAgICAgaXRlbXMgKz0gJyxcXFxcclxcXFxuJ1xcbiAgICAgICAgfSAgICAgICAgXFxuICAgICAgICBpdGVtcyArPSAneyBcXFwiaWRcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGRlc2NyaXB0aW9uKSsnLCBcXFwicHJpY2VcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKHVuaXRQcmljZSkrJywgXFxcInVuaXRcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGN1cnJlbmN5KSsnLCBcXFwiY3VycmVuY3lcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGN1cnJlbmN5KSsnLCBcXFwidW9tXFxcIjogJytKc29uT3V0cHV0LnRvSnNvbih1b20pKycgfSdcXG4gICAgfSAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgXFxuICAgIGxvZy5kZWJ1ZyAnSVRFTVMgPT4gJytpdGVtcyAgXFxuXFxuXFxuICAgIGRlZiBvbmVMaW5lID0gXFxcIlxcXCJcXFwiIHtcXG4gICAgICAgICAgICAgXFxcImlkXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnFMaW5lLklELnRleHQoKSl9LFxcbiAgICAgICAgICAgICBcXFwibm90ZVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX0sXFxuICAgICAgICAgICAgIFxcXCJxdWFudGl0eVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5MaW5lSXRlbS5RdWFudGl0eS50ZXh0KCkpfSxcXG4gICAgICAgICAgICAgXFxcIml0ZW1zXFxcIjogW1xcbiAgICAgICAgICAgICAgICAgJHtpdGVtc31cXG4gICAgICAgICAgICBdXFxuICAgICAgICB9XFxcIlxcXCJcXFwiXFxuICAgICAgICBcXG5cXG4gICAgaWYgKCFcXFwiXFxcIi5lcXVhbHMocmZxTGluZXMpKSB7XFxuICAgICAgICByZnFMaW5lcyArPSBcXFwiLFxcXFxyXFxcXG5cXFwiXFxuICAgIH1cXG4gICAgIHJmcUxpbmVzICs9IG9uZUxpbmVcXG59XFxuXFxubG9nLmRlYnVnICdSRlEgTElORVMgPT4gJytyZnFMaW5lc1xcblxcbmRlZiBtb2RlbCA9IFxcXCJcXFwiXFxcIntcXG4gICAgXFxcInJmcVxcXCI6IHsgXFxuICAgICAgICBcXFwiaWRcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5JRC50ZXh0KCkpfSxcXG4gICAgICAgIFxcXCJpc3N1ZURhdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5Jc3N1ZURhdGUudGV4dCgpKX0sXFxuICAgICAgICBcXFwiaXNzdWVUaW1lXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnEuSXNzdWVUaW1lLnRleHQoKSl9LFxcbiAgICAgICAgXFxcIm5vdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5Ob3RlLnRleHQoKSl9XFxuICAgIH0sXFxuICAgIFxcXCJsaW5lc1xcXCI6IFtcXG4gICAgICAgICR7cmZxTGluZXN9XFxuICAgIF1cXG59XFxcIlxcXCJcXFwiXFxuXFxubG9nLmRlYnVnICdNT0RFTCA9PiAnK21vZGVsXFxuXFxuZGVmIGZvcm0gPSBwNi5yZXNvdXJjZS5nZXQoICdXRl9SRlFfRm9ybScgKVxcbmFzc2VydCBmb3JtICE9IG51bGwgOiBcXFwiVW5hYmxlIHRvIGZpbmQgdGhlIGNvbXBpbGVkIHJlc291cmNlIFdGX1JGUV9Gb3JtXFxcIlxcblxcbnA2LnBpcGVsaW5lLnB1dCAnbW9kZWwnLCBtb2RlbFxcbnA2LnBpcGVsaW5lLnB1dCAnZm9ybScsIGZvcm1cXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W3tcIm5hbWVcIjpcIldGX1JGUV9Gb3JtXCIsXCJ0eXBlXCI6XCJUWVBFU0NSSVBUXCIsXCJjb250ZW50XCI6XCIvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXFxuLyoqKioqKi8gXFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxcbi8qKioqKiovIFxcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxcbi8qKioqKiovIFxcdFxcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XFxuLyoqKioqKi8gXFx0XFx0XFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdFxcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXFxuLyoqKioqKi8gXFx0XFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xcbi8qKioqKiovIFxcdFxcdFxcdGk6IG1vZHVsZUlkLFxcbi8qKioqKiovIFxcdFxcdFxcdGw6IGZhbHNlLFxcbi8qKioqKiovIFxcdFxcdFxcdGV4cG9ydHM6IHt9XFxuLyoqKioqKi8gXFx0XFx0fTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdFxcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0XFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxcbi8qKioqKiovIFxcdFxcdG1vZHVsZS5sID0gdHJ1ZTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xcbi8qKioqKiovIFxcdH1cXG4vKioqKioqL1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XFxuLyoqKioqKi8gXFx0XFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xcbi8qKioqKiovIFxcdFxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XFxuLyoqKioqKi8gXFx0XFx0XFx0XFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcXG4vKioqKioqLyBcXHRcXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcbi8qKioqKiovIFxcdFxcdFxcdFxcdGdldDogZ2V0dGVyXFxuLyoqKioqKi8gXFx0XFx0XFx0fSk7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdH07XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xcbi8qKioqKiovIFxcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xcbi8qKioqKiovIFxcdFxcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xcbi8qKioqKiovIFxcdFxcdFxcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XFxuLyoqKioqKi8gXFx0XFx0XFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcXG4vKioqKioqLyBcXHRcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIGdldHRlcjtcXG4vKioqKioqLyBcXHR9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcXFwiXFxcIjtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xcbi8qKioqKiovIFxcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDkwKTtcXG4vKioqKioqLyB9KVxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKioqKi8gKFtcXG4vKiAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbm1vZHVsZS5leHBvcnRzID0gUmVhY3Q7XFxuXFxuLyoqKi8gfSksXFxuLyogMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XFxuXFxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXFxuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXFxuXFxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XFxudmFyIGNhY2hlZENsZWFyVGltZW91dDtcXG5cXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcXG59XFxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XFxufVxcbihmdW5jdGlvbiAoKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcXG4gICAgfVxcbn0gKCkpXFxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcXG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcXG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfVxcbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcXG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfSBjYXRjaChlKXtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xcbiAgICAgICAgfSBjYXRjaChlKXtcXG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcblxcbn1cXG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XFxuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXFxuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XFxuICAgIH1cXG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcXG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xcbiAgICB9IGNhdGNoIChlKXtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xcbiAgICAgICAgfSBjYXRjaCAoZSl7XFxuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXFxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuXFxuXFxufVxcbnZhciBxdWV1ZSA9IFtdO1xcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xcbnZhciBjdXJyZW50UXVldWU7XFxudmFyIHF1ZXVlSW5kZXggPSAtMTtcXG5cXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XFxuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIGRyYWluaW5nID0gZmFsc2U7XFxuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XFxuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xcbiAgICB9XFxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcXG4gICAgICAgIGRyYWluUXVldWUoKTtcXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xcbiAgICBpZiAoZHJhaW5pbmcpIHtcXG4gICAgICAgIHJldHVybjtcXG4gICAgfVxcbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcXG4gICAgZHJhaW5pbmcgPSB0cnVlO1xcblxcbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xcbiAgICB3aGlsZShsZW4pIHtcXG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xcbiAgICAgICAgcXVldWUgPSBbXTtcXG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcXG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XFxuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XFxuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XFxuICAgIH1cXG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcXG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcXG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xcbn1cXG5cXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XFxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcXG4gICAgfVxcbn07XFxuXFxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xcbiAgICB0aGlzLmZ1biA9IGZ1bjtcXG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xcbn1cXG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XFxuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xcbn07XFxucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcXG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xcbnByb2Nlc3MuZW52ID0ge307XFxucHJvY2Vzcy5hcmd2ID0gW107XFxucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXFxucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xcblxcbmZ1bmN0aW9uIG5vb3AoKSB7fVxcblxcbnByb2Nlc3Mub24gPSBub29wO1xcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xcbnByb2Nlc3Mub25jZSA9IG5vb3A7XFxucHJvY2Vzcy5vZmYgPSBub29wO1xcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcXG5wcm9jZXNzLmVtaXQgPSBub29wO1xcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcXG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xcblxcbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cXG5cXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XFxufTtcXG5cXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XFxufTtcXG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5KCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5KF8ubm9vcCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcXG5cXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cXG52YXIgcm9vdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHJvb3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzT2JqZWN0KHt9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdChfLm5vb3ApO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3QobnVsbCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc09iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcXFwib2JqZWN0XFxcIi5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc09iamVjdExpa2Uoe30pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc09iamVjdExpa2UobnVsbCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNPYmplY3RMaWtlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNOYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTAxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDQpO1xcblxcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXFxuICovXFxuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XFxuICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXkpO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc05hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldE5hdGl2ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRSYXdUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX29iamVjdFRvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1KTtcXG5cXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBzeW1Ub1N0cmluZ1RhZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10udG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XFxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XFxuICB9XFxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXFxuICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UmF3VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSlcXG4gICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19vYmplY3RUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlR2V0VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zcGxpY2VfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRJbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldEluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZGVlcEVxdWFsX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fZGVsZXRlSW5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19rZXlzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHN0cnVjdHVyZSA9IHtcXG4gIGVtcHR5OiB7fSxcXG4gIGVtcHR5TGlzdDogW10sXFxuICBnZXRJbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRJbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHNldEluOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldEluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgZGVlcEVxdWFsOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2RlZXBFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIGRlbGV0ZUluOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2RlbGV0ZUluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgZnJvbUpTOiBmdW5jdGlvbiBmcm9tSlModmFsdWUpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfSxcXG4gIGtleXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fa2V5c19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHNpemU6IGZ1bmN0aW9uIHNpemUoYXJyYXkpIHtcXG4gICAgcmV0dXJuIGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDtcXG4gIH0sXFxuICBzcGxpY2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3BsaWNlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgdG9KUzogZnVuY3Rpb24gdG9KUyh2YWx1ZSkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHJ1Y3R1cmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFBlcmZvcm1zIGFcXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XFxuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcXG4gKlxcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uZXEoJ2EnLCAnYScpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uZXEoTmFOLCBOYU4pO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcXG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG5cXG5cXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXFxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cXG4gKi9cXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XFxuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvS2V5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9uZW50c19Qcm92aWRlcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jb25uZWN0X2Nvbm5lY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAwKTtcXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBQcm92aWRlciAqL1xcbi8qIHVudXNlZCBoYXJtb255IHJlZXhwb3J0IGNyZWF0ZVByb3ZpZGVyICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29ubmVjdEFkdmFuY2VkICovXFxuLyogaGFybW9ueSByZWV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Nvbm5lY3RfY29ubmVjdF9fW1xcXCJhXFxcIl07IH0pO1xcblxcblxcblxcblxcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbi8qKlxcbiAqIFVzZSBpbnZhcmlhbnQoKSB0byBhc3NlcnQgc3RhdGUgd2hpY2ggeW91ciBwcm9ncmFtIGFzc3VtZXMgdG8gYmUgdHJ1ZS5cXG4gKlxcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXFxuICogdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGJyb2tlIGFuZCB3aGF0IHlvdSB3ZXJlXFxuICogZXhwZWN0aW5nLlxcbiAqXFxuICogVGhlIGludmFyaWFudCBtZXNzYWdlIHdpbGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBpbnZhcmlhbnRcXG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXFxuICovXFxuXFxudmFyIGludmFyaWFudCA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGlmICghY29uZGl0aW9uKSB7XFxuICAgIHZhciBlcnJvcjtcXG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXFxuICAgICAgICAnTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArXFxuICAgICAgICAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nXFxuICAgICAgKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcXG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxcbiAgICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsgfSlcXG4gICAgICApO1xcbiAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XFxuICAgIH1cXG5cXG4gICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGludmFyaWFudCdzIG93biBmcmFtZVxcbiAgICB0aHJvdyBlcnJvcjtcXG4gIH1cXG59O1xcblxcbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG52YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyohXFxuICBDb3B5cmlnaHQgKGMpIDIwMTYgSmVkIFdhdHNvbi5cXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXFxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXFxuKi9cXG4vKiBnbG9iYWwgZGVmaW5lICovXFxuXFxuKGZ1bmN0aW9uICgpIHtcXG5cXHQndXNlIHN0cmljdCc7XFxuXFxuXFx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xcblxcblxcdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xcblxcdFxcdHZhciBjbGFzc2VzID0gW107XFxuXFxuXFx0XFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcXG5cXHRcXHRcXHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xcblxcdFxcdFxcdGlmICghYXJnKSBjb250aW51ZTtcXG5cXG5cXHRcXHRcXHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XFxuXFxuXFx0XFx0XFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XFxuXFx0XFx0XFx0XFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XFxuXFx0XFx0XFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcXG5cXHRcXHRcXHRcXHRjbGFzc2VzLnB1c2goY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpKTtcXG5cXHRcXHRcXHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XFxuXFx0XFx0XFx0XFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xcblxcdFxcdFxcdFxcdFxcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcXG5cXHRcXHRcXHRcXHRcXHRcXHRjbGFzc2VzLnB1c2goa2V5KTtcXG5cXHRcXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xcblxcdH1cXG5cXG5cXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcXG5cXHRcXHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XFxuXFx0fSBlbHNlIGlmICh0cnVlKSB7XFxuXFx0XFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxcblxcdFxcdCEoX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyA9IFtdLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyA9IChmdW5jdGlvbiAoKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGNsYXNzTmFtZXM7XFxuXFx0XFx0fSkuYXBwbHkoZXhwb3J0cywgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyksXFxuXFx0XFx0XFx0XFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpO1xcblxcdH0gZWxzZSB7XFxuXFx0XFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xcblxcdH1cXG59KCkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheU1hcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29weUFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdHJpbmdUb1BhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgVXRpbFxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgcHJvcGVydHkgcGF0aCBhcnJheS5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy50b1BhdGgoJ2EuYi5jJyk7XFxuICogLy8gPT4gWydhJywgJ2InLCAnYyddXFxuICpcXG4gKiBfLnRvUGF0aCgnYVswXS5iLmMnKTtcXG4gKiAvLyA9PiBbJ2EnLCAnMCcsICdiJywgJ2MnXVxcbiAqL1xcbmZ1bmN0aW9uIHRvUGF0aCh2YWx1ZSkge1xcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gIH1cXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gW3ZhbHVlXSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvcHlBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RyaW5nVG9QYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XFxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XFxuICAgIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNTeW1ib2wpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBTeW1ib2wgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uU3ltYm9sO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFN5bWJvbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0LCAnY3JlYXRlJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobmF0aXZlQ3JlYXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGlzdENhY2hlQ2xlYXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19saXN0Q2FjaGVEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saXN0Q2FjaGVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19saXN0Q2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19saXN0Q2FjaGVTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEzKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAY29uc3RydWN0b3JcXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxcbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpc3RDYWNoZUNsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19saXN0Q2FjaGVEZWxldGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2xpc3RDYWNoZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbGlzdENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19saXN0Q2FjaGVTZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoTGlzdENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXFxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cXG4gKi9cXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcXG4gIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcXG4gICAgICByZXR1cm4gbGVuZ3RoO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gLTE7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFzc29jSW5kZXhPZik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzS2V5YWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTUpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXFxuICovXFxuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNLZXlhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShrZXkpXFxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXFxuICAgIDogZGF0YS5tYXA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldE1hcERhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nik7XFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcXG4gKiB2YWx1ZSBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIHtcXG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxcbiAgICB9KTtcXG4gIH0gZWxzZSB7XFxuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XFxuICB9XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VBc3NpZ25WYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcmlnaW5hbE1vZHVsZSkge1xcblxcdGlmKCFvcmlnaW5hbE1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcXG5cXHRcXHR2YXIgbW9kdWxlID0gT2JqZWN0LmNyZWF0ZShvcmlnaW5hbE1vZHVsZSk7XFxuXFx0XFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XFxuXFx0XFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImxvYWRlZFxcXCIsIHtcXG5cXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcblxcdFxcdFxcdGdldDogZnVuY3Rpb24oKSB7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIG1vZHVsZS5sO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9KTtcXG5cXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcXFwiaWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUuaTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImV4cG9ydHNcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHR9KTtcXG5cXHRcXHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcXG5cXHR9XFxuXFx0cmV0dXJuIG1vZHVsZTtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0xlbmd0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0xlbmd0aF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUubGVuZ3RoKSAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0FycmF5TGlrZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc09iamVjdExpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjguMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogZnVuY3Rpb24gRm9vKCkge1xcbiAqICAgdGhpcy5hID0gMTtcXG4gKiB9XFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICE9IG9iamVjdFRhZykge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgcHJvdG8gPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XFxuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1BsYWluT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gZm9ybWF0TmFtZTtcXG5mdW5jdGlvbiBmb3JtYXROYW1lKGNvbnRleHQsIG5hbWUpIHtcXG4gIHZhciBzZWN0aW9uUHJlZml4ID0gY29udGV4dC5fcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXg7XFxuXFxuICByZXR1cm4gIXNlY3Rpb25QcmVmaXggPyBuYW1lIDogc2VjdGlvblByZWZpeCArIFxcXCIuXFxcIiArIG5hbWU7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDI2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFjdGlvblR5cGVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhY3Rpb25UeXBlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlJbnNlcnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5SW5zZXJ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheU1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5TW92ZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlQb3BcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UG9wOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVB1c2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UHVzaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlSZW1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UmVtb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZUFsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmVBbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U2hpZnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U3BsaWNlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVNwbGljZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTd2FwXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVN3YXA7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5VW5zaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlVbnNoaWZ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhdXRvZmlsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXV0b2ZpbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJsdXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJsdXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNoYW5nZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hhbmdlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJkZXN0cm95XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZXN0cm95OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkZpZWxkc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGRzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZEFycmF5XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWVsZEFycmF5OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGb3JtXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGb3JtOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGb3JtU2VjdGlvblxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRm9ybVNlY3Rpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImZvY3VzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmb2N1czsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZm9ybVZhbHVlU2VsZWN0b3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvcm1WYWx1ZVNlbGVjdG9yOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtTmFtZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1OYW1lczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybVZhbHVlc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVZhbHVlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybUluaXRpYWxWYWx1ZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1Jbml0aWFsVmFsdWVzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVN5bmNFcnJvcnM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImdldEZvcm1Bc3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybUFzeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3luY1dhcm5pbmdzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtU3luY1dhcm5pbmdzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3VibWl0RXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtU3VibWl0RXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpbml0aWFsaXplXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbml0aWFsaXplOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpc0RpcnR5XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc0RpcnR5OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpc0ludmFsaWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzSW52YWxpZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNQcmlzdGluZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNQcmlzdGluZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNWYWxpZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNWYWxpZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNTdWJtaXR0aW5nXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc1N1Ym1pdHRpbmc7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImhhc1N1Ym1pdFN1Y2NlZWRlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaGFzU3VibWl0U3VjY2VlZGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJoYXNTdWJtaXRGYWlsZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGhhc1N1Ym1pdEZhaWxlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwicHJvcFR5cGVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwcm9wVHlwZXM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInJlZHVjZXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlZHVjZXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInJlZHV4Rm9ybVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVkdXhGb3JtOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZXNldFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzZXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdEZhaWxlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0RmFpbGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzZXRTdWJtaXRTdWNjZWVkZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNldFN1Ym1pdFN1Y2NlZWRlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRBc3luY1ZhbGlkYXRpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0QXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdGFydFN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhcnRTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0b3BBc3luY1ZhbGlkYXRpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0b3BBc3luY1ZhbGlkYXRpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0b3BTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0b3BTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTdWJtaXNzaW9uRXJyb3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1Ym1pc3Npb25FcnJvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidG91Y2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnJlZ2lzdGVyRmllbGRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVucmVnaXN0ZXJGaWVsZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidW50b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW50b3VjaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidmFsdWVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB2YWx1ZXM7IH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUFsbF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcblxcbnZhciBfY3JlYXRlQWxsID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlQWxsX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxudmFyIGFjdGlvblR5cGVzID0gX2NyZWF0ZUFsbC5hY3Rpb25UeXBlcyxcXG4gICAgYXJyYXlJbnNlcnQgPSBfY3JlYXRlQWxsLmFycmF5SW5zZXJ0LFxcbiAgICBhcnJheU1vdmUgPSBfY3JlYXRlQWxsLmFycmF5TW92ZSxcXG4gICAgYXJyYXlQb3AgPSBfY3JlYXRlQWxsLmFycmF5UG9wLFxcbiAgICBhcnJheVB1c2ggPSBfY3JlYXRlQWxsLmFycmF5UHVzaCxcXG4gICAgYXJyYXlSZW1vdmUgPSBfY3JlYXRlQWxsLmFycmF5UmVtb3ZlLFxcbiAgICBhcnJheVJlbW92ZUFsbCA9IF9jcmVhdGVBbGwuYXJyYXlSZW1vdmVBbGwsXFxuICAgIGFycmF5U2hpZnQgPSBfY3JlYXRlQWxsLmFycmF5U2hpZnQsXFxuICAgIGFycmF5U3BsaWNlID0gX2NyZWF0ZUFsbC5hcnJheVNwbGljZSxcXG4gICAgYXJyYXlTd2FwID0gX2NyZWF0ZUFsbC5hcnJheVN3YXAsXFxuICAgIGFycmF5VW5zaGlmdCA9IF9jcmVhdGVBbGwuYXJyYXlVbnNoaWZ0LFxcbiAgICBhdXRvZmlsbCA9IF9jcmVhdGVBbGwuYXV0b2ZpbGwsXFxuICAgIGJsdXIgPSBfY3JlYXRlQWxsLmJsdXIsXFxuICAgIGNoYW5nZSA9IF9jcmVhdGVBbGwuY2hhbmdlLFxcbiAgICBkZXN0cm95ID0gX2NyZWF0ZUFsbC5kZXN0cm95LFxcbiAgICBGaWVsZCA9IF9jcmVhdGVBbGwuRmllbGQsXFxuICAgIEZpZWxkcyA9IF9jcmVhdGVBbGwuRmllbGRzLFxcbiAgICBGaWVsZEFycmF5ID0gX2NyZWF0ZUFsbC5GaWVsZEFycmF5LFxcbiAgICBGb3JtID0gX2NyZWF0ZUFsbC5Gb3JtLFxcbiAgICBGb3JtU2VjdGlvbiA9IF9jcmVhdGVBbGwuRm9ybVNlY3Rpb24sXFxuICAgIGZvY3VzID0gX2NyZWF0ZUFsbC5mb2N1cyxcXG4gICAgZm9ybVZhbHVlU2VsZWN0b3IgPSBfY3JlYXRlQWxsLmZvcm1WYWx1ZVNlbGVjdG9yLFxcbiAgICBnZXRGb3JtTmFtZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1OYW1lcyxcXG4gICAgZ2V0Rm9ybVZhbHVlcyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVZhbHVlcyxcXG4gICAgZ2V0Rm9ybUluaXRpYWxWYWx1ZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1Jbml0aWFsVmFsdWVzLFxcbiAgICBnZXRGb3JtU3luY0Vycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVN5bmNFcnJvcnMsXFxuICAgIGdldEZvcm1Bc3luY0Vycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybUFzeW5jRXJyb3JzLFxcbiAgICBnZXRGb3JtU3luY1dhcm5pbmdzID0gX2NyZWF0ZUFsbC5nZXRGb3JtU3luY1dhcm5pbmdzLFxcbiAgICBnZXRGb3JtU3VibWl0RXJyb3JzID0gX2NyZWF0ZUFsbC5nZXRGb3JtU3VibWl0RXJyb3JzLFxcbiAgICBpbml0aWFsaXplID0gX2NyZWF0ZUFsbC5pbml0aWFsaXplLFxcbiAgICBpc0RpcnR5ID0gX2NyZWF0ZUFsbC5pc0RpcnR5LFxcbiAgICBpc0ludmFsaWQgPSBfY3JlYXRlQWxsLmlzSW52YWxpZCxcXG4gICAgaXNQcmlzdGluZSA9IF9jcmVhdGVBbGwuaXNQcmlzdGluZSxcXG4gICAgaXNWYWxpZCA9IF9jcmVhdGVBbGwuaXNWYWxpZCxcXG4gICAgaXNTdWJtaXR0aW5nID0gX2NyZWF0ZUFsbC5pc1N1Ym1pdHRpbmcsXFxuICAgIGhhc1N1Ym1pdFN1Y2NlZWRlZCA9IF9jcmVhdGVBbGwuaGFzU3VibWl0U3VjY2VlZGVkLFxcbiAgICBoYXNTdWJtaXRGYWlsZWQgPSBfY3JlYXRlQWxsLmhhc1N1Ym1pdEZhaWxlZCxcXG4gICAgcHJvcFR5cGVzID0gX2NyZWF0ZUFsbC5wcm9wVHlwZXMsXFxuICAgIHJlZHVjZXIgPSBfY3JlYXRlQWxsLnJlZHVjZXIsXFxuICAgIHJlZHV4Rm9ybSA9IF9jcmVhdGVBbGwucmVkdXhGb3JtLFxcbiAgICByZWdpc3RlckZpZWxkID0gX2NyZWF0ZUFsbC5yZWdpc3RlckZpZWxkLFxcbiAgICByZXNldCA9IF9jcmVhdGVBbGwucmVzZXQsXFxuICAgIHNldFN1Ym1pdEZhaWxlZCA9IF9jcmVhdGVBbGwuc2V0U3VibWl0RmFpbGVkLFxcbiAgICBzZXRTdWJtaXRTdWNjZWVkZWQgPSBfY3JlYXRlQWxsLnNldFN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBfY3JlYXRlQWxsLnN0YXJ0QXN5bmNWYWxpZGF0aW9uLFxcbiAgICBzdGFydFN1Ym1pdCA9IF9jcmVhdGVBbGwuc3RhcnRTdWJtaXQsXFxuICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfY3JlYXRlQWxsLnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgIHN0b3BTdWJtaXQgPSBfY3JlYXRlQWxsLnN0b3BTdWJtaXQsXFxuICAgIHN1Ym1pdCA9IF9jcmVhdGVBbGwuc3VibWl0LFxcbiAgICBTdWJtaXNzaW9uRXJyb3IgPSBfY3JlYXRlQWxsLlN1Ym1pc3Npb25FcnJvcixcXG4gICAgdG91Y2ggPSBfY3JlYXRlQWxsLnRvdWNoLFxcbiAgICB1bnJlZ2lzdGVyRmllbGQgPSBfY3JlYXRlQWxsLnVucmVnaXN0ZXJGaWVsZCxcXG4gICAgdW50b3VjaCA9IF9jcmVhdGVBbGwudW50b3VjaCxcXG4gICAgdmFsdWVzID0gX2NyZWF0ZUFsbC52YWx1ZXM7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfSU5TRVJUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9JTlNFUlQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX01PVkVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX01PVkU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX1BPUFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUE9QOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9QVVNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9QVVNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9SRU1PVkVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1JFTU9WRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfUkVNT1ZFX0FMTFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUkVNT1ZFX0FMTDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU0hJRlRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NISUZUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9TUExJQ0VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NQTElDRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfVU5TSElGVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfVU5TSElGVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU1dBUFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfU1dBUDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVVUT0ZJTExcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFVVE9GSUxMOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJCTFVSXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCTFVSOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJDSEFOR0VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENIQU5HRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQ0xFQVJfU1VCTUlUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9TVUJNSVQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENMRUFSX1NVQk1JVF9FUlJPUlM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX0FTWU5DX0VSUk9SXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9BU1lOQ19FUlJPUjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiREVTVFJPWVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gREVTVFJPWTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiRk9DVVNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZPQ1VTOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJJTklUSUFMSVpFXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJTklUSUFMSVpFOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJSRUdJU1RFUl9GSUVMRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUkVHSVNURVJfRklFTEQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlJFU0VUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSRVNFVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU0VUX1NVQk1JVF9GQUlMRURcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNFVF9TVUJNSVRfRkFJTEVEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTRVRfU1VCTUlUX1NVQ0NFRURFRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU0VUX1NVQk1JVF9TVUNDRUVERUQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUQVJUX0FTWU5DX1ZBTElEQVRJT05cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUQVJUX0FTWU5DX1ZBTElEQVRJT047IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUQVJUX1NVQk1JVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU1RBUlRfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVE9QX0FTWU5DX1ZBTElEQVRJT05cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUT1BfQVNZTkNfVkFMSURBVElPTjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU1RPUF9TVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUT1BfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNVQk1JVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVE9VQ0hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRPVUNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVTlJFR0lTVEVSX0ZJRUxEXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVTlJFR0lTVEVSX0ZJRUxEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVTlRPVUNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVTlRPVUNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVUERBVEVfU1lOQ19FUlJPUlNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVQREFURV9TWU5DX0VSUk9SUzsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVVBEQVRFX1NZTkNfV0FSTklOR1NcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVQREFURV9TWU5DX1dBUk5JTkdTOyB9KTtcXG52YXIgQVJSQVlfSU5TRVJUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9JTlNFUlQnO1xcbnZhciBBUlJBWV9NT1ZFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9NT1ZFJztcXG52YXIgQVJSQVlfUE9QID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9QT1AnO1xcbnZhciBBUlJBWV9QVVNIID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9QVVNIJztcXG52YXIgQVJSQVlfUkVNT1ZFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9SRU1PVkUnO1xcbnZhciBBUlJBWV9SRU1PVkVfQUxMID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9SRU1PVkVfQUxMJztcXG52YXIgQVJSQVlfU0hJRlQgPSAnQEByZWR1eC1mb3JtL0FSUkFZX1NISUZUJztcXG52YXIgQVJSQVlfU1BMSUNFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9TUExJQ0UnO1xcbnZhciBBUlJBWV9VTlNISUZUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9VTlNISUZUJztcXG52YXIgQVJSQVlfU1dBUCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfU1dBUCc7XFxudmFyIEFVVE9GSUxMID0gJ0BAcmVkdXgtZm9ybS9BVVRPRklMTCc7XFxudmFyIEJMVVIgPSAnQEByZWR1eC1mb3JtL0JMVVInO1xcbnZhciBDSEFOR0UgPSAnQEByZWR1eC1mb3JtL0NIQU5HRSc7XFxudmFyIENMRUFSX1NVQk1JVCA9ICdAQHJlZHV4LWZvcm0vQ0xFQVJfU1VCTUlUJztcXG52YXIgQ0xFQVJfU1VCTUlUX0VSUk9SUyA9ICdAQHJlZHV4LWZvcm0vQ0xFQVJfU1VCTUlUX0VSUk9SUyc7XFxudmFyIENMRUFSX0FTWU5DX0VSUk9SID0gJ0ByZWR1eC1mb3JtL0NMRUFSX0FTWU5DX0VSUk9SJztcXG52YXIgREVTVFJPWSA9ICdAQHJlZHV4LWZvcm0vREVTVFJPWSc7XFxudmFyIEZPQ1VTID0gJ0BAcmVkdXgtZm9ybS9GT0NVUyc7XFxudmFyIElOSVRJQUxJWkUgPSAnQEByZWR1eC1mb3JtL0lOSVRJQUxJWkUnO1xcbnZhciBSRUdJU1RFUl9GSUVMRCA9ICdAQHJlZHV4LWZvcm0vUkVHSVNURVJfRklFTEQnO1xcbnZhciBSRVNFVCA9ICdAQHJlZHV4LWZvcm0vUkVTRVQnO1xcbnZhciBTRVRfU1VCTUlUX0ZBSUxFRCA9ICdAQHJlZHV4LWZvcm0vU0VUX1NVQk1JVF9GQUlMRUQnO1xcbnZhciBTRVRfU1VCTUlUX1NVQ0NFRURFRCA9ICdAQHJlZHV4LWZvcm0vU0VUX1NVQk1JVF9TVUNDRUVERUQnO1xcbnZhciBTVEFSVF9BU1lOQ19WQUxJREFUSU9OID0gJ0BAcmVkdXgtZm9ybS9TVEFSVF9BU1lOQ19WQUxJREFUSU9OJztcXG52YXIgU1RBUlRfU1VCTUlUID0gJ0BAcmVkdXgtZm9ybS9TVEFSVF9TVUJNSVQnO1xcbnZhciBTVE9QX0FTWU5DX1ZBTElEQVRJT04gPSAnQEByZWR1eC1mb3JtL1NUT1BfQVNZTkNfVkFMSURBVElPTic7XFxudmFyIFNUT1BfU1VCTUlUID0gJ0BAcmVkdXgtZm9ybS9TVE9QX1NVQk1JVCc7XFxudmFyIFNVQk1JVCA9ICdAQHJlZHV4LWZvcm0vU1VCTUlUJztcXG52YXIgVE9VQ0ggPSAnQEByZWR1eC1mb3JtL1RPVUNIJztcXG52YXIgVU5SRUdJU1RFUl9GSUVMRCA9ICdAQHJlZHV4LWZvcm0vVU5SRUdJU1RFUl9GSUVMRCc7XFxudmFyIFVOVE9VQ0ggPSAnQEByZWR1eC1mb3JtL1VOVE9VQ0gnO1xcbnZhciBVUERBVEVfU1lOQ19FUlJPUlMgPSAnQEByZWR1eC1mb3JtL1VQREFURV9TWU5DX0VSUk9SUyc7XFxudmFyIFVQREFURV9TWU5DX1dBUk5JTkdTID0gJ0BAcmVkdXgtZm9ybS9VUERBVEVfU1lOQ19XQVJOSU5HUyc7XFxuXFxuLyoqKi8gfSksXFxuLyogMjggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxudmFyIGc7XFxuXFxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcXG5nID0gKGZ1bmN0aW9uKCkge1xcblxcdHJldHVybiB0aGlzO1xcbn0pKCk7XFxuXFxudHJ5IHtcXG5cXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcXG5cXHRnID0gZyB8fCBGdW5jdGlvbihcXFwicmV0dXJuIHRoaXNcXFwiKSgpIHx8ICgxLGV2YWwpKFxcXCJ0aGlzXFxcIik7XFxufSBjYXRjaChlKSB7XFxuXFx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcXG5cXHRpZih0eXBlb2Ygd2luZG93ID09PSBcXFwib2JqZWN0XFxcIilcXG5cXHRcXHRnID0gd2luZG93O1xcbn1cXG5cXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXFxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBnO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tYXBDYWNoZUNsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tYXBDYWNoZURlbGV0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcENhY2hlR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbWFwQ2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTE3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBDYWNoZVNldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTgpO1xcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXFxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tYXBDYWNoZUNsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX21hcENhY2hlRGVsZXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcENhY2hlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21hcENhY2hlU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKE1hcENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzRnVuY3Rpb24oXyk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxcbiAgdmFyIHRhZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzRnVuY3Rpb24pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDMxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIE1hcCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnTWFwJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoTWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdGFja0NsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc3RhY2tEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdGFja0dldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0YWNrSGFzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc3RhY2tTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI3KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKGVudHJpZXMpO1xcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbn1cXG5cXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxcblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RhY2tDbGVhcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdGFja0RlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdGFja0dldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdGFja0hhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zdGFja1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChTdGFjayk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcXG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XFxuXFxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1Byb3RvdHlwZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNBcmd1bWVudHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBmdW5jdGlvbih2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcmd1bWVudHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cXG4gKlxcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXFxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0xlbmd0aCgzKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0xlbmd0aCgnMycpO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcXG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0xlbmd0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihtb2R1bGUpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJGYWxzZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzcpO1xcblxcblxcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXFxudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xcblxcbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXFxudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uQnVmZmVyIDogdW5kZWZpbmVkO1xcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4zLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJGYWxzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0J1ZmZlcik7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjIpKG1vZHVsZSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNUeXBlZEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVVuYXJ5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbm9kZVV0aWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwKTtcXG5cXG5cXG5cXG5cXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xcbnZhciBub2RlSXNUeXBlZEFycmF5ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19ub2RlVXRpbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25vZGVVdGlsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmlzVHlwZWRBcnJheTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMy4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVVuYXJ5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShub2RlSXNUeXBlZEFycmF5KSA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1R5cGVkQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xcbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcXFxkKikkLztcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcXG5cXG4gIHJldHVybiAhIWxlbmd0aCAmJlxcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNJbmRleCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBtZW1iZXJPZiBfXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcXG4gKlxcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcXG4gKiAvLyA9PiB0cnVlXFxuICovXFxuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaWRlbnRpdHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheUxpa2VLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXFxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxcbiAqIGZvciBtb3JlIGRldGFpbHMuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQHNpbmNlIDAuMS4wXFxuICogQG1lbWJlck9mIF9cXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYSA9IDE7XFxuICogICB0aGlzLmIgPSAyO1xcbiAqIH1cXG4gKlxcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XFxuICpcXG4gKiBfLmtleXMobmV3IEZvbyk7XFxuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqXFxuICogXy5rZXlzKCdoaScpO1xcbiAqIC8vID0+IFsnMCcsICcxJ11cXG4gKi9cXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChrZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA0MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxEZWVwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxcbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cXG4gKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgaWYgKHZhbHVlID09PSBvdGhlcikge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlcikpKSB7XFxuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsRGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNFcXVhbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNTeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xcblxcblxcblxcbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcXFwufFxcXFxbKD86W15bXFxcXF1dKnwoW1xcXCInXSkoPzooPyFcXFxcMSlbXlxcXFxcXFxcXXxcXFxcXFxcXC4pKj9cXFxcMSlcXFxcXS8sXFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcXFx3KiQvO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcXG4gICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNLZXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xcblxcbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHdhcm5pbmc7XFxuLyoqXFxuICogUHJpbnRzIGEgd2FybmluZyBpbiB0aGUgY29uc29sZSBpZiBpdCBleGlzdHMuXFxuICpcXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBUaGUgd2FybmluZyBtZXNzYWdlLlxcbiAqIEByZXR1cm5zIHt2b2lkfVxcbiAqL1xcbmZ1bmN0aW9uIHdhcm5pbmcobWVzc2FnZSkge1xcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgfVxcbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXFxuICB0cnkge1xcbiAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IGlmIHlvdSBlbmFibGVcXG4gICAgLy8gXFxcImJyZWFrIG9uIGFsbCBleGNlcHRpb25zXFxcIiBpbiB5b3VyIGNvbnNvbGUsXFxuICAgIC8vIGl0IHdvdWxkIHBhdXNlIHRoZSBleGVjdXRpb24gYXQgdGhpcyBsaW5lLlxcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5ICovXFxuICB9IGNhdGNoIChlKSB7fVxcbiAgLyogZXNsaW50LWVuYWJsZSBuby1lbXB0eSAqL1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA0NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29tYmluZVJlZHVjZXJzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmluZEFjdGlvbkNyZWF0b3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYXBwbHlNaWRkbGV3YXJlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY29tcG9zZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbHNfd2FybmluZ19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NCk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3RvcmUgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBjb21iaW5lUmVkdWNlcnMgKi9cXG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmluZEFjdGlvbkNyZWF0b3JzX19bXFxcImFcXFwiXTsgfSk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgYXBwbHlNaWRkbGV3YXJlICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29tcG9zZSAqL1xcblxcblxcblxcblxcblxcblxcblxcbi8qXFxuKiBUaGlzIGlzIGEgZHVtbXkgZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGZ1bmN0aW9uIG5hbWUgaGFzIGJlZW4gYWx0ZXJlZCBieSBtaW5pZmljYXRpb24uXFxuKiBJZiB0aGUgZnVuY3Rpb24gaGFzIGJlZW4gbWluaWZpZWQgYW5kIE5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsIHdhcm4gdGhlIHVzZXIuXFxuKi9cXG5mdW5jdGlvbiBpc0NydXNoZWQoKSB7fVxcblxcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBpc0NydXNoZWQubmFtZSA9PT0gJ3N0cmluZycgJiYgaXNDcnVzaGVkLm5hbWUgIT09ICdpc0NydXNoZWQnKSB7XFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnWW91IGFyZSBjdXJyZW50bHkgdXNpbmcgbWluaWZpZWQgY29kZSBvdXRzaWRlIG9mIE5PREVfRU5WID09PSBcXFxcJ3Byb2R1Y3Rpb25cXFxcJy4gJyArICdUaGlzIG1lYW5zIHRoYXQgeW91IGFyZSBydW5uaW5nIGEgc2xvd2VyIGRldmVsb3BtZW50IGJ1aWxkIG9mIFJlZHV4LiAnICsgJ1lvdSBjYW4gdXNlIGxvb3NlLWVudmlmeSAoaHR0cHM6Ly9naXRodWIuY29tL3plcnRvc2gvbG9vc2UtZW52aWZ5KSBmb3IgYnJvd3NlcmlmeSAnICsgJ29yIERlZmluZVBsdWdpbiBmb3Igd2VicGFjayAoaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zMDAzMDAzMSkgJyArICd0byBlbnN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgY29kZSBmb3IgeW91ciBwcm9kdWN0aW9uIGJ1aWxkLicpO1xcbn1cXG5cXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNDYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb21pc2U7XFxuXFxuZnVuY3Rpb24gaXNQcm9taXNlKG9iaikge1xcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNFcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjYpO1xcblxcblxcbnZhciBjcmVhdGVJc1ZhbGlkID0gZnVuY3Rpb24gY3JlYXRlSXNWYWxpZChzdHJ1Y3R1cmUpIHtcXG4gIHZhciBnZXRJbiA9IHN0cnVjdHVyZS5nZXRJbixcXG4gICAgICBrZXlzID0gc3RydWN0dXJlLmtleXM7XFxuXFxuICB2YXIgaGFzRXJyb3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNFcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHZhciBpZ25vcmVTdWJtaXRFcnJvcnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgdmFyIHN5bmNFcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3luY0Vycm9yJyk7XFxuICAgICAgaWYgKHN5bmNFcnJvcikge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICBpZiAoIWlnbm9yZVN1Ym1pdEVycm9ycykge1xcbiAgICAgICAgdmFyIGVycm9yID0gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5lcnJvcicpO1xcbiAgICAgICAgaWYgKGVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnN5bmNFcnJvcnMnKTtcXG4gICAgICB2YXIgYXN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLmFzeW5jRXJyb3JzJyk7XFxuICAgICAgdmFyIHN1Ym1pdEVycm9ycyA9IGlnbm9yZVN1Ym1pdEVycm9ycyA/IHVuZGVmaW5lZCA6IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0RXJyb3JzJyk7XFxuICAgICAgaWYgKCFzeW5jRXJyb3JzICYmICFhc3luY0Vycm9ycyAmJiAhc3VibWl0RXJyb3JzKSB7XFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICB9XFxuXFxuICAgICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnJlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICBpZiAoIXJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gIWtleXMocmVnaXN0ZXJlZEZpZWxkcykuZmlsdGVyKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICByZXR1cm4gZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXS5jb3VudCcpID4gMDtcXG4gICAgICB9KS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICByZXR1cm4gaGFzRXJyb3IoZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXScpLCBzeW5jRXJyb3JzLCBhc3luY0Vycm9ycywgc3VibWl0RXJyb3JzKTtcXG4gICAgICB9KTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVJc1ZhbGlkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA0OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODIpO1xcblxcblxcblxcbnZhciBjdXN0b21pemVyID0gZnVuY3Rpb24gY3VzdG9taXplcihvYmplY3RWYWx1ZSwgb3RoZXJWYWx1ZSwgaW5kZXhPcmtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spIHtcXG4gIC8vIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNCNpc0VxdWFsV2l0aFxcbiAgaWYgKHN0YWNrKSB7XFxuICAgIC8vIFNoYWxsb3cgY29tcGFyZXNcXG4gICAgLy8gRm9yIDFzdCBsZXZlbCwgc3RhY2sgPT09IHVuZGVmaW5lZC5cXG4gICAgLy8gICAtPiBEbyBub3RoaW5nIChhbmQgaW1wbGljaXRseSByZXR1cm4gdW5kZWZpbmVkIHNvIHRoYXQgaXQgZ29lcyB0byBjb21wYXJlIDJuZCBsZXZlbClcXG4gICAgLy8gRm9yIDJuZCBsZXZlbCBhbmQgdXAsIHN0YWNrICE9PSB1bmRlZmluZWQuXFxuICAgIC8vICAgLT4gQ29tcGFyZSBieSA9PT0gb3BlcmF0b3JcXG4gICAgcmV0dXJuIG9iamVjdFZhbHVlID09PSBvdGhlclZhbHVlO1xcbiAgfVxcbn07XFxuXFxudmFyIHNoYWxsb3dDb21wYXJlID0gZnVuY3Rpb24gc2hhbGxvd0NvbXBhcmUoaW5zdGFuY2UsIG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICByZXR1cm4gIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzRXF1YWxXaXRoX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpbnN0YW5jZS5wcm9wcywgbmV4dFByb3BzLCBjdXN0b21pemVyKSB8fCAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGluc3RhbmNlLnN0YXRlLCBuZXh0U3RhdGUsIGN1c3RvbWl6ZXIpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2hhbGxvd0NvbXBhcmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDQ5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcXG4gKiBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5TWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxcbiAqL1xcbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xcblxcbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xcbiAgfVxcbiAgcmV0dXJuIGFycmF5O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb3B5QXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDUxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsKSB7LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZnJlZUdsb2JhbCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiA1MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZUNhcHBlZF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nik7XFxuXFxuXFxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xcbnZhciByZVByb3BOYW1lID0gL1teLltcXFxcXV0rfFxcXFxbKD86KC0/XFxcXGQrKD86XFxcXC5cXFxcZCspPyl8KFtcXFwiJ10pKCg/Oig/IVxcXFwyKVteXFxcXFxcXFxdfFxcXFxcXFxcLikqPylcXFxcMilcXFxcXXwoPz0oPzpcXFxcLnxcXFxcW1xcXFxdKSg/OlxcXFwufFxcXFxbXFxcXF18JCkpL2c7XFxuXFxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXFxudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcXFxcXChcXFxcXFxcXCk/L2c7XFxuXFxuLyoqXFxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICovXFxudmFyIHN0cmluZ1RvUGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX21lbW9pemVDYXBwZWRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKHN0cmluZykge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XFxuICAgIHJlc3VsdC5wdXNoKCcnKTtcXG4gIH1cXG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcXG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xcbiAgfSk7XFxuICByZXR1cm4gcmVzdWx0O1xcbn0pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0cmluZ1RvUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKlxcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXFxuICovXFxuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xcbiAgICB0cnkge1xcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcXG4gICAgfSBjYXRjaCAoZSkge31cXG4gICAgdHJ5IHtcXG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICB9XFxuICByZXR1cm4gJyc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvU291cmNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVRvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExOSk7XFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xcbiAqIC8vID0+ICcnXFxuICpcXG4gKiBfLnRvU3RyaW5nKC0wKTtcXG4gKiAvLyA9PiAnLTAnXFxuICpcXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gJzEsMiwzJ1xcbiAqL1xcbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVRvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19lcV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxcbiAqIGB1bmRlZmluZWRgIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXFxuICovXFxuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdFtrZXldLCB2YWx1ZSkpIHx8XFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgdmFsdWUpO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NpZ25NZXJnZVZhbHVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcblxcblxcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcXG4gIHRyeSB7XFxuICAgIHZhciBmdW5jID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xcbiAgICBmdW5jKHt9LCAnJywge30pO1xcbiAgICByZXR1cm4gZnVuYztcXG4gIH0gY2F0Y2ggKGUpIHt9XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChkZWZpbmVQcm9wZXJ0eSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUJhc2VGb3JfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI4KTtcXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxcbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cXG4gKi9cXG52YXIgYmFzZUZvciA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUJhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUZvcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIFVpbnQ4QXJyYXkgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uVWludDhBcnJheTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChVaW50OEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fb3ZlckFyZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MCk7XFxuXFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIGdldFByb3RvdHlwZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX292ZXJBcmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRQcm90b3R5cGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDYwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChvdmVyQXJnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAsIHVubGVzcyBga2V5YCBpcyBcXFwiX19wcm90b19fXFxcIi5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XFxuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG5cXG4gIHJldHVybiBvYmplY3Rba2V5XTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2FmZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5TGlrZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IE9iamVjdFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBGb28oKSB7XFxuICogICB0aGlzLmEgPSAxO1xcbiAqICAgdGhpcy5iID0gMjtcXG4gKiB9XFxuICpcXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xcbiAqXFxuICogXy5rZXlzSW4obmV3IEZvbyk7XFxuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXFxuICovXFxuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCB0cnVlKSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUaW1lc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XFxuICB2YXIgaXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSxcXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUaW1lc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcXG5cXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXFxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcXG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxcbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXFxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcXG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cXG4gICAgICAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzSW5kZXhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGtleSwgbGVuZ3RoKVxcbiAgICAgICAgKSkpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheUxpa2VLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlRm9yT3duX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUl0ZXJhdGVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1OSk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFzIGBvYmplY3RgIGFuZCB2YWx1ZXMgZ2VuZXJhdGVkXFxuICogYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1XFxuICogYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XFxuICogKHZhbHVlLCBrZXksIG9iamVjdCkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMi40LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIG9iamVjdC5cXG4gKiBAc2VlIF8ubWFwS2V5c1xcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgdXNlcnMgPSB7XFxuICogICAnZnJlZCc6ICAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxcbiAqICAgJ3BlYmJsZXMnOiB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSB9XFxuICogfTtcXG4gKlxcbiAqIF8ubWFwVmFsdWVzKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZTsgfSk7XFxuICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqXFxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXFxuICogXy5tYXBWYWx1ZXModXNlcnMsICdhZ2UnKTtcXG4gKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXFxuICovXFxuZnVuY3Rpb24gbWFwVmFsdWVzKG9iamVjdCwgaXRlcmF0ZWUpIHtcXG4gIHZhciByZXN1bHQgPSB7fTtcXG4gIGl0ZXJhdGVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUl0ZXJhdGVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpdGVyYXRlZSwgMyk7XFxuXFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlRm9yT3duX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQXNzaWduVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHJlc3VsdCwga2V5LCBpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmplY3QpKTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwVmFsdWVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU2V0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hcnJheVNvbWVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jYWNoZUhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjcpO1xcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XFxuXFxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cXG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcXG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcXG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICB9XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSB0cnVlLFxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU2V0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiB1bmRlZmluZWQ7XFxuXFxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcXG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xcblxcbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxcbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcXG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XFxuXFxuICAgIGlmIChjdXN0b21pemVyKSB7XFxuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcXG4gICAgfVxcbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIGlmIChjb21wYXJlZCkge1xcbiAgICAgICAgY29udGludWU7XFxuICAgICAgfVxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIGlmIChzZWVuKSB7XFxuICAgICAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hcnJheVNvbWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcXG4gICAgICAgICAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzZWVuLCBvdGhJbmRleCkgJiZcXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pKSB7XFxuICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIGlmICghKFxcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcXG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcXG4gICAgICAgICkpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgfVxcbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcXG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcXVhbEFycmF5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcXG4gKiAgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzU3RyaWN0Q29tcGFyYWJsZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxcbiAqIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdFtrZXldID09PSBzcmNWYWx1ZSAmJlxcbiAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY2FzdFBhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xcbiAgcGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwYXRoLCBvYmplY3QpO1xcblxcbiAgdmFyIGluZGV4ID0gMCxcXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcXG5cXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xcbiAgICBvYmplY3QgPSBvYmplY3RbT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdG9LZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGhbaW5kZXgrK10pXTtcXG4gIH1cXG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3N0cmluZ1RvUGF0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9TdHJpbmdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqL1xcbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdHJpbmdUb1BhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjYXN0UGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgdmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9ICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmXFxuICAgIFN5bWJvbC5mb3IgJiZcXG4gICAgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpKSB8fFxcbiAgICAweGVhYzc7XFxuXFxuICB2YXIgaXNWYWxpZEVsZW1lbnQgPSBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXFxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXFxuICAgICAgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XFxuICB9O1xcblxcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXFxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XFxuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk0KShpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XFxufSBlbHNlIHtcXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXFxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXFxuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk3KSgpO1xcbn1cXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1YnNjcmlwdGlvblNoYXBlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9yZVNoYXBlOyB9KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyk7XFxuXFxuXFxudmFyIHN1YnNjcmlwdGlvblNoYXBlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuc2hhcGUoe1xcbiAgdHJ5U3Vic2NyaWJlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWQsXFxuICB0cnlVbnN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgbm90aWZ5TmVzdGVkU3ViczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgaXNTdWJzY3JpYmVkOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWRcXG59KTtcXG5cXG52YXIgc3RvcmVTaGFwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLnNoYXBlKHtcXG4gIHN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgZGlzcGF0Y2g6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmZ1bmMuaXNSZXF1aXJlZCxcXG4gIGdldFN0YXRlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWRcXG59KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA3MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSBjb25uZWN0QWR2YW5jZWQ7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbHNfU3Vic2NyaXB0aW9uX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciBob3RSZWxvYWRpbmdWZXJzaW9uID0gMDtcXG52YXIgZHVtbXlTdGF0ZSA9IHt9O1xcbmZ1bmN0aW9uIG5vb3AoKSB7fVxcbmZ1bmN0aW9uIG1ha2VTZWxlY3RvclN0YXRlZnVsKHNvdXJjZVNlbGVjdG9yLCBzdG9yZSkge1xcbiAgLy8gd3JhcCB0aGUgc2VsZWN0b3IgaW4gYW4gb2JqZWN0IHRoYXQgdHJhY2tzIGl0cyByZXN1bHRzIGJldHdlZW4gcnVucy5cXG4gIHZhciBzZWxlY3RvciA9IHtcXG4gICAgcnVuOiBmdW5jdGlvbiBydW5Db21wb25lbnRTZWxlY3Rvcihwcm9wcykge1xcbiAgICAgIHRyeSB7XFxuICAgICAgICB2YXIgbmV4dFByb3BzID0gc291cmNlU2VsZWN0b3Ioc3RvcmUuZ2V0U3RhdGUoKSwgcHJvcHMpO1xcbiAgICAgICAgaWYgKG5leHRQcm9wcyAhPT0gc2VsZWN0b3IucHJvcHMgfHwgc2VsZWN0b3IuZXJyb3IpIHtcXG4gICAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcXG4gICAgICAgICAgc2VsZWN0b3IucHJvcHMgPSBuZXh0UHJvcHM7XFxuICAgICAgICAgIHNlbGVjdG9yLmVycm9yID0gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcXG4gICAgICAgIHNlbGVjdG9yLmVycm9yID0gZXJyb3I7XFxuICAgICAgfVxcbiAgICB9XFxuICB9O1xcblxcbiAgcmV0dXJuIHNlbGVjdG9yO1xcbn1cXG5cXG5mdW5jdGlvbiBjb25uZWN0QWR2YW5jZWQoXFxuLypcXG4gIHNlbGVjdG9yRmFjdG9yeSBpcyBhIGZ1bmMgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcmV0dXJuaW5nIHRoZSBzZWxlY3RvciBmdW5jdGlvbiB1c2VkIHRvXFxuICBjb21wdXRlIG5ldyBwcm9wcyBmcm9tIHN0YXRlLCBwcm9wcywgYW5kIGRpc3BhdGNoLiBGb3IgZXhhbXBsZTpcXG4gICAgIGV4cG9ydCBkZWZhdWx0IGNvbm5lY3RBZHZhbmNlZCgoZGlzcGF0Y2gsIG9wdGlvbnMpID0+IChzdGF0ZSwgcHJvcHMpID0+ICh7XFxuICAgICAgdGhpbmc6IHN0YXRlLnRoaW5nc1twcm9wcy50aGluZ0lkXSxcXG4gICAgICBzYXZlVGhpbmc6IGZpZWxkcyA9PiBkaXNwYXRjaChhY3Rpb25DcmVhdG9ycy5zYXZlVGhpbmcocHJvcHMudGhpbmdJZCwgZmllbGRzKSksXFxuICAgIH0pKShZb3VyQ29tcG9uZW50KVxcbiAgIEFjY2VzcyB0byBkaXNwYXRjaCBpcyBwcm92aWRlZCB0byB0aGUgZmFjdG9yeSBzbyBzZWxlY3RvckZhY3RvcmllcyBjYW4gYmluZCBhY3Rpb25DcmVhdG9yc1xcbiAgb3V0c2lkZSBvZiB0aGVpciBzZWxlY3RvciBhcyBhbiBvcHRpbWl6YXRpb24uIE9wdGlvbnMgcGFzc2VkIHRvIGNvbm5lY3RBZHZhbmNlZCBhcmUgcGFzc2VkIHRvXFxuICB0aGUgc2VsZWN0b3JGYWN0b3J5LCBhbG9uZyB3aXRoIGRpc3BsYXlOYW1lIGFuZCBXcmFwcGVkQ29tcG9uZW50LCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxcbiAgIE5vdGUgdGhhdCBzZWxlY3RvckZhY3RvcnkgaXMgcmVzcG9uc2libGUgZm9yIGFsbCBjYWNoaW5nL21lbW9pemF0aW9uIG9mIGluYm91bmQgYW5kIG91dGJvdW5kXFxuICBwcm9wcy4gRG8gbm90IHVzZSBjb25uZWN0QWR2YW5jZWQgZGlyZWN0bHkgd2l0aG91dCBtZW1vaXppbmcgcmVzdWx0cyBiZXR3ZWVuIGNhbGxzIHRvIHlvdXJcXG4gIHNlbGVjdG9yLCBvdGhlcndpc2UgdGhlIENvbm5lY3QgY29tcG9uZW50IHdpbGwgcmUtcmVuZGVyIG9uIGV2ZXJ5IHN0YXRlIG9yIHByb3BzIGNoYW5nZS5cXG4qL1xcbnNlbGVjdG9yRmFjdG9yeSkge1xcbiAgdmFyIF9jb250ZXh0VHlwZXMsIF9jaGlsZENvbnRleHRUeXBlcztcXG5cXG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcXG4gICAgICBfcmVmJGdldERpc3BsYXlOYW1lID0gX3JlZi5nZXREaXNwbGF5TmFtZSxcXG4gICAgICBnZXREaXNwbGF5TmFtZSA9IF9yZWYkZ2V0RGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgIHJldHVybiAnQ29ubmVjdEFkdmFuY2VkKCcgKyBuYW1lICsgJyknO1xcbiAgfSA6IF9yZWYkZ2V0RGlzcGxheU5hbWUsXFxuICAgICAgX3JlZiRtZXRob2ROYW1lID0gX3JlZi5tZXRob2ROYW1lLFxcbiAgICAgIG1ldGhvZE5hbWUgPSBfcmVmJG1ldGhvZE5hbWUgPT09IHVuZGVmaW5lZCA/ICdjb25uZWN0QWR2YW5jZWQnIDogX3JlZiRtZXRob2ROYW1lLFxcbiAgICAgIF9yZWYkcmVuZGVyQ291bnRQcm9wID0gX3JlZi5yZW5kZXJDb3VudFByb3AsXFxuICAgICAgcmVuZGVyQ291bnRQcm9wID0gX3JlZiRyZW5kZXJDb3VudFByb3AgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9yZWYkcmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9IF9yZWYuc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyA9IF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IF9yZWYkc2hvdWxkSGFuZGxlU3RhdCxcXG4gICAgICBfcmVmJHN0b3JlS2V5ID0gX3JlZi5zdG9yZUtleSxcXG4gICAgICBzdG9yZUtleSA9IF9yZWYkc3RvcmVLZXkgPT09IHVuZGVmaW5lZCA/ICdzdG9yZScgOiBfcmVmJHN0b3JlS2V5LFxcbiAgICAgIF9yZWYkd2l0aFJlZiA9IF9yZWYud2l0aFJlZixcXG4gICAgICB3aXRoUmVmID0gX3JlZiR3aXRoUmVmID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYkd2l0aFJlZixcXG4gICAgICBjb25uZWN0T3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2dldERpc3BsYXlOYW1lJywgJ21ldGhvZE5hbWUnLCAncmVuZGVyQ291bnRQcm9wJywgJ3Nob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcycsICdzdG9yZUtleScsICd3aXRoUmVmJ10pO1xcblxcbiAgdmFyIHN1YnNjcmlwdGlvbktleSA9IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XFxuICB2YXIgdmVyc2lvbiA9IGhvdFJlbG9hZGluZ1ZlcnNpb24rKztcXG5cXG4gIHZhciBjb250ZXh0VHlwZXMgPSAoX2NvbnRleHRUeXBlcyA9IHt9LCBfY29udGV4dFR5cGVzW3N0b3JlS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImFcXFwiIC8qIHN0b3JlU2hhcGUgKi9dLCBfY29udGV4dFR5cGVzW3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9jb250ZXh0VHlwZXMpO1xcbiAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gKF9jaGlsZENvbnRleHRUeXBlcyA9IHt9LCBfY2hpbGRDb250ZXh0VHlwZXNbc3Vic2NyaXB0aW9uS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImJcXFwiIC8qIHN1YnNjcmlwdGlvblNoYXBlICovXSwgX2NoaWxkQ29udGV4dFR5cGVzKTtcXG5cXG4gIHJldHVybiBmdW5jdGlvbiB3cmFwV2l0aENvbm5lY3QoV3JhcHBlZENvbXBvbmVudCkge1xcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHR5cGVvZiBXcmFwcGVkQ29tcG9uZW50ID09ICdmdW5jdGlvbicsICdZb3UgbXVzdCBwYXNzIGEgY29tcG9uZW50IHRvIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSAnICsgKCdjb25uZWN0LiBJbnN0ZWFkIHJlY2VpdmVkICcgKyBKU09OLnN0cmluZ2lmeShXcmFwcGVkQ29tcG9uZW50KSkpO1xcblxcbiAgICB2YXIgd3JhcHBlZENvbXBvbmVudE5hbWUgPSBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcXG5cXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gZ2V0RGlzcGxheU5hbWUod3JhcHBlZENvbXBvbmVudE5hbWUpO1xcblxcbiAgICB2YXIgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyA9IF9leHRlbmRzKHt9LCBjb25uZWN0T3B0aW9ucywge1xcbiAgICAgIGdldERpc3BsYXlOYW1lOiBnZXREaXNwbGF5TmFtZSxcXG4gICAgICBtZXRob2ROYW1lOiBtZXRob2ROYW1lLFxcbiAgICAgIHJlbmRlckNvdW50UHJvcDogcmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxcbiAgICAgIHN0b3JlS2V5OiBzdG9yZUtleSxcXG4gICAgICB3aXRoUmVmOiB3aXRoUmVmLFxcbiAgICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcXG4gICAgICB3cmFwcGVkQ29tcG9uZW50TmFtZTogd3JhcHBlZENvbXBvbmVudE5hbWUsXFxuICAgICAgV3JhcHBlZENvbXBvbmVudDogV3JhcHBlZENvbXBvbmVudFxcbiAgICB9KTtcXG5cXG4gICAgdmFyIENvbm5lY3QgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICAgIF9pbmhlcml0cyhDb25uZWN0LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgICBmdW5jdGlvbiBDb25uZWN0KHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdCk7XFxuXFxuICAgICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICAgIF90aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7fTtcXG4gICAgICAgIF90aGlzLnJlbmRlckNvdW50ID0gMDtcXG4gICAgICAgIF90aGlzLnN0b3JlID0gcHJvcHNbc3RvcmVLZXldIHx8IGNvbnRleHRbc3RvcmVLZXldO1xcbiAgICAgICAgX3RoaXMucHJvcHNNb2RlID0gQm9vbGVhbihwcm9wc1tzdG9yZUtleV0pO1xcbiAgICAgICAgX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlID0gX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlLmJpbmQoX3RoaXMpO1xcblxcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKShfdGhpcy5zdG9yZSwgJ0NvdWxkIG5vdCBmaW5kIFxcXCInICsgc3RvcmVLZXkgKyAnXFxcIiBpbiBlaXRoZXIgdGhlIGNvbnRleHQgb3IgcHJvcHMgb2YgJyArICgnXFxcIicgKyBkaXNwbGF5TmFtZSArICdcXFwiLiBFaXRoZXIgd3JhcCB0aGUgcm9vdCBjb21wb25lbnQgaW4gYSA8UHJvdmlkZXI+LCAnKSArICgnb3IgZXhwbGljaXRseSBwYXNzIFxcXCInICsgc3RvcmVLZXkgKyAnXFxcIiBhcyBhIHByb3AgdG8gXFxcIicgKyBkaXNwbGF5TmFtZSArICdcXFwiLicpKTtcXG5cXG4gICAgICAgIF90aGlzLmluaXRTZWxlY3RvcigpO1xcbiAgICAgICAgX3RoaXMuaW5pdFN1YnNjcmlwdGlvbigpO1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICAgIH1cXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5nZXRDaGlsZENvbnRleHQgPSBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgICB2YXIgX3JlZjI7XFxuXFxuICAgICAgICAvLyBJZiB0aGlzIGNvbXBvbmVudCByZWNlaXZlZCBzdG9yZSBmcm9tIHByb3BzLCBpdHMgc3Vic2NyaXB0aW9uIHNob3VsZCBiZSB0cmFuc3BhcmVudFxcbiAgICAgICAgLy8gdG8gYW55IGRlc2NlbmRhbnRzIHJlY2VpdmluZyBzdG9yZStzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0OyBpdCBwYXNzZXMgYWxvbmdcXG4gICAgICAgIC8vIHN1YnNjcmlwdGlvbiBwYXNzZWQgdG8gaXQuIE90aGVyd2lzZSwgaXQgc2hhZG93cyB0aGUgcGFyZW50IHN1YnNjcmlwdGlvbiwgd2hpY2ggYWxsb3dzXFxuICAgICAgICAvLyBDb25uZWN0IHRvIGNvbnRyb2wgb3JkZXJpbmcgb2Ygbm90aWZpY2F0aW9ucyB0byBmbG93IHRvcC1kb3duLlxcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMucHJvcHNNb2RlID8gbnVsbCA6IHRoaXMuc3Vic2NyaXB0aW9uO1xcbiAgICAgICAgcmV0dXJuIF9yZWYyID0ge30sIF9yZWYyW3N1YnNjcmlwdGlvbktleV0gPSBzdWJzY3JpcHRpb24gfHwgdGhpcy5jb250ZXh0W3N1YnNjcmlwdGlvbktleV0sIF9yZWYyO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcXG4gICAgICAgIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm47XFxuXFxuICAgICAgICAvLyBjb21wb25lbnRXaWxsTW91bnQgZmlyZXMgZHVyaW5nIHNlcnZlciBzaWRlIHJlbmRlcmluZywgYnV0IGNvbXBvbmVudERpZE1vdW50IGFuZFxcbiAgICAgICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQgZG8gbm90LiBCZWNhdXNlIG9mIHRoaXMsIHRyeVN1YnNjcmliZSBoYXBwZW5zIGR1cmluZyAuLi5kaWRNb3VudC5cXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdW5zdWJzY3JpcHRpb24gd291bGQgbmV2ZXIgdGFrZSBwbGFjZSBkdXJpbmcgU1NSLCBjYXVzaW5nIGEgbWVtb3J5IGxlYWsuXFxuICAgICAgICAvLyBUbyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBjaGlsZCBjb21wb25lbnQgbWF5IGhhdmUgdHJpZ2dlcmVkIGEgc3RhdGUgY2hhbmdlIGJ5XFxuICAgICAgICAvLyBkaXNwYXRjaGluZyBhbiBhY3Rpb24gaW4gaXRzIGNvbXBvbmVudFdpbGxNb3VudCwgd2UgaGF2ZSB0byByZS1ydW4gdGhlIHNlbGVjdCBhbmQgbWF5YmVcXG4gICAgICAgIC8vIHJlLXJlbmRlci5cXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyk7XFxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUpIHRoaXMuZm9yY2VVcGRhdGUoKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4obmV4dFByb3BzKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG51bGw7XFxuICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMgPSBub29wO1xcbiAgICAgICAgdGhpcy5zdG9yZSA9IG51bGw7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnJ1biA9IG5vb3A7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuZ2V0V3JhcHBlZEluc3RhbmNlID0gZnVuY3Rpb24gZ2V0V3JhcHBlZEluc3RhbmNlKCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh3aXRoUmVmLCAnVG8gYWNjZXNzIHRoZSB3cmFwcGVkIGluc3RhbmNlLCB5b3UgbmVlZCB0byBzcGVjaWZ5ICcgKyAoJ3sgd2l0aFJlZjogdHJ1ZSB9IGluIHRoZSBvcHRpb25zIGFyZ3VtZW50IG9mIHRoZSAnICsgbWV0aG9kTmFtZSArICcoKSBjYWxsLicpKTtcXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRJbnN0YW5jZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnNldFdyYXBwZWRJbnN0YW5jZSA9IGZ1bmN0aW9uIHNldFdyYXBwZWRJbnN0YW5jZShyZWYpIHtcXG4gICAgICAgIHRoaXMud3JhcHBlZEluc3RhbmNlID0gcmVmO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFNlbGVjdG9yID0gZnVuY3Rpb24gaW5pdFNlbGVjdG9yKCkge1xcbiAgICAgICAgdmFyIHNvdXJjZVNlbGVjdG9yID0gc2VsZWN0b3JGYWN0b3J5KHRoaXMuc3RvcmUuZGlzcGF0Y2gsIHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMpO1xcbiAgICAgICAgdGhpcy5zZWxlY3RvciA9IG1ha2VTZWxlY3RvclN0YXRlZnVsKHNvdXJjZVNlbGVjdG9yLCB0aGlzLnN0b3JlKTtcXG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIGluaXRTdWJzY3JpcHRpb24oKSB7XFxuICAgICAgICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuO1xcblxcbiAgICAgICAgLy8gcGFyZW50U3ViJ3Mgc291cmNlIHNob3VsZCBtYXRjaCB3aGVyZSBzdG9yZSBjYW1lIGZyb206IHByb3BzIHZzLiBjb250ZXh0LiBBIGNvbXBvbmVudFxcbiAgICAgICAgLy8gY29ubmVjdGVkIHRvIHRoZSBzdG9yZSB2aWEgcHJvcHMgc2hvdWxkbid0IHVzZSBzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0LCBvciB2aWNlIHZlcnNhLlxcbiAgICAgICAgdmFyIHBhcmVudFN1YiA9ICh0aGlzLnByb3BzTW9kZSA/IHRoaXMucHJvcHMgOiB0aGlzLmNvbnRleHQpW3N1YnNjcmlwdGlvbktleV07XFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX1N1YnNjcmlwdGlvbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSh0aGlzLnN0b3JlLCBwYXJlbnRTdWIsIHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpKTtcXG5cXG4gICAgICAgIC8vIGBub3RpZnlOZXN0ZWRTdWJzYCBpcyBkdXBsaWNhdGVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29tcG9uZW50IGlzICB1bm1vdW50ZWQgaW5cXG4gICAgICAgIC8vIHRoZSBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLCB3aGVyZSBgdGhpcy5zdWJzY3JpcHRpb25gIHdpbGwgdGhlbiBiZSBudWxsLiBBblxcbiAgICAgICAgLy8gZXh0cmEgbnVsbCBjaGVjayBldmVyeSBjaGFuZ2UgY2FuIGJlIGF2b2lkZWQgYnkgY29weWluZyB0aGUgbWV0aG9kIG9udG8gYHRoaXNgIGFuZCB0aGVuXFxuICAgICAgICAvLyByZXBsYWNpbmcgaXQgd2l0aCBhIG5vLW9wIG9uIHVubW91bnQuIFRoaXMgY2FuIHByb2JhYmx5IGJlIGF2b2lkZWQgaWYgU3Vic2NyaXB0aW9uJ3NcXG4gICAgICAgIC8vIGxpc3RlbmVycyBsb2dpYyBpcyBjaGFuZ2VkIHRvIG5vdCBjYWxsIGxpc3RlbmVycyB0aGF0IGhhdmUgYmVlbiB1bnN1YnNjcmliZWQgaW4gdGhlXFxuICAgICAgICAvLyBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLlxcbiAgICAgICAgdGhpcy5ub3RpZnlOZXN0ZWRTdWJzID0gdGhpcy5zdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3Vicy5iaW5kKHRoaXMuc3Vic2NyaXB0aW9uKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm9uU3RhdGVDaGFuZ2UgPSBmdW5jdGlvbiBvblN0YXRlQ2hhbmdlKCkge1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyk7XFxuXFxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlKSB7XFxuICAgICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicygpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgdGhpcy5jb21wb25lbnREaWRVcGRhdGUgPSB0aGlzLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZTtcXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShkdW1teVN0YXRlKTtcXG4gICAgICAgIH1cXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSgpIHtcXG4gICAgICAgIC8vIGBjb21wb25lbnREaWRVcGRhdGVgIGlzIGNvbmRpdGlvbmFsbHkgaW1wbGVtZW50ZWQgd2hlbiBgb25TdGF0ZUNoYW5nZWAgZGV0ZXJtaW5lcyBpdFxcbiAgICAgICAgLy8gbmVlZHMgdG8gbm90aWZ5IG5lc3RlZCBzdWJzLiBPbmNlIGNhbGxlZCwgaXQgdW5pbXBsZW1lbnRzIGl0c2VsZiB1bnRpbCBmdXJ0aGVyIHN0YXRlXFxuICAgICAgICAvLyBjaGFuZ2VzIG9jY3VyLiBEb2luZyBpdCB0aGlzIHdheSB2cyBoYXZpbmcgYSBwZXJtYW5lbnQgYGNvbXBvbmVudERpZFVwZGF0ZWAgdGhhdCBkb2VzXFxuICAgICAgICAvLyBhIGJvb2xlYW4gY2hlY2sgZXZlcnkgdGltZSBhdm9pZHMgYW4gZXh0cmEgbWV0aG9kIGNhbGwgbW9zdCBvZiB0aGUgdGltZSwgcmVzdWx0aW5nXFxuICAgICAgICAvLyBpbiBzb21lIHBlcmYgYm9vc3QuXFxuICAgICAgICB0aGlzLmNvbXBvbmVudERpZFVwZGF0ZSA9IHVuZGVmaW5lZDtcXG4gICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicygpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaXNTdWJzY3JpYmVkID0gZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5zdWJzY3JpcHRpb24pICYmIHRoaXMuc3Vic2NyaXB0aW9uLmlzU3Vic2NyaWJlZCgpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuYWRkRXh0cmFQcm9wcyA9IGZ1bmN0aW9uIGFkZEV4dHJhUHJvcHMocHJvcHMpIHtcXG4gICAgICAgIGlmICghd2l0aFJlZiAmJiAhcmVuZGVyQ291bnRQcm9wICYmICEodGhpcy5wcm9wc01vZGUgJiYgdGhpcy5zdWJzY3JpcHRpb24pKSByZXR1cm4gcHJvcHM7XFxuICAgICAgICAvLyBtYWtlIGEgc2hhbGxvdyBjb3B5IHNvIHRoYXQgZmllbGRzIGFkZGVkIGRvbid0IGxlYWsgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdG9yLlxcbiAgICAgICAgLy8gdGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgJ3JlZicgc2luY2UgdGhhdCdzIGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlIGNvbXBvbmVudFxcbiAgICAgICAgLy8gaW5zdGFuY2UuIGEgc2luZ2xldG9uIG1lbW9pemVkIHNlbGVjdG9yIHdvdWxkIHRoZW4gYmUgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGVcXG4gICAgICAgIC8vIGluc3RhbmNlLCBwcmV2ZW50aW5nIHRoZSBpbnN0YW5jZSBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWRcXG4gICAgICAgIHZhciB3aXRoRXh0cmFzID0gX2V4dGVuZHMoe30sIHByb3BzKTtcXG4gICAgICAgIGlmICh3aXRoUmVmKSB3aXRoRXh0cmFzLnJlZiA9IHRoaXMuc2V0V3JhcHBlZEluc3RhbmNlO1xcbiAgICAgICAgaWYgKHJlbmRlckNvdW50UHJvcCkgd2l0aEV4dHJhc1tyZW5kZXJDb3VudFByb3BdID0gdGhpcy5yZW5kZXJDb3VudCsrO1xcbiAgICAgICAgaWYgKHRoaXMucHJvcHNNb2RlICYmIHRoaXMuc3Vic2NyaXB0aW9uKSB3aXRoRXh0cmFzW3N1YnNjcmlwdGlvbktleV0gPSB0aGlzLnN1YnNjcmlwdGlvbjtcXG4gICAgICAgIHJldHVybiB3aXRoRXh0cmFzO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gdGhpcy5zZWxlY3RvcjtcXG4gICAgICAgIHNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xcblxcbiAgICAgICAgaWYgKHNlbGVjdG9yLmVycm9yKSB7XFxuICAgICAgICAgIHRocm93IHNlbGVjdG9yLmVycm9yO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShXcmFwcGVkQ29tcG9uZW50LCB0aGlzLmFkZEV4dHJhUHJvcHMoc2VsZWN0b3IucHJvcHMpKTtcXG4gICAgICAgIH1cXG4gICAgICB9O1xcblxcbiAgICAgIHJldHVybiBDb25uZWN0O1xcbiAgICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICAgIENvbm5lY3QuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XFxuICAgIENvbm5lY3QuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcXG4gICAgQ29ubmVjdC5jaGlsZENvbnRleHRUeXBlcyA9IGNoaWxkQ29udGV4dFR5cGVzO1xcbiAgICBDb25uZWN0LmNvbnRleHRUeXBlcyA9IGNvbnRleHRUeXBlcztcXG4gICAgQ29ubmVjdC5wcm9wVHlwZXMgPSBjb250ZXh0VHlwZXM7XFxuXFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVcGRhdGUoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIC8vIFdlIGFyZSBob3QgcmVsb2FkaW5nIVxcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiAhPT0gdmVyc2lvbikge1xcbiAgICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbiAgICAgICAgICB0aGlzLmluaXRTZWxlY3RvcigpO1xcblxcbiAgICAgICAgICAvLyBJZiBhbnkgY29ubmVjdGVkIGRlc2NlbmRhbnRzIGRvbid0IGhvdCByZWxvYWQgKGFuZCByZXN1YnNjcmliZSBpbiB0aGUgcHJvY2VzcyksIHRoZWlyXFxuICAgICAgICAgIC8vIGxpc3RlbmVycyB3aWxsIGJlIGxvc3Qgd2hlbiB3ZSB1bnN1YnNjcmliZS4gVW5mb3J0dW5hdGVseSwgYnkgY29weWluZyBvdmVyIGFsbFxcbiAgICAgICAgICAvLyBsaXN0ZW5lcnMsIHRoaXMgZG9lcyBtZWFuIHRoYXQgdGhlIG9sZCB2ZXJzaW9ucyBvZiBjb25uZWN0ZWQgZGVzY2VuZGFudHMgd2lsbCBzdGlsbCBiZVxcbiAgICAgICAgICAvLyBub3RpZmllZCBvZiBzdGF0ZSBjaGFuZ2VzOyBob3dldmVyLCB0aGVpciBvblN0YXRlQ2hhbmdlIGZ1bmN0aW9uIGlzIGEgbm8tb3Agc28gdGhpc1xcbiAgICAgICAgICAvLyBpc24ndCBhIGh1Z2UgZGVhbC5cXG4gICAgICAgICAgdmFyIG9sZExpc3RlbmVycyA9IFtdO1xcblxcbiAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcXG4gICAgICAgICAgICBvbGRMaXN0ZW5lcnMgPSB0aGlzLnN1YnNjcmlwdGlvbi5saXN0ZW5lcnMuZ2V0KCk7XFxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICB0aGlzLmluaXRTdWJzY3JpcHRpb24oKTtcXG4gICAgICAgICAgaWYgKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykge1xcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xcbiAgICAgICAgICAgIG9sZExpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5zdWJzY3JpcHRpb24ubGlzdGVuZXJzLnN1YnNjcmliZShsaXN0ZW5lcik7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9O1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0KCkoQ29ubmVjdCwgV3JhcHBlZENvbXBvbmVudCk7XFxuICB9O1xcbn1cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFjdGlvblR5cGVzOyB9KTtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAzKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGVzZSBhcmUgcHJpdmF0ZSBhY3Rpb24gdHlwZXMgcmVzZXJ2ZWQgYnkgUmVkdXguXFxuICogRm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHlvdSBtdXN0IHJldHVybiB0aGUgY3VycmVudCBzdGF0ZS5cXG4gKiBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyB1bmRlZmluZWQsIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS5cXG4gKiBEbyBub3QgcmVmZXJlbmNlIHRoZXNlIGFjdGlvbiB0eXBlcyBkaXJlY3RseSBpbiB5b3VyIGNvZGUuXFxuICovXFxudmFyIEFjdGlvblR5cGVzID0ge1xcbiAgSU5JVDogJ0BAcmVkdXgvSU5JVCdcXG5cXG4gIC8qKlxcbiAgICogQ3JlYXRlcyBhIFJlZHV4IHN0b3JlIHRoYXQgaG9sZHMgdGhlIHN0YXRlIHRyZWUuXFxuICAgKiBUaGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBkYXRhIGluIHRoZSBzdG9yZSBpcyB0byBjYWxsIGBkaXNwYXRjaCgpYCBvbiBpdC5cXG4gICAqXFxuICAgKiBUaGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBzdG9yZSBpbiB5b3VyIGFwcC4gVG8gc3BlY2lmeSBob3cgZGlmZmVyZW50XFxuICAgKiBwYXJ0cyBvZiB0aGUgc3RhdGUgdHJlZSByZXNwb25kIHRvIGFjdGlvbnMsIHlvdSBtYXkgY29tYmluZSBzZXZlcmFsIHJlZHVjZXJzXFxuICAgKiBpbnRvIGEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gYnkgdXNpbmcgYGNvbWJpbmVSZWR1Y2Vyc2AuXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSB0cmVlLCBnaXZlblxcbiAgICogdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGFjdGlvbiB0byBoYW5kbGUuXFxuICAgKlxcbiAgICogQHBhcmFtIHthbnl9IFtwcmVsb2FkZWRTdGF0ZV0gVGhlIGluaXRpYWwgc3RhdGUuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XFxuICAgKiB0byBoeWRyYXRlIHRoZSBzdGF0ZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYVxcbiAgICogcHJldmlvdXNseSBzZXJpYWxpemVkIHVzZXIgc2Vzc2lvbi5cXG4gICAqIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2Vyc2AgdG8gcHJvZHVjZSB0aGUgcm9vdCByZWR1Y2VyIGZ1bmN0aW9uLCB0aGlzIG11c3QgYmVcXG4gICAqIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIGBjb21iaW5lUmVkdWNlcnNgIGtleXMuXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2VuaGFuY2VyXSBUaGUgc3RvcmUgZW5oYW5jZXIuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XFxuICAgKiB0byBlbmhhbmNlIHRoZSBzdG9yZSB3aXRoIHRoaXJkLXBhcnR5IGNhcGFiaWxpdGllcyBzdWNoIGFzIG1pZGRsZXdhcmUsXFxuICAgKiB0aW1lIHRyYXZlbCwgcGVyc2lzdGVuY2UsIGV0Yy4gVGhlIG9ubHkgc3RvcmUgZW5oYW5jZXIgdGhhdCBzaGlwcyB3aXRoIFJlZHV4XFxuICAgKiBpcyBgYXBwbHlNaWRkbGV3YXJlKClgLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHtTdG9yZX0gQSBSZWR1eCBzdG9yZSB0aGF0IGxldHMgeW91IHJlYWQgdGhlIHN0YXRlLCBkaXNwYXRjaCBhY3Rpb25zXFxuICAgKiBhbmQgc3Vic2NyaWJlIHRvIGNoYW5nZXMuXFxuICAgKi9cXG59O2Z1bmN0aW9uIGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xcbiAgdmFyIF9yZWYyO1xcblxcbiAgaWYgKHR5cGVvZiBwcmVsb2FkZWRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZW5oYW5jZXIgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XFxuICAgIHByZWxvYWRlZFN0YXRlID0gdW5kZWZpbmVkO1xcbiAgfVxcblxcbiAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdGhlIGVuaGFuY2VyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XFxuICB9XFxuXFxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0aGUgcmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgfVxcblxcbiAgdmFyIGN1cnJlbnRSZWR1Y2VyID0gcmVkdWNlcjtcXG4gIHZhciBjdXJyZW50U3RhdGUgPSBwcmVsb2FkZWRTdGF0ZTtcXG4gIHZhciBjdXJyZW50TGlzdGVuZXJzID0gW107XFxuICB2YXIgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnM7XFxuICB2YXIgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xcblxcbiAgZnVuY3Rpb24gZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpIHtcXG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtcXG4gICAgICBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycy5zbGljZSgpO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKipcXG4gICAqIFJlYWRzIHRoZSBzdGF0ZSB0cmVlIG1hbmFnZWQgYnkgdGhlIHN0b3JlLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHthbnl9IFRoZSBjdXJyZW50IHN0YXRlIHRyZWUgb2YgeW91ciBhcHBsaWNhdGlvbi5cXG4gICAqL1xcbiAgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XFxuICAgIHJldHVybiBjdXJyZW50U3RhdGU7XFxuICB9XFxuXFxuICAvKipcXG4gICAqIEFkZHMgYSBjaGFuZ2UgbGlzdGVuZXIuIEl0IHdpbGwgYmUgY2FsbGVkIGFueSB0aW1lIGFuIGFjdGlvbiBpcyBkaXNwYXRjaGVkLFxcbiAgICogYW5kIHNvbWUgcGFydCBvZiB0aGUgc3RhdGUgdHJlZSBtYXkgcG90ZW50aWFsbHkgaGF2ZSBjaGFuZ2VkLiBZb3UgbWF5IHRoZW5cXG4gICAqIGNhbGwgYGdldFN0YXRlKClgIHRvIHJlYWQgdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBpbnNpZGUgdGhlIGNhbGxiYWNrLlxcbiAgICpcXG4gICAqIFlvdSBtYXkgY2FsbCBgZGlzcGF0Y2goKWAgZnJvbSBhIGNoYW5nZSBsaXN0ZW5lciwgd2l0aCB0aGUgZm9sbG93aW5nXFxuICAgKiBjYXZlYXRzOlxcbiAgICpcXG4gICAqIDEuIFRoZSBzdWJzY3JpcHRpb25zIGFyZSBzbmFwc2hvdHRlZCBqdXN0IGJlZm9yZSBldmVyeSBgZGlzcGF0Y2goKWAgY2FsbC5cXG4gICAqIElmIHlvdSBzdWJzY3JpYmUgb3IgdW5zdWJzY3JpYmUgd2hpbGUgdGhlIGxpc3RlbmVycyBhcmUgYmVpbmcgaW52b2tlZCwgdGhpc1xcbiAgICogd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBgZGlzcGF0Y2goKWAgdGhhdCBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXFxuICAgKiBIb3dldmVyLCB0aGUgbmV4dCBgZGlzcGF0Y2goKWAgY2FsbCwgd2hldGhlciBuZXN0ZWQgb3Igbm90LCB3aWxsIHVzZSBhIG1vcmVcXG4gICAqIHJlY2VudCBzbmFwc2hvdCBvZiB0aGUgc3Vic2NyaXB0aW9uIGxpc3QuXFxuICAgKlxcbiAgICogMi4gVGhlIGxpc3RlbmVyIHNob3VsZCBub3QgZXhwZWN0IHRvIHNlZSBhbGwgc3RhdGUgY2hhbmdlcywgYXMgdGhlIHN0YXRlXFxuICAgKiBtaWdodCBoYXZlIGJlZW4gdXBkYXRlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgYSBuZXN0ZWQgYGRpc3BhdGNoKClgIGJlZm9yZVxcbiAgICogdGhlIGxpc3RlbmVyIGlzIGNhbGxlZC4gSXQgaXMsIGhvd2V2ZXIsIGd1YXJhbnRlZWQgdGhhdCBhbGwgc3Vic2NyaWJlcnNcXG4gICAqIHJlZ2lzdGVyZWQgYmVmb3JlIHRoZSBgZGlzcGF0Y2goKWAgc3RhcnRlZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsYXRlc3RcXG4gICAqIHN0YXRlIGJ5IHRoZSB0aW1lIGl0IGV4aXRzLlxcbiAgICpcXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBldmVyeSBkaXNwYXRjaC5cXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0byByZW1vdmUgdGhpcyBjaGFuZ2UgbGlzdGVuZXIuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xcbiAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xcblxcbiAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XFxuICAgIG5leHRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XFxuXFxuICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcXG4gICAgICBpZiAoIWlzU3Vic2NyaWJlZCkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICAgIH1cXG5cXG4gICAgICBpc1N1YnNjcmliZWQgPSBmYWxzZTtcXG5cXG4gICAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XFxuICAgICAgdmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcXG4gICAgICBuZXh0TGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XFxuICAgIH07XFxuICB9XFxuXFxuICAvKipcXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uLiBJdCBpcyB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBhIHN0YXRlIGNoYW5nZS5cXG4gICAqXFxuICAgKiBUaGUgYHJlZHVjZXJgIGZ1bmN0aW9uLCB1c2VkIHRvIGNyZWF0ZSB0aGUgc3RvcmUsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlXFxuICAgKiBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBnaXZlbiBgYWN0aW9uYC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsXFxuICAgKiBiZSBjb25zaWRlcmVkIHRoZSAqKm5leHQqKiBzdGF0ZSBvZiB0aGUgdHJlZSwgYW5kIHRoZSBjaGFuZ2UgbGlzdGVuZXJzXFxuICAgKiB3aWxsIGJlIG5vdGlmaWVkLlxcbiAgICpcXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9ubHkgc3VwcG9ydHMgcGxhaW4gb2JqZWN0IGFjdGlvbnMuIElmIHlvdSB3YW50IHRvXFxuICAgKiBkaXNwYXRjaCBhIFByb21pc2UsIGFuIE9ic2VydmFibGUsIGEgdGh1bmssIG9yIHNvbWV0aGluZyBlbHNlLCB5b3UgbmVlZCB0b1xcbiAgICogd3JhcCB5b3VyIHN0b3JlIGNyZWF0aW5nIGZ1bmN0aW9uIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbWlkZGxld2FyZS4gRm9yXFxuICAgKiBleGFtcGxlLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgcmVkdXgtdGh1bmtgIHBhY2thZ2UuIEV2ZW4gdGhlXFxuICAgKiBtaWRkbGV3YXJlIHdpbGwgZXZlbnR1YWxseSBkaXNwYXRjaCBwbGFpbiBvYmplY3QgYWN0aW9ucyB1c2luZyB0aGlzIG1ldGhvZC5cXG4gICAqXFxuICAgKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIEEgcGxhaW4gb2JqZWN0IHJlcHJlc2VudGluZyDigJx3aGF0IGNoYW5nZWTigJ0uIEl0IGlzXFxuICAgKiBhIGdvb2QgaWRlYSB0byBrZWVwIGFjdGlvbnMgc2VyaWFsaXphYmxlIHNvIHlvdSBjYW4gcmVjb3JkIGFuZCByZXBsYXkgdXNlclxcbiAgICogc2Vzc2lvbnMsIG9yIHVzZSB0aGUgdGltZSB0cmF2ZWxsaW5nIGByZWR1eC1kZXZ0b29sc2AuIEFuIGFjdGlvbiBtdXN0IGhhdmVcXG4gICAqIGEgYHR5cGVgIHByb3BlcnR5IHdoaWNoIG1heSBub3QgYmUgYHVuZGVmaW5lZGAuIEl0IGlzIGEgZ29vZCBpZGVhIHRvIHVzZVxcbiAgICogc3RyaW5nIGNvbnN0YW50cyBmb3IgYWN0aW9uIHR5cGVzLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IEZvciBjb252ZW5pZW5jZSwgdGhlIHNhbWUgYWN0aW9uIG9iamVjdCB5b3UgZGlzcGF0Y2hlZC5cXG4gICAqXFxuICAgKiBOb3RlIHRoYXQsIGlmIHlvdSB1c2UgYSBjdXN0b20gbWlkZGxld2FyZSwgaXQgbWF5IHdyYXAgYGRpc3BhdGNoKClgIHRvXFxuICAgKiByZXR1cm4gc29tZXRoaW5nIGVsc2UgKGZvciBleGFtcGxlLCBhIFByb21pc2UgeW91IGNhbiBhd2FpdCkuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xcbiAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFjdGlvbikpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbnMgbXVzdCBiZSBwbGFpbiBvYmplY3RzLiAnICsgJ1VzZSBjdXN0b20gbWlkZGxld2FyZSBmb3IgYXN5bmMgYWN0aW9ucy4nKTtcXG4gICAgfVxcblxcbiAgICBpZiAodHlwZW9mIGFjdGlvbi50eXBlID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWN0aW9ucyBtYXkgbm90IGhhdmUgYW4gdW5kZWZpbmVkIFxcXCJ0eXBlXFxcIiBwcm9wZXJ0eS4gJyArICdIYXZlIHlvdSBtaXNzcGVsbGVkIGEgY29uc3RhbnQ/Jyk7XFxuICAgIH1cXG5cXG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXJzIG1heSBub3QgZGlzcGF0Y2ggYWN0aW9ucy4nKTtcXG4gICAgfVxcblxcbiAgICB0cnkge1xcbiAgICAgIGlzRGlzcGF0Y2hpbmcgPSB0cnVlO1xcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcXG4gICAgfSBmaW5hbGx5IHtcXG4gICAgICBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XFxuICAgIH1cXG5cXG4gICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnMgPSBuZXh0TGlzdGVuZXJzO1xcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTtcXG4gICAgICBsaXN0ZW5lcigpO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBhY3Rpb247XFxuICB9XFxuXFxuICAvKipcXG4gICAqIFJlcGxhY2VzIHRoZSByZWR1Y2VyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdG9yZSB0byBjYWxjdWxhdGUgdGhlIHN0YXRlLlxcbiAgICpcXG4gICAqIFlvdSBtaWdodCBuZWVkIHRoaXMgaWYgeW91ciBhcHAgaW1wbGVtZW50cyBjb2RlIHNwbGl0dGluZyBhbmQgeW91IHdhbnQgdG9cXG4gICAqIGxvYWQgc29tZSBvZiB0aGUgcmVkdWNlcnMgZHluYW1pY2FsbHkuIFlvdSBtaWdodCBhbHNvIG5lZWQgdGhpcyBpZiB5b3VcXG4gICAqIGltcGxlbWVudCBhIGhvdCByZWxvYWRpbmcgbWVjaGFuaXNtIGZvciBSZWR1eC5cXG4gICAqXFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0UmVkdWNlciBUaGUgcmVkdWNlciBmb3IgdGhlIHN0b3JlIHRvIHVzZSBpbnN0ZWFkLlxcbiAgICogQHJldHVybnMge3ZvaWR9XFxuICAgKi9cXG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWR1Y2VyKG5leHRSZWR1Y2VyKSB7XFxuICAgIGlmICh0eXBlb2YgbmV4dFJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRoZSBuZXh0UmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIGN1cnJlbnRSZWR1Y2VyID0gbmV4dFJlZHVjZXI7XFxuICAgIGRpc3BhdGNoKHsgdHlwZTogQWN0aW9uVHlwZXMuSU5JVCB9KTtcXG4gIH1cXG5cXG4gIC8qKlxcbiAgICogSW50ZXJvcGVyYWJpbGl0eSBwb2ludCBmb3Igb2JzZXJ2YWJsZS9yZWFjdGl2ZSBsaWJyYXJpZXMuXFxuICAgKiBAcmV0dXJucyB7b2JzZXJ2YWJsZX0gQSBtaW5pbWFsIG9ic2VydmFibGUgb2Ygc3RhdGUgY2hhbmdlcy5cXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIG9ic2VydmFibGUgcHJvcG9zYWw6XFxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXFxuICAgKi9cXG4gIGZ1bmN0aW9uIG9ic2VydmFibGUoKSB7XFxuICAgIHZhciBfcmVmO1xcblxcbiAgICB2YXIgb3V0ZXJTdWJzY3JpYmUgPSBzdWJzY3JpYmU7XFxuICAgIHJldHVybiBfcmVmID0ge1xcbiAgICAgIC8qKlxcbiAgICAgICAqIFRoZSBtaW5pbWFsIG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIG1ldGhvZC5cXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JzZXJ2ZXIgQW55IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIG9ic2VydmVyLlxcbiAgICAgICAqIFRoZSBvYnNlcnZlciBvYmplY3Qgc2hvdWxkIGhhdmUgYSBgbmV4dGAgbWV0aG9kLlxcbiAgICAgICAqIEByZXR1cm5zIHtzdWJzY3JpcHRpb259IEFuIG9iamVjdCB3aXRoIGFuIGB1bnN1YnNjcmliZWAgbWV0aG9kIHRoYXQgY2FuXFxuICAgICAgICogYmUgdXNlZCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSBmcm9tIHRoZSBzdG9yZSwgYW5kIHByZXZlbnQgZnVydGhlclxcbiAgICAgICAqIGVtaXNzaW9uIG9mIHZhbHVlcyBmcm9tIHRoZSBvYnNlcnZhYmxlLlxcbiAgICAgICAqL1xcbiAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XFxuICAgICAgICBpZiAodHlwZW9mIG9ic2VydmVyICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LicpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZnVuY3Rpb24gb2JzZXJ2ZVN0YXRlKCkge1xcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIubmV4dCkge1xcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZ2V0U3RhdGUoKSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIG9ic2VydmVTdGF0ZSgpO1xcbiAgICAgICAgdmFyIHVuc3Vic2NyaWJlID0gb3V0ZXJTdWJzY3JpYmUob2JzZXJ2ZVN0YXRlKTtcXG4gICAgICAgIHJldHVybiB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZSB9O1xcbiAgICAgIH1cXG4gICAgfSwgX3JlZltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11dID0gZnVuY3Rpb24gKCkge1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LCBfcmVmO1xcbiAgfVxcblxcbiAgLy8gV2hlbiBhIHN0b3JlIGlzIGNyZWF0ZWQsIGFuIFxcXCJJTklUXFxcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCBzbyB0aGF0IGV2ZXJ5XFxuICAvLyByZWR1Y2VyIHJldHVybnMgdGhlaXIgaW5pdGlhbCBzdGF0ZS4gVGhpcyBlZmZlY3RpdmVseSBwb3B1bGF0ZXNcXG4gIC8vIHRoZSBpbml0aWFsIHN0YXRlIHRyZWUuXFxuICBkaXNwYXRjaCh7IHR5cGU6IEFjdGlvblR5cGVzLklOSVQgfSk7XFxuXFxuICByZXR1cm4gX3JlZjIgPSB7XFxuICAgIGRpc3BhdGNoOiBkaXNwYXRjaCxcXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmUsXFxuICAgIGdldFN0YXRlOiBnZXRTdGF0ZSxcXG4gICAgcmVwbGFjZVJlZHVjZXI6IHJlcGxhY2VSZWR1Y2VyXFxuICB9LCBfcmVmMltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11dID0gb2JzZXJ2YWJsZSwgX3JlZjI7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDc0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3YXJuaW5nO1xcbi8qKlxcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxcbiAqXFxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZS5cXG4gKiBAcmV0dXJucyB7dm9pZH1cXG4gKi9cXG5mdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHtcXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cXG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcXG4gIH1cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xcbiAgdHJ5IHtcXG4gICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBpZiB5b3UgZW5hYmxlXFxuICAgIC8vIFxcXCJicmVhayBvbiBhbGwgZXhjZXB0aW9uc1xcXCIgaW4geW91ciBjb25zb2xlLFxcbiAgICAvLyBpdCB3b3VsZCBwYXVzZSB0aGUgZXhlY3V0aW9uIGF0IHRoaXMgbGluZS5cXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eSAqL1xcbiAgfSBjYXRjaCAoZSkge31cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tZW1wdHkgKi9cXG59XFxuXFxuLyoqKi8gfSksXFxuLyogNzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IGNvbXBvc2U7XFxuLyoqXFxuICogQ29tcG9zZXMgc2luZ2xlLWFyZ3VtZW50IGZ1bmN0aW9ucyBmcm9tIHJpZ2h0IHRvIGxlZnQuIFRoZSByaWdodG1vc3RcXG4gKiBmdW5jdGlvbiBjYW4gdGFrZSBtdWx0aXBsZSBhcmd1bWVudHMgYXMgaXQgcHJvdmlkZXMgdGhlIHNpZ25hdHVyZSBmb3JcXG4gKiB0aGUgcmVzdWx0aW5nIGNvbXBvc2l0ZSBmdW5jdGlvbi5cXG4gKlxcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IGZ1bmNzIFRoZSBmdW5jdGlvbnMgdG8gY29tcG9zZS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gb2J0YWluZWQgYnkgY29tcG9zaW5nIHRoZSBhcmd1bWVudCBmdW5jdGlvbnNcXG4gKiBmcm9tIHJpZ2h0IHRvIGxlZnQuIEZvciBleGFtcGxlLCBjb21wb3NlKGYsIGcsIGgpIGlzIGlkZW50aWNhbCB0byBkb2luZ1xcbiAqICguLi5hcmdzKSA9PiBmKGcoaCguLi5hcmdzKSkpLlxcbiAqL1xcblxcbmZ1bmN0aW9uIGNvbXBvc2UoKSB7XFxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgZnVuY3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XFxuICB9XFxuXFxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAwKSB7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XFxuICAgICAgcmV0dXJuIGFyZztcXG4gICAgfTtcXG4gIH1cXG5cXG4gIGlmIChmdW5jcy5sZW5ndGggPT09IDEpIHtcXG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICAgIHJldHVybiBhKGIuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpKTtcXG4gICAgfTtcXG4gIH0pO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50O1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBnZXREZXBlbmRzT25Pd25Qcm9wcyAqL1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImJcXFwiXSA9IHdyYXBNYXBUb1Byb3BzRnVuYztcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc192ZXJpZnlQbGFpbk9iamVjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nyk7XFxuXFxuXFxuZnVuY3Rpb24gd3JhcE1hcFRvUHJvcHNDb25zdGFudChnZXRDb25zdGFudCkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRDb25zdGFudFNlbGVjdG9yKGRpc3BhdGNoLCBvcHRpb25zKSB7XFxuICAgIHZhciBjb25zdGFudCA9IGdldENvbnN0YW50KGRpc3BhdGNoLCBvcHRpb25zKTtcXG5cXG4gICAgZnVuY3Rpb24gY29uc3RhbnRTZWxlY3RvcigpIHtcXG4gICAgICByZXR1cm4gY29uc3RhbnQ7XFxuICAgIH1cXG4gICAgY29uc3RhbnRTZWxlY3Rvci5kZXBlbmRzT25Pd25Qcm9wcyA9IGZhbHNlO1xcbiAgICByZXR1cm4gY29uc3RhbnRTZWxlY3RvcjtcXG4gIH07XFxufVxcblxcbi8vIGRlcGVuZHNPbk93blByb3BzIGlzIHVzZWQgYnkgY3JlYXRlTWFwVG9Qcm9wc1Byb3h5IHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHBhc3MgcHJvcHMgYXMgYXJnc1xcbi8vIHRvIHRoZSBtYXBUb1Byb3BzIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZWQuIEl0IGlzIGFsc28gdXNlZCBieSBtYWtlUHVyZVByb3BzU2VsZWN0b3IgdG8gZGV0ZXJtaW5lXFxuLy8gd2hldGhlciBtYXBUb1Byb3BzIG5lZWRzIHRvIGJlIGludm9rZWQgd2hlbiBwcm9wcyBoYXZlIGNoYW5nZWQuXFxuLy8gXFxuLy8gQSBsZW5ndGggb2Ygb25lIHNpZ25hbHMgdGhhdCBtYXBUb1Byb3BzIGRvZXMgbm90IGRlcGVuZCBvbiBwcm9wcyBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50Llxcbi8vIEEgbGVuZ3RoIG9mIHplcm8gaXMgYXNzdW1lZCB0byBtZWFuIG1hcFRvUHJvcHMgaXMgZ2V0dGluZyBhcmdzIHZpYSBhcmd1bWVudHMgb3IgLi4uYXJncyBhbmRcXG4vLyB0aGVyZWZvcmUgbm90IHJlcG9ydGluZyBpdHMgbGVuZ3RoIGFjY3VyYXRlbHkuLlxcbmZ1bmN0aW9uIGdldERlcGVuZHNPbk93blByb3BzKG1hcFRvUHJvcHMpIHtcXG4gIHJldHVybiBtYXBUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzICE9PSBudWxsICYmIG1hcFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMgIT09IHVuZGVmaW5lZCA/IEJvb2xlYW4obWFwVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgOiBtYXBUb1Byb3BzLmxlbmd0aCAhPT0gMTtcXG59XFxuXFxuLy8gVXNlZCBieSB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiBhbmQgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzRnVuY3Rpb24sXFxuLy8gdGhpcyBmdW5jdGlvbiB3cmFwcyBtYXBUb1Byb3BzIGluIGEgcHJveHkgZnVuY3Rpb24gd2hpY2ggZG9lcyBzZXZlcmFsIHRoaW5nczpcXG4vLyBcXG4vLyAgKiBEZXRlY3RzIHdoZXRoZXIgdGhlIG1hcFRvUHJvcHMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGRlcGVuZHMgb24gcHJvcHMsIHdoaWNoXFxuLy8gICAgaXMgdXNlZCBieSBzZWxlY3RvckZhY3RvcnkgdG8gZGVjaWRlIGlmIGl0IHNob3VsZCByZWludm9rZSBvbiBwcm9wcyBjaGFuZ2VzLlxcbi8vICAgIFxcbi8vICAqIE9uIGZpcnN0IGNhbGwsIGhhbmRsZXMgbWFwVG9Qcm9wcyBpZiByZXR1cm5zIGFub3RoZXIgZnVuY3Rpb24sIGFuZCB0cmVhdHMgdGhhdFxcbi8vICAgIG5ldyBmdW5jdGlvbiBhcyB0aGUgdHJ1ZSBtYXBUb1Byb3BzIGZvciBzdWJzZXF1ZW50IGNhbGxzLlxcbi8vICAgIFxcbi8vICAqIE9uIGZpcnN0IGNhbGwsIHZlcmlmaWVzIHRoZSBmaXJzdCByZXN1bHQgaXMgYSBwbGFpbiBvYmplY3QsIGluIG9yZGVyIHRvIHdhcm5cXG4vLyAgICB0aGUgZGV2ZWxvcGVyIHRoYXQgdGhlaXIgbWFwVG9Qcm9wcyBmdW5jdGlvbiBpcyBub3QgcmV0dXJuaW5nIGEgdmFsaWQgcmVzdWx0Llxcbi8vICAgIFxcbmZ1bmN0aW9uIHdyYXBNYXBUb1Byb3BzRnVuYyhtYXBUb1Byb3BzLCBtZXRob2ROYW1lKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gaW5pdFByb3h5U2VsZWN0b3IoZGlzcGF0Y2gsIF9yZWYpIHtcXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gX3JlZi5kaXNwbGF5TmFtZTtcXG5cXG4gICAgdmFyIHByb3h5ID0gZnVuY3Rpb24gbWFwVG9Qcm9wc1Byb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcXG4gICAgICByZXR1cm4gcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPyBwcm94eS5tYXBUb1Byb3BzKHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIDogcHJveHkubWFwVG9Qcm9wcyhzdGF0ZU9yRGlzcGF0Y2gpO1xcbiAgICB9O1xcblxcbiAgICAvLyBhbGxvdyBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5IHRvIGdldCBvd25Qcm9wc1xcbiAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IHRydWU7XFxuXFxuICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBmdW5jdGlvbiBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcXG4gICAgICBwcm94eS5tYXBUb1Byb3BzID0gbWFwVG9Qcm9wcztcXG4gICAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IGdldERlcGVuZHNPbk93blByb3BzKG1hcFRvUHJvcHMpO1xcbiAgICAgIHZhciBwcm9wcyA9IHByb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpO1xcblxcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBwcm9wcztcXG4gICAgICAgIHByb3h5LmRlcGVuZHNPbk93blByb3BzID0gZ2V0RGVwZW5kc09uT3duUHJvcHMocHJvcHMpO1xcbiAgICAgICAgcHJvcHMgPSBwcm94eShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKTtcXG4gICAgICB9XFxuXFxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwcm9wcywgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpO1xcblxcbiAgICAgIHJldHVybiBwcm9wcztcXG4gICAgfTtcXG5cXG4gICAgcmV0dXJuIHByb3h5O1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDc3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB2ZXJpZnlQbGFpbk9iamVjdDtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5cXG5cXG5cXG5mdW5jdGlvbiB2ZXJpZnlQbGFpbk9iamVjdCh2YWx1ZSwgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1ldGhvZE5hbWUgKyAnKCkgaW4gJyArIGRpc3BsYXlOYW1lICsgJyBtdXN0IHJldHVybiBhIHBsYWluIG9iamVjdC4gSW5zdGVhZCByZWNlaXZlZCAnICsgdmFsdWUgKyAnLicpO1xcbiAgfVxcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheUluc2VydFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlJbnNlcnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5TW92ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlNb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVBvcFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlQb3A7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UHVzaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlQdXNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UmVtb3ZlQWxsXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVJlbW92ZUFsbDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlTaGlmdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTcGxpY2VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U3BsaWNlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVN3YXBcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U3dhcDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlVbnNoaWZ0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVVuc2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImF1dG9maWxsXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhdXRvZmlsbDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYmx1clxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYmx1cjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2hhbmdlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjaGFuZ2U7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNsZWFyU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbGVhclN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2xlYXJTdWJtaXRFcnJvcnNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsZWFyU3VibWl0RXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJjbGVhckFzeW5jRXJyb3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsZWFyQXN5bmNFcnJvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZGVzdHJveVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGVzdHJveTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZm9jdXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvY3VzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpbml0aWFsaXplXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbml0aWFsaXplOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZXNldFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzZXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0YXJ0QXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGFydEFzeW5jVmFsaWRhdGlvbjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0U3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wQXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wQXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wU3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic2V0U3VibWl0RmFpbGVkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzZXRTdWJtaXRGYWlsZWQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdFN1Y2NlZWRlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0U3VjY2VlZGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ0b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdG91Y2g7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInVucmVnaXN0ZXJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW5yZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnRvdWNoXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1bnRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1cGRhdGVTeW5jRXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1cGRhdGVTeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1cGRhdGVTeW5jV2FybmluZ3NcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVwZGF0ZVN5bmNXYXJuaW5nczsgfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuXFxuXFxudmFyIGFycmF5SW5zZXJ0ID0gZnVuY3Rpb24gYXJyYXlJbnNlcnQoZm9ybSwgZmllbGQsIGluZGV4LCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9JTlNFUlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQsIGluZGV4OiBpbmRleCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGFycmF5TW92ZSA9IGZ1bmN0aW9uIGFycmF5TW92ZShmb3JtLCBmaWVsZCwgZnJvbSwgdG8pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfTU9WRVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgZnJvbTogZnJvbSwgdG86IHRvIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVBvcCA9IGZ1bmN0aW9uIGFycmF5UG9wKGZvcm0sIGZpZWxkKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1BPUFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlQdXNoID0gZnVuY3Rpb24gYXJyYXlQdXNoKGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QVVNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgYXJyYXlSZW1vdmUgPSBmdW5jdGlvbiBhcnJheVJlbW92ZShmb3JtLCBmaWVsZCwgaW5kZXgpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUkVNT1ZFXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCBpbmRleDogaW5kZXggfSB9O1xcbn07XFxuXFxudmFyIGFycmF5UmVtb3ZlQWxsID0gZnVuY3Rpb24gYXJyYXlSZW1vdmVBbGwoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUkVNT1ZFX0FMTFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlTaGlmdCA9IGZ1bmN0aW9uIGFycmF5U2hpZnQoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU0hJRlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGFycmF5U3BsaWNlID0gZnVuY3Rpb24gYXJyYXlTcGxpY2UoZm9ybSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NQTElDRVxcXCJdLFxcbiAgICBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXg6IGluZGV4LCByZW1vdmVOdW06IHJlbW92ZU51bSB9XFxuICB9O1xcbiAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcXG4gICAgYWN0aW9uLnBheWxvYWQgPSB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgYXJyYXlTd2FwID0gZnVuY3Rpb24gYXJyYXlTd2FwKGZvcm0sIGZpZWxkLCBpbmRleEEsIGluZGV4Qikge1xcbiAgaWYgKGluZGV4QSA9PT0gaW5kZXhCKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignU3dhcCBpbmRpY2VzIGNhbm5vdCBiZSBlcXVhbCcpO1xcbiAgfVxcbiAgaWYgKGluZGV4QSA8IDAgfHwgaW5kZXhCIDwgMCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N3YXAgaW5kaWNlcyBjYW5ub3QgYmUgbmVnYXRpdmUnKTtcXG4gIH1cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU1dBUFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXhBOiBpbmRleEEsIGluZGV4QjogaW5kZXhCIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVVuc2hpZnQgPSBmdW5jdGlvbiBhcnJheVVuc2hpZnQoZm9ybSwgZmllbGQsIHZhbHVlKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1VOU0hJRlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBhdXRvZmlsbCA9IGZ1bmN0aW9uIGF1dG9maWxsKGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBVVRPRklMTFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGJsdXIgPSBmdW5jdGlvbiBibHVyKGZvcm0sIGZpZWxkLCB2YWx1ZSwgdG91Y2gpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQkxVUlxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgdG91Y2g6IHRvdWNoIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgY2hhbmdlID0gZnVuY3Rpb24gY2hhbmdlKGZvcm0sIGZpZWxkLCB2YWx1ZSwgdG91Y2gsIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0hBTkdFXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCB0b3VjaDogdG91Y2gsIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBjbGVhclN1Ym1pdCA9IGZ1bmN0aW9uIGNsZWFyU3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgY2xlYXJTdWJtaXRFcnJvcnMgPSBmdW5jdGlvbiBjbGVhclN1Ym1pdEVycm9ycyhmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0gfTtcXG59O1xcblxcbnZhciBjbGVhckFzeW5jRXJyb3IgPSBmdW5jdGlvbiBjbGVhckFzeW5jRXJyb3IoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfQVNZTkNfRVJST1JcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZvcm0gPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgZm9ybVtfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiREVTVFJPWVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSB9O1xcbn07XFxuXFxudmFyIGZvY3VzID0gZnVuY3Rpb24gZm9jdXMoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiRk9DVVNcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGluaXRpYWxpemUgPSBmdW5jdGlvbiBpbml0aWFsaXplKGZvcm0sIHZhbHVlcywga2VlcERpcnR5KSB7XFxuICB2YXIgb3RoZXJNZXRhID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7fTtcXG5cXG4gIGlmIChrZWVwRGlydHkgaW5zdGFuY2VvZiBPYmplY3QpIHtcXG4gICAgb3RoZXJNZXRhID0ga2VlcERpcnR5O1xcbiAgICBrZWVwRGlydHkgPSBmYWxzZTtcXG4gIH1cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiSU5JVElBTElaRVxcXCJdLCBtZXRhOiBfZXh0ZW5kcyh7IGZvcm06IGZvcm0sIGtlZXBEaXJ0eToga2VlcERpcnR5IH0sIG90aGVyTWV0YSksIHBheWxvYWQ6IHZhbHVlcyB9O1xcbn07XFxuXFxudmFyIHJlZ2lzdGVyRmllbGQgPSBmdW5jdGlvbiByZWdpc3RlckZpZWxkKGZvcm0sIG5hbWUsIHR5cGUpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVHSVNURVJfRklFTERcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0sIHBheWxvYWQ6IHsgbmFtZTogbmFtZSwgdHlwZTogdHlwZSB9IH07XFxufTtcXG5cXG52YXIgcmVzZXQgPSBmdW5jdGlvbiByZXNldChmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlJFU0VUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBmdW5jdGlvbiBzdGFydEFzeW5jVmFsaWRhdGlvbihmb3JtLCBmaWVsZCkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVEFSVF9BU1lOQ19WQUxJREFUSU9OXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0gfTtcXG59O1xcblxcbnZhciBzdGFydFN1Ym1pdCA9IGZ1bmN0aW9uIHN0YXJ0U3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RBUlRfU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc3RvcEFzeW5jVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIHN0b3BBc3luY1ZhbGlkYXRpb24oZm9ybSwgZXJyb3JzKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfQVNZTkNfVkFMSURBVElPTlxcXCJdLFxcbiAgICBtZXRhOiB7IGZvcm06IGZvcm0gfSxcXG4gICAgcGF5bG9hZDogZXJyb3JzXFxuICB9O1xcbiAgaWYgKGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCkge1xcbiAgICBhY3Rpb24uZXJyb3IgPSB0cnVlO1xcbiAgfVxcbiAgcmV0dXJuIGFjdGlvbjtcXG59O1xcblxcbnZhciBzdG9wU3VibWl0ID0gZnVuY3Rpb24gc3RvcFN1Ym1pdChmb3JtLCBlcnJvcnMpIHtcXG4gIHZhciBhY3Rpb24gPSB7XFxuICAgIHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RPUF9TVUJNSVRcXFwiXSxcXG4gICAgbWV0YTogeyBmb3JtOiBmb3JtIH0sXFxuICAgIHBheWxvYWQ6IGVycm9yc1xcbiAgfTtcXG4gIGlmIChlcnJvcnMgJiYgT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgYWN0aW9uLmVycm9yID0gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgc3VibWl0ID0gZnVuY3Rpb24gc3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc2V0U3VibWl0RmFpbGVkID0gZnVuY3Rpb24gc2V0U3VibWl0RmFpbGVkKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xcbiAgICBmaWVsZHNbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNFVF9TVUJNSVRfRkFJTEVEXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSwgZXJyb3I6IHRydWUgfTtcXG59O1xcblxcbnZhciBzZXRTdWJtaXRTdWNjZWVkZWQgPSBmdW5jdGlvbiBzZXRTdWJtaXRTdWNjZWVkZWQoZm9ybSkge1xcbiAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBmaWVsZHMgPSBBcnJheShfbGVuMyA+IDEgPyBfbGVuMyAtIDEgOiAwKSwgX2tleTMgPSAxOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XFxuICAgIGZpZWxkc1tfa2V5MyAtIDFdID0gYXJndW1lbnRzW19rZXkzXTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZHM6IGZpZWxkcyB9LCBlcnJvcjogZmFsc2UgfTtcXG59O1xcblxcbnZhciB0b3VjaCA9IGZ1bmN0aW9uIHRvdWNoKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjQgPiAxID8gX2xlbjQgLSAxIDogMCksIF9rZXk0ID0gMTsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xcbiAgICBmaWVsZHNbX2tleTQgLSAxXSA9IGFyZ3VtZW50c1tfa2V5NF07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlRPVUNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSB9O1xcbn07XFxuXFxudmFyIHVucmVnaXN0ZXJGaWVsZCA9IGZ1bmN0aW9uIHVucmVnaXN0ZXJGaWVsZChmb3JtLCBuYW1lKSB7XFxuICB2YXIgZGVzdHJveU9uVW5tb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVU5SRUdJU1RFUl9GSUVMRFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSwgcGF5bG9hZDogeyBuYW1lOiBuYW1lLCBkZXN0cm95T25Vbm1vdW50OiBkZXN0cm95T25Vbm1vdW50IH0gfTtcXG59O1xcblxcbnZhciB1bnRvdWNoID0gZnVuY3Rpb24gdW50b3VjaChmb3JtKSB7XFxuICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGZpZWxkcyA9IEFycmF5KF9sZW41ID4gMSA/IF9sZW41IC0gMSA6IDApLCBfa2V5NSA9IDE7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcXG4gICAgZmllbGRzW19rZXk1IC0gMV0gPSBhcmd1bWVudHNbX2tleTVdO1xcbiAgfVxcblxcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlRPVUNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSB9O1xcbn07XFxuXFxudmFyIHVwZGF0ZVN5bmNFcnJvcnMgPSBmdW5jdGlvbiB1cGRhdGVTeW5jRXJyb3JzKGZvcm0pIHtcXG4gIHZhciBzeW5jRXJyb3JzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcXG4gIHZhciBlcnJvciA9IGFyZ3VtZW50c1syXTtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVVBEQVRFX1NZTkNfRVJST1JTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IHN5bmNFcnJvcnM6IHN5bmNFcnJvcnMsIGVycm9yOiBlcnJvciB9IH07XFxufTtcXG5cXG52YXIgdXBkYXRlU3luY1dhcm5pbmdzID0gZnVuY3Rpb24gdXBkYXRlU3luY1dhcm5pbmdzKGZvcm0pIHtcXG4gIHZhciBzeW5jV2FybmluZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcbiAgdmFyIHdhcm5pbmcgPSBhcmd1bWVudHNbMl07XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX1dBUk5JTkdTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IHN5bmNXYXJuaW5nczogc3luY1dhcm5pbmdzLCB3YXJuaW5nOiB3YXJuaW5nIH0gfTtcXG59O1xcblxcbi8qKiovIH0pLFxcbi8qIDc5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2VzNl9lcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTQpO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxudmFyIFN1Ym1pc3Npb25FcnJvciA9IGZ1bmN0aW9uIChfRXh0ZW5kYWJsZUVycm9yKSB7XFxuICBfaW5oZXJpdHMoU3VibWlzc2lvbkVycm9yLCBfRXh0ZW5kYWJsZUVycm9yKTtcXG5cXG4gIGZ1bmN0aW9uIFN1Ym1pc3Npb25FcnJvcihlcnJvcnMpIHtcXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN1Ym1pc3Npb25FcnJvcik7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChTdWJtaXNzaW9uRXJyb3IuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihTdWJtaXNzaW9uRXJyb3IpKS5jYWxsKHRoaXMsICdTdWJtaXQgVmFsaWRhdGlvbiBGYWlsZWQnKSk7XFxuXFxuICAgIF90aGlzLmVycm9ycyA9IGVycm9ycztcXG4gICAgcmV0dXJuIF90aGlzO1xcbiAgfVxcblxcbiAgcmV0dXJuIFN1Ym1pc3Npb25FcnJvcjtcXG59KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9lczZfZXJyb3JfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFN1Ym1pc3Npb25FcnJvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogODAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODEpO1xcblxcblxcbnZhciBzaWxlbmNlRXZlbnQgPSBmdW5jdGlvbiBzaWxlbmNlRXZlbnQoZXZlbnQpIHtcXG4gIHZhciBpcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50KTtcXG4gIGlmIChpcykge1xcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xcbiAgfVxcbiAgcmV0dXJuIGlzO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2lsZW5jZUV2ZW50KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGlzRXZlbnQgPSBmdW5jdGlvbiBpc0V2ZW50KGNhbmRpZGF0ZSkge1xcbiAgcmV0dXJuICEhKGNhbmRpZGF0ZSAmJiBjYW5kaWRhdGUuc3RvcFByb3BhZ2F0aW9uICYmIGNhbmRpZGF0ZS5wcmV2ZW50RGVmYXVsdCk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0V2ZW50KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcblxcblxcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNFcXVhbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcXG4gKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgY29tcGFyaXNvbnNcXG4gKiBhcmUgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoIHVwIHRvXFxuICogc2l4IGFyZ3VtZW50czogKG9ialZhbHVlLCBvdGhWYWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrXSkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XFxuICogICByZXR1cm4gL15oKD86aXxlbGxvKSQvLnRlc3QodmFsdWUpO1xcbiAqIH1cXG4gKlxcbiAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlKSB7XFxuICogICBpZiAoaXNHcmVldGluZyhvYmpWYWx1ZSkgJiYgaXNHcmVldGluZyhvdGhWYWx1ZSkpIHtcXG4gKiAgICAgcmV0dXJuIHRydWU7XFxuICogICB9XFxuICogfVxcbiAqXFxuICogdmFyIGFycmF5ID0gWydoZWxsbycsICdnb29kYnllJ107XFxuICogdmFyIG90aGVyID0gWydoaScsICdnb29kYnllJ107XFxuICpcXG4gKiBfLmlzRXF1YWxXaXRoKGFycmF5LCBvdGhlciwgY3VzdG9taXplcik7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlzRXF1YWxXaXRoKHZhbHVlLCBvdGhlciwgY3VzdG9taXplcikge1xcbiAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xcbiAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBvdGhlcikgOiB1bmRlZmluZWQ7XFxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG90aGVyLCB1bmRlZmluZWQsIGN1c3RvbWl6ZXIpIDogISFyZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzRXF1YWxXaXRoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxudmFyIHByb2Nlc3NQcm9wcyA9IGZ1bmN0aW9uIHByb2Nlc3NQcm9wcyh0eXBlLCBwcm9wcywgX3ZhbHVlKSB7XFxuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcXG5cXG4gIGlmICh0eXBlID09PSAnY2hlY2tib3gnKSB7XFxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcXG4gICAgICBjaGVja2VkOiAhIXZhbHVlXFxuICAgIH0pO1xcbiAgfVxcbiAgaWYgKHR5cGUgPT09ICdyYWRpbycpIHtcXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBwcm9wcywge1xcbiAgICAgIGNoZWNrZWQ6IHZhbHVlID09PSBfdmFsdWUsXFxuICAgICAgdmFsdWU6IF92YWx1ZVxcbiAgICB9KTtcXG4gIH1cXG4gIGlmICh0eXBlID09PSAnc2VsZWN0LW11bHRpcGxlJykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgdmFsdWU6IHZhbHVlIHx8IFtdXFxuICAgIH0pO1xcbiAgfVxcbiAgaWYgKHR5cGUgPT09ICdmaWxlJykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgdmFsdWU6IHZhbHVlIHx8IHVuZGVmaW5lZFxcbiAgICB9KTtcXG4gIH1cXG4gIHJldHVybiBwcm9wcztcXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZFByb3BzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRQcm9wcyhfcmVmMiwgbmFtZSwgX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZjIuZ2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYyLnRvSlM7XFxuXFxuICB2YXIgYXN5bmNFcnJvciA9IF9yZWYuYXN5bmNFcnJvcixcXG4gICAgICBhc3luY1ZhbGlkYXRpbmcgPSBfcmVmLmFzeW5jVmFsaWRhdGluZyxcXG4gICAgICBvbkJsdXIgPSBfcmVmLm9uQmx1cixcXG4gICAgICBvbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXFxuICAgICAgb25Ecm9wID0gX3JlZi5vbkRyb3AsXFxuICAgICAgb25EcmFnU3RhcnQgPSBfcmVmLm9uRHJhZ1N0YXJ0LFxcbiAgICAgIGRpcnR5ID0gX3JlZi5kaXJ0eSxcXG4gICAgICBkaXNwYXRjaCA9IF9yZWYuZGlzcGF0Y2gsXFxuICAgICAgb25Gb2N1cyA9IF9yZWYub25Gb2N1cyxcXG4gICAgICBmb3JtID0gX3JlZi5mb3JtLFxcbiAgICAgIGZvcm1hdCA9IF9yZWYuZm9ybWF0LFxcbiAgICAgIHBhcnNlID0gX3JlZi5wYXJzZSxcXG4gICAgICBwcmlzdGluZSA9IF9yZWYucHJpc3RpbmUsXFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcXG4gICAgICBzdWJtaXRFcnJvciA9IF9yZWYuc3VibWl0RXJyb3IsXFxuICAgICAgc3VibWl0RmFpbGVkID0gX3JlZi5zdWJtaXRGYWlsZWQsXFxuICAgICAgc3VibWl0dGluZyA9IF9yZWYuc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3IgPSBfcmVmLnN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZyA9IF9yZWYuc3luY1dhcm5pbmcsXFxuICAgICAgdmFsaWRhdGUgPSBfcmVmLnZhbGlkYXRlLFxcbiAgICAgIHZhbHVlID0gX3JlZi52YWx1ZSxcXG4gICAgICBfdmFsdWUgPSBfcmVmLl92YWx1ZSxcXG4gICAgICB3YXJuID0gX3JlZi53YXJuLFxcbiAgICAgIGN1c3RvbSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2FzeW5jRXJyb3InLCAnYXN5bmNWYWxpZGF0aW5nJywgJ29uQmx1cicsICdvbkNoYW5nZScsICdvbkRyb3AnLCAnb25EcmFnU3RhcnQnLCAnZGlydHknLCAnZGlzcGF0Y2gnLCAnb25Gb2N1cycsICdmb3JtJywgJ2Zvcm1hdCcsICdwYXJzZScsICdwcmlzdGluZScsICdwcm9wcycsICdzdGF0ZScsICdzdWJtaXRFcnJvcicsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0dGluZycsICdzeW5jRXJyb3InLCAnc3luY1dhcm5pbmcnLCAndmFsaWRhdGUnLCAndmFsdWUnLCAnX3ZhbHVlJywgJ3dhcm4nXSk7XFxuXFxuICB2YXIgZXJyb3IgPSBzeW5jRXJyb3IgfHwgYXN5bmNFcnJvciB8fCBzdWJtaXRFcnJvcjtcXG4gIHZhciB3YXJuaW5nID0gc3luY1dhcm5pbmc7XFxuXFxuICB2YXIgZm9ybWF0RmllbGRWYWx1ZSA9IGZ1bmN0aW9uIGZvcm1hdEZpZWxkVmFsdWUodmFsdWUsIGZvcm1hdCkge1xcbiAgICBpZiAoZm9ybWF0ID09PSBudWxsKSB7XFxuICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICB9XFxuICAgIHZhciBkZWZhdWx0Rm9ybWF0dGVkVmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcXG4gICAgcmV0dXJuIGZvcm1hdCA/IGZvcm1hdCh2YWx1ZSwgbmFtZSkgOiBkZWZhdWx0Rm9ybWF0dGVkVmFsdWU7XFxuICB9O1xcblxcbiAgdmFyIGZvcm1hdHRlZEZpZWxkVmFsdWUgPSBmb3JtYXRGaWVsZFZhbHVlKHZhbHVlLCBmb3JtYXQpO1xcblxcbiAgcmV0dXJuIHtcXG4gICAgaW5wdXQ6IHByb2Nlc3NQcm9wcyhjdXN0b20udHlwZSwge1xcbiAgICAgIG5hbWU6IG5hbWUsXFxuICAgICAgb25CbHVyOiBvbkJsdXIsXFxuICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxcbiAgICAgIG9uRHJhZ1N0YXJ0OiBvbkRyYWdTdGFydCxcXG4gICAgICBvbkRyb3A6IG9uRHJvcCxcXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzLFxcbiAgICAgIHZhbHVlOiBmb3JtYXR0ZWRGaWVsZFZhbHVlXFxuICAgIH0sIF92YWx1ZSksXFxuICAgIG1ldGE6IF9leHRlbmRzKHt9LCB0b0pTKHN0YXRlKSwge1xcbiAgICAgIGFjdGl2ZTogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICdhY3RpdmUnKSksXFxuICAgICAgYXN5bmNWYWxpZGF0aW5nOiBhc3luY1ZhbGlkYXRpbmcsXFxuICAgICAgYXV0b2ZpbGxlZDogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICdhdXRvZmlsbGVkJykpLFxcbiAgICAgIGRpcnR5OiBkaXJ0eSxcXG4gICAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXFxuICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgIGZvcm06IGZvcm0sXFxuICAgICAgd2FybmluZzogd2FybmluZyxcXG4gICAgICBpbnZhbGlkOiAhIWVycm9yLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdWJtaXR0aW5nOiAhIXN1Ym1pdHRpbmcsXFxuICAgICAgc3VibWl0RmFpbGVkOiAhIXN1Ym1pdEZhaWxlZCxcXG4gICAgICB0b3VjaGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3RvdWNoZWQnKSksXFxuICAgICAgdmFsaWQ6ICFlcnJvcixcXG4gICAgICB2aXNpdGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3Zpc2l0ZWQnKSlcXG4gICAgfSksXFxuICAgIGN1c3RvbTogX2V4dGVuZHMoe30sIGN1c3RvbSwgcHJvcHMpXFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRQcm9wcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogODQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldFZhbHVlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNSZWFjdE5hdGl2ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzApO1xcblxcblxcblxcbnZhciBvbkNoYW5nZVZhbHVlID0gZnVuY3Rpb24gb25DaGFuZ2VWYWx1ZShldmVudCwgX3JlZikge1xcbiAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxcbiAgICAgIG5vcm1hbGl6ZSA9IF9yZWYubm9ybWFsaXplO1xcblxcbiAgLy8gcmVhZCB2YWx1ZSBmcm9tIGlucHV0XFxuICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNSZWFjdE5hdGl2ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuICAvLyBwYXJzZSB2YWx1ZSBpZiB3ZSBoYXZlIGEgcGFyc2VyXFxuICBpZiAocGFyc2UpIHtcXG4gICAgdmFsdWUgPSBwYXJzZSh2YWx1ZSwgbmFtZSk7XFxuICB9XFxuXFxuICAvLyBub3JtYWxpemUgdmFsdWVcXG4gIGlmIChub3JtYWxpemUpIHtcXG4gICAgdmFsdWUgPSBub3JtYWxpemUobmFtZSwgdmFsdWUpO1xcbiAgfVxcblxcbiAgcmV0dXJuIHZhbHVlO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob25DaGFuZ2VWYWx1ZSk7XFxuXFxuLyoqKi8gfSksXFxuLyogODUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVJc1ByaXN0aW5lID0gZnVuY3Rpb24gY3JlYXRlSXNQcmlzdGluZShfcmVmKSB7XFxuICB2YXIgZGVlcEVxdWFsID0gX3JlZi5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBfcmVmLmVtcHR5LFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgICB2YXIgaW5pdGlhbCA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuaW5pdGlhbCcpIHx8IGVtcHR5O1xcbiAgICAgIHZhciB2YWx1ZXMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnZhbHVlcycpIHx8IGluaXRpYWw7XFxuICAgICAgcmV0dXJuIGRlZXBFcXVhbChpbml0aWFsLCB2YWx1ZXMpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzUHJpc3RpbmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDg2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuICBJbiB0aGVcXG4vLyBicm93c2VyIHRoaXMgaXMgYSBsaXR0bGUgY29tcGxpY2F0ZWQgZHVlIHRvIHVua25vd24gcXVhbGl0eSBvZiBNYXRoLnJhbmRvbSgpXFxuLy8gYW5kIGluY29uc2lzdGVudCBzdXBwb3J0IGZvciB0aGUgYGNyeXB0b2AgQVBJLiAgV2UgZG8gdGhlIGJlc3Qgd2UgY2FuIHZpYVxcbi8vIGZlYXR1cmUtZGV0ZWN0aW9uXFxuXFxuLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFxcXCJ0aGlzXFxcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cXG52YXIgZ2V0UmFuZG9tVmFsdWVzID0gKHR5cGVvZihjcnlwdG8pICE9ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pKSB8fFxcbiAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mKG1zQ3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0bykpO1xcbmlmIChnZXRSYW5kb21WYWx1ZXMpIHtcXG4gIC8vIFdIQVRXRyBjcnlwdG8gUk5HIC0gaHR0cDovL3dpa2kud2hhdHdnLm9yZy93aWtpL0NyeXB0b1xcbiAgdmFyIHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXFxuXFxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdoYXR3Z1JORygpIHtcXG4gICAgZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcXG4gICAgcmV0dXJuIHJuZHM4O1xcbiAgfTtcXG59IGVsc2Uge1xcbiAgLy8gTWF0aC5yYW5kb20oKS1iYXNlZCAoUk5HKVxcbiAgLy9cXG4gIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB1c2UgTWF0aC5yYW5kb20oKS4gIEl0J3MgZmFzdCwgYnV0IGlzIG9mIHVuc3BlY2lmaWVkXFxuICAvLyBxdWFsaXR5LlxcbiAgdmFyIHJuZHMgPSBuZXcgQXJyYXkoMTYpO1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRoUk5HKCkge1xcbiAgICBmb3IgKHZhciBpID0gMCwgcjsgaSA8IDE2OyBpKyspIHtcXG4gICAgICBpZiAoKGkgJiAweDAzKSA9PT0gMCkgciA9IE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAwMDtcXG4gICAgICBybmRzW2ldID0gciA+Pj4gKChpICYgMHgwMykgPDwgMykgJiAweGZmO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBybmRzO1xcbiAgfTtcXG59XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogODcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuLyoqXFxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XFxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXFxuICovXFxudmFyIGJ5dGVUb0hleCA9IFtdO1xcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcXG4gIGJ5dGVUb0hleFtpXSA9IChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSk7XFxufVxcblxcbmZ1bmN0aW9uIGJ5dGVzVG9VdWlkKGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IG9mZnNldCB8fCAwO1xcbiAgdmFyIGJ0aCA9IGJ5dGVUb0hleDtcXG4gIHJldHVybiBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gKyAnLScgK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArICctJyArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGJ5dGVzVG9VdWlkO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDg4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbnZhciBSZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgSGVscCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhIZWxwLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBIZWxwKCkge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5faGVscFBvcHVwID0gSFRNTFNwYW5FbGVtZW50ID0gbnVsbDtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBIZWxwLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2ZhcyBmYS1mdyBmYS1xdWVzdGlvbi1jaXJjbGUgZGVmYXVsdC1jb2xvcicsIHRoaXMucHJvcHMuY29udGFpbmVyQ2xhc3MpLCBcXFwiZGF0YS1jb250ZW50XFxcIjogdGhpcy5wcm9wcy50ZXh0LCByZWY6IGZ1bmN0aW9uIChkb20pIHsgcmV0dXJuIF90aGlzLl9oZWxwUG9wdXAgPSBkb207IH0sIHN0eWxlOiB0aGlzLnByb3BzLnN0eWxlIH0pKTtcXG4gICAgfTtcXG4gICAgSGVscC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAkKHRoaXMuX2hlbHBQb3B1cCkucG9wb3Zlcih7XFxuICAgICAgICAgICAgY29udGFpbmVyOiAnYm9keScsXFxuICAgICAgICAgICAgdHJpZ2dlcjogJ2hvdmVyJyxcXG4gICAgICAgICAgICBodG1sOiB0cnVlXFxuICAgICAgICB9KTtcXG4gICAgfTtcXG4gICAgSGVscC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAkKHRoaXMuX2hlbHBQb3B1cCkucG9wb3ZlcignZGVzdHJveScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gSGVscDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IEhlbHA7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogODkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxudmFyIGNoYXJlbmMgPSB7XFxuICAvLyBVVEYtOCBlbmNvZGluZ1xcbiAgdXRmODoge1xcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBzdHJpbmdUb0J5dGVzOiBmdW5jdGlvbihzdHIpIHtcXG4gICAgICByZXR1cm4gY2hhcmVuYy5iaW4uc3RyaW5nVG9CeXRlcyh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSkpO1xcbiAgICB9LFxcblxcbiAgICAvLyBDb252ZXJ0IGEgYnl0ZSBhcnJheSB0byBhIHN0cmluZ1xcbiAgICBieXRlc1RvU3RyaW5nOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGNoYXJlbmMuYmluLmJ5dGVzVG9TdHJpbmcoYnl0ZXMpKSk7XFxuICAgIH1cXG4gIH0sXFxuXFxuICAvLyBCaW5hcnkgZW5jb2RpbmdcXG4gIGJpbjoge1xcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBzdHJpbmdUb0J5dGVzOiBmdW5jdGlvbihzdHIpIHtcXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcXG4gICAgICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKTtcXG4gICAgICByZXR1cm4gYnl0ZXM7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBieXRlIGFycmF5IHRvIGEgc3RyaW5nXFxuICAgIGJ5dGVzVG9TdHJpbmc6IGZ1bmN0aW9uKGJ5dGVzKSB7XFxuICAgICAgZm9yICh2YXIgc3RyID0gW10sIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspXFxuICAgICAgICBzdHIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKSk7XFxuICAgICAgcmV0dXJuIHN0ci5qb2luKCcnKTtcXG4gICAgfVxcbiAgfVxcbn07XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBjaGFyZW5jO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDkwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG52YXIgX19leHRlbmRzID0gdGhpcyAmJiB0aGlzLl9fZXh0ZW5kcyB8fCBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGQuX19wcm90b19fID0gYjtcXG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkge1xcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xcbiAgICAgICAgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0oKTtcXG52YXIgX19hc3NpZ24gPSB0aGlzICYmIHRoaXMuX19hc3NpZ24gfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcXG4gICAgICAgIHMgPSBhcmd1bWVudHNbaV07XFxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xcbiAgICB9XFxuICAgIHJldHVybiB0O1xcbn07XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciByZWR1eF9mb3JtXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcXG52YXIgcGxhdGZvcm02ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTQpO1xcbnZhciB3ZWJTdG9yYWdlID0gcGxhdGZvcm02LndlYlN0b3JhZ2U7XFxudmFyIGZvcm1zID0gcGxhdGZvcm02LmZvcm1zO1xcbnZhciB0ZXh0X2lucHV0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1NSk7XFxudmFyIHNlbGVjdF9pbnB1dF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTkpO1xcbnZhciB0b2dnbGVfcGFuZWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYwKTtcXG52YXIgaGVscGVyc18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjMpO1xcbnZhciBVdGlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcyKTtcXG52YXIgd29yZGluZ3NfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjczKTtcXG52YXIgV09SRElOR1MgPSBoZWxwZXJzXzEuZ2V0V29yZGluZ3Mod29yZGluZ3NfMS5kZWZhdWx0LCB3ZWJTdG9yYWdlLmxvY2FsZSk7XFxudmFyIEN1c3RvbUZvcm0gPSBmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhDdXN0b21Gb3JtLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBDdXN0b21Gb3JtKHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnJlbmRlclJGUURldGFpbHMgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgdmFyIHJmcSA9IF90aGlzLnByb3BzLmRhdGEucmZxO1xcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInRpbGUgY29sLXhzLTEyIGJvdHRvbS1tYXJnaW4tbGdcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRhYmxlXFxcIiwgeyBzdHlsZTogeyB3aWR0aDogJzEwMCUnLCBtaW5IZWlnaHQ6IDQwIH0gfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhlYWRcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0clxcXCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pZCksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pc3N1ZV9kYXRlKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tbGFiZWxcXFwiIH0sIFdPUkRJTkdTLmlzc3VlX3RpbWUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0aFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby1sYWJlbFxcXCIgfSwgV09SRElOR1Mubm90ZSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGJvZHlcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0clxcXCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEuaWQpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0ZFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby12YWx1ZVxcXCIsIHN0eWxlOiB7IHZlcnRpY2FsQWxpZ246ICdib3R0b20nIH0gfSwgcmZxLmlzc3VlRGF0ZSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEuaXNzdWVUaW1lKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGRcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tdmFsdWVcXFwiLCBzdHlsZTogeyB2ZXJ0aWNhbEFsaWduOiAnYm90dG9tJyB9IH0sIHJmcS5ub3RlKSkpKSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMucmVuZGVySXRlbXMgPSBmdW5jdGlvbiAoX2EpIHtcXG4gICAgICAgICAgICB2YXIgZmllbGRzID0gX2EuZmllbGRzO1xcbiAgICAgICAgICAgIHZhciB0b3RhbCA9IFV0aWxzLmRpc3BsYXlUb3RhbEFtb3VudChmaWVsZHMuZ2V0QWxsKCkpO1xcbiAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHsgdG90YWw6IHRvdGFsIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImJvdHRvbS1tYXJnaW5cXFwiLCBzdHlsZTogeyB0ZXh0QWxpZ246ICdyaWdodCcgfSB9LCBXT1JESU5HUy50b3RhbF9hbW91bnQsIFxcXCI6IFxcXCIsIHRvdGFsKSwgX3RoaXMucmVuZGVySXRlbSh7IGZpZWxkczogZmllbGRzIH0pKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5yZW5kZXJJdGVtID0gZnVuY3Rpb24gKF9hKSB7XFxuICAgICAgICAgICAgdmFyIGZpZWxkcyA9IF9hLmZpZWxkcztcXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgbnVsbCwgZmllbGRzLm1hcChmdW5jdGlvbiAobWVtYmVyLCBpbmRleCwgZmllbGRzKSB7XFxuICAgICAgICAgICAgICAgIHZhciBsaW5lID0gX3RoaXMucHJvcHMuZGF0YS5saW5lc1tpbmRleF07XFxuICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IGZpZWxkcy5nZXQoaW5kZXgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBrZXk6IGluZGV4LCBjbGFzc05hbWU6IFxcXCJib3R0b20tbWFyZ2luXFxcIiwgc3R5bGU6IHsgcGFkZGluZzogMTUsIGJvcmRlckNvbG9yOiBcXFwiI2VlZVxcXCIsIGJvcmRlcldpZHRoOiAxLCBib3JkZXJTdHlsZTogXFxcInNvbGlkXFxcIiB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicm93IGJvdHRvbS1tYXJnaW5cXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJcXFwiLCBudWxsLCBXT1JESU5HUy5saW5lLCBcXFwiICNcXFwiLCBsaW5lLmlkKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFdPUkRJTkdTLmFtb3VudCwgXFxcIjogXFxcIiwgVXRpbHMuZGlzcGxheUl0ZW1BbW91bnQoZmllbGQpKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicm93IHRleHQtbWVkaXVtIGJvdHRvbS1tYXJnaW5cXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFdPUkRJTkdTLmRlc2NyaXB0aW9uLCBcXFwiOiBcXFwiLCBsaW5lLm5vdGUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImNvbC14cy02XFxcIiB9LCBXT1JESU5HUy5xdWFudGl0eSwgXFxcIjogXFxcIiwgbGluZS5xdWFudGl0eSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvd1xcXCIgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChzZWxlY3RfaW5wdXRfMS5kZWZhdWx0LCB7IG5hbWU6IG1lbWJlciArIFxcXCIuaXRlbVxcXCIsIGxhYmVsOiBXT1JESU5HUy5zZWxlY3RfaXRlbSwgY29udGFpbmVyQ2xhc3M6IFxcXCJjb2wteHMtMTJcXFwiLCBvcHRpb25zOiBVdGlscy5mb3JtYXRJdGVtc09wdGlvbnMobGluZS5pdGVtcykgfSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvd1xcXCIgfSwgUmVhY3QuY3JlYXRlRWxlbWVudCh0ZXh0X2lucHV0XzEuZGVmYXVsdCwgeyBuYW1lOiBtZW1iZXIgKyBcXFwiLmRpc2NvdW50XFxcIiwgbGFiZWw6IFdPUkRJTkdTLmRpc2NvdW50LCBjb250YWluZXJDbGFzczogXFxcImNvbC14cy0xMlxcXCIsIHR5cGU6IFxcXCJudW1iZXJcXFwiIH0pKSk7XFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN1Ym1pdEZvcm0gPSBmdW5jdGlvbiAodmFsdWVzKSB7XFxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gX19hc3NpZ24oe30sIHZhbHVlcywgeyB0b3RhbDogX3RoaXMuc3RhdGUudG90YWwgfSk7XFxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xcbiAgICAgICAgICAgIF90aGlzLnByb3BzLnN1Ym1pdEZvcm0oe1xcbiAgICAgICAgICAgICAgICByZnE6IEpTT04uc3RyaW5naWZ5KHZhbHVlcy5yZnEpLFxcbiAgICAgICAgICAgICAgICBsaW5lczogSlNPTi5zdHJpbmdpZnkodmFsdWVzLmxpbmVzKVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0geyB0b3RhbDogJycgfTtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBDdXN0b21Gb3JtLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodG9nZ2xlX3BhbmVsXzEuZGVmYXVsdCwgeyBwYW5lbFRpdGxlOiBcXFwiUHJvdmlkZSBRdW90ZVxcXCIsIGhpZGVUaXRsZTogZmFsc2UsIGRlZmF1bHRPcGVuZWQ6IHRydWUsIHRvZ2dsYWJsZTogZmFsc2UsIGNhbmNlbEJ0bjogeyBsYWJlbDogV09SRElOR1MuY2FuY2VsLCBhY3Rpb246IHByb3BzLmNsb3NlRm9ybSB9LCBzdWJtaXRCdG46IHsgbGFiZWw6IFdPUkRJTkdTLnN1Ym1pdCwgYWN0aW9uOiBwcm9wcy5oYW5kbGVTdWJtaXQodGhpcy5zdWJtaXRGb3JtKSB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImg0XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJ1cHBlciBib3R0b20tbWFyZ2luXFxcIiB9LCBXT1JESU5HUy5yZnFfaW5mbyksIHRoaXMucmVuZGVyUkZRRGV0YWlscygpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJoNFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidXBwZXIgYm90dG9tLW1hcmdpblxcXCIgfSwgV09SRElOR1MubGlzdF9pdGVtcyksIFJlYWN0LmNyZWF0ZUVsZW1lbnQocmVkdXhfZm9ybV8xLkZpZWxkQXJyYXksIHsgbmFtZTogXFxcImxpbmVzXFxcIiwgY29tcG9uZW50OiB0aGlzLnJlbmRlckl0ZW1zIH0pKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIEN1c3RvbUZvcm07XFxufShSZWFjdC5Db21wb25lbnQpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IGZvcm1zLnJlZHV4Rm9ybSh7IGZvcm06ICdjdXN0b21fZm9ybScgfSkoQ3VzdG9tRm9ybSk7XFxuXFxuLyoqKi8gfSksXFxuLyogOTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3JlZHVjZXJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3JlZHV4Rm9ybV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0ZpZWxkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fRmllbGRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fRmllbGRBcnJheV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Zvcm1WYWx1ZVNlbGVjdG9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fc2VsZWN0b3JzX2dldEZvcm1OYW1lc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX3NlbGVjdG9yc19nZXRGb3JtVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fc2VsZWN0b3JzX2dldEZvcm1Jbml0aWFsVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX3NlbGVjdG9yc19nZXRGb3JtU3luY0Vycm9yc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19zZWxlY3RvcnNfZ2V0Rm9ybUFzeW5jRXJyb3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX3NlbGVjdG9yc19nZXRGb3JtU3luY1dhcm5pbmdzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NlbGVjdG9yc19nZXRGb3JtU3VibWl0RXJyb3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX3NlbGVjdG9yc19pc0RpcnR5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3NlbGVjdG9yc19pc0ludmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fc2VsZWN0b3JzX2lzUHJpc3RpbmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX3NlbGVjdG9yc19pc1N1Ym1pdHRpbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fc2VsZWN0b3JzX2hhc1N1Ym1pdFN1Y2NlZWRlZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19zZWxlY3RvcnNfaGFzU3VibWl0RmFpbGVkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX0Zvcm1fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fRm9ybVNlY3Rpb25fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fU3VibWlzc2lvbkVycm9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fcHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX2FjdGlvbnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X19hY3Rpb25UeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgY3JlYXRlQWxsID0gZnVuY3Rpb24gY3JlYXRlQWxsKHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIF9leHRlbmRzKHtcXG4gICAgLy8gc2VwYXJhdGUgb3V0IGZpZWxkIGFjdGlvbnNcXG4gICAgYWN0aW9uVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjZfX2FjdGlvblR5cGVzX19cXG4gIH0sIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX2FjdGlvbnNfXywge1xcbiAgICBGaWVsZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fRmllbGRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIEZpZWxkczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fRmllbGRzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGaWVsZEFycmF5OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19GaWVsZEFycmF5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19Gb3JtX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICBGb3JtU2VjdGlvbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fRm9ybVNlY3Rpb25fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgIGZvcm1WYWx1ZVNlbGVjdG9yOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19mb3JtVmFsdWVTZWxlY3Rvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybU5hbWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19zZWxlY3RvcnNfZ2V0Rm9ybU5hbWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBnZXRGb3JtVmFsdWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19zZWxlY3RvcnNfZ2V0Rm9ybVZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybUluaXRpYWxWYWx1ZXM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX3NlbGVjdG9yc19nZXRGb3JtSW5pdGlhbFZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVN5bmNFcnJvcnM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNFcnJvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1Bc3luY0Vycm9yczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX3NlbGVjdG9yc19nZXRGb3JtQXN5bmNFcnJvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1TeW5jV2FybmluZ3M6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNXYXJuaW5nc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVN1Ym1pdEVycm9yczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NlbGVjdG9yc19nZXRGb3JtU3VibWl0RXJyb3JzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc0RpcnR5OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fc2VsZWN0b3JzX2lzRGlydHlfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzSW52YWxpZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3NlbGVjdG9yc19pc0ludmFsaWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzUHJpc3RpbmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19zZWxlY3RvcnNfaXNQcmlzdGluZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgaXNWYWxpZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX3NlbGVjdG9yc19pc1ZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc1N1Ym1pdHRpbmc6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19zZWxlY3RvcnNfaXNTdWJtaXR0aW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBoYXNTdWJtaXRTdWNjZWVkZWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19zZWxlY3RvcnNfaGFzU3VibWl0U3VjY2VlZGVkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBoYXNTdWJtaXRGYWlsZWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19zZWxlY3RvcnNfaGFzU3VibWl0RmFpbGVkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBwcm9wVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX3Byb3BUeXBlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgcmVkdXhGb3JtOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yZWR1eEZvcm1fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIHJlZHVjZXI6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3JlZHVjZXJfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIFN1Ym1pc3Npb25FcnJvcjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fU3VibWlzc2lvbkVycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICB2YWx1ZXM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3ZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKVxcbiAgfSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVBbGwpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVsZXRlSW5XaXRoQ2xlYW5VcF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Myk7XFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZVJlZHVjZXIgPSBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyKHN0cnVjdHVyZSkge1xcbiAgdmFyIF9iZWhhdmlvcnM7XFxuXFxuICB2YXIgZGVlcEVxdWFsID0gc3RydWN0dXJlLmRlZXBFcXVhbCxcXG4gICAgICBlbXB0eSA9IHN0cnVjdHVyZS5lbXB0eSxcXG4gICAgICBnZXRJbiA9IHN0cnVjdHVyZS5nZXRJbixcXG4gICAgICBzZXRJbiA9IHN0cnVjdHVyZS5zZXRJbixcXG4gICAgICBkZWxldGVJbiA9IHN0cnVjdHVyZS5kZWxldGVJbixcXG4gICAgICBmcm9tSlMgPSBzdHJ1Y3R1cmUuZnJvbUpTLFxcbiAgICAgIGtleXMgPSBzdHJ1Y3R1cmUua2V5cyxcXG4gICAgICBzaXplID0gc3RydWN0dXJlLnNpemUsXFxuICAgICAgc3BsaWNlID0gc3RydWN0dXJlLnNwbGljZTtcXG5cXG4gIHZhciBkZWxldGVJbldpdGhDbGVhblVwID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVsZXRlSW5XaXRoQ2xlYW5VcF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHZhciBkb1NwbGljZSA9IGZ1bmN0aW9uIGRvU3BsaWNlKHN0YXRlLCBrZXksIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB2YWx1ZSwgZm9yY2UpIHtcXG4gICAgdmFyIGV4aXN0aW5nID0gZ2V0SW4oc3RhdGUsIGtleSArICcuJyArIGZpZWxkKTtcXG4gICAgcmV0dXJuIGV4aXN0aW5nIHx8IGZvcmNlID8gc2V0SW4oc3RhdGUsIGtleSArICcuJyArIGZpZWxkLCBzcGxpY2UoZXhpc3RpbmcsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSkgOiBzdGF0ZTtcXG4gIH07XFxuICB2YXIgcm9vdEtleXMgPSBbJ3ZhbHVlcycsICdmaWVsZHMnLCAnc3VibWl0RXJyb3JzJywgJ2FzeW5jRXJyb3JzJ107XFxuICB2YXIgYXJyYXlTcGxpY2UgPSBmdW5jdGlvbiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIG5vblZhbHVlc1ZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IGVtcHR5IDogdW5kZWZpbmVkO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICd2YWx1ZXMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUsIHRydWUpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdmaWVsZHMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgbm9uVmFsdWVzVmFsdWUpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdzeW5jRXJyb3JzJywgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHVuZGVmaW5lZCk7XFxuICAgIHJlc3VsdCA9IGRvU3BsaWNlKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdhc3luY0Vycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG5cXG4gIHZhciBiZWhhdmlvcnMgPSAoX2JlaGF2aW9ycyA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9JTlNFUlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmKSB7XFxuICAgIHZhciBfcmVmJG1ldGEgPSBfcmVmLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZiRtZXRhLmluZGV4LFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYucGF5bG9hZDtcXG5cXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgaW5kZXgsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX01PVkVcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMikge1xcbiAgICB2YXIgX3JlZjIkbWV0YSA9IF9yZWYyLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYyJG1ldGEuZmllbGQsXFxuICAgICAgICBmcm9tID0gX3JlZjIkbWV0YS5mcm9tLFxcbiAgICAgICAgdG8gPSBfcmVmMiRtZXRhLnRvO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgaWYgKGxlbmd0aCkge1xcbiAgICAgIHJvb3RLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgdmFyIHBhdGggPSBrZXkgKyAnLicgKyBmaWVsZDtcXG4gICAgICAgIGlmIChnZXRJbihyZXN1bHQsIHBhdGgpKSB7XFxuICAgICAgICAgIHZhciB2YWx1ZSA9IGdldEluKHJlc3VsdCwgcGF0aCArICdbJyArIGZyb20gKyAnXScpO1xcbiAgICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIHBhdGgsIHNwbGljZShnZXRJbihyZXN1bHQsIHBhdGgpLCBmcm9tLCAxKSk7IC8vIHJlbW92ZVxcbiAgICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIHBhdGgsIHNwbGljZShnZXRJbihyZXN1bHQsIHBhdGgpLCB0bywgMCwgdmFsdWUpKTsgLy8gaW5zZXJ0XFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QT1BcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMykge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmMy5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHJldHVybiBsZW5ndGggPyBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGxlbmd0aCAtIDEsIDEpIDogc3RhdGU7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUFVTSFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY0KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWY0Lm1ldGEuZmllbGQsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjQucGF5bG9hZDtcXG5cXG4gICAgdmFyIGFycmF5ID0gZ2V0SW4oc3RhdGUsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gc2l6ZShhcnJheSkgOiAwO1xcbiAgICByZXR1cm4gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCBsZW5ndGgsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY1KSB7XFxuICAgIHZhciBfcmVmNSRtZXRhID0gX3JlZjUubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjUkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZjUkbWV0YS5pbmRleDtcXG5cXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgaW5kZXgsIDEpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRV9BTExcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmNikge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmNi5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHJldHVybiBsZW5ndGggPyBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIGxlbmd0aCkgOiBzdGF0ZTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9TSElGVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY3KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWY3Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIDEpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NQTElDRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY4KSB7XFxuICAgIHZhciBfcmVmOCRtZXRhID0gX3JlZjgubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjgkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZjgkbWV0YS5pbmRleCxcXG4gICAgICAgIHJlbW92ZU51bSA9IF9yZWY4JG1ldGEucmVtb3ZlTnVtLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWY4LnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NXQVBcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmOSkge1xcbiAgICB2YXIgX3JlZjkkbWV0YSA9IF9yZWY5Lm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWY5JG1ldGEuZmllbGQsXFxuICAgICAgICBpbmRleEEgPSBfcmVmOSRtZXRhLmluZGV4QSxcXG4gICAgICAgIGluZGV4QiA9IF9yZWY5JG1ldGEuaW5kZXhCO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJvb3RLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHZhciB2YWx1ZUEgPSBnZXRJbihyZXN1bHQsIGtleSArICcuJyArIGZpZWxkICsgJ1snICsgaW5kZXhBICsgJ10nKTtcXG4gICAgICB2YXIgdmFsdWVCID0gZ2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QiArICddJyk7XFxuICAgICAgaWYgKHZhbHVlQSAhPT0gdW5kZWZpbmVkIHx8IHZhbHVlQiAhPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIGtleSArICcuJyArIGZpZWxkICsgJ1snICsgaW5kZXhBICsgJ10nLCB2YWx1ZUIpO1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QiArICddJywgdmFsdWVBKTtcXG4gICAgICB9XFxuICAgIH0pO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1VOU0hJRlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTApIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjEwLm1ldGEuZmllbGQsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEwLnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFVVE9GSUxMXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjExKSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWYxMS5tZXRhLmZpZWxkLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYxMS5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnYXN5bmNFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdzdWJtaXRFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcuYXV0b2ZpbGxlZCcsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICd2YWx1ZXMuJyArIGZpZWxkLCBwYXlsb2FkKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJCTFVSXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjEyKSB7XFxuICAgIHZhciBfcmVmMTIkbWV0YSA9IF9yZWYxMi5tZXRhLFxcbiAgICAgICAgZmllbGQgPSBfcmVmMTIkbWV0YS5maWVsZCxcXG4gICAgICAgIHRvdWNoID0gX3JlZjEyJG1ldGEudG91Y2gsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEyLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGluaXRpYWwgPSBnZXRJbihyZXN1bHQsICdpbml0aWFsLicgKyBmaWVsZCk7XFxuICAgIGlmIChpbml0aWFsID09PSB1bmRlZmluZWQgJiYgcGF5bG9hZCA9PT0gJycpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB9IGVsc2UgaWYgKHBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQsIHBheWxvYWQpO1xcbiAgICB9XFxuICAgIGlmIChmaWVsZCA9PT0gZ2V0SW4ocmVzdWx0LCAnYWN0aXZlJykpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdhY3RpdmUnKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy5hY3RpdmUnKTtcXG4gICAgaWYgKHRvdWNoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcsIHRydWUpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNIQU5HRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxMykge1xcbiAgICB2YXIgX3JlZjEzJG1ldGEgPSBfcmVmMTMubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjEzJG1ldGEuZmllbGQsXFxuICAgICAgICB0b3VjaCA9IF9yZWYxMyRtZXRhLnRvdWNoLFxcbiAgICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9ycyA9IF9yZWYxMyRtZXRhLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEzLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGluaXRpYWwgPSBnZXRJbihyZXN1bHQsICdpbml0aWFsLicgKyBmaWVsZCk7XFxuICAgIGlmIChpbml0aWFsID09PSB1bmRlZmluZWQgJiYgcGF5bG9hZCA9PT0gJycpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB9IGVsc2UgaWYgKHBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQsIHBheWxvYWQpO1xcbiAgICB9XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnYXN5bmNFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgaWYgKCFwZXJzaXN0ZW50U3VibWl0RXJyb3JzKSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdzdWJtaXRFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmF1dG9maWxsZWQnKTtcXG4gICAgaWYgKHRvdWNoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcsIHRydWUpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIGRlbGV0ZUluKHN0YXRlLCAndHJpZ2dlclN1Ym1pdCcpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHN0YXRlLCAnc3VibWl0RXJyb3JzJyk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfQVNZTkNfRVJST1JcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTQpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE0Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBkZWxldGVJbihzdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBmaWVsZCk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiRk9DVVNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTUpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE1Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIHByZXZpb3VzbHlBY3RpdmUgPSBnZXRJbihzdGF0ZSwgJ2FjdGl2ZScpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdmaWVsZHMuJyArIHByZXZpb3VzbHlBY3RpdmUgKyAnLmFjdGl2ZScpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy52aXNpdGVkJywgdHJ1ZSk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmFjdGl2ZScsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdhY3RpdmUnLCBmaWVsZCk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiSU5JVElBTElaRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxNikge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYxNi5wYXlsb2FkLFxcbiAgICAgICAgX3JlZjE2JG1ldGEgPSBfcmVmMTYubWV0YSxcXG4gICAgICAgIGtlZXBEaXJ0eSA9IF9yZWYxNiRtZXRhLmtlZXBEaXJ0eSxcXG4gICAgICAgIGtlZXBTdWJtaXRTdWNjZWVkZWQgPSBfcmVmMTYkbWV0YS5rZWVwU3VibWl0U3VjY2VlZGVkO1xcblxcbiAgICB2YXIgbWFwRGF0YSA9IGZyb21KUyhwYXlsb2FkKTtcXG4gICAgdmFyIHJlc3VsdCA9IGVtcHR5OyAvLyBjbGVhbiBhbGwgZmllbGQgc3RhdGVcXG5cXG4gICAgLy8gcGVyc2lzdCBvbGQgd2FybmluZ3MsIHRoZXkgd2lsbCBnZXQgcmVjYWxjdWxhdGVkIGlmIHRoZSBuZXcgZm9ybSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgdmFsdWVzXFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3RhdGUsICd3YXJuaW5nJyk7XFxuICAgIGlmICh3YXJuaW5nKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnd2FybmluZycsIHdhcm5pbmcpO1xcbiAgICB9XFxuICAgIHZhciBzeW5jV2FybmluZ3MgPSBnZXRJbihzdGF0ZSwgJ3N5bmNXYXJuaW5ncycpO1xcbiAgICBpZiAoc3luY1dhcm5pbmdzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJywgc3luY1dhcm5pbmdzKTtcXG4gICAgfVxcblxcbiAgICAvLyBwZXJzaXN0IG9sZCBlcnJvcnMsIHRoZXkgd2lsbCBnZXQgcmVjYWxjdWxhdGVkIGlmIHRoZSBuZXcgZm9ybSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgdmFsdWVzXFxuICAgIHZhciBlcnJvciA9IGdldEluKHN0YXRlLCAnZXJyb3InKTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBlcnJvcik7XFxuICAgIH1cXG4gICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihzdGF0ZSwgJ3N5bmNFcnJvcnMnKTtcXG4gICAgaWYgKHN5bmNFcnJvcnMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3JzJywgc3luY0Vycm9ycyk7XFxuICAgIH1cXG5cXG4gICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihzdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgaWYgKHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJywgcmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgIH1cXG4gICAgdmFyIG5ld1ZhbHVlcyA9IG1hcERhdGE7XFxuICAgIGlmIChrZWVwRGlydHkgJiYgcmVnaXN0ZXJlZEZpZWxkcykge1xcbiAgICAgIC8vXFxuICAgICAgLy8gS2VlcCB0aGUgdmFsdWUgb2YgZGlydHkgZmllbGRzIHdoaWxlIHVwZGF0aW5nIHRoZSB2YWx1ZSBvZlxcbiAgICAgIC8vIHByaXN0aW5lIGZpZWxkcy4gVGhpcyB3YXksIGFwcHMgY2FuIHJlaW5pdGlhbGl6ZSBmb3JtcyB3aGlsZVxcbiAgICAgIC8vIGF2b2lkaW5nIHN0b21waW5nIG9uIHVzZXIgZWRpdHMuXFxuICAgICAgLy9cXG4gICAgICAvLyBOb3RlIDE6IFRoZSBpbml0aWFsaXplIGFjdGlvbiByZXBsYWNlcyBhbGwgaW5pdGlhbCB2YWx1ZXNcXG4gICAgICAvLyByZWdhcmRsZXNzIG9mIGtlZXBEaXJ0eS5cXG4gICAgICAvL1xcbiAgICAgIC8vIE5vdGUgMjogV2hlbiBhIGZpZWxkIGlzIGRpcnR5LCBrZWVwRGlydHkgaXMgZW5hYmxlZCwgYW5kIHRoZSBmaWVsZFxcbiAgICAgIC8vIHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBuZXcgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZpZWxkLCB0aGVcXG4gICAgICAvLyBpbml0aWFsaXplIGFjdGlvbiBjYXVzZXMgdGhlIGZpZWxkIHRvIGJlY29tZSBwcmlzdGluZS4gVGhhdCBlZmZlY3RcXG4gICAgICAvLyBpcyB3aGF0IHdlIHdhbnQuXFxuICAgICAgLy9cXG4gICAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcycpO1xcbiAgICAgIHZhciBwcmV2aW91c0luaXRpYWxWYWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ2luaXRpYWwnKTtcXG4gICAgICBrZXlzKHJlZ2lzdGVyZWRGaWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgIHZhciBwcmV2aW91c0luaXRpYWxWYWx1ZSA9IGdldEluKHByZXZpb3VzSW5pdGlhbFZhbHVlcywgbmFtZSk7XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGdldEluKHByZXZpb3VzVmFsdWVzLCBuYW1lKTtcXG4gICAgICAgIGlmICghZGVlcEVxdWFsKHByZXZpb3VzVmFsdWUsIHByZXZpb3VzSW5pdGlhbFZhbHVlKSkge1xcbiAgICAgICAgICAvLyBUaGlzIGZpZWxkIHdhcyBkaXJ0eS4gUmVzdG9yZSB0aGUgZGlydHkgdmFsdWUuXFxuICAgICAgICAgIG5ld1ZhbHVlcyA9IHNldEluKG5ld1ZhbHVlcywgbmFtZSwgcHJldmlvdXNWYWx1ZSk7XFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgIH1cXG4gICAgaWYgKGtlZXBTdWJtaXRTdWNjZWVkZWQgJiYgZ2V0SW4oc3RhdGUsICdzdWJtaXRTdWNjZWVkZWQnKSkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcsIHRydWUpO1xcbiAgICB9XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcycsIG5ld1ZhbHVlcyk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2luaXRpYWwnLCBtYXBEYXRhKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJSRUdJU1RFUl9GSUVMRFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxNykge1xcbiAgICB2YXIgX3JlZjE3JHBheWxvYWQgPSBfcmVmMTcucGF5bG9hZCxcXG4gICAgICAgIG5hbWUgPSBfcmVmMTckcGF5bG9hZC5uYW1lLFxcbiAgICAgICAgdHlwZSA9IF9yZWYxNyRwYXlsb2FkLnR5cGU7XFxuXFxuICAgIHZhciBrZXkgPSAncmVnaXN0ZXJlZEZpZWxkc1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXSc7XFxuICAgIHZhciBmaWVsZCA9IGdldEluKHN0YXRlLCBrZXkpO1xcbiAgICBpZiAoZmllbGQpIHtcXG4gICAgICB2YXIgY291bnQgPSBnZXRJbihmaWVsZCwgJ2NvdW50JykgKyAxO1xcbiAgICAgIGZpZWxkID0gc2V0SW4oZmllbGQsICdjb3VudCcsIGNvdW50KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICBmaWVsZCA9IGZyb21KUyh7IG5hbWU6IG5hbWUsIHR5cGU6IHR5cGUsIGNvdW50OiAxIH0pO1xcbiAgICB9XFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwga2V5LCBmaWVsZCk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVTRVRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHZhciByZXN1bHQgPSBlbXB0eTtcXG4gICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihzdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgaWYgKHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJywgcmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgIH1cXG4gICAgdmFyIHZhbHVlcyA9IGdldEluKHN0YXRlLCAnaW5pdGlhbCcpO1xcbiAgICBpZiAodmFsdWVzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAndmFsdWVzJywgdmFsdWVzKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdpbml0aWFsJywgdmFsdWVzKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIHNldEluKHN0YXRlLCAndHJpZ2dlclN1Ym1pdCcsIHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX0FTWU5DX1ZBTElEQVRJT05cXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTgpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE4Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycsIGZpZWxkIHx8IHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIHNldEluKHN0YXRlLCAnc3VibWl0dGluZycsIHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfQVNZTkNfVkFMSURBVElPTlxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxOSkge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYxOS5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jVmFsaWRhdGluZycpO1xcbiAgICBpZiAocGF5bG9hZCAmJiBPYmplY3Qua2V5cyhwYXlsb2FkKS5sZW5ndGgpIHtcXG4gICAgICB2YXIgX2Vycm9yID0gcGF5bG9hZC5fZXJyb3IsXFxuICAgICAgICAgIGZpZWxkRXJyb3JzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHBheWxvYWQsIFsnX2Vycm9yJ10pO1xcblxcbiAgICAgIGlmIChfZXJyb3IpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2Vycm9yJywgX2Vycm9yKTtcXG4gICAgICB9XFxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpZWxkRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJywgZnJvbUpTKGZpZWxkRXJyb3JzKSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJyk7XFxuICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2Vycm9yJyk7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnYXN5bmNFcnJvcnMnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfU1VCTUlUXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIwKSB7XFxuICAgIHZhciBwYXlsb2FkID0gX3JlZjIwLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0dGluZycpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgIGlmIChwYXlsb2FkICYmIE9iamVjdC5rZXlzKHBheWxvYWQpLmxlbmd0aCkge1xcbiAgICAgIHZhciBfZXJyb3IgPSBwYXlsb2FkLl9lcnJvcixcXG4gICAgICAgICAgZmllbGRFcnJvcnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocGF5bG9hZCwgWydfZXJyb3InXSk7XFxuXFxuICAgICAgaWYgKF9lcnJvcikge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBfZXJyb3IpO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIH1cXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmllbGRFcnJvcnMpLmxlbmd0aCkge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3VibWl0RXJyb3JzJywgZnJvbUpTKGZpZWxkRXJyb3JzKSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgICAgIH1cXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnLCB0cnVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRTdWNjZWVkZWQnLCB0cnVlKTtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9GQUlMRURcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjEpIHtcXG4gICAgdmFyIGZpZWxkcyA9IF9yZWYyMS5tZXRhLmZpZWxkcztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnLCB0cnVlKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfSk7XFxuICAgIGlmIChmaWVsZHMubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnYW55VG91Y2hlZCcsIHRydWUpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0RmFpbGVkJyk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcsIHRydWUpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlRPVUNIXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIyKSB7XFxuICAgIHZhciBmaWVsZHMgPSBfcmVmMjIubWV0YS5maWVsZHM7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfSk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlJFR0lTVEVSX0ZJRUxEXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIzKSB7XFxuICAgIHZhciBfcmVmMjMkcGF5bG9hZCA9IF9yZWYyMy5wYXlsb2FkLFxcbiAgICAgICAgbmFtZSA9IF9yZWYyMyRwYXlsb2FkLm5hbWUsXFxuICAgICAgICBkZXN0cm95T25Vbm1vdW50ID0gX3JlZjIzJHBheWxvYWQuZGVzdHJveU9uVW5tb3VudDtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICB2YXIga2V5ID0gJ3JlZ2lzdGVyZWRGaWVsZHNbXFxcXCcnICsgbmFtZSArICdcXFxcJ10nO1xcbiAgICB2YXIgZmllbGQgPSBnZXRJbihyZXN1bHQsIGtleSk7XFxuICAgIGlmICghZmllbGQpIHtcXG4gICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9XFxuXFxuICAgIHZhciBjb3VudCA9IGdldEluKGZpZWxkLCAnY291bnQnKSAtIDE7XFxuICAgIGlmIChjb3VudCA8PSAwICYmIGRlc3Ryb3lPblVubW91bnQpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsIGtleSk7XFxuICAgICAgaWYgKGRlZXBFcXVhbChnZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJyksIGVtcHR5KSkge1xcbiAgICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAncmVnaXN0ZXJlZEZpZWxkcycpO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICBmaWVsZCA9IHNldEluKGZpZWxkLCAnY291bnQnLCBjb3VudCk7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXksIGZpZWxkKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVOVE9VQ0hcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjQpIHtcXG4gICAgdmFyIGZpZWxkcyA9IF9yZWYyNC5tZXRhLmZpZWxkcztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICByZXR1cm4gcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcpO1xcbiAgICB9KTtcXG4gICAgdmFyIGFueVRvdWNoZWQgPSBrZXlzKGdldEluKHJlc3VsdCwgJ3JlZ2lzdGVyZWRGaWVsZHMnKSkuc29tZShmdW5jdGlvbiAoa2V5KSB7XFxuICAgICAgcmV0dXJuIGdldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsga2V5ICsgJy50b3VjaGVkJyk7XFxuICAgIH0pO1xcbiAgICByZXN1bHQgPSBhbnlUb3VjaGVkID8gc2V0SW4ocmVzdWx0LCAnYW55VG91Y2hlZCcsIHRydWUpIDogZGVsZXRlSW4ocmVzdWx0LCAnYW55VG91Y2hlZCcpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX0VSUk9SU1xcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYyNSkge1xcbiAgICB2YXIgX3JlZjI1JHBheWxvYWQgPSBfcmVmMjUucGF5bG9hZCxcXG4gICAgICAgIHN5bmNFcnJvcnMgPSBfcmVmMjUkcGF5bG9hZC5zeW5jRXJyb3JzLFxcbiAgICAgICAgZXJyb3IgPSBfcmVmMjUkcGF5bG9hZC5lcnJvcjtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBpZiAoZXJyb3IpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdlcnJvcicsIGVycm9yKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3InLCB0cnVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N5bmNFcnJvcicpO1xcbiAgICB9XFxuICAgIGlmIChPYmplY3Qua2V5cyhzeW5jRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3JzJywgc3luY0Vycm9ycyk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3luY0Vycm9ycycpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVVBEQVRFX1NZTkNfV0FSTklOR1NcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjYpIHtcXG4gICAgdmFyIF9yZWYyNiRwYXlsb2FkID0gX3JlZjI2LnBheWxvYWQsXFxuICAgICAgICBzeW5jV2FybmluZ3MgPSBfcmVmMjYkcGF5bG9hZC5zeW5jV2FybmluZ3MsXFxuICAgICAgICB3YXJuaW5nID0gX3JlZjI2JHBheWxvYWQud2FybmluZztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBpZiAod2FybmluZykge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3dhcm5pbmcnLCB3YXJuaW5nKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICd3YXJuaW5nJyk7XFxuICAgIH1cXG4gICAgaWYgKE9iamVjdC5rZXlzKHN5bmNXYXJuaW5ncykubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJywgc3luY1dhcm5pbmdzKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzeW5jV2FybmluZ3MnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9iZWhhdmlvcnMpO1xcblxcbiAgdmFyIHJlZHVjZXIgPSBmdW5jdGlvbiByZWR1Y2VyKCkge1xcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVtcHR5O1xcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xcblxcbiAgICB2YXIgYmVoYXZpb3IgPSBiZWhhdmlvcnNbYWN0aW9uLnR5cGVdO1xcbiAgICByZXR1cm4gYmVoYXZpb3IgPyBiZWhhdmlvcihzdGF0ZSwgYWN0aW9uKSA6IHN0YXRlO1xcbiAgfTtcXG5cXG4gIHZhciBieUZvcm0gPSBmdW5jdGlvbiBieUZvcm0ocmVkdWNlcikge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICAgIHZhciBzdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZW1wdHk7XFxuICAgICAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XFxuXFxuICAgICAgdmFyIGZvcm0gPSBhY3Rpb24gJiYgYWN0aW9uLm1ldGEgJiYgYWN0aW9uLm1ldGEuZm9ybTtcXG4gICAgICBpZiAoIWZvcm0pIHtcXG4gICAgICAgIHJldHVybiBzdGF0ZTtcXG4gICAgICB9XFxuICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkRFU1RST1lcXFwiXSkge1xcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5tZXRhLmZvcm0ucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGZvcm0pIHtcXG4gICAgICAgICAgcmV0dXJuIGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCBmb3JtKTtcXG4gICAgICAgIH0sIHN0YXRlKTtcXG4gICAgICB9XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEluKHN0YXRlLCBmb3JtKTtcXG4gICAgICB2YXIgcmVzdWx0ID0gcmVkdWNlcihmb3JtU3RhdGUsIGFjdGlvbik7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gZm9ybVN0YXRlID8gc3RhdGUgOiBzZXRJbihzdGF0ZSwgZm9ybSwgcmVzdWx0KTtcXG4gICAgfTtcXG4gIH07XFxuXFxuICAvKipcXG4gICAqIEFkZHMgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IHRvIHRoZSByZWR1Y2VyXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGRlY29yYXRlKHRhcmdldCkge1xcbiAgICB0YXJnZXQucGx1Z2luID0gZnVuY3Rpb24gcGx1Z2luKHJlZHVjZXJzKSB7XFxuICAgICAgdmFyIF90aGlzID0gdGhpcztcXG5cXG4gICAgICAvLyB1c2UgJ2Z1bmN0aW9uJyBrZXl3b3JkIHRvIGVuYWJsZSAndGhpcydcXG4gICAgICByZXR1cm4gZGVjb3JhdGUoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIHN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBlbXB0eTtcXG4gICAgICAgIHZhciBhY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlZHVjZXJzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBrZXkpIHtcXG4gICAgICAgICAgdmFyIHByZXZpb3VzU3RhdGUgPSBnZXRJbihhY2N1bXVsYXRvciwga2V5KTtcXG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHJlZHVjZXJzW2tleV0ocHJldmlvdXNTdGF0ZSwgYWN0aW9uLCBnZXRJbihzdGF0ZSwga2V5KSk7XFxuICAgICAgICAgIHJldHVybiBuZXh0U3RhdGUgPT09IHByZXZpb3VzU3RhdGUgPyBhY2N1bXVsYXRvciA6IHNldEluKGFjY3VtdWxhdG9yLCBrZXksIG5leHRTdGF0ZSk7XFxuICAgICAgICB9LCBfdGhpcyhzdGF0ZSwgYWN0aW9uKSk7XFxuICAgICAgfSk7XFxuICAgIH07XFxuXFxuICAgIHJldHVybiB0YXJnZXQ7XFxuICB9XFxuXFxuICByZXR1cm4gZGVjb3JhdGUoYnlGb3JtKHJlZHVjZXIpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZVJlZHVjZXIpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xcblxcblxcblxcbnZhciBjcmVhdGVEZWxldGVJbldpdGhDbGVhblVwID0gZnVuY3Rpb24gY3JlYXRlRGVsZXRlSW5XaXRoQ2xlYW5VcChfcmVmKSB7XFxuICB2YXIgZGVlcEVxdWFsID0gX3JlZi5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBfcmVmLmVtcHR5LFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBkZWxldGVJbiA9IF9yZWYuZGVsZXRlSW4sXFxuICAgICAgc2V0SW4gPSBfcmVmLnNldEluO1xcblxcblxcbiAgdmFyIGRlbGV0ZUluV2l0aENsZWFuVXAgPSBmdW5jdGlvbiBkZWxldGVJbldpdGhDbGVhblVwKHN0YXRlLCBwYXRoKSB7XFxuICAgIGlmIChwYXRoW3BhdGgubGVuZ3RoIC0gMV0gPT09ICddJykge1xcbiAgICAgIC8vIGFycmF5IHBhdGhcXG4gICAgICB2YXIgcGF0aFRva2VucyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCk7XFxuICAgICAgcGF0aFRva2Vucy5wb3AoKTtcXG4gICAgICB2YXIgcGFyZW50ID0gZ2V0SW4oc3RhdGUsIHBhdGhUb2tlbnMuam9pbignLicpKTtcXG4gICAgICByZXR1cm4gcGFyZW50ID8gc2V0SW4oc3RhdGUsIHBhdGgsIHVuZGVmaW5lZCkgOiBzdGF0ZTtcXG4gICAgfVxcbiAgICB2YXIgcmVzdWx0ID0gZGVsZXRlSW4oc3RhdGUsIHBhdGgpO1xcbiAgICB2YXIgZG90SW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKCcuJyk7XFxuICAgIGlmIChkb3RJbmRleCA+IDApIHtcXG4gICAgICB2YXIgcGFyZW50UGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIGRvdEluZGV4KTtcXG4gICAgICBpZiAocGFyZW50UGF0aFtwYXJlbnRQYXRoLmxlbmd0aCAtIDFdICE9PSAnXScpIHtcXG4gICAgICAgIHZhciBfcGFyZW50ID0gZ2V0SW4ocmVzdWx0LCBwYXJlbnRQYXRoKTtcXG4gICAgICAgIGlmIChkZWVwRXF1YWwoX3BhcmVudCwgZW1wdHkpKSB7XFxuICAgICAgICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgcGFyZW50UGF0aCk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9O1xcblxcbiAgcmV0dXJuIGRlbGV0ZUluV2l0aENsZWFuVXA7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVEZWxldGVJbldpdGhDbGVhblVwKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA5NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXFxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXFxuICogb2YgdmFsdWVzLlxcbiAqL1xcbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBzeW1Ub1N0cmluZ1RhZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10udG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXFxuICovXFxuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XFxuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xcblxcbiAgdHJ5IHtcXG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xcbiAgfSBjYXRjaCAoZSkge31cXG5cXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcXG4gIGlmICh1bm1hc2tlZCkge1xcbiAgICBpZiAoaXNPd24pIHtcXG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0UmF3VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqXFxuICogVXNlZCB0byByZXNvbHZlIHRoZVxcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxcbiAqIG9mIHZhbHVlcy5cXG4gKi9cXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxcbiAqL1xcbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XFxuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG9iamVjdFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nyk7XFxuXFxuXFxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xcbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XFxuICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuYywgZnVuY3Rpb24oa2V5KSB7XFxuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XFxuICAgICAgY2FjaGUuY2xlYXIoKTtcXG4gICAgfVxcbiAgICByZXR1cm4ga2V5O1xcbiAgfSk7XFxuXFxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZW1vaXplQ2FwcGVkKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xcblxcblxcbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXFxuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICpcXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcXG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XFxuICpcXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcXG4gKiB2YWx1ZXMob2JqZWN0KTtcXG4gKiAvLyA9PiBbMSwgMl1cXG4gKlxcbiAqIHZhbHVlcyhvdGhlcik7XFxuICogLy8gPT4gWzMsIDRdXFxuICpcXG4gKiBvYmplY3QuYSA9IDI7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWzEsIDJdXFxuICpcXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWydhJywgJ2InXVxcbiAqXFxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xcbiAqL1xcbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XFxuICB9XFxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XFxuXFxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcXG4gICAgfVxcbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcXG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgcmV0dXJuIG1lbW9pemVkO1xcbn1cXG5cXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cXG5tZW1vaXplLkNhY2hlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19NYXBDYWNoZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZW1vaXplKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKi9cXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xcbiAgdGhpcy5zaXplID0gMDtcXG4gIHRoaXMuX19kYXRhX18gPSB7XFxuICAgICdoYXNoJzogbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgJ21hcCc6IG5ldyAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gfHwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19MaXN0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICAnc3RyaW5nJzogbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXVxcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwQ2FjaGVDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hhc2hDbGVhcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc2hEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19oYXNoR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faGFzaEhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2hhc2hTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA4KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBjb25zdHJ1Y3RvclxcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxcbiAqL1xcbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGFzaENsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faGFzaERlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5IYXNoLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc2hHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuSGFzaC5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19oYXNoSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlLnNldCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faGFzaFNldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChIYXNoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMDAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XFxuXFxuXFxuLyoqXFxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqL1xcbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcXG4gIHRoaXMuX19kYXRhX18gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkobnVsbCkgOiB7fTtcXG4gIHRoaXMuc2l6ZSA9IDA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc01hc2tlZF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU291cmNlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUzKTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXFxuICovXFxudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXFxcXFxeJC4qKz8oKVtcXFxcXXt9fF0vZztcXG5cXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXFxudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxcXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXFxcXSQvO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xcbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXFxcXFwkJicpXFxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXFxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcXG4pO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc01hc2tlZF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciBwYXR0ZXJuID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcXG4gIHJldHVybiBwYXR0ZXJuLnRlc3QoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJc05hdGl2ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3JlSnNEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMyk7XFxuXFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcXG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29yZUpzRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ua2V5cyAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ua2V5cy5JRV9QUk9UTyB8fCAnJyk7XFxuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XFxufSgpKTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XFxuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc01hc2tlZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cXG52YXIgY29yZUpzRGF0YSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXVsnX19jb3JlLWpzX3NoYXJlZF9fJ107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY29yZUpzRGF0YSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTA0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XFxuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0VmFsdWUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBIYXNoXFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcXG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hEZWxldGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xcbiAgaWYgKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSB7XFxuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XFxuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xcbiAgfVxcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzaEdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTA3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKlxcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgc2V0XFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XFxuICBkYXRhW2tleV0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gW107XFxuICB0aGlzLnNpemUgPSAwO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NvY0luZGV4T2ZfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XFxuXFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgaWYgKGluZGV4IDwgMCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xcbiAgICBkYXRhLnBvcCgpO1xcbiAgfSBlbHNlIHtcXG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xcbiAgfVxcbiAgLS10aGlzLnNpemU7XFxuICByZXR1cm4gdHJ1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobGlzdENhY2hlRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGdldFxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKipcXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgaWYgKGluZGV4IDwgMCkge1xcbiAgICArK3RoaXMuc2l6ZTtcXG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XFxuICB9IGVsc2Uge1xcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xcbiAgfVxcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGxpc3RDYWNoZVNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcXG5cXG5cXG4vKipcXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBkZWxldGVcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XFxuICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcXG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXFxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0tleWFibGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgZ2V0XFxuICogQG1lbWJlck9mIE1hcENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIGtleSkuZ2V0KGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlR2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBoYXNcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KS5oYXMoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwQ2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xcbiAgdmFyIGRhdGEgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBrZXkpLFxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XFxuXFxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcXG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlU2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlNYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xcblxcblxcblxcblxcblxcbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xcbnZhciBJTkZJTklUWSA9IDEgLyAwO1xcblxcbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xcbnZhciBzeW1ib2xQcm90byA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ucHJvdG90eXBlIDogdW5kZWZpbmVkLFxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XFxuICB9XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xcbiAgfVxcbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcXG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21lcmdlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X191dGlsX2dldERpc3BsYXlOYW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2V2ZW50c19zaWxlbmNlRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19ldmVudHNfc2lsZW5jZUV2ZW50c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19hc3luY1ZhbGlkYXRpb25fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fZGVmYXVsdFNob3VsZFZhbGlkYXRlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fZ2VuZXJhdGVWYWxpZGF0b3JfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjI1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fc2VsZWN0b3JzX2lzVmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpO1xcblxcblxcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcXFwiZnVuY3Rpb25cXFwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFxcXCJzeW1ib2xcXFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcXFwiZnVuY3Rpb25cXFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFxcXCJzeW1ib2xcXFwiIDogdHlwZW9mIG9iajsgfTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciBpc0NsYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24gaXNDbGFzc0NvbXBvbmVudChDb21wb25lbnQpIHtcXG4gIHJldHVybiBCb29sZWFuKENvbXBvbmVudCAmJiBDb21wb25lbnQucHJvdG90eXBlICYmIF90eXBlb2YoQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KSA9PT0gJ29iamVjdCcpO1xcbn07XFxuXFxuLy8gZXh0cmFjdCBmaWVsZC1zcGVjaWZpYyBhY3Rpb25zXFxuXFxudmFyIGFycmF5SW5zZXJ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5SW5zZXJ0XFxcIl0sXFxuICAgIGFycmF5TW92ZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheU1vdmVcXFwiXSxcXG4gICAgYXJyYXlQb3AgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlQb3BcXFwiXSxcXG4gICAgYXJyYXlQdXNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5UHVzaFxcXCJdLFxcbiAgICBhcnJheVJlbW92ZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVJlbW92ZVxcXCJdLFxcbiAgICBhcnJheVJlbW92ZUFsbCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVJlbW92ZUFsbFxcXCJdLFxcbiAgICBhcnJheVNoaWZ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U2hpZnRcXFwiXSxcXG4gICAgYXJyYXlTcGxpY2UgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlTcGxpY2VcXFwiXSxcXG4gICAgYXJyYXlTd2FwID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U3dhcFxcXCJdLFxcbiAgICBhcnJheVVuc2hpZnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlVbnNoaWZ0XFxcIl0sXFxuICAgIGJsdXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYmx1clxcXCJdLFxcbiAgICBjaGFuZ2UgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiY2hhbmdlXFxcIl0sXFxuICAgIGZvY3VzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImZvY3VzXFxcIl0sXFxuICAgIGZvcm1BY3Rpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fLCBbJ2FycmF5SW5zZXJ0JywgJ2FycmF5TW92ZScsICdhcnJheVBvcCcsICdhcnJheVB1c2gnLCAnYXJyYXlSZW1vdmUnLCAnYXJyYXlSZW1vdmVBbGwnLCAnYXJyYXlTaGlmdCcsICdhcnJheVNwbGljZScsICdhcnJheVN3YXAnLCAnYXJyYXlVbnNoaWZ0JywgJ2JsdXInLCAnY2hhbmdlJywgJ2ZvY3VzJ10pO1xcblxcbnZhciBhcnJheUFjdGlvbnMgPSB7XFxuICBhcnJheUluc2VydDogYXJyYXlJbnNlcnQsXFxuICBhcnJheU1vdmU6IGFycmF5TW92ZSxcXG4gIGFycmF5UG9wOiBhcnJheVBvcCxcXG4gIGFycmF5UHVzaDogYXJyYXlQdXNoLFxcbiAgYXJyYXlSZW1vdmU6IGFycmF5UmVtb3ZlLFxcbiAgYXJyYXlSZW1vdmVBbGw6IGFycmF5UmVtb3ZlQWxsLFxcbiAgYXJyYXlTaGlmdDogYXJyYXlTaGlmdCxcXG4gIGFycmF5U3BsaWNlOiBhcnJheVNwbGljZSxcXG4gIGFycmF5U3dhcDogYXJyYXlTd2FwLFxcbiAgYXJyYXlVbnNoaWZ0OiBhcnJheVVuc2hpZnRcXG59O1xcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShPYmplY3Qua2V5cyhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfXykpLCBbJ2FycmF5JywgJ2FzeW5jRXJyb3JzJywgJ2luaXRpYWxpemVkJywgJ2luaXRpYWxWYWx1ZXMnLCAnc3luY0Vycm9ycycsICdzeW5jV2FybmluZ3MnLCAndmFsdWVzJywgJ3JlZ2lzdGVyZWRGaWVsZHMnXSk7XFxuXFxudmFyIGNoZWNrU3VibWl0ID0gZnVuY3Rpb24gY2hlY2tTdWJtaXQoc3VibWl0KSB7XFxuICBpZiAoIXN1Ym1pdCB8fCB0eXBlb2Ygc3VibWl0ICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgZWl0aGVyIHBhc3MgaGFuZGxlU3VibWl0KCkgYW4gb25TdWJtaXQgZnVuY3Rpb24gb3IgcGFzcyBvblN1Ym1pdCBhcyBhIHByb3AnKTtcXG4gIH1cXG4gIHJldHVybiBzdWJtaXQ7XFxufTtcXG5cXG4vKipcXG4gKiBUaGUgZGVjb3JhdG9yIHRoYXQgaXMgdGhlIG1haW4gQVBJIHRvIHJlZHV4LWZvcm1cXG4gKi9cXG52YXIgY3JlYXRlUmVkdXhGb3JtID0gZnVuY3Rpb24gY3JlYXRlUmVkdXhGb3JtKHN0cnVjdHVyZSkge1xcbiAgdmFyIGRlZXBFcXVhbCA9IHN0cnVjdHVyZS5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBzdHJ1Y3R1cmUuZW1wdHksXFxuICAgICAgZ2V0SW4gPSBzdHJ1Y3R1cmUuZ2V0SW4sXFxuICAgICAgc2V0SW4gPSBzdHJ1Y3R1cmUuc2V0SW4sXFxuICAgICAga2V5cyA9IHN0cnVjdHVyZS5rZXlzLFxcbiAgICAgIGZyb21KUyA9IHN0cnVjdHVyZS5mcm9tSlM7XFxuXFxuICB2YXIgaXNWYWxpZCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHJldHVybiBmdW5jdGlvbiAoaW5pdGlhbENvbmZpZykge1xcbiAgICB2YXIgY29uZmlnID0gX2V4dGVuZHMoe1xcbiAgICAgIHRvdWNoT25CbHVyOiB0cnVlLFxcbiAgICAgIHRvdWNoT25DaGFuZ2U6IGZhbHNlLFxcbiAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IGZhbHNlLFxcbiAgICAgIGRlc3Ryb3lPblVubW91bnQ6IHRydWUsXFxuICAgICAgc2hvdWxkQXN5bmNWYWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgICAgc2hvdWxkVmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX2RlZmF1bHRTaG91bGRWYWxpZGF0ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgICBlbmFibGVSZWluaXRpYWxpemU6IGZhbHNlLFxcbiAgICAgIGtlZXBEaXJ0eU9uUmVpbml0aWFsaXplOiBmYWxzZSxcXG4gICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICAgIH0sXFxuICAgICAgcHVyZTogdHJ1ZSxcXG4gICAgICBmb3JjZVVucmVnaXN0ZXJPblVubW91bnQ6IGZhbHNlXFxuICAgIH0sIGluaXRpYWxDb25maWcpO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gKFdyYXBwZWRDb21wb25lbnQpIHtcXG4gICAgICB2YXIgRm9ybSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgICAgICBfaW5oZXJpdHMoRm9ybSwgX0NvbXBvbmVudCk7XFxuXFxuICAgICAgICBmdW5jdGlvbiBGb3JtKHByb3BzKSB7XFxuICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtKTtcXG5cXG4gICAgICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZvcm0uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xcblxcbiAgICAgICAgICBfdGhpcy5zdWJtaXQgPSBfdGhpcy5zdWJtaXQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnJlc2V0ID0gX3RoaXMucmVzZXQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLmFzeW5jVmFsaWRhdGUgPSBfdGhpcy5hc3luY1ZhbGlkYXRlLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5nZXRWYWx1ZXMgPSBfdGhpcy5nZXRWYWx1ZXMuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnJlZ2lzdGVyID0gX3RoaXMucmVnaXN0ZXIuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnVucmVnaXN0ZXIgPSBfdGhpcy51bnJlZ2lzdGVyLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5zdWJtaXRDb21wbGV0ZWQgPSBfdGhpcy5zdWJtaXRDb21wbGV0ZWQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnN1Ym1pdEZhaWxlZCA9IF90aGlzLnN1Ym1pdEZhaWxlZC5iaW5kKF90aGlzKTtcXG4gICAgICAgICAgX3RoaXMuZmllbGRWYWxpZGF0b3JzID0ge307XFxuICAgICAgICAgIF90aGlzLmxhc3RGaWVsZFZhbGlkYXRvcktleXMgPSBbXTtcXG4gICAgICAgICAgX3RoaXMuZmllbGRXYXJuZXJzID0ge307XFxuICAgICAgICAgIF90aGlzLmxhc3RGaWVsZFdhcm5lcktleXMgPSBbXTtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgX2NyZWF0ZUNsYXNzKEZvcm0sIFt7XFxuICAgICAgICAgIGtleTogJ2dldENoaWxkQ29udGV4dCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgIF9yZWR1eEZvcm06IF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCB7XFxuICAgICAgICAgICAgICAgIGdldEZvcm1TdGF0ZTogZnVuY3Rpb24gZ2V0Rm9ybVN0YXRlKHN0YXRlKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEluKF90aGlzMi5wcm9wcy5nZXRGb3JtU3RhdGUoc3RhdGUpLCBfdGhpczIucHJvcHMuZm9ybSk7XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGU6IHRoaXMuYXN5bmNWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWVzOiB0aGlzLmdldFZhbHVlcyxcXG4gICAgICAgICAgICAgICAgc2VjdGlvblByZWZpeDogdW5kZWZpbmVkLFxcbiAgICAgICAgICAgICAgICByZWdpc3RlcjogdGhpcy5yZWdpc3RlcixcXG4gICAgICAgICAgICAgICAgdW5yZWdpc3RlcjogdGhpcy51bnJlZ2lzdGVyLFxcbiAgICAgICAgICAgICAgICByZWdpc3RlcklubmVyT25TdWJtaXQ6IGZ1bmN0aW9uIHJlZ2lzdGVySW5uZXJPblN1Ym1pdChpbm5lck9uU3VibWl0KSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5pbm5lck9uU3VibWl0ID0gaW5uZXJPblN1Ym1pdDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2luaXRJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0SWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIGVuYWJsZVJlaW5pdGlhbGl6ZSA9IHRoaXMucHJvcHMuZW5hYmxlUmVpbml0aWFsaXplO1xcblxcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICAgIGlmICgoZW5hYmxlUmVpbml0aWFsaXplIHx8ICFuZXh0UHJvcHMuaW5pdGlhbGl6ZWQpICYmICFkZWVwRXF1YWwodGhpcy5wcm9wcy5pbml0aWFsVmFsdWVzLCBuZXh0UHJvcHMuaW5pdGlhbFZhbHVlcykpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGtlZXBEaXJ0eSA9IG5leHRQcm9wcy5pbml0aWFsaXplZCAmJiB0aGlzLnByb3BzLmtlZXBEaXJ0eU9uUmVpbml0aWFsaXplO1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmluaXRpYWxpemUobmV4dFByb3BzLmluaXRpYWxWYWx1ZXMsIGtlZXBEaXJ0eSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMgJiYgKCF0aGlzLnByb3BzLmluaXRpYWxpemVkIHx8IGVuYWJsZVJlaW5pdGlhbGl6ZSkpIHtcXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuaW5pdGlhbGl6ZSh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMsIHRoaXMucHJvcHMua2VlcERpcnR5T25SZWluaXRpYWxpemUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd1cGRhdGVTeW5jRXJyb3JzSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlU3luY0Vycm9yc0lmTmVlZGVkKG5leHRTeW5jRXJyb3JzLCBuZXh0RXJyb3IpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBfcHJvcHMuZXJyb3IsXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHMuc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyA9IF9wcm9wcy51cGRhdGVTeW5jRXJyb3JzO1xcblxcbiAgICAgICAgICAgIHZhciBub0Vycm9ycyA9ICghc3luY0Vycm9ycyB8fCAhT2JqZWN0LmtleXMoc3luY0Vycm9ycykubGVuZ3RoKSAmJiAhZXJyb3I7XFxuICAgICAgICAgICAgdmFyIG5leHROb0Vycm9ycyA9ICghbmV4dFN5bmNFcnJvcnMgfHwgIU9iamVjdC5rZXlzKG5leHRTeW5jRXJyb3JzKS5sZW5ndGgpICYmICFuZXh0RXJyb3I7XFxuICAgICAgICAgICAgaWYgKCEobm9FcnJvcnMgJiYgbmV4dE5vRXJyb3JzKSAmJiAoIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwoc3luY0Vycm9ycywgbmV4dFN5bmNFcnJvcnMpIHx8ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKGVycm9yLCBuZXh0RXJyb3IpKSkge1xcbiAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyhuZXh0U3luY0Vycm9ycywgbmV4dEVycm9yKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY2xlYXJTdWJtaXRQcm9taXNlSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXJTdWJtaXRQcm9taXNlSWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSB0aGlzLnByb3BzLnN1Ym1pdHRpbmc7XFxuXFxuICAgICAgICAgICAgaWYgKHRoaXMuc3VibWl0UHJvbWlzZSAmJiBzdWJtaXR0aW5nICYmICFuZXh0UHJvcHMuc3VibWl0dGluZykge1xcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3VibWl0UHJvbWlzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0SWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0SWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBjbGVhclN1Ym1pdCA9IF9wcm9wczIuY2xlYXJTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHRyaWdnZXJTdWJtaXQgPSBfcHJvcHMyLnRyaWdnZXJTdWJtaXQ7XFxuXFxuICAgICAgICAgICAgaWYgKCF0cmlnZ2VyU3VibWl0ICYmIG5leHRQcm9wcy50cmlnZ2VyU3VibWl0KSB7XFxuICAgICAgICAgICAgICBjbGVhclN1Ym1pdCgpO1xcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAndmFsaWRhdGVJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZUlmTmVlZGVkKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgc2hvdWxkVmFsaWRhdGUgPSBfcHJvcHMzLnNob3VsZFZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZSA9IF9wcm9wczMudmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHZhbHVlcyA9IF9wcm9wczMudmFsdWVzO1xcblxcbiAgICAgICAgICAgIHZhciBmaWVsZExldmVsVmFsaWRhdGUgPSB0aGlzLmdlbmVyYXRlVmFsaWRhdG9yKCk7XFxuICAgICAgICAgICAgaWYgKHZhbGlkYXRlIHx8IGZpZWxkTGV2ZWxWYWxpZGF0ZSkge1xcbiAgICAgICAgICAgICAgdmFyIGluaXRpYWxSZW5kZXIgPSBuZXh0UHJvcHMgPT09IHVuZGVmaW5lZDtcXG4gICAgICAgICAgICAgIHZhciBmaWVsZFZhbGlkYXRvcktleXMgPSBPYmplY3Qua2V5cyh0aGlzLmdldFZhbGlkYXRvcnMoKSk7XFxuICAgICAgICAgICAgICB2YXIgc2hvdWxkVmFsaWRhdGVSZXN1bHQgPSBzaG91bGRWYWxpZGF0ZSh7XFxuICAgICAgICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHM6IG5leHRQcm9wcyxcXG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxSZW5kZXI6IGluaXRpYWxSZW5kZXIsXFxuICAgICAgICAgICAgICAgIGxhc3RGaWVsZFZhbGlkYXRvcktleXM6IHRoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyxcXG4gICAgICAgICAgICAgICAgZmllbGRWYWxpZGF0b3JLZXlzOiBmaWVsZFZhbGlkYXRvcktleXMsXFxuICAgICAgICAgICAgICAgIHN0cnVjdHVyZTogc3RydWN0dXJlXFxuICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgIGlmIChzaG91bGRWYWxpZGF0ZVJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHNUb1ZhbGlkYXRlID0gaW5pdGlhbFJlbmRlciA/IHRoaXMucHJvcHMgOiBuZXh0UHJvcHM7XFxuXFxuICAgICAgICAgICAgICAgIHZhciBfbWVyZ2UyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWVyZ2VfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbGlkYXRlID8gdmFsaWRhdGUocHJvcHNUb1ZhbGlkYXRlLnZhbHVlcywgcHJvcHNUb1ZhbGlkYXRlKSB8fCB7fSA6IHt9LCBmaWVsZExldmVsVmFsaWRhdGUgPyBmaWVsZExldmVsVmFsaWRhdGUocHJvcHNUb1ZhbGlkYXRlLnZhbHVlcywgcHJvcHNUb1ZhbGlkYXRlKSB8fCB7fSA6IHt9KSxcXG4gICAgICAgICAgICAgICAgICAgIF9lcnJvciA9IF9tZXJnZTIuX2Vycm9yLFxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN5bmNFcnJvcnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX21lcmdlMiwgWydfZXJyb3InXSk7XFxuXFxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyA9IGZpZWxkVmFsaWRhdG9yS2V5cztcXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTeW5jRXJyb3JzSWZOZWVkZWQobmV4dFN5bmNFcnJvcnMsIF9lcnJvcik7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3VwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkKG5leHRTeW5jV2FybmluZ3MsIG5leHRXYXJuaW5nKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczQgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICB3YXJuaW5nID0gX3Byb3BzNC53YXJuaW5nLFxcbiAgICAgICAgICAgICAgICBzeW5jV2FybmluZ3MgPSBfcHJvcHM0LnN5bmNXYXJuaW5ncyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzID0gX3Byb3BzNC51cGRhdGVTeW5jV2FybmluZ3M7XFxuXFxuICAgICAgICAgICAgdmFyIG5vV2FybmluZ3MgPSAoIXN5bmNXYXJuaW5ncyB8fCAhT2JqZWN0LmtleXMoc3luY1dhcm5pbmdzKS5sZW5ndGgpICYmICF3YXJuaW5nO1xcbiAgICAgICAgICAgIHZhciBuZXh0Tm9XYXJuaW5ncyA9ICghbmV4dFN5bmNXYXJuaW5ncyB8fCAhT2JqZWN0LmtleXMobmV4dFN5bmNXYXJuaW5ncykubGVuZ3RoKSAmJiAhbmV4dFdhcm5pbmc7XFxuICAgICAgICAgICAgaWYgKCEobm9XYXJuaW5ncyAmJiBuZXh0Tm9XYXJuaW5ncykgJiYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKHN5bmNXYXJuaW5ncywgbmV4dFN5bmNXYXJuaW5ncykgfHwgIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwod2FybmluZywgbmV4dFdhcm5pbmcpKSkge1xcbiAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzKG5leHRTeW5jV2FybmluZ3MsIG5leHRXYXJuaW5nKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnd2FybklmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHdhcm5JZk5lZWRlZChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzNSA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzNS5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgd2FybiA9IF9wcm9wczUud2FybixcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzNS52YWx1ZXM7XFxuXFxuICAgICAgICAgICAgdmFyIGZpZWxkTGV2ZWxXYXJuID0gdGhpcy5nZW5lcmF0ZVdhcm5lcigpO1xcbiAgICAgICAgICAgIGlmICh3YXJuIHx8IGZpZWxkTGV2ZWxXYXJuKSB7XFxuICAgICAgICAgICAgICB2YXIgaW5pdGlhbFJlbmRlciA9IG5leHRQcm9wcyA9PT0gdW5kZWZpbmVkO1xcbiAgICAgICAgICAgICAgdmFyIGZpZWxkV2FybmVyS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZ2V0V2FybmVycygpKTtcXG4gICAgICAgICAgICAgIHZhciBzaG91bGRXYXJuUmVzdWx0ID0gc2hvdWxkVmFsaWRhdGUoe1xcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzOiBuZXh0UHJvcHMsXFxuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsUmVuZGVyOiBpbml0aWFsUmVuZGVyLFxcbiAgICAgICAgICAgICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzOiB0aGlzLmxhc3RGaWVsZFdhcm5lcktleXMsXFxuICAgICAgICAgICAgICAgIGZpZWxkVmFsaWRhdG9yS2V5czogZmllbGRXYXJuZXJLZXlzLFxcbiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IHN0cnVjdHVyZVxcbiAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICBpZiAoc2hvdWxkV2FyblJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHNUb1dhcm4gPSBpbml0aWFsUmVuZGVyID8gdGhpcy5wcm9wcyA6IG5leHRQcm9wcztcXG5cXG4gICAgICAgICAgICAgICAgdmFyIF9tZXJnZTMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19tZXJnZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybiA/IHdhcm4ocHJvcHNUb1dhcm4udmFsdWVzLCBwcm9wc1RvV2FybikgOiB7fSwgZmllbGRMZXZlbFdhcm4gPyBmaWVsZExldmVsV2Fybihwcm9wc1RvV2Fybi52YWx1ZXMsIHByb3BzVG9XYXJuKSA6IHt9KSxcXG4gICAgICAgICAgICAgICAgICAgIF93YXJuaW5nID0gX21lcmdlMy5fd2FybmluZyxcXG4gICAgICAgICAgICAgICAgICAgIG5leHRTeW5jV2FybmluZ3MgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX21lcmdlMywgWydfd2FybmluZyddKTtcXG5cXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RmllbGRXYXJuZXJLZXlzID0gZmllbGRXYXJuZXJLZXlzO1xcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkKG5leHRTeW5jV2FybmluZ3MsIF93YXJuaW5nKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgICAgICB0aGlzLmluaXRJZk5lZWRlZCgpO1xcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJZk5lZWRlZCgpO1xcbiAgICAgICAgICAgIHRoaXMud2FybklmTmVlZGVkKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHRoaXMuaW5pdElmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUlmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy53YXJuSWZOZWVkZWQobmV4dFByb3BzKTtcXG4gICAgICAgICAgICB0aGlzLmNsZWFyU3VibWl0UHJvbWlzZUlmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy5zdWJtaXRJZk5lZWRlZChuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMub25DaGFuZ2UpIHtcXG4gICAgICAgICAgICAgIGlmICghZGVlcEVxdWFsKG5leHRQcm9wcy52YWx1ZXMsIHRoaXMucHJvcHMudmFsdWVzKSkge1xcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHMub25DaGFuZ2UobmV4dFByb3BzLnZhbHVlcywgbmV4dFByb3BzLmRpc3BhdGNoLCBuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIGlmICghdGhpcy5wcm9wcy5wdXJlKSByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobmV4dFByb3BzKS5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgICAgICAvLyB1c2VmdWwgdG8gZGVidWcgcmVyZW5kZXJzXFxuICAgICAgICAgICAgICAvLyBpZiAoIXBsYWluLmRlZXBFcXVhbCh0aGlzLnByb3BzWyBwcm9wIF0sIG5leHRQcm9wc1sgcHJvcCBdKSkge1xcbiAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmluZm8ocHJvcCwgJ2NoYW5nZWQnLCB0aGlzLnByb3BzWyBwcm9wIF0sICc9PT4nLCBuZXh0UHJvcHNbIHByb3AgXSlcXG4gICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgIHJldHVybiAhfnByb3BzVG9Ob3RVcGRhdGVGb3IuaW5kZXhPZihwcm9wKSAmJiAhZGVlcEVxdWFsKF90aGlzMy5wcm9wc1twcm9wXSwgbmV4dFByb3BzW3Byb3BdKTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzNiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3lPblVubW91bnQgPSBfcHJvcHM2LmRlc3Ryb3lPblVubW91bnQsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfcHJvcHM2LmRlc3Ryb3k7XFxuXFxuICAgICAgICAgICAgaWYgKGRlc3Ryb3lPblVubW91bnQpIHtcXG4gICAgICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcXG4gICAgICAgICAgICAgIGRlc3Ryb3koKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2V0VmFsdWVzJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlcygpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZXM7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnaXNWYWxpZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkKCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLnZhbGlkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2lzUHJpc3RpbmUnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNQcmlzdGluZSgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZWdpc3RlcicsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWdpc3RlcihuYW1lLCB0eXBlLCBnZXRWYWxpZGF0b3IsIGdldFdhcm5lcikge1xcbiAgICAgICAgICAgIHRoaXMucHJvcHMucmVnaXN0ZXJGaWVsZChuYW1lLCB0eXBlKTtcXG4gICAgICAgICAgICBpZiAoZ2V0VmFsaWRhdG9yKSB7XFxuICAgICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdG9yc1tuYW1lXSA9IGdldFZhbGlkYXRvcjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGdldFdhcm5lcikge1xcbiAgICAgICAgICAgICAgdGhpcy5maWVsZFdhcm5lcnNbbmFtZV0gPSBnZXRXYXJuZXI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3VucmVnaXN0ZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdW5yZWdpc3RlcihuYW1lKSB7XFxuICAgICAgICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVzdHJveU9uVW5tb3VudCB8fCB0aGlzLnByb3BzLmZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCkge1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnVucmVnaXN0ZXJGaWVsZChuYW1lKTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZmllbGRWYWxpZGF0b3JzW25hbWVdO1xcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5maWVsZFdhcm5lcnNbbmFtZV07XFxuICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnVucmVnaXN0ZXJGaWVsZChuYW1lLCBmYWxzZSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldEZpZWxkTGlzdCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGaWVsZExpc3Qob3B0aW9ucykge1xcbiAgICAgICAgICAgIHZhciByZWdpc3RlcmVkRmllbGRzID0gdGhpcy5wcm9wcy5yZWdpc3RlcmVkRmllbGRzO1xcbiAgICAgICAgICAgIHZhciBsaXN0ID0gW107XFxuICAgICAgICAgICAgaWYgKCFyZWdpc3RlcmVkRmllbGRzKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gbGlzdDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGtleVNlcSA9IGtleXMocmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5leGNsdWRlRmllbGRBcnJheSkge1xcbiAgICAgICAgICAgICAga2V5U2VxID0ga2V5U2VxLmZpbHRlcihmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXS50eXBlJykgIT09ICdGaWVsZEFycmF5JztcXG4gICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZnJvbUpTKGtleVNlcS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XFxuICAgICAgICAgICAgICBhY2MucHVzaChrZXkpO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcXG4gICAgICAgICAgICB9LCBsaXN0KSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2V0VmFsaWRhdG9ycycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWxpZGF0b3JzKCkge1xcbiAgICAgICAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIHZhciB2YWxpZGF0b3JzID0ge307XFxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZFZhbGlkYXRvcnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICAgIHZhciB2YWxpZGF0b3IgPSBfdGhpczQuZmllbGRWYWxpZGF0b3JzW25hbWVdKCk7XFxuICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKSB7XFxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnNbbmFtZV0gPSB2YWxpZGF0b3I7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRvcnM7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2VuZXJhdGVWYWxpZGF0b3InLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2VuZXJhdGVWYWxpZGF0b3IoKSB7XFxuICAgICAgICAgICAgdmFyIHZhbGlkYXRvcnMgPSB0aGlzLmdldFZhbGlkYXRvcnMoKTtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModmFsaWRhdG9ycykubGVuZ3RoID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX2dlbmVyYXRlVmFsaWRhdG9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWxpZGF0b3JzLCBzdHJ1Y3R1cmUpIDogdW5kZWZpbmVkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldFdhcm5lcnMnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0V2FybmVycygpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM1ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgd2FybmVycyA9IHt9O1xcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGRXYXJuZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgICAgICB2YXIgd2FybmVyID0gX3RoaXM1LmZpZWxkV2FybmVyc1tuYW1lXSgpO1xcbiAgICAgICAgICAgICAgaWYgKHdhcm5lcikge1xcbiAgICAgICAgICAgICAgICB3YXJuZXJzW25hbWVdID0gd2FybmVyO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiB3YXJuZXJzO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dlbmVyYXRlV2FybmVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdlbmVyYXRlV2FybmVyKCkge1xcbiAgICAgICAgICAgIHZhciB3YXJuZXJzID0gdGhpcy5nZXRXYXJuZXJzKCk7XFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHdhcm5lcnMpLmxlbmd0aCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19nZW5lcmF0ZVZhbGlkYXRvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybmVycywgc3RydWN0dXJlKSA6IHVuZGVmaW5lZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdhc3luY1ZhbGlkYXRlJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzeW5jVmFsaWRhdGUobmFtZSwgdmFsdWUpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM2ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgX3Byb3BzNyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGFzeW5jQmx1ckZpZWxkcyA9IF9wcm9wczcuYXN5bmNCbHVyRmllbGRzLFxcbiAgICAgICAgICAgICAgICBhc3luY0Vycm9ycyA9IF9wcm9wczcuYXN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGUgPSBfcHJvcHM3LmFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzNy5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBfcHJvcHM3LmluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICBwcmlzdGluZSA9IF9wcm9wczcucHJpc3RpbmUsXFxuICAgICAgICAgICAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGUgPSBfcHJvcHM3LnNob3VsZEFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHN0YXJ0QXN5bmNWYWxpZGF0aW9uID0gX3Byb3BzNy5zdGFydEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3RvcEFzeW5jVmFsaWRhdGlvbiA9IF9wcm9wczcuc3RvcEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3luY0Vycm9ycyA9IF9wcm9wczcuc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzNy52YWx1ZXM7XFxuXFxuICAgICAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSAhbmFtZTtcXG4gICAgICAgICAgICBpZiAoYXN5bmNWYWxpZGF0ZSkge1xcbiAgICAgICAgICAgICAgdmFyIHZhbHVlc1RvVmFsaWRhdGUgPSBzdWJtaXR0aW5nID8gdmFsdWVzIDogc2V0SW4odmFsdWVzLCBuYW1lLCB2YWx1ZSk7XFxuICAgICAgICAgICAgICB2YXIgc3luY1ZhbGlkYXRpb25QYXNzZXMgPSBzdWJtaXR0aW5nIHx8ICFnZXRJbihzeW5jRXJyb3JzLCBuYW1lKTtcXG4gICAgICAgICAgICAgIHZhciBpc0JsdXJyZWRGaWVsZCA9ICFzdWJtaXR0aW5nICYmICghYXN5bmNCbHVyRmllbGRzIHx8IH5hc3luY0JsdXJGaWVsZHMuaW5kZXhPZihuYW1lLnJlcGxhY2UoL1xcXFxbWzAtOV0rXFxcXF0vZywgJ1tdJykpKTtcXG4gICAgICAgICAgICAgIGlmICgoaXNCbHVycmVkRmllbGQgfHwgc3VibWl0dGluZykgJiYgc2hvdWxkQXN5bmNWYWxpZGF0ZSh7XFxuICAgICAgICAgICAgICAgIGFzeW5jRXJyb3JzOiBhc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICB0cmlnZ2VyOiBzdWJtaXR0aW5nID8gJ3N1Ym1pdCcgOiAnYmx1cicsXFxuICAgICAgICAgICAgICAgIGJsdXJyZWRGaWVsZDogbmFtZSxcXG4gICAgICAgICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICAgICAgICBzeW5jVmFsaWRhdGlvblBhc3Nlczogc3luY1ZhbGlkYXRpb25QYXNzZXNcXG4gICAgICAgICAgICAgIH0pKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fYXN5bmNWYWxpZGF0aW9uX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jVmFsaWRhdGUodmFsdWVzVG9WYWxpZGF0ZSwgZGlzcGF0Y2gsIF90aGlzNi5wcm9wcywgbmFtZSk7XFxuICAgICAgICAgICAgICAgIH0sIHN0YXJ0QXN5bmNWYWxpZGF0aW9uLCBzdG9wQXN5bmNWYWxpZGF0aW9uLCBuYW1lKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0Q29tcGxldGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdENvbXBsZXRlZChyZXN1bHQpIHtcXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5zdWJtaXRQcm9taXNlO1xcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0RmFpbGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdEZhaWxlZChlcnJvcikge1xcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN1Ym1pdFByb21pc2U7XFxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnbGlzdGVuVG9TdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbGlzdGVuVG9TdWJtaXQocHJvbWlzZSkge1xcbiAgICAgICAgICAgIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2lzX3Byb21pc2VfX19kZWZhdWx0KCkocHJvbWlzZSkpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLnN1Ym1pdFByb21pc2UgPSBwcm9taXNlO1xcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4odGhpcy5zdWJtaXRDb21wbGV0ZWQsIHRoaXMuc3VibWl0RmFpbGVkKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdzdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0KHN1Ym1pdE9yRXZlbnQpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM3ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgX3Byb3BzOCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIG9uU3VibWl0ID0gX3Byb3BzOC5vblN1Ym1pdCxcXG4gICAgICAgICAgICAgICAgYmx1ciA9IF9wcm9wczguYmx1cixcXG4gICAgICAgICAgICAgICAgY2hhbmdlID0gX3Byb3BzOC5jaGFuZ2UsXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzOC5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgdmFsaWRFeGNlcHRTdWJtaXQgPSBfcHJvcHM4LnZhbGlkRXhjZXB0U3VibWl0O1xcblxcblxcbiAgICAgICAgICAgIGlmICghc3VibWl0T3JFdmVudCB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fZXZlbnRzX3NpbGVuY2VFdmVudF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3VibWl0T3JFdmVudCkpIHtcXG4gICAgICAgICAgICAgIC8vIHN1Ym1pdE9yRXZlbnQgaXMgYW4gZXZlbnQ6IGZpcmUgc3VibWl0IGlmIG5vdCBhbHJlYWR5IHN1Ym1pdHRpbmdcXG4gICAgICAgICAgICAgIGlmICghdGhpcy5zdWJtaXRQcm9taXNlKSB7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlubmVyT25TdWJtaXQpIHtcXG4gICAgICAgICAgICAgICAgICAvLyB3aWxsIGNhbGwgXFxcInN1Ym1pdE9yRXZlbnQgaXMgdGhlIHN1Ym1pdCBmdW5jdGlvblxcXCIgYmxvY2sgYmVsb3dcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbm5lck9uU3VibWl0KCk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdGVuVG9TdWJtaXQoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjaGVja1N1Ym1pdChvblN1Ym1pdCksIF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpKSwgdmFsaWRFeGNlcHRTdWJtaXQsIHRoaXMuYXN5bmNWYWxpZGF0ZSwgdGhpcy5nZXRGaWVsZExpc3QoeyBleGNsdWRlRmllbGRBcnJheTogdHJ1ZSB9KSkpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgIC8vIHN1Ym1pdE9yRXZlbnQgaXMgdGhlIHN1Ym1pdCBmdW5jdGlvbjogcmV0dXJuIGRlZmVycmVkIHN1Ym1pdCB0aHVua1xcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19ldmVudHNfc2lsZW5jZUV2ZW50c19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gIV90aGlzNy5zdWJtaXRQcm9taXNlICYmIF90aGlzNy5saXN0ZW5Ub1N1Ym1pdChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19oYW5kbGVTdWJtaXRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGNoZWNrU3VibWl0KHN1Ym1pdE9yRXZlbnQpLCBfZXh0ZW5kcyh7fSwgX3RoaXM3LnByb3BzLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpKSwgdmFsaWRFeGNlcHRTdWJtaXQsIF90aGlzNy5hc3luY1ZhbGlkYXRlLCBfdGhpczcuZ2V0RmllbGRMaXN0KHsgZXhjbHVkZUZpZWxkQXJyYXk6IHRydWUgfSkpKTtcXG4gICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZXNldCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcXG4gICAgICAgICAgICB0aGlzLnByb3BzLnJlc2V0KCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgICAgICAvLyByZW1vdmUgc29tZSByZWR1eC1mb3JtIGNvbmZpZy1vbmx5IHByb3BzXFxuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cXG4gICAgICAgICAgICB2YXIgX3Byb3BzOSA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGFueVRvdWNoZWQgPSBfcHJvcHM5LmFueVRvdWNoZWQsXFxuICAgICAgICAgICAgICAgIGFycmF5SW5zZXJ0ID0gX3Byb3BzOS5hcnJheUluc2VydCxcXG4gICAgICAgICAgICAgICAgYXJyYXlNb3ZlID0gX3Byb3BzOS5hcnJheU1vdmUsXFxuICAgICAgICAgICAgICAgIGFycmF5UG9wID0gX3Byb3BzOS5hcnJheVBvcCxcXG4gICAgICAgICAgICAgICAgYXJyYXlQdXNoID0gX3Byb3BzOS5hcnJheVB1c2gsXFxuICAgICAgICAgICAgICAgIGFycmF5UmVtb3ZlID0gX3Byb3BzOS5hcnJheVJlbW92ZSxcXG4gICAgICAgICAgICAgICAgYXJyYXlSZW1vdmVBbGwgPSBfcHJvcHM5LmFycmF5UmVtb3ZlQWxsLFxcbiAgICAgICAgICAgICAgICBhcnJheVNoaWZ0ID0gX3Byb3BzOS5hcnJheVNoaWZ0LFxcbiAgICAgICAgICAgICAgICBhcnJheVNwbGljZSA9IF9wcm9wczkuYXJyYXlTcGxpY2UsXFxuICAgICAgICAgICAgICAgIGFycmF5U3dhcCA9IF9wcm9wczkuYXJyYXlTd2FwLFxcbiAgICAgICAgICAgICAgICBhcnJheVVuc2hpZnQgPSBfcHJvcHM5LmFycmF5VW5zaGlmdCxcXG4gICAgICAgICAgICAgICAgYXN5bmNFcnJvcnMgPSBfcHJvcHM5LmFzeW5jRXJyb3JzLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRlID0gX3Byb3BzOS5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRpbmcgPSBfcHJvcHM5LmFzeW5jVmFsaWRhdGluZyxcXG4gICAgICAgICAgICAgICAgYmx1ciA9IF9wcm9wczkuYmx1cixcXG4gICAgICAgICAgICAgICAgY2hhbmdlID0gX3Byb3BzOS5jaGFuZ2UsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfcHJvcHM5LmRlc3Ryb3ksXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3lPblVubW91bnQgPSBfcHJvcHM5LmRlc3Ryb3lPblVubW91bnQsXFxuICAgICAgICAgICAgICAgIGZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCA9IF9wcm9wczkuZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50LFxcbiAgICAgICAgICAgICAgICBkaXJ0eSA9IF9wcm9wczkuZGlydHksXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzOS5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgZW5hYmxlUmVpbml0aWFsaXplID0gX3Byb3BzOS5lbmFibGVSZWluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIGVycm9yID0gX3Byb3BzOS5lcnJvcixcXG4gICAgICAgICAgICAgICAgZm9jdXMgPSBfcHJvcHM5LmZvY3VzLFxcbiAgICAgICAgICAgICAgICBmb3JtID0gX3Byb3BzOS5mb3JtLFxcbiAgICAgICAgICAgICAgICBnZXRGb3JtU3RhdGUgPSBfcHJvcHM5LmdldEZvcm1TdGF0ZSxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSA9IF9wcm9wczkuaW5pdGlhbGl6ZSxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBfcHJvcHM5LmluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gX3Byb3BzOS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgICAgICAgICBpbnZhbGlkID0gX3Byb3BzOS5pbnZhbGlkLFxcbiAgICAgICAgICAgICAgICBrZWVwRGlydHlPblJlaW5pdGlhbGl6ZSA9IF9wcm9wczkua2VlcERpcnR5T25SZWluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIHByaXN0aW5lID0gX3Byb3BzOS5wcmlzdGluZSxcXG4gICAgICAgICAgICAgICAgcHJvcE5hbWVzcGFjZSA9IF9wcm9wczkucHJvcE5hbWVzcGFjZSxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJlZEZpZWxkcyA9IF9wcm9wczkucmVnaXN0ZXJlZEZpZWxkcyxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJGaWVsZCA9IF9wcm9wczkucmVnaXN0ZXJGaWVsZCxcXG4gICAgICAgICAgICAgICAgcmVzZXQgPSBfcHJvcHM5LnJlc2V0LFxcbiAgICAgICAgICAgICAgICBzZXRTdWJtaXRGYWlsZWQgPSBfcHJvcHM5LnNldFN1Ym1pdEZhaWxlZCxcXG4gICAgICAgICAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkID0gX3Byb3BzOS5zZXRTdWJtaXRTdWNjZWVkZWQsXFxuICAgICAgICAgICAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGUgPSBfcHJvcHM5LnNob3VsZEFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzOS5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM5LnN0YXJ0QXN5bmNWYWxpZGF0aW9uLFxcbiAgICAgICAgICAgICAgICBzdGFydFN1Ym1pdCA9IF9wcm9wczkuc3RhcnRTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM5LnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgICAgICAgICAgICAgIHN0b3BTdWJtaXQgPSBfcHJvcHM5LnN0b3BTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHN1Ym1pdHRpbmcgPSBfcHJvcHM5LnN1Ym1pdHRpbmcsXFxuICAgICAgICAgICAgICAgIHN1Ym1pdEZhaWxlZCA9IF9wcm9wczkuc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQgPSBfcHJvcHM5LnN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgICAgICAgdG91Y2ggPSBfcHJvcHM5LnRvdWNoLFxcbiAgICAgICAgICAgICAgICB0b3VjaE9uQmx1ciA9IF9wcm9wczkudG91Y2hPbkJsdXIsXFxuICAgICAgICAgICAgICAgIHRvdWNoT25DaGFuZ2UgPSBfcHJvcHM5LnRvdWNoT25DaGFuZ2UsXFxuICAgICAgICAgICAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgPSBfcHJvcHM5LnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHM5LnN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHN5bmNXYXJuaW5ncyA9IF9wcm9wczkuc3luY1dhcm5pbmdzLFxcbiAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyRmllbGQgPSBfcHJvcHM5LnVucmVnaXN0ZXJGaWVsZCxcXG4gICAgICAgICAgICAgICAgdW50b3VjaCA9IF9wcm9wczkudW50b3VjaCxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyA9IF9wcm9wczkudXBkYXRlU3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzID0gX3Byb3BzOS51cGRhdGVTeW5jV2FybmluZ3MsXFxuICAgICAgICAgICAgICAgIHZhbGlkID0gX3Byb3BzOS52YWxpZCxcXG4gICAgICAgICAgICAgICAgdmFsaWRFeGNlcHRTdWJtaXQgPSBfcHJvcHM5LnZhbGlkRXhjZXB0U3VibWl0LFxcbiAgICAgICAgICAgICAgICB2YWx1ZXMgPSBfcHJvcHM5LnZhbHVlcyxcXG4gICAgICAgICAgICAgICAgd2FybmluZyA9IF9wcm9wczkud2FybmluZyxcXG4gICAgICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHM5LCBbJ2FueVRvdWNoZWQnLCAnYXJyYXlJbnNlcnQnLCAnYXJyYXlNb3ZlJywgJ2FycmF5UG9wJywgJ2FycmF5UHVzaCcsICdhcnJheVJlbW92ZScsICdhcnJheVJlbW92ZUFsbCcsICdhcnJheVNoaWZ0JywgJ2FycmF5U3BsaWNlJywgJ2FycmF5U3dhcCcsICdhcnJheVVuc2hpZnQnLCAnYXN5bmNFcnJvcnMnLCAnYXN5bmNWYWxpZGF0ZScsICdhc3luY1ZhbGlkYXRpbmcnLCAnYmx1cicsICdjaGFuZ2UnLCAnZGVzdHJveScsICdkZXN0cm95T25Vbm1vdW50JywgJ2ZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCcsICdkaXJ0eScsICdkaXNwYXRjaCcsICdlbmFibGVSZWluaXRpYWxpemUnLCAnZXJyb3InLCAnZm9jdXMnLCAnZm9ybScsICdnZXRGb3JtU3RhdGUnLCAnaW5pdGlhbGl6ZScsICdpbml0aWFsaXplZCcsICdpbml0aWFsVmFsdWVzJywgJ2ludmFsaWQnLCAna2VlcERpcnR5T25SZWluaXRpYWxpemUnLCAncHJpc3RpbmUnLCAncHJvcE5hbWVzcGFjZScsICdyZWdpc3RlcmVkRmllbGRzJywgJ3JlZ2lzdGVyRmllbGQnLCAncmVzZXQnLCAnc2V0U3VibWl0RmFpbGVkJywgJ3NldFN1Ym1pdFN1Y2NlZWRlZCcsICdzaG91bGRBc3luY1ZhbGlkYXRlJywgJ3Nob3VsZFZhbGlkYXRlJywgJ3N0YXJ0QXN5bmNWYWxpZGF0aW9uJywgJ3N0YXJ0U3VibWl0JywgJ3N0b3BBc3luY1ZhbGlkYXRpb24nLCAnc3RvcFN1Ym1pdCcsICdzdWJtaXR0aW5nJywgJ3N1Ym1pdEZhaWxlZCcsICdzdWJtaXRTdWNjZWVkZWQnLCAndG91Y2gnLCAndG91Y2hPbkJsdXInLCAndG91Y2hPbkNoYW5nZScsICdwZXJzaXN0ZW50U3VibWl0RXJyb3JzJywgJ3N5bmNFcnJvcnMnLCAnc3luY1dhcm5pbmdzJywgJ3VucmVnaXN0ZXJGaWVsZCcsICd1bnRvdWNoJywgJ3VwZGF0ZVN5bmNFcnJvcnMnLCAndXBkYXRlU3luY1dhcm5pbmdzJywgJ3ZhbGlkJywgJ3ZhbGlkRXhjZXB0U3VibWl0JywgJ3ZhbHVlcycsICd3YXJuaW5nJ10pO1xcbiAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cXG5cXG5cXG4gICAgICAgICAgICB2YXIgcmVkdXhGb3JtUHJvcHMgPSBfZXh0ZW5kcyh7XFxuICAgICAgICAgICAgICBhbnlUb3VjaGVkOiBhbnlUb3VjaGVkLFxcbiAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0ZTogdGhpcy5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBhc3luY1ZhbGlkYXRpbmdcXG4gICAgICAgICAgICB9LCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpLCB7XFxuICAgICAgICAgICAgICBkZXN0cm95OiBkZXN0cm95LFxcbiAgICAgICAgICAgICAgZGlydHk6IGRpcnR5LFxcbiAgICAgICAgICAgICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgICAgICAgICAgZm9ybTogZm9ybSxcXG4gICAgICAgICAgICAgIGhhbmRsZVN1Ym1pdDogdGhpcy5zdWJtaXQsXFxuICAgICAgICAgICAgICBpbml0aWFsaXplOiBpbml0aWFsaXplLFxcbiAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlczogaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICAgIGludmFsaWQ6IGludmFsaWQsXFxuICAgICAgICAgICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgICAgICAgICByZXNldDogcmVzZXQsXFxuICAgICAgICAgICAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxcbiAgICAgICAgICAgICAgc3VibWl0RmFpbGVkOiBzdWJtaXRGYWlsZWQsXFxuICAgICAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgICAgIHRvdWNoOiB0b3VjaCxcXG4gICAgICAgICAgICAgIHVudG91Y2g6IHVudG91Y2gsXFxuICAgICAgICAgICAgICB2YWxpZDogdmFsaWQsXFxuICAgICAgICAgICAgICB3YXJuaW5nOiB3YXJuaW5nXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgdmFyIHByb3BzVG9QYXNzID0gX2V4dGVuZHMoe30sIHByb3BOYW1lc3BhY2UgPyBfZGVmaW5lUHJvcGVydHkoe30sIHByb3BOYW1lc3BhY2UsIHJlZHV4Rm9ybVByb3BzKSA6IHJlZHV4Rm9ybVByb3BzLCByZXN0KTtcXG4gICAgICAgICAgICBpZiAoaXNDbGFzc0NvbXBvbmVudChXcmFwcGVkQ29tcG9uZW50KSkge1xcbiAgICAgICAgICAgICAgcHJvcHNUb1Bhc3MucmVmID0gJ3dyYXBwZWQnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKFdyYXBwZWRDb21wb25lbnQsIHByb3BzVG9QYXNzKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfV0pO1xcblxcbiAgICAgICAgcmV0dXJuIEZvcm07XFxuICAgICAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgICAgIEZvcm0uZGlzcGxheU5hbWUgPSAnRm9ybSgnICsgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fdXRpbF9nZXREaXNwbGF5TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoV3JhcHBlZENvbXBvbmVudCkgKyAnKSc7XFxuICAgICAgRm9ybS5XcmFwcGVkQ29tcG9uZW50ID0gV3JhcHBlZENvbXBvbmVudDtcXG4gICAgICBGb3JtLmNoaWxkQ29udGV4dFR5cGVzID0ge1xcbiAgICAgICAgX3JlZHV4Rm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdC5pc1JlcXVpcmVkXFxuICAgICAgfTtcXG4gICAgICBGb3JtLnByb3BUeXBlcyA9IHtcXG4gICAgICAgIGRlc3Ryb3lPblVubW91bnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIGZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QsXFxuICAgICAgICBnZXRGb3JtU3RhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgb25TdWJtaXRGYWlsOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgICAgIG9uU3VibWl0U3VjY2VzczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICBwcm9wTmFtZVNwYWNlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nLFxcbiAgICAgICAgdmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgd2FybjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICB0b3VjaE9uQmx1cjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICB0b3VjaE9uQ2hhbmdlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIHRyaWdnZXJTdWJtaXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9yczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICByZWdpc3RlcmVkRmllbGRzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYW55XFxuICAgICAgfTtcXG5cXG4gICAgICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBwcm9wcykge1xcbiAgICAgICAgdmFyIGZvcm0gPSBwcm9wcy5mb3JtLFxcbiAgICAgICAgICAgIGdldEZvcm1TdGF0ZSA9IHByb3BzLmdldEZvcm1TdGF0ZSxcXG4gICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gcHJvcHMuaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICBlbmFibGVSZWluaXRpYWxpemUgPSBwcm9wcy5lbmFibGVSZWluaXRpYWxpemUsXFxuICAgICAgICAgICAga2VlcERpcnR5T25SZWluaXRpYWxpemUgPSBwcm9wcy5rZWVwRGlydHlPblJlaW5pdGlhbGl6ZTtcXG5cXG4gICAgICAgIHZhciBmb3JtU3RhdGUgPSBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpIHx8IGVtcHR5LCBmb3JtKSB8fCBlbXB0eTtcXG4gICAgICAgIHZhciBzdGF0ZUluaXRpYWwgPSBnZXRJbihmb3JtU3RhdGUsICdpbml0aWFsJyk7XFxuICAgICAgICB2YXIgaW5pdGlhbGl6ZWQgPSAhIXN0YXRlSW5pdGlhbDtcXG5cXG4gICAgICAgIHZhciBzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzID0gZW5hYmxlUmVpbml0aWFsaXplICYmIGluaXRpYWxpemVkICYmICFkZWVwRXF1YWwoaW5pdGlhbFZhbHVlcywgc3RhdGVJbml0aWFsKTtcXG4gICAgICAgIHZhciBzaG91bGRSZXNldFZhbHVlcyA9IHNob3VsZFVwZGF0ZUluaXRpYWxWYWx1ZXMgJiYgIWtlZXBEaXJ0eU9uUmVpbml0aWFsaXplO1xcblxcbiAgICAgICAgdmFyIGluaXRpYWwgPSBpbml0aWFsVmFsdWVzIHx8IHN0YXRlSW5pdGlhbCB8fCBlbXB0eTtcXG5cXG4gICAgICAgIGlmIChzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzKSB7XFxuICAgICAgICAgIGluaXRpYWwgPSBzdGF0ZUluaXRpYWwgfHwgZW1wdHk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgdmFsdWVzID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzJykgfHwgaW5pdGlhbDtcXG5cXG4gICAgICAgIGlmIChzaG91bGRSZXNldFZhbHVlcykge1xcbiAgICAgICAgICB2YWx1ZXMgPSBpbml0aWFsO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIHByaXN0aW5lID0gc2hvdWxkUmVzZXRWYWx1ZXMgfHwgZGVlcEVxdWFsKGluaXRpYWwsIHZhbHVlcyk7XFxuICAgICAgICB2YXIgYXN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsICdhc3luY0Vycm9ycycpO1xcbiAgICAgICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsICdzeW5jRXJyb3JzJykgfHwge307XFxuICAgICAgICB2YXIgc3luY1dhcm5pbmdzID0gZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJykgfHwge307XFxuICAgICAgICB2YXIgcmVnaXN0ZXJlZEZpZWxkcyA9IGdldEluKGZvcm1TdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICAgIHZhciB2YWxpZCA9IGlzVmFsaWQoZm9ybSwgZ2V0Rm9ybVN0YXRlLCBmYWxzZSkoc3RhdGUpO1xcbiAgICAgICAgdmFyIHZhbGlkRXhjZXB0U3VibWl0ID0gaXNWYWxpZChmb3JtLCBnZXRGb3JtU3RhdGUsIHRydWUpKHN0YXRlKTtcXG4gICAgICAgIHZhciBhbnlUb3VjaGVkID0gISFnZXRJbihmb3JtU3RhdGUsICdhbnlUb3VjaGVkJyk7XFxuICAgICAgICB2YXIgc3VibWl0dGluZyA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0dGluZycpO1xcbiAgICAgICAgdmFyIHN1Ym1pdEZhaWxlZCA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyk7XFxuICAgICAgICB2YXIgc3VibWl0U3VjY2VlZGVkID0gISFnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRTdWNjZWVkZWQnKTtcXG4gICAgICAgIHZhciBlcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgJ2Vycm9yJyk7XFxuICAgICAgICB2YXIgd2FybmluZyA9IGdldEluKGZvcm1TdGF0ZSwgJ3dhcm5pbmcnKTtcXG4gICAgICAgIHZhciB0cmlnZ2VyU3VibWl0ID0gZ2V0SW4oZm9ybVN0YXRlLCAndHJpZ2dlclN1Ym1pdCcpO1xcbiAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgYW55VG91Y2hlZDogYW55VG91Y2hlZCxcXG4gICAgICAgICAgYXN5bmNFcnJvcnM6IGFzeW5jRXJyb3JzLFxcbiAgICAgICAgICBhc3luY1ZhbGlkYXRpbmc6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycpIHx8IGZhbHNlLFxcbiAgICAgICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgICAgICBlcnJvcjogZXJyb3IsXFxuICAgICAgICAgIGluaXRpYWxpemVkOiBpbml0aWFsaXplZCxcXG4gICAgICAgICAgaW52YWxpZDogIXZhbGlkLFxcbiAgICAgICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgICAgIHJlZ2lzdGVyZWRGaWVsZHM6IHJlZ2lzdGVyZWRGaWVsZHMsXFxuICAgICAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgICAgIHN1Ym1pdEZhaWxlZDogc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgc3luY0Vycm9yczogc3luY0Vycm9ycyxcXG4gICAgICAgICAgc3luY1dhcm5pbmdzOiBzeW5jV2FybmluZ3MsXFxuICAgICAgICAgIHRyaWdnZXJTdWJtaXQ6IHRyaWdnZXJTdWJtaXQsXFxuICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxcbiAgICAgICAgICB2YWxpZDogdmFsaWQsXFxuICAgICAgICAgIHZhbGlkRXhjZXB0U3VibWl0OiB2YWxpZEV4Y2VwdFN1Ym1pdCxcXG4gICAgICAgICAgd2FybmluZzogd2FybmluZ1xcbiAgICAgICAgfTtcXG4gICAgICB9LCBmdW5jdGlvbiAoZGlzcGF0Y2gsIGluaXRpYWxQcm9wcykge1xcbiAgICAgICAgdmFyIGJpbmRGb3JtID0gZnVuY3Rpb24gYmluZEZvcm0oYWN0aW9uQ3JlYXRvcikge1xcbiAgICAgICAgICByZXR1cm4gYWN0aW9uQ3JlYXRvci5iaW5kKG51bGwsIGluaXRpYWxQcm9wcy5mb3JtKTtcXG4gICAgICAgIH07XFxuXFxuICAgICAgICAvLyBCaW5kIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb24gYHByb3BzLmZvcm1gXFxuICAgICAgICB2YXIgYm91bmRGb3JtQUNzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmb3JtQWN0aW9ucywgYmluZEZvcm0pO1xcbiAgICAgICAgdmFyIGJvdW5kQXJyYXlBQ3MgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2xvZGFzaF9lc19tYXBWYWx1ZXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFycmF5QWN0aW9ucywgYmluZEZvcm0pO1xcbiAgICAgICAgdmFyIGJvdW5kQmx1ciA9IGZ1bmN0aW9uIGJvdW5kQmx1cihmaWVsZCwgdmFsdWUpIHtcXG4gICAgICAgICAgcmV0dXJuIGJsdXIoaW5pdGlhbFByb3BzLmZvcm0sIGZpZWxkLCB2YWx1ZSwgISFpbml0aWFsUHJvcHMudG91Y2hPbkJsdXIpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBib3VuZENoYW5nZSA9IGZ1bmN0aW9uIGJvdW5kQ2hhbmdlKGZpZWxkLCB2YWx1ZSkge1xcbiAgICAgICAgICByZXR1cm4gY2hhbmdlKGluaXRpYWxQcm9wcy5mb3JtLCBmaWVsZCwgdmFsdWUsICEhaW5pdGlhbFByb3BzLnRvdWNoT25DaGFuZ2UsICEhaW5pdGlhbFByb3BzLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBib3VuZEZvY3VzID0gYmluZEZvcm0oZm9jdXMpO1xcblxcbiAgICAgICAgLy8gV3JhcCBhY3Rpb24gY3JlYXRvcnMgd2l0aCBgZGlzcGF0Y2hgXFxuICAgICAgICB2YXIgY29ubmVjdGVkRm9ybUFDcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRGb3JtQUNzLCBkaXNwYXRjaCk7XFxuICAgICAgICB2YXIgY29ubmVjdGVkQXJyYXlBQ3MgPSB7XFxuICAgICAgICAgIGluc2VydDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5SW5zZXJ0LCBkaXNwYXRjaCksXFxuICAgICAgICAgIG1vdmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheU1vdmUsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcG9wOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlQb3AsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcHVzaDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5UHVzaCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICByZW1vdmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVJlbW92ZSwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICByZW1vdmVBbGw6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVJlbW92ZUFsbCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICBzaGlmdDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U2hpZnQsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc3BsaWNlOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlTcGxpY2UsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc3dhcDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U3dhcCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICB1bnNoaWZ0OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlVbnNoaWZ0LCBkaXNwYXRjaClcXG4gICAgICAgIH07XFxuXFxuICAgICAgICB2YXIgY29tcHV0ZWRBY3Rpb25zID0gX2V4dGVuZHMoe30sIGNvbm5lY3RlZEZvcm1BQ3MsIGJvdW5kQXJyYXlBQ3MsIHtcXG4gICAgICAgICAgYmx1cjogYm91bmRCbHVyLFxcbiAgICAgICAgICBjaGFuZ2U6IGJvdW5kQ2hhbmdlLFxcbiAgICAgICAgICBhcnJheTogY29ubmVjdGVkQXJyYXlBQ3MsXFxuICAgICAgICAgIGZvY3VzOiBib3VuZEZvY3VzLFxcbiAgICAgICAgICBkaXNwYXRjaDogZGlzcGF0Y2hcXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNvbXB1dGVkQWN0aW9ucztcXG4gICAgICAgIH07XFxuICAgICAgfSwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICAgICAgdmFyIENvbm5lY3RlZEZvcm0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0KCkoY29ubmVjdG9yKEZvcm0pLCBXcmFwcGVkQ29tcG9uZW50KTtcXG4gICAgICBDb25uZWN0ZWRGb3JtLmRlZmF1bHRQcm9wcyA9IGNvbmZpZztcXG5cXG4gICAgICAvLyBidWlsZCBvdXRlciBjb21wb25lbnQgdG8gZXhwb3NlIGluc3RhbmNlIGFwaVxcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoX0NvbXBvbmVudDIpIHtcXG4gICAgICAgIF9pbmhlcml0cyhSZWR1eEZvcm0sIF9Db21wb25lbnQyKTtcXG5cXG4gICAgICAgIGZ1bmN0aW9uIFJlZHV4Rm9ybSgpIHtcXG4gICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlZHV4Rm9ybSk7XFxuXFxuICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoUmVkdXhGb3JtLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUmVkdXhGb3JtKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBfY3JlYXRlQ2xhc3MoUmVkdXhGb3JtLCBbe1xcbiAgICAgICAgICBrZXk6ICdzdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0KCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnMud3JhcHBlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5zdWJtaXQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZXNldCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkucmVzZXQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMxMCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfcHJvcHMxMC5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczEwLCBbJ2luaXRpYWxWYWx1ZXMnXSk7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShDb25uZWN0ZWRGb3JtLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgICAgICAgcmVmOiAnd3JhcHBlZCcsXFxuICAgICAgICAgICAgICAvLyBjb252ZXJ0IGluaXRpYWxWYWx1ZXMgaWYgbmVlZCB0b1xcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlczogZnJvbUpTKGluaXRpYWxWYWx1ZXMpXFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ZhbGlkJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzVmFsaWQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdpbnZhbGlkJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLnZhbGlkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5wcmlzdGluZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd2YWx1ZXMnLFxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0VmFsdWVzKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZmllbGRMaXN0JyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgLy8gbWFpbmx5IHByb3ZpZGVkIGZvciB0ZXN0aW5nXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldEZpZWxkTGlzdCgpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3dyYXBwZWRJbnN0YW5jZScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIC8vIGZvciB0ZXN0aW5lXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLnJlZnMud3JhcHBlZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfV0pO1xcblxcbiAgICAgICAgcmV0dXJuIFJlZHV4Rm9ybTtcXG4gICAgICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlUmVkdXhGb3JtKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAxMjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNZXJnZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NyZWF0ZUFzc2lnbmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Nyk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXFxuICogaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgaW50byB0aGVcXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcXG4gKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcXG4gKiBhcmUgbWVyZ2VkIHJlY3Vyc2l2ZWx5LiBPdGhlciBvYmplY3RzIGFuZCB2YWx1ZSB0eXBlcyBhcmUgb3ZlcnJpZGRlbiBieVxcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxcbiAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXFxuICpcXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjUuMFxcbiAqIEBjYXRlZ29yeSBPYmplY3RcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXFxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHtcXG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXFxuICogfTtcXG4gKlxcbiAqIHZhciBvdGhlciA9IHtcXG4gKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXFxuICogfTtcXG4gKlxcbiAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XFxuICogLy8gPT4geyAnYSc6IFt7ICdiJzogMiwgJ2MnOiAzIH0sIHsgJ2QnOiA0LCAnZSc6IDUgfV0gfVxcbiAqL1xcbnZhciBtZXJnZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NyZWF0ZUFzc2lnbmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpIHtcXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNZXJnZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcXG59KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZXJnZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUZvcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYmFzZU1lcmdlRGVlcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fc2FmZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXFxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXFxuICogIGNvdW50ZXJwYXJ0cy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Jhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xcbiAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSkge1xcbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19iYXNlTWVyZ2VEZWVwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxcbiAgICAgICAgPyBjdXN0b21pemVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcXG4gICAgICAgIDogdW5kZWZpbmVkO1xcblxcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xcbiAgICAgIH1cXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hc3NpZ25NZXJnZVZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9XFxuICB9LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNZXJnZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBjbGVhclxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbiAgdGhpcy5zaXplID0gMDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTI0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xcblxcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tEZWxldGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgU3RhY2tcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XFxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0YWNrSGFzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0xpc3RDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XFxuXFxuXFxuXFxuXFxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXFxudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XFxuXFxuLyoqXFxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgc2V0XFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pIHtcXG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcXG4gICAgaWYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XFxuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9XFxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ocGFpcnMpO1xcbiAgfVxcbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XFxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XFxuICByZXR1cm4gdGhpcztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xcbiAgICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XFxuXFxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcXG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XFxuICAgICAgICBicmVhaztcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdDtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUJhc2VGb3IpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY2xvbmVCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jbG9uZVR5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19jb3B5QXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2luaXRDbG9uZU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzQXJndW1lbnRzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzQXJyYXlMaWtlT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faXNCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX2lzRnVuY3Rpb25fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9faXNQbGFpbk9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX2lzVHlwZWRBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X190b1BsYWluT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlTWVyZ2VgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxcbiAqIHJlZmVyZW5jZXMgdG8gYmUgbWVyZ2VkLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWVyZ2VGdW5jIFRoZSBmdW5jdGlvbiB0byBtZXJnZSB2YWx1ZXMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXFxuICogIGNvdW50ZXJwYXJ0cy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBtZXJnZUZ1bmMsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XFxuICB2YXIgb2JqVmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fc2FmZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXkpLFxcbiAgICAgIHNyY1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSwga2V5KSxcXG4gICAgICBzdGFja2VkID0gc3RhY2suZ2V0KHNyY1ZhbHVlKTtcXG5cXG4gIGlmIChzdGFja2VkKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnbk1lcmdlVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5LCBzdGFja2VkKTtcXG4gICAgcmV0dXJuO1xcbiAgfVxcbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxcbiAgICA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXFxuICAgIDogdW5kZWZpbmVkO1xcblxcbiAgdmFyIGlzQ29tbW9uID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcXG5cXG4gIGlmIChpc0NvbW1vbikge1xcbiAgICB2YXIgaXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSksXFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faXNCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSxcXG4gICAgICAgIGlzVHlwZWQgPSAhaXNBcnIgJiYgIWlzQnVmZiAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9faXNUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSk7XFxuXFxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XFxuICAgIGlmIChpc0FyciB8fCBpc0J1ZmYgfHwgaXNUeXBlZCkge1xcbiAgICAgIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzQXJyYXlMaWtlT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fY29weUFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKGlzQnVmZikge1xcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY2xvbmVCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlLCB0cnVlKTtcXG4gICAgICB9XFxuICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY2xvbmVUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgdHJ1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2Uge1xcbiAgICAgICAgbmV3VmFsdWUgPSBbXTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgZWxzZSBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX2lzUGxhaW5PYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FyZ3VtZW50c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpKSB7XFxuICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcXG4gICAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlKSkge1xcbiAgICAgICAgbmV3VmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fdG9QbGFpbk9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgICBlbHNlIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2luaXRDbG9uZU9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xcbiAgICB9XFxuICB9XFxuICBpZiAoaXNDb21tb24pIHtcXG4gICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIHN0YWNrLnNldChzcmNWYWx1ZSwgbmV3VmFsdWUpO1xcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xcbiAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xcbiAgfVxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZU1lcmdlRGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xcbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXFxudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcXG5cXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xcbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLkJ1ZmZlciA6IHVuZGVmaW5lZCxcXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXFxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cXG4gKi9cXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xcbiAgaWYgKGlzRGVlcCkge1xcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XFxuICB9XFxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XFxuXFxuICBidWZmZXIuY29weShyZXN1bHQpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2xvbmVCdWZmZXIpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxMzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nsb25lQXJyYXlCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMyKTtcXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXFxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nsb25lQXJyYXlCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNsb25lVHlwZWRBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19VaW50OEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcXG4gIG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ocmVzdWx0KS5zZXQobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fVWludDhBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShhcnJheUJ1ZmZlcikpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2xvbmVBcnJheUJ1ZmZlcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc1Byb3RvdHlwZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXFxuICovXFxuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzUHJvdG90eXBlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKVxcbiAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFByb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSlcXG4gICAgOiB7fTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaW5pdENsb25lT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXFxuICovXFxudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XFxuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxcbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XFxuICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHByb3RvKSkge1xcbiAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XFxuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XFxuICAgIH1cXG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcXG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlQ3JlYXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSA9PSBhcmdzVGFnO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNBcmd1bWVudHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEzNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheUxpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXFxuICogaXMgYW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0FycmF5TGlrZU9iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4xMy4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcXG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxcbiAqL1xcbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3R1YkZhbHNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xcblxcbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcXG5cXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXFxudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XFxudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cXG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cXG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XFxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cXG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgJiZcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSldO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNUeXBlZEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XFxuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VVbmFyeSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xcbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XFxuXFxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5wcm9jZXNzO1xcblxcbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xcbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcXG4gIHRyeSB7XFxuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxcbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcXG5cXG4gICAgaWYgKHR5cGVzKSB7XFxuICAgICAgcmV0dXJuIHR5cGVzO1xcbiAgICB9XFxuXFxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXFxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcXG4gIH0gY2F0Y2ggKGUpIHt9XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChub2RlVXRpbCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjIpKG1vZHVsZSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE0MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29weU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Mik7XFxuXFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHBsYWluIG9iamVjdCBmbGF0dGVuaW5nIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZ1xcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYiA9IDI7XFxuICogfVxcbiAqXFxuICogRm9vLnByb3RvdHlwZS5jID0gMztcXG4gKlxcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxcbiAqXFxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcXG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfVxcbiAqL1xcbmZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3B5T2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c0luX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9ICh0b1BsYWluT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxcbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcXG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XFxuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcXG5cXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XFxuXFxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxcbiAgICAgIDogdW5kZWZpbmVkO1xcblxcbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XFxuICAgIH1cXG4gICAgaWYgKGlzTmV3KSB7XFxuICAgICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gb2JqZWN0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb3B5T2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXFxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cXG4gKi9cXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlLCB2YWx1ZSkpIHx8XFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgdmFsdWUpO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NpZ25WYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXFxuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXFxuICovXFxuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVRpbWVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzUHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19uYXRpdmVLZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ2KTtcXG5cXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25hdGl2ZUtleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG4gIH1cXG4gIHZhciBpc1Byb3RvID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgcmVzdWx0ID0gW107XFxuXFxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XFxuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XFxuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXFxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XFxuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG5hdGl2ZUtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUmVzdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzSXRlcmF0ZWVDYWxsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUmVzdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XFxuICAgIHZhciBpbmRleCA9IC0xLFxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xcblxcbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcXG4gICAgICA6IHVuZGVmaW5lZDtcXG5cXG4gICAgaWYgKGd1YXJkICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzSXRlcmF0ZWVDYWxsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcXG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XFxuICAgICAgbGVuZ3RoID0gMTtcXG4gICAgfVxcbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XFxuICAgICAgaWYgKHNvdXJjZSkge1xcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdDtcXG4gIH0pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVBc3NpZ25lcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pZGVudGl0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fb3ZlclJlc3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTEpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fb3ZlclJlc3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmMsIHN0YXJ0LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lkZW50aXR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSwgZnVuYyArICcnKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVJlc3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBwbHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUwKTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcXG4gICAgICAgIGluZGV4ID0gLTEsXFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XFxuXFxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcXG4gICAgfVxcbiAgICBpbmRleCA9IC0xO1xcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcXG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcXG4gICAgfVxcbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwcGx5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob3ZlclJlc3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxcbiAqL1xcbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcXG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcXG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XFxuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcXG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xcbiAgfVxcbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFwcGx5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VTZXRUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Nob3J0T3V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NCk7XFxuXFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cXG4gKi9cXG52YXIgc2V0VG9TdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zaG9ydE91dF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlU2V0VG9TdHJpbmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNldFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbnN0YW50X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVmaW5lUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXFxuICovXFxudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pZGVudGl0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCAndG9TdHJpbmcnLCB7XFxuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxcbiAgICAndmFsdWUnOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb25zdGFudF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RyaW5nKSxcXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxcbiAgfSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlU2V0VG9TdHJpbmcpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDIuNC4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XFxuICpcXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcXG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cXG4gKlxcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb25zdGFudCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXFxudmFyIEhPVF9DT1VOVCA9IDgwMCxcXG4gICAgSE9UX1NQQU4gPSAxNjtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxcbiAqIG1pbGxpc2Vjb25kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcXG4gIHZhciBjb3VudCA9IDAsXFxuICAgICAgbGFzdENhbGxlZCA9IDA7XFxuXFxuICByZXR1cm4gZnVuY3Rpb24oKSB7XFxuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcXG5cXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcXG4gICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgY291bnQgPSAwO1xcbiAgICB9XFxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNob3J0T3V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgdmFsdWUgYXJndW1lbnQuXFxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLFxcbiAqICBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XFxuICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xcbiAgICAgICAgPyAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcnJheUxpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNJbmRleF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5kZXgsIG9iamVjdC5sZW5ndGgpKVxcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXFxuICAgICAgKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19lcV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xcbiAgfVxcbiAgcmV0dXJuIGZhbHNlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0l0ZXJhdGVlQ2FsbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlRm9yX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19rZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XFxuICByZXR1cm4gb2JqZWN0ICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgaXRlcmF0ZWUsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VGb3JPd24pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNQcm90b3R5cGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX25hdGl2ZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTU4KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xcbiAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1Byb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbmF0aXZlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG4gIH1cXG4gIHZhciByZXN1bHQgPSBbXTtcXG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUtleXMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3Qua2V5cywgT2JqZWN0KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChuYXRpdmVLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNYXRjaGVzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZU1hdGNoZXNQcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3Byb3BlcnR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xcbiAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcXG4gICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faWRlbnRpdHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICB9XFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSlcXG4gICAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VNYXRjaGVzUHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlWzBdLCB2YWx1ZVsxXSlcXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNYXRjaGVzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxuICB9XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fcHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUl0ZXJhdGVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc01hdGNoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0TWF0Y2hEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcXG4gIHZhciBtYXRjaERhdGEgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRNYXRjaERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSk7XFxuICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc01hdGNoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNYXRjaGVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlSXNFcXVhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXFxudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXRjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxcbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhLCBjdXN0b21pemVyKSB7XFxuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxcbiAgICAgIG5vQ3VzdG9taXplciA9ICFjdXN0b21pemVyO1xcblxcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XFxuICAgIHJldHVybiAhbGVuZ3RoO1xcbiAgfVxcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICB3aGlsZSAoaW5kZXgtLSkge1xcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XFxuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXFxuICAgICAgICAgID8gZGF0YVsxXSAhPT0gb2JqZWN0W2RhdGFbMF1dXFxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcXG4gICAgICAgICkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XFxuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxcbiAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcXG5cXG4gICAgaWYgKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKSB7XFxuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICB2YXIgc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG4gICAgICBpZiAoY3VzdG9taXplcikge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjayk7XFxuICAgICAgfVxcbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXFxuICAgICAgICAgICAgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxcbiAgICAgICAgICAgIDogcmVzdWx0XFxuICAgICAgICAgICkpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiB0cnVlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNNYXRjaCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXF1YWxBcnJheXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2VxdWFsQnlUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19lcXVhbE9iamVjdHNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcblxcblxcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgb2JqSXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpLFxcbiAgICAgIG90aElzQXJyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpLFxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2dldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpO1xcblxcbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XFxuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcXG5cXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XFxuXFxuICBpZiAoaXNTYW1lVGFnICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKSB7XFxuICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9faXNCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyKSkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICBvYmpJc0FyciA9IHRydWU7XFxuICAgIG9iaklzT2JqID0gZmFsc2U7XFxuICB9XFxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuICAgIHJldHVybiAob2JqSXNBcnIgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19faXNUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKVxcbiAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXF1YWxBcnJheXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXFxuICAgICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcXVhbEJ5VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xcbiAgfVxcbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XFxuXFxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XFxuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XFxuXFxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcXG4gICAgfVxcbiAgfVxcbiAgaWYgKCFpc1NhbWVUYWcpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsT2JqZWN0c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJc0VxdWFsRGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19NYXBDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc2V0Q2FjaGVBZGRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRDYWNoZUhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjUpO1xcblxcblxcblxcblxcbi8qKlxcbiAqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XFxuXFxuICB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcXG4gIH1cXG59XFxuXFxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3NldENhY2hlQWRkX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFNldENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XFxuXFxuLyoqXFxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgYWRkXFxuICogQG1lbWJlck9mIFNldENhY2hlXFxuICogQGFsaWFzIHB1c2hcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcXG4gIHJldHVybiB0aGlzO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRDYWNoZUFkZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXFxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XFxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRDYWNoZUhhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXFxuICogc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYXJyYXlTb21lKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjYWNoZUhhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsQXJyYXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBUb0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2V0VG9BcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzApO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xcblxcbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcXG5cXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cXG52YXIgc3ltYm9sUHJvdG8gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcXG5cXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXFxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cXG4gKlxcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICBzd2l0Y2ggKHRhZykge1xcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcXG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XFxuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XFxuXFxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XFxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ob2JqZWN0KSwgbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fVWludDhBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShvdGhlcikpKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiB0cnVlO1xcblxcbiAgICBjYXNlIGJvb2xUYWc6XFxuICAgIGNhc2UgZGF0ZVRhZzpcXG4gICAgY2FzZSBudW1iZXJUYWc6XFxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoK29iamVjdCwgK290aGVyKTtcXG5cXG4gICAgY2FzZSBlcnJvclRhZzpcXG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xcblxcbiAgICBjYXNlIHJlZ2V4cFRhZzpcXG4gICAgY2FzZSBzdHJpbmdUYWc6XFxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXFxuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcXG5cXG4gICAgY2FzZSBtYXBUYWc6XFxuICAgICAgdmFyIGNvbnZlcnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21hcFRvQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuICAgIGNhc2Ugc2V0VGFnOlxcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XFxuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2V0VG9BcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXFxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcXG4gICAgICBpZiAoc3RhY2tlZCkge1xcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICAgICAgfVxcbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcXG5cXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XFxuICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsQXJyYXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcXG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcXG4gICAgICByZXR1cm4gcmVzdWx0O1xcblxcbiAgICBjYXNlIHN5bWJvbFRhZzpcXG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XFxuICAgICAgfVxcbiAgfVxcbiAgcmV0dXJuIGZhbHNlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcXVhbEJ5VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XFxuXFxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XFxuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwVG9BcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cXG4gKi9cXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xcblxcbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcXG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XFxuICB9KTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNldFRvQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzIpO1xcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxcbiAgICAgIG9ialByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSxcXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXFxuICAgICAgb3RoUHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRBbGxLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlciksXFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xcblxcbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XFxuICB3aGlsZSAoaW5kZXgtLSkge1xcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxcbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcXG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcXG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICB9XFxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcXG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcXG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcXG5cXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcXG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XFxuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcXG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XFxuXFxuICAgIGlmIChjdXN0b21pemVyKSB7XFxuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcXG4gICAgICAgICAgOiBjb21wYXJlZFxcbiAgICAgICAgKSkge1xcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcXG4gIH1cXG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XFxuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xcblxcbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXFxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XFxuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZXF1YWxPYmplY3RzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRBbGxLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0U3ltYm9sc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2tleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDApO1xcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxcbiAqL1xcbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldEFsbEtleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19rZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFN5bWJvbHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRBbGxLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5UHVzaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXFxuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XFxuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gcmVzdWx0IDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlQdXNoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlR2V0QWxsS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cXG4gKi9cXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XFxuXFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xcbiAgfVxcbiAgcmV0dXJuIGFycmF5O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheVB1c2gpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlGaWx0ZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdHViQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc3KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXFxuICovXFxudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3R1YkFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogZnVuY3Rpb24ob2JqZWN0KSB7XFxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcXG4gICAgcmV0dXJuIFtdO1xcbiAgfVxcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlGaWx0ZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XFxuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcXG4gIH0pO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0U3ltYm9scyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXFxuICAgICAgcmVzSW5kZXggPSAwLFxcbiAgICAgIHJlc3VsdCA9IFtdO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XFxuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5RmlsdGVyKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4xMy4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xcbiAqXFxuICogY29uc29sZS5sb2coYXJyYXlzKTtcXG4gKiAvLyA9PiBbW10sIFtdXVxcbiAqXFxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xcbiAgcmV0dXJuIFtdO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHViQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19TZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19XZWFrTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFzZUdldFRhZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xcblxcbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICBtYXBDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Qcm9taXNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgc2V0Q3RvclN0cmluZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSksXFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fV2Vha01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuLyoqXFxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxcbiAqL1xcbnZhciBnZXRUYWcgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxcbmlmICgoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRhVmlld19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10obmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSBtYXBUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fUHJvbWlzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSBzZXRUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pICE9IHdlYWtNYXBUYWcpKSB7XFxuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xcbiAgICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKEN0b3IpIDogJyc7XFxuXFxuICAgIGlmIChjdG9yU3RyaW5nKSB7XFxuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XFxuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XFxuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XFxuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFRhZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIERhdGFWaWV3ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sICdEYXRhVmlldycpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKERhdGFWaWV3KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cXG52YXIgUHJvbWlzZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnUHJvbWlzZScpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFByb21pc2UpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xcbnZhciBTZXQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1NldCcpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTgyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIFdlYWtNYXAgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1dlYWtNYXAnKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChXZWFrTWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MCk7XFxuXFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xcbiAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcXG5cXG4gIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xcblxcbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N0cmljdENvbXBhcmFibGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKV07XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRNYXRjaERhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc0luX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCksIHNyY1ZhbHVlKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgdmFyIG9ialZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxcbiAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faGFzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aClcXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRyk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlTWF0Y2hlc1Byb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjgpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXFxuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMy43LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XFxuICpcXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xcbiAqIC8vID0+IDNcXG4gKlxcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xcbiAqIC8vID0+IDNcXG4gKlxcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcXG4gKiAvLyA9PiAnZGVmYXVsdCdcXG4gKi9cXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcXG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aCk7XFxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSGFzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19oYXNQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OCk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc1BhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSGFzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUhhc0luKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0xlbmd0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdG9LZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgcGF0aGAgZXhpc3RzIG9uIGBvYmplY3RgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XFxuICBwYXRoID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY2FzdFBhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgsIG9iamVjdCk7XFxuXFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBrZXkgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aFtpbmRleF0pO1xcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcXG4gIH1cXG4gIGlmIChyZXN1bHQgfHwgKytpbmRleCAhPSBsZW5ndGgpIHtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH1cXG4gIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IG9iamVjdC5sZW5ndGg7XFxuICByZXR1cm4gISFsZW5ndGggJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGxlbmd0aCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNJbmRleF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoa2V5LCBsZW5ndGgpICYmXFxuICAgIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlUHJvcGVydHlEZWVwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMi40LjBcXG4gKiBAY2F0ZWdvcnkgVXRpbFxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3RzID0gW1xcbiAqICAgeyAnYSc6IHsgJ2InOiAyIH0gfSxcXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cXG4gKiBdO1xcbiAqXFxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xcbiAqIC8vID0+IFsyLCAxXVxcbiAqXFxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcXG4gKiAvLyA9PiBbMSwgMl1cXG4gKi9cXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNLZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCkpIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVByb3BlcnR5RGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHByb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlUHJvcGVydHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE5MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OCk7XFxuXFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVByb3BlcnR5RGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXFxuICovXFxuXFxuXFxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XFxuICAgIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXFxuICAgIGRlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZGlzcGxheU5hbWU6IHRydWUsXFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgbWl4aW5zOiB0cnVlLFxcbiAgICBwcm9wVHlwZXM6IHRydWUsXFxuICAgIHR5cGU6IHRydWVcXG59O1xcblxcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xcbiAgICBuYW1lOiB0cnVlLFxcbiAgICBsZW5ndGg6IHRydWUsXFxuICAgIHByb3RvdHlwZTogdHJ1ZSxcXG4gICAgY2FsbGVyOiB0cnVlLFxcbiAgICBhcmd1bWVudHM6IHRydWUsXFxuICAgIGFyaXR5OiB0cnVlXFxufTtcXG5cXG52YXIgaXNHZXRPd25Qcm9wZXJ0eVN5bWJvbHNBdmFpbGFibGUgPSB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJztcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBjdXN0b21TdGF0aWNzKSB7XFxuICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykgeyAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xcblxcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cXG4gICAgICAgIGlmIChpc0dldE93blByb3BlcnR5U3ltYm9sc0F2YWlsYWJsZSkge1xcbiAgICAgICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleXNbaV1dICYmICFLTk9XTl9TVEFUSUNTW2tleXNbaV1dICYmICghY3VzdG9tU3RhdGljcyB8fCAhY3VzdG9tU3RhdGljc1trZXlzW2ldXSkpIHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldENvbXBvbmVudFtrZXlzW2ldXSA9IHNvdXJjZUNvbXBvbmVudFtrZXlzW2ldXTtcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcXG5cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBjcmVhdGVQcm92aWRlciAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX3dhcm5pbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlID0gZmFsc2U7XFxuZnVuY3Rpb24gd2FybkFib3V0UmVjZWl2aW5nU3RvcmUoKSB7XFxuICBpZiAoZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUpIHtcXG4gICAgcmV0dXJuO1xcbiAgfVxcbiAgZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUgPSB0cnVlO1xcblxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbHNfd2FybmluZ19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoJzxQcm92aWRlcj4gZG9lcyBub3Qgc3VwcG9ydCBjaGFuZ2luZyBgc3RvcmVgIG9uIHRoZSBmbHkuICcgKyAnSXQgaXMgbW9zdCBsaWtlbHkgdGhhdCB5b3Ugc2VlIHRoaXMgZXJyb3IgYmVjYXVzZSB5b3UgdXBkYXRlZCB0byAnICsgJ1JlZHV4IDIueCBhbmQgUmVhY3QgUmVkdXggMi54IHdoaWNoIG5vIGxvbmdlciBob3QgcmVsb2FkIHJlZHVjZXJzICcgKyAnYXV0b21hdGljYWxseS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXJlZHV4L3JlbGVhc2VzLycgKyAndGFnL3YyLjAuMCBmb3IgdGhlIG1pZ3JhdGlvbiBpbnN0cnVjdGlvbnMuJyk7XFxufVxcblxcbmZ1bmN0aW9uIGNyZWF0ZVByb3ZpZGVyKCkge1xcbiAgdmFyIF9Qcm92aWRlciRjaGlsZENvbnRleDtcXG5cXG4gIHZhciBzdG9yZUtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ3N0b3JlJztcXG4gIHZhciBzdWJLZXkgPSBhcmd1bWVudHNbMV07XFxuXFxuICB2YXIgc3Vic2NyaXB0aW9uS2V5ID0gc3ViS2V5IHx8IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XFxuXFxuICB2YXIgUHJvdmlkZXIgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICBfaW5oZXJpdHMoUHJvdmlkZXIsIF9Db21wb25lbnQpO1xcblxcbiAgICBQcm92aWRlci5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xcbiAgICAgIHZhciBfcmVmO1xcblxcbiAgICAgIHJldHVybiBfcmVmID0ge30sIF9yZWZbc3RvcmVLZXldID0gdGhpc1tzdG9yZUtleV0sIF9yZWZbc3Vic2NyaXB0aW9uS2V5XSA9IG51bGwsIF9yZWY7XFxuICAgIH07XFxuXFxuICAgIGZ1bmN0aW9uIFByb3ZpZGVyKHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFByb3ZpZGVyKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICBfdGhpc1tzdG9yZUtleV0gPSBwcm9wcy5zdG9yZTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNoaWxkcmVuXFxcIl0ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKTtcXG4gICAgfTtcXG5cXG4gICAgcmV0dXJuIFByb3ZpZGVyO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiAobmV4dFByb3BzKSB7XFxuICAgICAgaWYgKHRoaXNbc3RvcmVLZXldICE9PSBuZXh0UHJvcHMuc3RvcmUpIHtcXG4gICAgICAgIHdhcm5BYm91dFJlY2VpdmluZ1N0b3JlKCk7XFxuICAgICAgfVxcbiAgICB9O1xcbiAgfVxcblxcbiAgUHJvdmlkZXIucHJvcFR5cGVzID0ge1xcbiAgICBzdG9yZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogc3RvcmVTaGFwZSAqL10uaXNSZXF1aXJlZCxcXG4gICAgY2hpbGRyZW46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmVsZW1lbnQuaXNSZXF1aXJlZFxcbiAgfTtcXG4gIFByb3ZpZGVyLmNoaWxkQ29udGV4dFR5cGVzID0gKF9Qcm92aWRlciRjaGlsZENvbnRleCA9IHt9LCBfUHJvdmlkZXIkY2hpbGRDb250ZXhbc3RvcmVLZXldID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogc3RvcmVTaGFwZSAqL10uaXNSZXF1aXJlZCwgX1Byb3ZpZGVyJGNoaWxkQ29udGV4W3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9Qcm92aWRlciRjaGlsZENvbnRleCk7XFxuXFxuICByZXR1cm4gUHJvdmlkZXI7XFxufVxcblxcbi8qIHVudXNlZCBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBfdW51c2VkX3dlYnBhY2tfZGVmYXVsdF9leHBvcnQgPSAoY3JlYXRlUHJvdmlkZXIoKSk7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE5NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTUpO1xcblxcbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xcbnZhciBjaGVja1Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk2KTtcXG5cXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcXG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXFxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXFxuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXFxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICB9IGNhdGNoICh4KSB7fVxcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcXG4gIHJldHVybiBudWxsO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKSB7XFxuICAvKiBnbG9iYWwgU3ltYm9sICovXFxuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XFxuICB2YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cXG5cXG4gIC8qKlxcbiAgICogUmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRlcmFibGUgb2JqZWN0LlxcbiAgICpcXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxcbiAgICpcXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XFxuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcXG4gICAqICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTtcXG4gICAqICAgICAgIC4uLlxcbiAgICogICAgIH1cXG4gICAqXFxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cXG4gICAqL1xcbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XFxuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XFxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKipcXG4gICAqIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IGFsbG93IGRlY2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJlXFxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxcbiAgICpcXG4gICAqICAgdmFyIFByb3BzID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTtcXG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcXG4gICAqICAgICBwcm9wVHlwZXM6IHtcXG4gICAqICAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5hbWVkIFxcXCJkZXNjcmlwdGlvblxcXCIuXFxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxcbiAgICpcXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFxcXCJjYXRlZ29yeVxcXCIuXFxuICAgKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsXFxuICAgKlxcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFxcXCJkaWFsb2dcXFwiIHRoYXQgcmVxdWlyZXMgYW4gaW5zdGFuY2Ugb2YgRGlhbG9nLlxcbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxcbiAgICogICAgIH0sXFxuICAgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsgLi4uIH1cXG4gICAqICAgfSk7XFxuICAgKlxcbiAgICogQSBtb3JlIGZvcm1hbCBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOlxcbiAgICpcXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxcbiAgICogICBkZWNsIDo9IFJlYWN0UHJvcFR5cGVzLnt0eXBlfSguaXNSZXF1aXJlZCk/XFxuICAgKlxcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xcbiAgICogYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIEZvciBleGFtcGxlOlxcbiAgICpcXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xcbiAgICogICAgcHJvcFR5cGVzOiB7XFxuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcXFwiaHJlZlxcXCIuXFxuICAgKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXFxuICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2YgVVJJKSkge1xcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcXG4gICAqICAgICAgICAgICAgY29tcG9uZW50TmFtZVxcbiAgICogICAgICAgICAgKTtcXG4gICAqICAgICAgICB9XFxuICAgKiAgICAgIH1cXG4gICAqICAgIH0sXFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cXG4gICAqICB9KTtcXG4gICAqXFxuICAgKiBAaW50ZXJuYWxcXG4gICAqL1xcblxcbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcXG5cXG4gIC8vIEltcG9ydGFudCFcXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcXG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxcbiAgICBmdW5jOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSxcXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxcbiAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzdHJpbmcnKSxcXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXFxuXFxuICAgIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSxcXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIsXFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxcbiAgfTtcXG5cXG4gIC8qKlxcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXFxuICAgKi9cXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cXG4gIGZ1bmN0aW9uIGlzKHgsIHkpIHtcXG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxcbiAgICBpZiAoeCA9PT0geSkge1xcbiAgICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXFxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcXG4gICAgfVxcbiAgfVxcbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXFxuXFxuICAvKipcXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcXG4gICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBvdXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsXFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXFxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XFxuICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlwZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xcbiAgICB0aGlzLnN0YWNrID0gJyc7XFxuICB9XFxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXFxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XFxuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcXG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XFxuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xcblxcbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XFxuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXFxuICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gJyArXFxuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXFxuICAgICAgICAgICk7XFxuICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICAgICAgICB0aHJvdyBlcnI7XFxuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XFxuICAgICAgICAgIGlmIChcXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXFxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXFxuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXFxuICAgICAgICAgICkge1xcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcXG4gICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgcHJvcCBvbiBgJyArIGNvbXBvbmVudE5hbWUgICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXFxuICAgICAgICAgICAgICAnWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRoaXJkLXBhcnR5IFByb3BUeXBlcyAnICtcXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXFxuICAgICAgICAgICAgKTtcXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XFxuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG51bGw7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcXG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XFxuXFxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XFxuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxcbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxcbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcXG5cXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4nKTtcXG4gICAgICB9XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcXG4gICAgICB9XFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XFxuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XFxuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDtcXG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xcbiAgICAgICAgICByZXR1cm4gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuXFxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzKTtcXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgcHJvcFZhbHVlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XFxuICAgICAgfVxcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xcbiAgICAgIH1cXG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XFxuICAgICAgICBpZiAocHJvcFZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHtcXG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcXG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XFxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XFxuICAgIH1cXG5cXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcXG4gICAgICAgICk7XFxuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XFxuICAgICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KSA9PSBudWxsKSB7XFxuICAgICAgICAgIHJldHVybiBudWxsO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xcbiAgICAgIH1cXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XFxuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcXG4gICAgICAgICAgY29udGludWU7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XFxuICAgICAgfVxcbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgYWxsIGtleXMgaW4gY2FzZSBzb21lIGFyZSByZXF1aXJlZCBidXQgbWlzc2luZyBmcm9tXFxuICAgICAgLy8gcHJvcHMuXFxuICAgICAgdmFyIGFsbEtleXMgPSBhc3NpZ24oe30sIHByb3BzW3Byb3BOYW1lXSwgc2hhcGVUeXBlcyk7XFxuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcXG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XFxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXFxuICAgICAgICAgICAgJ1xcXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xcbiAgICAgICAgICAgICdcXFxcblZhbGlkIGtleXM6ICcgKyAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXFxuICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcXG4gICAgICBjYXNlICdudW1iZXInOlxcbiAgICAgIGNhc2UgJ3N0cmluZyc6XFxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XFxuICAgICAgY2FzZSAnb2JqZWN0JzpcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XFxuICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XFxuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTtcXG4gICAgICAgICAgdmFyIHN0ZXA7XFxuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcXG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXFxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcXG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIGRlZmF1bHQ6XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcXG4gICAgLy8gTmF0aXZlIFN5bWJvbC5cXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuXFxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXFxuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcXG4gICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgfVxcblxcbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXFxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG5cXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XFxuICAgICAgcmV0dXJuICdhcnJheSc7XFxuICAgIH1cXG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cXG4gICAgICByZXR1cm4gJ29iamVjdCc7XFxuICAgIH1cXG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XFxuICAgICAgcmV0dXJuICdzeW1ib2wnO1xcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVHlwZTtcXG4gIH1cXG5cXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxcbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XFxuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcXG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XFxuICAgIH1cXG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XFxuICAgICAgICByZXR1cm4gJ2RhdGUnO1xcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XFxuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVHlwZTtcXG4gIH1cXG5cXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cXG4gIC8vIEZvciBleGFtcGxlLCBcXFwidW5kZWZpbmVkXFxcIiBvciBcXFwib2YgdHlwZSBhcnJheVxcXCJcXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcXG4gICAgc3dpdGNoICh0eXBlKSB7XFxuICAgICAgY2FzZSAnYXJyYXknOlxcbiAgICAgIGNhc2UgJ29iamVjdCc6XFxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxcbiAgICAgIGNhc2UgJ2RhdGUnOlxcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XFxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XFxuICAgICAgZGVmYXVsdDpcXG4gICAgICAgIHJldHVybiB0eXBlO1xcbiAgICB9XFxuICB9XFxuXFxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxcbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcXG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcXG4gIH1cXG5cXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XFxuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcXG5cXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcXG59O1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxOTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qXFxub2JqZWN0LWFzc2lnblxcbihjKSBTaW5kcmUgU29yaHVzXFxuQGxpY2Vuc2UgTUlUXFxuKi9cXG5cXG5cXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XFxudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xcblxcbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xcblxcdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcXG5cXHRcXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xcblxcdH1cXG5cXG5cXHRyZXR1cm4gT2JqZWN0KHZhbCk7XFxufVxcblxcbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcXG5cXHR0cnkge1xcblxcdFxcdGlmICghT2JqZWN0LmFzc2lnbikge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxcblxcblxcdFxcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcXG5cXHRcXHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXFxuXFx0XFx0dGVzdDFbNV0gPSAnZGUnO1xcblxcdFxcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxcblxcdFxcdHZhciB0ZXN0MiA9IHt9O1xcblxcdFxcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xcblxcdFxcdFxcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcXG5cXHRcXHR9XFxuXFx0XFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcXG5cXHRcXHRcXHRyZXR1cm4gdGVzdDJbbl07XFxuXFx0XFx0fSk7XFxuXFx0XFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XFxuXFx0XFx0dmFyIHRlc3QzID0ge307XFxuXFx0XFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XFxuXFx0XFx0XFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcXG5cXHRcXHR9KTtcXG5cXHRcXHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cXG5cXHRcXHRcXHRcXHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cXHR9IGNhdGNoIChlcnIpIHtcXG5cXHRcXHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxcblxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHR9XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XFxuXFx0dmFyIGZyb207XFxuXFx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcXG5cXHR2YXIgc3ltYm9scztcXG5cXG5cXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xcblxcdFxcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcXG5cXG5cXHRcXHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xcblxcdFxcdFxcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcXG5cXHRcXHRcXHRcXHR0b1trZXldID0gZnJvbVtrZXldO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xcblxcdFxcdFxcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XFxuXFx0XFx0XFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XFxuXFx0XFx0XFx0XFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xcblxcdFxcdFxcdFxcdFxcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9XFxuXFxuXFx0cmV0dXJuIHRvO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xcblxcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcXG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcXG5cXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XFxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxcbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcXG4gICAgfSBjYXRjaCAoeCkge31cXG4gIH07XFxufVxcblxcbi8qKlxcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cXG4gKlxcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXFxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXFxcInByb3BcXFwiLCBcXFwiY29udGV4dFxcXCIsIFxcXCJjaGlsZCBjb250ZXh0XFxcIlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXFxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cXG4gKiBAcHJpdmF0ZVxcbiAqL1xcbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcXG4gICAgICBpZiAodHlwZVNwZWNzLmhhc093blByb3BlcnR5KHR5cGVTcGVjTmFtZSkpIHtcXG4gICAgICAgIHZhciBlcnJvcjtcXG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXFxuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXFxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxcbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLidcXG4gICAgICAgICAgICApO1xcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICAgICAgICAgIHRocm93IGVycjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcXG4gICAgICAgICAgZXJyb3IgPSBleDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XFxuICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXFxuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xcbiAgICAgICAgICApXFxuXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcXG5cXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XFxuXFxuICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXFxuICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE5NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXFxuICpcXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXFxuICovXFxuXFxuXFxuXFxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7XFxuXFxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcXG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcXG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcXG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXFxuICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcXG4gICAgKTtcXG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XFxuICAgIHRocm93IGVycjtcXG4gIH07XFxuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcXG4gICAgcmV0dXJuIHNoaW07XFxuICB9O1xcbiAgLy8gSW1wb3J0YW50IVxcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXFxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XFxuICAgIGFycmF5OiBzaGltLFxcbiAgICBib29sOiBzaGltLFxcbiAgICBmdW5jOiBzaGltLFxcbiAgICBudW1iZXI6IHNoaW0sXFxuICAgIG9iamVjdDogc2hpbSxcXG4gICAgc3RyaW5nOiBzaGltLFxcbiAgICBzeW1ib2w6IHNoaW0sXFxuXFxuICAgIGFueTogc2hpbSxcXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcXG4gICAgZWxlbWVudDogc2hpbSxcXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcXG4gICAgbm9kZTogc2hpbSxcXG4gICAgb2JqZWN0T2Y6IGdldFNoaW0sXFxuICAgIG9uZU9mOiBnZXRTaGltLFxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXFxuICAgIHNoYXBlOiBnZXRTaGltLFxcbiAgICBleGFjdDogZ2V0U2hpbVxcbiAgfTtcXG5cXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZW1wdHlGdW5jdGlvbjtcXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xcblxcbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXFxuICovXFxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XFxuICAgIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXFxuICAgIGRlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZGlzcGxheU5hbWU6IHRydWUsXFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxcbiAgICBtaXhpbnM6IHRydWUsXFxuICAgIHByb3BUeXBlczogdHJ1ZSxcXG4gICAgdHlwZTogdHJ1ZVxcbn07XFxuXFxudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XFxuICAgIG5hbWU6IHRydWUsXFxuICAgIGxlbmd0aDogdHJ1ZSxcXG4gICAgcHJvdG90eXBlOiB0cnVlLFxcbiAgICBjYWxsZXI6IHRydWUsXFxuICAgIGNhbGxlZTogdHJ1ZSxcXG4gICAgYXJndW1lbnRzOiB0cnVlLFxcbiAgICBhcml0eTogdHJ1ZVxcbn07XFxuXFxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XFxudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XFxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XFxudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xcbnZhciBvYmplY3RQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZiAmJiBnZXRQcm90b3R5cGVPZihPYmplY3QpO1xcblxcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcXG4gICAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7IC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXFxuXFxuICAgICAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XFxuICAgICAgICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XFxuICAgICAgICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xcbiAgICAgICAgICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcXG5cXG4gICAgICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcXG4gICAgICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XFxuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleV0gJiYgIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAoIWJsYWNrbGlzdCB8fCAhYmxhY2tsaXN0W2tleV0pKSB7XFxuICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcXG4gICAgICAgICAgICAgICAgdHJ5IHsgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1YnNjcmlwdGlvbjsgfSk7XFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuLy8gZW5jYXBzdWxhdGVzIHRoZSBzdWJzY3JpcHRpb24gbG9naWMgZm9yIGNvbm5lY3RpbmcgYSBjb21wb25lbnQgdG8gdGhlIHJlZHV4IHN0b3JlLCBhc1xcbi8vIHdlbGwgYXMgbmVzdGluZyBzdWJzY3JpcHRpb25zIG9mIGRlc2NlbmRhbnQgY29tcG9uZW50cywgc28gdGhhdCB3ZSBjYW4gZW5zdXJlIHRoZVxcbi8vIGFuY2VzdG9yIGNvbXBvbmVudHMgcmUtcmVuZGVyIGJlZm9yZSBkZXNjZW5kYW50c1xcblxcbnZhciBDTEVBUkVEID0gbnVsbDtcXG52YXIgbnVsbExpc3RlbmVycyA9IHtcXG4gIG5vdGlmeTogZnVuY3Rpb24gbm90aWZ5KCkge31cXG59O1xcblxcbmZ1bmN0aW9uIGNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbigpIHtcXG4gIC8vIHRoZSBjdXJyZW50L25leHQgcGF0dGVybiBpcyBjb3BpZWQgZnJvbSByZWR1eCdzIGNyZWF0ZVN0b3JlIGNvZGUuXFxuICAvLyBUT0RPOiByZWZhY3RvcitleHBvc2UgdGhhdCBjb2RlIHRvIGJlIHJldXNhYmxlIGhlcmU/XFxuICB2YXIgY3VycmVudCA9IFtdO1xcbiAgdmFyIG5leHQgPSBbXTtcXG5cXG4gIHJldHVybiB7XFxuICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcXG4gICAgICBuZXh0ID0gQ0xFQVJFRDtcXG4gICAgICBjdXJyZW50ID0gQ0xFQVJFRDtcXG4gICAgfSxcXG4gICAgbm90aWZ5OiBmdW5jdGlvbiBub3RpZnkoKSB7XFxuICAgICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnQgPSBuZXh0O1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBsaXN0ZW5lcnNbaV0oKTtcXG4gICAgICB9XFxuICAgIH0sXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBuZXh0O1xcbiAgICB9LFxcbiAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xcbiAgICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xcbiAgICAgIGlmIChuZXh0ID09PSBjdXJyZW50KSBuZXh0ID0gY3VycmVudC5zbGljZSgpO1xcbiAgICAgIG5leHQucHVzaChsaXN0ZW5lcik7XFxuXFxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xcbiAgICAgICAgaWYgKCFpc1N1YnNjcmliZWQgfHwgY3VycmVudCA9PT0gQ0xFQVJFRCkgcmV0dXJuO1xcbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XFxuXFxuICAgICAgICBpZiAobmV4dCA9PT0gY3VycmVudCkgbmV4dCA9IGN1cnJlbnQuc2xpY2UoKTtcXG4gICAgICAgIG5leHQuc3BsaWNlKG5leHQuaW5kZXhPZihsaXN0ZW5lciksIDEpO1xcbiAgICAgIH07XFxuICAgIH1cXG4gIH07XFxufVxcblxcbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oc3RvcmUsIHBhcmVudFN1Yiwgb25TdGF0ZUNoYW5nZSkge1xcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3Vic2NyaXB0aW9uKTtcXG5cXG4gICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xcbiAgICB0aGlzLnBhcmVudFN1YiA9IHBhcmVudFN1YjtcXG4gICAgdGhpcy5vblN0YXRlQ2hhbmdlID0gb25TdGF0ZUNoYW5nZTtcXG4gICAgdGhpcy51bnN1YnNjcmliZSA9IG51bGw7XFxuICAgIHRoaXMubGlzdGVuZXJzID0gbnVsbExpc3RlbmVycztcXG4gIH1cXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkTmVzdGVkU3ViID0gZnVuY3Rpb24gYWRkTmVzdGVkU3ViKGxpc3RlbmVyKSB7XFxuICAgIHRoaXMudHJ5U3Vic2NyaWJlKCk7XFxuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5zdWJzY3JpYmUobGlzdGVuZXIpO1xcbiAgfTtcXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUubm90aWZ5TmVzdGVkU3VicyA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnMoKSB7XFxuICAgIHRoaXMubGlzdGVuZXJzLm5vdGlmeSgpO1xcbiAgfTtcXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuaXNTdWJzY3JpYmVkID0gZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnVuc3Vic2NyaWJlKTtcXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIHRyeVN1YnNjcmliZSgpIHtcXG4gICAgaWYgKCF0aGlzLnVuc3Vic2NyaWJlKSB7XFxuICAgICAgdGhpcy51bnN1YnNjcmliZSA9IHRoaXMucGFyZW50U3ViID8gdGhpcy5wYXJlbnRTdWIuYWRkTmVzdGVkU3ViKHRoaXMub25TdGF0ZUNoYW5nZSkgOiB0aGlzLnN0b3JlLnN1YnNjcmliZSh0aGlzLm9uU3RhdGVDaGFuZ2UpO1xcblxcbiAgICAgIHRoaXMubGlzdGVuZXJzID0gY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uKCk7XFxuICAgIH1cXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdHJ5VW5zdWJzY3JpYmUoKSB7XFxuICAgIGlmICh0aGlzLnVuc3Vic2NyaWJlKSB7XFxuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUgPSBudWxsO1xcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNsZWFyKCk7XFxuICAgICAgdGhpcy5saXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzO1xcbiAgICB9XFxuICB9O1xcblxcbiAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcXG59KCk7XFxuXFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgY3JlYXRlQ29ubmVjdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX191dGlsc19zaGFsbG93RXF1YWxfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19tYXBEaXNwYXRjaFRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19tYXBTdGF0ZVRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjA4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tZXJnZVByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2VsZWN0b3JGYWN0b3J5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMCk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLypcXG4gIGNvbm5lY3QgaXMgYSBmYWNhZGUgb3ZlciBjb25uZWN0QWR2YW5jZWQuIEl0IHR1cm5zIGl0cyBhcmdzIGludG8gYSBjb21wYXRpYmxlXFxuICBzZWxlY3RvckZhY3RvcnksIHdoaWNoIGhhcyB0aGUgc2lnbmF0dXJlOlxcblxcbiAgICAoZGlzcGF0Y2gsIG9wdGlvbnMpID0+IChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykgPT4gbmV4dEZpbmFsUHJvcHNcXG4gIFxcbiAgY29ubmVjdCBwYXNzZXMgaXRzIGFyZ3MgdG8gY29ubmVjdEFkdmFuY2VkIGFzIG9wdGlvbnMsIHdoaWNoIHdpbGwgaW4gdHVybiBwYXNzIHRoZW0gdG9cXG4gIHNlbGVjdG9yRmFjdG9yeSBlYWNoIHRpbWUgYSBDb25uZWN0IGNvbXBvbmVudCBpbnN0YW5jZSBpcyBpbnN0YW50aWF0ZWQgb3IgaG90IHJlbG9hZGVkLlxcblxcbiAgc2VsZWN0b3JGYWN0b3J5IHJldHVybnMgYSBmaW5hbCBwcm9wcyBzZWxlY3RvciBmcm9tIGl0cyBtYXBTdGF0ZVRvUHJvcHMsXFxuICBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVzLCBtZXJnZVByb3BzLFxcbiAgbWVyZ2VQcm9wc0ZhY3RvcmllcywgYW5kIHB1cmUgYXJncy5cXG5cXG4gIFRoZSByZXN1bHRpbmcgZmluYWwgcHJvcHMgc2VsZWN0b3IgaXMgY2FsbGVkIGJ5IHRoZSBDb25uZWN0IGNvbXBvbmVudCBpbnN0YW5jZSB3aGVuZXZlclxcbiAgaXQgcmVjZWl2ZXMgbmV3IHByb3BzIG9yIHN0b3JlIHN0YXRlLlxcbiAqL1xcblxcbmZ1bmN0aW9uIG1hdGNoKGFyZywgZmFjdG9yaWVzLCBuYW1lKSB7XFxuICBmb3IgKHZhciBpID0gZmFjdG9yaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XFxuICAgIHZhciByZXN1bHQgPSBmYWN0b3JpZXNbaV0oYXJnKTtcXG4gICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcXG4gIH1cXG5cXG4gIHJldHVybiBmdW5jdGlvbiAoZGlzcGF0Y2gsIG9wdGlvbnMpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIG9mIHR5cGUgJyArIHR5cGVvZiBhcmcgKyAnIGZvciAnICsgbmFtZSArICcgYXJndW1lbnQgd2hlbiBjb25uZWN0aW5nIGNvbXBvbmVudCAnICsgb3B0aW9ucy53cmFwcGVkQ29tcG9uZW50TmFtZSArICcuJyk7XFxuICB9O1xcbn1cXG5cXG5mdW5jdGlvbiBzdHJpY3RFcXVhbChhLCBiKSB7XFxuICByZXR1cm4gYSA9PT0gYjtcXG59XFxuXFxuLy8gY3JlYXRlQ29ubmVjdCB3aXRoIGRlZmF1bHQgYXJncyBidWlsZHMgdGhlICdvZmZpY2lhbCcgY29ubmVjdCBiZWhhdmlvci4gQ2FsbGluZyBpdCB3aXRoXFxuLy8gZGlmZmVyZW50IG9wdGlvbnMgb3BlbnMgdXAgc29tZSB0ZXN0aW5nIGFuZCBleHRlbnNpYmlsaXR5IHNjZW5hcmlvc1xcbmZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3QoKSB7XFxuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXFxuICAgICAgX3JlZiRjb25uZWN0SE9DID0gX3JlZi5jb25uZWN0SE9DLFxcbiAgICAgIGNvbm5lY3RIT0MgPSBfcmVmJGNvbm5lY3RIT0MgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9uZW50c19jb25uZWN0QWR2YW5jZWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJGNvbm5lY3RIT0MsXFxuICAgICAgX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID0gX3JlZi5tYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsXFxuICAgICAgbWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzID0gX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcFN0YXRlVG9Qcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYkbWFwU3RhdGVUb1Byb3BzRixcXG4gICAgICBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPSBfcmVmLm1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyxcXG4gICAgICBtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMgPSBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWFwRGlzcGF0Y2hUb1Byb3BzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZiRtYXBEaXNwYXRjaFRvUHJvLFxcbiAgICAgIF9yZWYkbWVyZ2VQcm9wc0ZhY3RvciA9IF9yZWYubWVyZ2VQcm9wc0ZhY3RvcmllcyxcXG4gICAgICBtZXJnZVByb3BzRmFjdG9yaWVzID0gX3JlZiRtZXJnZVByb3BzRmFjdG9yID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21lcmdlUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJG1lcmdlUHJvcHNGYWN0b3IsXFxuICAgICAgX3JlZiRzZWxlY3RvckZhY3RvcnkgPSBfcmVmLnNlbGVjdG9yRmFjdG9yeSxcXG4gICAgICBzZWxlY3RvckZhY3RvcnkgPSBfcmVmJHNlbGVjdG9yRmFjdG9yeSA9PT0gdW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zZWxlY3RvckZhY3RvcnlfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJHNlbGVjdG9yRmFjdG9yeTtcXG5cXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzKSB7XFxuICAgIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge30sXFxuICAgICAgICBfcmVmMiRwdXJlID0gX3JlZjIucHVyZSxcXG4gICAgICAgIHB1cmUgPSBfcmVmMiRwdXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogX3JlZjIkcHVyZSxcXG4gICAgICAgIF9yZWYyJGFyZVN0YXRlc0VxdWFsID0gX3JlZjIuYXJlU3RhdGVzRXF1YWwsXFxuICAgICAgICBhcmVTdGF0ZXNFcXVhbCA9IF9yZWYyJGFyZVN0YXRlc0VxdWFsID09PSB1bmRlZmluZWQgPyBzdHJpY3RFcXVhbCA6IF9yZWYyJGFyZVN0YXRlc0VxdWFsLFxcbiAgICAgICAgX3JlZjIkYXJlT3duUHJvcHNFcXVhID0gX3JlZjIuYXJlT3duUHJvcHNFcXVhbCxcXG4gICAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmMiRhcmVPd25Qcm9wc0VxdWEgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbHNfc2hhbGxvd0VxdWFsX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZjIkYXJlT3duUHJvcHNFcXVhLFxcbiAgICAgICAgX3JlZjIkYXJlU3RhdGVQcm9wc0VxID0gX3JlZjIuYXJlU3RhdGVQcm9wc0VxdWFsLFxcbiAgICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZjIkYXJlU3RhdGVQcm9wc0VxID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZVN0YXRlUHJvcHNFcSxcXG4gICAgICAgIF9yZWYyJGFyZU1lcmdlZFByb3BzRSA9IF9yZWYyLmFyZU1lcmdlZFByb3BzRXF1YWwsXFxuICAgICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsID0gX3JlZjIkYXJlTWVyZ2VkUHJvcHNFID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZU1lcmdlZFByb3BzRSxcXG4gICAgICAgIGV4dHJhT3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgWydwdXJlJywgJ2FyZVN0YXRlc0VxdWFsJywgJ2FyZU93blByb3BzRXF1YWwnLCAnYXJlU3RhdGVQcm9wc0VxdWFsJywgJ2FyZU1lcmdlZFByb3BzRXF1YWwnXSk7XFxuXFxuICAgIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gbWF0Y2gobWFwU3RhdGVUb1Byb3BzLCBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsICdtYXBTdGF0ZVRvUHJvcHMnKTtcXG4gICAgdmFyIGluaXRNYXBEaXNwYXRjaFRvUHJvcHMgPSBtYXRjaChtYXBEaXNwYXRjaFRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcywgJ21hcERpc3BhdGNoVG9Qcm9wcycpO1xcbiAgICB2YXIgaW5pdE1lcmdlUHJvcHMgPSBtYXRjaChtZXJnZVByb3BzLCBtZXJnZVByb3BzRmFjdG9yaWVzLCAnbWVyZ2VQcm9wcycpO1xcblxcbiAgICByZXR1cm4gY29ubmVjdEhPQyhzZWxlY3RvckZhY3RvcnksIF9leHRlbmRzKHtcXG4gICAgICAvLyB1c2VkIGluIGVycm9yIG1lc3NhZ2VzXFxuICAgICAgbWV0aG9kTmFtZTogJ2Nvbm5lY3QnLFxcblxcbiAgICAgIC8vIHVzZWQgdG8gY29tcHV0ZSBDb25uZWN0J3MgZGlzcGxheU5hbWUgZnJvbSB0aGUgd3JhcHBlZCBjb21wb25lbnQncyBkaXNwbGF5TmFtZS5cXG4gICAgICBnZXREaXNwbGF5TmFtZTogZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUobmFtZSkge1xcbiAgICAgICAgcmV0dXJuICdDb25uZWN0KCcgKyBuYW1lICsgJyknO1xcbiAgICAgIH0sXFxuXFxuICAgICAgLy8gaWYgbWFwU3RhdGVUb1Byb3BzIGlzIGZhbHN5LCB0aGUgQ29ubmVjdCBjb21wb25lbnQgZG9lc24ndCBzdWJzY3JpYmUgdG8gc3RvcmUgc3RhdGUgY2hhbmdlc1xcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogQm9vbGVhbihtYXBTdGF0ZVRvUHJvcHMpLFxcblxcbiAgICAgIC8vIHBhc3NlZCB0aHJvdWdoIHRvIHNlbGVjdG9yRmFjdG9yeVxcbiAgICAgIGluaXRNYXBTdGF0ZVRvUHJvcHM6IGluaXRNYXBTdGF0ZVRvUHJvcHMsXFxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wczogaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcXG4gICAgICBpbml0TWVyZ2VQcm9wczogaW5pdE1lcmdlUHJvcHMsXFxuICAgICAgcHVyZTogcHVyZSxcXG4gICAgICBhcmVTdGF0ZXNFcXVhbDogYXJlU3RhdGVzRXF1YWwsXFxuICAgICAgYXJlT3duUHJvcHNFcXVhbDogYXJlT3duUHJvcHNFcXVhbCxcXG4gICAgICBhcmVTdGF0ZVByb3BzRXF1YWw6IGFyZVN0YXRlUHJvcHNFcXVhbCxcXG4gICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsOiBhcmVNZXJnZWRQcm9wc0VxdWFsXFxuXFxuICAgIH0sIGV4dHJhT3B0aW9ucykpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdCgpKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHNoYWxsb3dFcXVhbDtcXG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcXG5cXG5mdW5jdGlvbiBpcyh4LCB5KSB7XFxuICBpZiAoeCA9PT0geSkge1xcbiAgICByZXR1cm4geCAhPT0gMCB8fCB5ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcXG4gIH0gZWxzZSB7XFxuICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XFxuICBpZiAoaXMob2JqQSwgb2JqQikpIHJldHVybiB0cnVlO1xcblxcbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG5cXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xcbiAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XFxuXFxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcXG5cXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcXG4gICAgaWYgKCFoYXNPd24uY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIWlzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gIHJldHVybiB0cnVlO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc09iamVjdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2KTtcXG5cXG5cXG5cXG5mdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbihtYXBEaXNwYXRjaFRvUHJvcHMpIHtcXG4gIHJldHVybiB0eXBlb2YgbWFwRGlzcGF0Y2hUb1Byb3BzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYlxcXCIgLyogd3JhcE1hcFRvUHJvcHNGdW5jICovXSkobWFwRGlzcGF0Y2hUb1Byb3BzLCAnbWFwRGlzcGF0Y2hUb1Byb3BzJykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc01pc3NpbmcobWFwRGlzcGF0Y2hUb1Byb3BzKSB7XFxuICByZXR1cm4gIW1hcERpc3BhdGNoVG9Qcm9wcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcXG4gICAgcmV0dXJuIHsgZGlzcGF0Y2g6IGRpc3BhdGNoIH07XFxuICB9KSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuZnVuY3Rpb24gd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzT2JqZWN0KG1hcERpc3BhdGNoVG9Qcm9wcykge1xcbiAgcmV0dXJuIG1hcERpc3BhdGNoVG9Qcm9wcyAmJiB0eXBlb2YgbWFwRGlzcGF0Y2hUb1Byb3BzID09PSAnb2JqZWN0JyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkobWFwRGlzcGF0Y2hUb1Byb3BzLCBkaXNwYXRjaCk7XFxuICB9KSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoW3doZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9uLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNPYmplY3RdKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihnbG9iYWwsIG1vZHVsZSkgey8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3BvbnlmaWxsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNCk7XFxuLyogZ2xvYmFsIHdpbmRvdyAqL1xcblxcblxcbnZhciByb290O1xcblxcbmlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSBzZWxmO1xcbn0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSB3aW5kb3c7XFxufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xcbiAgcm9vdCA9IGdsb2JhbDtcXG59IGVsc2UgaWYgKHRydWUpIHtcXG4gIHJvb3QgPSBtb2R1bGU7XFxufSBlbHNlIHtcXG4gIHJvb3QgPSBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xcbn1cXG5cXG52YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcG9ueWZpbGxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHJvb3QpO1xcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHJlc3VsdCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHN5bWJvbE9ic2VydmFibGVQb255ZmlsbDtcXG5mdW5jdGlvbiBzeW1ib2xPYnNlcnZhYmxlUG9ueWZpbGwocm9vdCkge1xcblxcdHZhciByZXN1bHQ7XFxuXFx0dmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xcblxcblxcdGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XFxuXFx0XFx0aWYgKFN5bWJvbC5vYnNlcnZhYmxlKSB7XFxuXFx0XFx0XFx0cmVzdWx0ID0gU3ltYm9sLm9ic2VydmFibGU7XFxuXFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHRyZXN1bHQgPSBTeW1ib2woJ29ic2VydmFibGUnKTtcXG5cXHRcXHRcXHRTeW1ib2wub2JzZXJ2YWJsZSA9IHJlc3VsdDtcXG5cXHRcXHR9XFxuXFx0fSBlbHNlIHtcXG5cXHRcXHRyZXN1bHQgPSAnQEBvYnNlcnZhYmxlJztcXG5cXHR9XFxuXFxuXFx0cmV0dXJuIHJlc3VsdDtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIwNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0KTtcXG5cXG5cXG5cXG5cXG5mdW5jdGlvbiBnZXRVbmRlZmluZWRTdGF0ZUVycm9yTWVzc2FnZShrZXksIGFjdGlvbikge1xcbiAgdmFyIGFjdGlvblR5cGUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGU7XFxuICB2YXIgYWN0aW9uTmFtZSA9IGFjdGlvblR5cGUgJiYgJ1xcXCInICsgYWN0aW9uVHlwZS50b1N0cmluZygpICsgJ1xcXCInIHx8ICdhbiBhY3Rpb24nO1xcblxcbiAgcmV0dXJuICdHaXZlbiBhY3Rpb24gJyArIGFjdGlvbk5hbWUgKyAnLCByZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkLiAnICsgJ1RvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZS4gJyArICdJZiB5b3Ugd2FudCB0aGlzIHJlZHVjZXIgdG8gaG9sZCBubyB2YWx1ZSwgeW91IGNhbiByZXR1cm4gbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC4nO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKGlucHV0U3RhdGUsIHJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSkge1xcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xcbiAgdmFyIGFyZ3VtZW50TmFtZSA9IGFjdGlvbiAmJiBhY3Rpb24udHlwZSA9PT0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fW1xcXCJhXFxcIiAvKiBBY3Rpb25UeXBlcyAqL10uSU5JVCA/ICdwcmVsb2FkZWRTdGF0ZSBhcmd1bWVudCBwYXNzZWQgdG8gY3JlYXRlU3RvcmUnIDogJ3ByZXZpb3VzIHN0YXRlIHJlY2VpdmVkIGJ5IHRoZSByZWR1Y2VyJztcXG5cXG4gIGlmIChyZWR1Y2VyS2V5cy5sZW5ndGggPT09IDApIHtcXG4gICAgcmV0dXJuICdTdG9yZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgcmVkdWNlci4gTWFrZSBzdXJlIHRoZSBhcmd1bWVudCBwYXNzZWQgJyArICd0byBjb21iaW5lUmVkdWNlcnMgaXMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgcmVkdWNlcnMuJztcXG4gIH1cXG5cXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5wdXRTdGF0ZSkpIHtcXG4gICAgcmV0dXJuICdUaGUgJyArIGFyZ3VtZW50TmFtZSArICcgaGFzIHVuZXhwZWN0ZWQgdHlwZSBvZiBcXFwiJyArIHt9LnRvU3RyaW5nLmNhbGwoaW5wdXRTdGF0ZSkubWF0Y2goL1xcXFxzKFthLXp8QS1aXSspLylbMV0gKyAnXFxcIi4gRXhwZWN0ZWQgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyAnICsgKCdrZXlzOiBcXFwiJyArIHJlZHVjZXJLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiJyk7XFxuICB9XFxuXFxuICB2YXIgdW5leHBlY3RlZEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dFN0YXRlKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xcbiAgICByZXR1cm4gIXJlZHVjZXJzLmhhc093blByb3BlcnR5KGtleSkgJiYgIXVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldO1xcbiAgfSk7XFxuXFxuICB1bmV4cGVjdGVkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgdW5leHBlY3RlZEtleUNhY2hlW2tleV0gPSB0cnVlO1xcbiAgfSk7XFxuXFxuICBpZiAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMCkge1xcbiAgICByZXR1cm4gJ1VuZXhwZWN0ZWQgJyArICh1bmV4cGVjdGVkS2V5cy5sZW5ndGggPiAxID8gJ2tleXMnIDogJ2tleScpICsgJyAnICsgKCdcXFwiJyArIHVuZXhwZWN0ZWRLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiIGZvdW5kIGluICcgKyBhcmd1bWVudE5hbWUgKyAnLiAnKSArICdFeHBlY3RlZCB0byBmaW5kIG9uZSBvZiB0aGUga25vd24gcmVkdWNlciBrZXlzIGluc3RlYWQ6ICcgKyAoJ1xcXCInICsgcmVkdWNlcktleXMuam9pbignXFxcIiwgXFxcIicpICsgJ1xcXCIuIFVuZXhwZWN0ZWQga2V5cyB3aWxsIGJlIGlnbm9yZWQuJyk7XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xcbiAgT2JqZWN0LmtleXMocmVkdWNlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICB2YXIgcmVkdWNlciA9IHJlZHVjZXJzW2tleV07XFxuICAgIHZhciBpbml0aWFsU3RhdGUgPSByZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX19bXFxcImFcXFwiIC8qIEFjdGlvblR5cGVzICovXS5JTklUIH0pO1xcblxcbiAgICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgXFxcIicgKyBrZXkgKyAnXFxcIiByZXR1cm5lZCB1bmRlZmluZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAnICsgJ0lmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXIgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCAnICsgJ2V4cGxpY2l0bHkgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgJyArICdub3QgYmUgdW5kZWZpbmVkLiBJZiB5b3UgZG9uXFxcXCd0IHdhbnQgdG8gc2V0IGEgdmFsdWUgZm9yIHRoaXMgcmVkdWNlciwgJyArICd5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLicpO1xcbiAgICB9XFxuXFxuICAgIHZhciB0eXBlID0gJ0BAcmVkdXgvUFJPQkVfVU5LTk9XTl9BQ1RJT05fJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KS5zcGxpdCgnJykuam9pbignLicpO1xcbiAgICBpZiAodHlwZW9mIHJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6IHR5cGUgfSkgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gcHJvYmVkIHdpdGggYSByYW5kb20gdHlwZS4gJyArICgnRG9uXFxcXCd0IHRyeSB0byBoYW5kbGUgJyArIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlU3RvcmVfX1tcXFwiYVxcXCIgLyogQWN0aW9uVHlwZXMgKi9dLklOSVQgKyAnIG9yIG90aGVyIGFjdGlvbnMgaW4gXFxcInJlZHV4LypcXFwiICcpICsgJ25hbWVzcGFjZS4gVGhleSBhcmUgY29uc2lkZXJlZCBwcml2YXRlLiBJbnN0ZWFkLCB5b3UgbXVzdCByZXR1cm4gdGhlICcgKyAnY3VycmVudCBzdGF0ZSBmb3IgYW55IHVua25vd24gYWN0aW9ucywgdW5sZXNzIGl0IGlzIHVuZGVmaW5lZCwgJyArICdpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgJyArICdhY3Rpb24gdHlwZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQsIGJ1dCBjYW4gYmUgbnVsbC4nKTtcXG4gICAgfVxcbiAgfSk7XFxufVxcblxcbi8qKlxcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCByZWR1Y2VyIGZ1bmN0aW9ucywgaW50byBhIHNpbmdsZVxcbiAqIHJlZHVjZXIgZnVuY3Rpb24uIEl0IHdpbGwgY2FsbCBldmVyeSBjaGlsZCByZWR1Y2VyLCBhbmQgZ2F0aGVyIHRoZWlyIHJlc3VsdHNcXG4gKiBpbnRvIGEgc2luZ2xlIHN0YXRlIG9iamVjdCwgd2hvc2Uga2V5cyBjb3JyZXNwb25kIHRvIHRoZSBrZXlzIG9mIHRoZSBwYXNzZWRcXG4gKiByZWR1Y2VyIGZ1bmN0aW9ucy5cXG4gKlxcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWR1Y2VycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGNvcnJlc3BvbmQgdG8gZGlmZmVyZW50XFxuICogcmVkdWNlciBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNvbWJpbmVkIGludG8gb25lLiBPbmUgaGFuZHkgd2F5IHRvIG9idGFpblxcbiAqIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzIHJlZHVjZXJzYCBzeW50YXguIFRoZSByZWR1Y2VycyBtYXkgbmV2ZXIgcmV0dXJuXFxuICogdW5kZWZpbmVkIGZvciBhbnkgYWN0aW9uLiBJbnN0ZWFkLCB0aGV5IHNob3VsZCByZXR1cm4gdGhlaXIgaW5pdGlhbCBzdGF0ZVxcbiAqIGlmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlbSB3YXMgdW5kZWZpbmVkLCBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIGFueVxcbiAqIHVucmVjb2duaXplZCBhY3Rpb24uXFxuICpcXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgcmVkdWNlciBmdW5jdGlvbiB0aGF0IGludm9rZXMgZXZlcnkgcmVkdWNlciBpbnNpZGUgdGhlXFxuICogcGFzc2VkIG9iamVjdCwgYW5kIGJ1aWxkcyBhIHN0YXRlIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlLlxcbiAqL1xcbmZ1bmN0aW9uIGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2Vycykge1xcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xcbiAgdmFyIGZpbmFsUmVkdWNlcnMgPSB7fTtcXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmVkdWNlcktleXMubGVuZ3RoOyBpKyspIHtcXG4gICAgdmFyIGtleSA9IHJlZHVjZXJLZXlzW2ldO1xcblxcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxzX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCdObyByZWR1Y2VyIHByb3ZpZGVkIGZvciBrZXkgXFxcIicgKyBrZXkgKyAnXFxcIicpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICBmaW5hbFJlZHVjZXJzW2tleV0gPSByZWR1Y2Vyc1trZXldO1xcbiAgICB9XFxuICB9XFxuICB2YXIgZmluYWxSZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKGZpbmFsUmVkdWNlcnMpO1xcblxcbiAgdmFyIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHZvaWQgMDtcXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHt9O1xcbiAgfVxcblxcbiAgdmFyIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSB2b2lkIDA7XFxuICB0cnkge1xcbiAgICBhc3NlcnRSZWR1Y2VyU2hhcGUoZmluYWxSZWR1Y2Vycyk7XFxuICB9IGNhdGNoIChlKSB7XFxuICAgIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSBlO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbWJpbmF0aW9uKCkge1xcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xcblxcbiAgICBpZiAoc2hhcGVBc3NlcnRpb25FcnJvcikge1xcbiAgICAgIHRocm93IHNoYXBlQXNzZXJ0aW9uRXJyb3I7XFxuICAgIH1cXG5cXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgICB2YXIgd2FybmluZ01lc3NhZ2UgPSBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKHN0YXRlLCBmaW5hbFJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSk7XFxuICAgICAgaWYgKHdhcm5pbmdNZXNzYWdlKSB7XFxuICAgICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh3YXJuaW5nTWVzc2FnZSk7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XFxuICAgIHZhciBuZXh0U3RhdGUgPSB7fTtcXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGZpbmFsUmVkdWNlcktleXMubGVuZ3RoOyBfaSsrKSB7XFxuICAgICAgdmFyIF9rZXkgPSBmaW5hbFJlZHVjZXJLZXlzW19pXTtcXG4gICAgICB2YXIgcmVkdWNlciA9IGZpbmFsUmVkdWNlcnNbX2tleV07XFxuICAgICAgdmFyIHByZXZpb3VzU3RhdGVGb3JLZXkgPSBzdGF0ZVtfa2V5XTtcXG4gICAgICB2YXIgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91c1N0YXRlRm9yS2V5LCBhY3Rpb24pO1xcbiAgICAgIGlmICh0eXBlb2YgbmV4dFN0YXRlRm9yS2V5ID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IGdldFVuZGVmaW5lZFN0YXRlRXJyb3JNZXNzYWdlKF9rZXksIGFjdGlvbik7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcXG4gICAgICB9XFxuICAgICAgbmV4dFN0YXRlW19rZXldID0gbmV4dFN0YXRlRm9yS2V5O1xcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcXG4gICAgfVxcbiAgICByZXR1cm4gaGFzQ2hhbmdlZCA/IG5leHRTdGF0ZSA6IHN0YXRlO1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDIwNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gYmluZEFjdGlvbkNyZWF0b3JzO1xcbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICByZXR1cm4gZGlzcGF0Y2goYWN0aW9uQ3JlYXRvci5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cykpO1xcbiAgfTtcXG59XFxuXFxuLyoqXFxuICogVHVybnMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgYWN0aW9uIGNyZWF0b3JzLCBpbnRvIGFuIG9iamVjdCB3aXRoIHRoZVxcbiAqIHNhbWUga2V5cywgYnV0IHdpdGggZXZlcnkgZnVuY3Rpb24gd3JhcHBlZCBpbnRvIGEgYGRpc3BhdGNoYCBjYWxsIHNvIHRoZXlcXG4gKiBtYXkgYmUgaW52b2tlZCBkaXJlY3RseS4gVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgbWV0aG9kLCBhcyB5b3UgY2FuIGNhbGxcXG4gKiBgc3RvcmUuZGlzcGF0Y2goTXlBY3Rpb25DcmVhdG9ycy5kb1NvbWV0aGluZygpKWAgeW91cnNlbGYganVzdCBmaW5lLlxcbiAqXFxuICogRm9yIGNvbnZlbmllbmNlLCB5b3UgY2FuIGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQsXFxuICogYW5kIGdldCBhIGZ1bmN0aW9uIGluIHJldHVybi5cXG4gKlxcbiAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBhY3Rpb25DcmVhdG9ycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBhY3Rpb25cXG4gKiBjcmVhdG9yIGZ1bmN0aW9ucy4gT25lIGhhbmR5IHdheSB0byBvYnRhaW4gaXQgaXMgdG8gdXNlIEVTNiBgaW1wb3J0ICogYXNgXFxuICogc3ludGF4LiBZb3UgbWF5IGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbi5cXG4gKlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGRpc3BhdGNoIFRoZSBgZGlzcGF0Y2hgIGZ1bmN0aW9uIGF2YWlsYWJsZSBvbiB5b3VyIFJlZHV4XFxuICogc3RvcmUuXFxuICpcXG4gKiBAcmV0dXJucyB7RnVuY3Rpb258T2JqZWN0fSBUaGUgb2JqZWN0IG1pbWlja2luZyB0aGUgb3JpZ2luYWwgb2JqZWN0LCBidXQgd2l0aFxcbiAqIGV2ZXJ5IGFjdGlvbiBjcmVhdG9yIHdyYXBwZWQgaW50byB0aGUgYGRpc3BhdGNoYCBjYWxsLiBJZiB5b3UgcGFzc2VkIGFcXG4gKiBmdW5jdGlvbiBhcyBgYWN0aW9uQ3JlYXRvcnNgLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYWxzbyBiZSBhIHNpbmdsZVxcbiAqIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9ycyhhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpIHtcXG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgcmV0dXJuIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3JzLCBkaXNwYXRjaCk7XFxuICB9XFxuXFxuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzICE9PSAnb2JqZWN0JyB8fCBhY3Rpb25DcmVhdG9ycyA9PT0gbnVsbCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBY3Rpb25DcmVhdG9ycyBleHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwgaW5zdGVhZCByZWNlaXZlZCAnICsgKGFjdGlvbkNyZWF0b3JzID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGFjdGlvbkNyZWF0b3JzKSArICcuICcgKyAnRGlkIHlvdSB3cml0ZSBcXFwiaW1wb3J0IEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiIGluc3RlYWQgb2YgXFxcImltcG9ydCAqIGFzIEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiPycpO1xcbiAgfVxcblxcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhY3Rpb25DcmVhdG9ycyk7XFxuICB2YXIgYm91bmRBY3Rpb25DcmVhdG9ycyA9IHt9O1xcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xcbiAgICB2YXIgYWN0aW9uQ3JlYXRvciA9IGFjdGlvbkNyZWF0b3JzW2tleV07XFxuICAgIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIGJvdW5kQWN0aW9uQ3JlYXRvcnNba2V5XSA9IGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIGJvdW5kQWN0aW9uQ3JlYXRvcnM7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDIwNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGRlZmF1bHQgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb3NlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc1KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBzdG9yZSBlbmhhbmNlciB0aGF0IGFwcGxpZXMgbWlkZGxld2FyZSB0byB0aGUgZGlzcGF0Y2ggbWV0aG9kXFxuICogb2YgdGhlIFJlZHV4IHN0b3JlLiBUaGlzIGlzIGhhbmR5IGZvciBhIHZhcmlldHkgb2YgdGFza3MsIHN1Y2ggYXMgZXhwcmVzc2luZ1xcbiAqIGFzeW5jaHJvbm91cyBhY3Rpb25zIGluIGEgY29uY2lzZSBtYW5uZXIsIG9yIGxvZ2dpbmcgZXZlcnkgYWN0aW9uIHBheWxvYWQuXFxuICpcXG4gKiBTZWUgYHJlZHV4LXRodW5rYCBwYWNrYWdlIGFzIGFuIGV4YW1wbGUgb2YgdGhlIFJlZHV4IG1pZGRsZXdhcmUuXFxuICpcXG4gKiBCZWNhdXNlIG1pZGRsZXdhcmUgaXMgcG90ZW50aWFsbHkgYXN5bmNocm9ub3VzLCB0aGlzIHNob3VsZCBiZSB0aGUgZmlyc3RcXG4gKiBzdG9yZSBlbmhhbmNlciBpbiB0aGUgY29tcG9zaXRpb24gY2hhaW4uXFxuICpcXG4gKiBOb3RlIHRoYXQgZWFjaCBtaWRkbGV3YXJlIHdpbGwgYmUgZ2l2ZW4gdGhlIGBkaXNwYXRjaGAgYW5kIGBnZXRTdGF0ZWAgZnVuY3Rpb25zXFxuICogYXMgbmFtZWQgYXJndW1lbnRzLlxcbiAqXFxuICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gbWlkZGxld2FyZXMgVGhlIG1pZGRsZXdhcmUgY2hhaW4gdG8gYmUgYXBwbGllZC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgc3RvcmUgZW5oYW5jZXIgYXBwbHlpbmcgdGhlIG1pZGRsZXdhcmUuXFxuICovXFxuZnVuY3Rpb24gYXBwbHlNaWRkbGV3YXJlKCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1pZGRsZXdhcmVzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIG1pZGRsZXdhcmVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIChjcmVhdGVTdG9yZSkge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xcbiAgICAgIHZhciBzdG9yZSA9IGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcik7XFxuICAgICAgdmFyIF9kaXNwYXRjaCA9IHN0b3JlLmRpc3BhdGNoO1xcbiAgICAgIHZhciBjaGFpbiA9IFtdO1xcblxcbiAgICAgIHZhciBtaWRkbGV3YXJlQVBJID0ge1xcbiAgICAgICAgZ2V0U3RhdGU6IHN0b3JlLmdldFN0YXRlLFxcbiAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xcbiAgICAgICAgICByZXR1cm4gX2Rpc3BhdGNoKGFjdGlvbik7XFxuICAgICAgICB9XFxuICAgICAgfTtcXG4gICAgICBjaGFpbiA9IG1pZGRsZXdhcmVzLm1hcChmdW5jdGlvbiAobWlkZGxld2FyZSkge1xcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmUobWlkZGxld2FyZUFQSSk7XFxuICAgICAgfSk7XFxuICAgICAgX2Rpc3BhdGNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb3NlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmFwcGx5KHVuZGVmaW5lZCwgY2hhaW4pKHN0b3JlLmRpc3BhdGNoKTtcXG5cXG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0b3JlLCB7XFxuICAgICAgICBkaXNwYXRjaDogX2Rpc3BhdGNoXFxuICAgICAgfSk7XFxuICAgIH07XFxuICB9O1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNNaXNzaW5nICovXFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzYpO1xcblxcblxcbmZ1bmN0aW9uIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc0Z1bmN0aW9uKG1hcFN0YXRlVG9Qcm9wcykge1xcbiAgcmV0dXJuIHR5cGVvZiBtYXBTdGF0ZVRvUHJvcHMgPT09ICdmdW5jdGlvbicgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX193cmFwTWFwVG9Qcm9wc19fW1xcXCJiXFxcIiAvKiB3cmFwTWFwVG9Qcm9wc0Z1bmMgKi9dKShtYXBTdGF0ZVRvUHJvcHMsICdtYXBTdGF0ZVRvUHJvcHMnKSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuZnVuY3Rpb24gd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZyhtYXBTdGF0ZVRvUHJvcHMpIHtcXG4gIHJldHVybiAhbWFwU3RhdGVUb1Byb3BzID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYVxcXCIgLyogd3JhcE1hcFRvUHJvcHNDb25zdGFudCAqL10pKGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIHt9O1xcbiAgfSkgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFt3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiwgd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZ10pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIwOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdE1lcmdlUHJvcHMgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd3JhcE1lcmdlUHJvcHNGdW5jICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWVyZ2VQcm9wc0lzT21pdHRlZCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc3KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbmZ1bmN0aW9uIGRlZmF1bHRNZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XFxuICByZXR1cm4gX2V4dGVuZHMoe30sIG93blByb3BzLCBzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzKTtcXG59XFxuXFxuZnVuY3Rpb24gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbml0TWVyZ2VQcm9wc1Byb3h5KGRpc3BhdGNoLCBfcmVmKSB7XFxuICAgIHZhciBkaXNwbGF5TmFtZSA9IF9yZWYuZGlzcGxheU5hbWUsXFxuICAgICAgICBwdXJlID0gX3JlZi5wdXJlLFxcbiAgICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbCA9IF9yZWYuYXJlTWVyZ2VkUHJvcHNFcXVhbDtcXG5cXG4gICAgdmFyIGhhc1J1bk9uY2UgPSBmYWxzZTtcXG4gICAgdmFyIG1lcmdlZFByb3BzID0gdm9pZCAwO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VQcm9wc1Byb3h5KHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XFxuICAgICAgdmFyIG5leHRNZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xcblxcbiAgICAgIGlmIChoYXNSdW5PbmNlKSB7XFxuICAgICAgICBpZiAoIXB1cmUgfHwgIWFyZU1lcmdlZFByb3BzRXF1YWwobmV4dE1lcmdlZFByb3BzLCBtZXJnZWRQcm9wcykpIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICBoYXNSdW5PbmNlID0gdHJ1ZTtcXG4gICAgICAgIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xcblxcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShtZXJnZWRQcm9wcywgZGlzcGxheU5hbWUsICdtZXJnZVByb3BzJyk7XFxuICAgICAgfVxcblxcbiAgICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gICAgfTtcXG4gIH07XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbihtZXJnZVByb3BzKSB7XFxuICByZXR1cm4gdHlwZW9mIG1lcmdlUHJvcHMgPT09ICdmdW5jdGlvbicgPyB3cmFwTWVyZ2VQcm9wc0Z1bmMobWVyZ2VQcm9wcykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNPbWl0dGVkKG1lcmdlUHJvcHMpIHtcXG4gIHJldHVybiAhbWVyZ2VQcm9wcyA/IGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIGRlZmF1bHRNZXJnZVByb3BzO1xcbiAgfSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoW3doZW5NZXJnZVByb3BzSXNGdW5jdGlvbiwgd2hlbk1lcmdlUHJvcHNJc09taXR0ZWRdKTtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMjEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5ICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5ICovXFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gZmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX192ZXJpZnlTdWJzZWxlY3RvcnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjExKTtcXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuZnVuY3Rpb24gaW1wdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgZGlzcGF0Y2gpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3Ioc3RhdGUsIG93blByb3BzKSB7XFxuICAgIHJldHVybiBtZXJnZVByb3BzKG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpLCBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKSwgb3duUHJvcHMpO1xcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIGRpc3BhdGNoLCBfcmVmKSB7XFxuICB2YXIgYXJlU3RhdGVzRXF1YWwgPSBfcmVmLmFyZVN0YXRlc0VxdWFsLFxcbiAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmLmFyZU93blByb3BzRXF1YWwsXFxuICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZi5hcmVTdGF0ZVByb3BzRXF1YWw7XFxuXFxuICB2YXIgaGFzUnVuQXRMZWFzdE9uY2UgPSBmYWxzZTtcXG4gIHZhciBzdGF0ZSA9IHZvaWQgMDtcXG4gIHZhciBvd25Qcm9wcyA9IHZvaWQgMDtcXG4gIHZhciBzdGF0ZVByb3BzID0gdm9pZCAwO1xcbiAgdmFyIGRpc3BhdGNoUHJvcHMgPSB2b2lkIDA7XFxuICB2YXIgbWVyZ2VkUHJvcHMgPSB2b2lkIDA7XFxuXFxuICBmdW5jdGlvbiBoYW5kbGVGaXJzdENhbGwoZmlyc3RTdGF0ZSwgZmlyc3RPd25Qcm9wcykge1xcbiAgICBzdGF0ZSA9IGZpcnN0U3RhdGU7XFxuICAgIG93blByb3BzID0gZmlyc3RPd25Qcm9wcztcXG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcbiAgICBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIGhhc1J1bkF0TGVhc3RPbmNlID0gdHJ1ZTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaGFuZGxlTmV3UHJvcHNBbmROZXdTdGF0ZSgpIHtcXG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcblxcbiAgICBpZiAobWFwRGlzcGF0Y2hUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuXFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZU5ld1Byb3BzKCkge1xcbiAgICBpZiAobWFwU3RhdGVUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBzdGF0ZVByb3BzID0gbWFwU3RhdGVUb1Byb3BzKHN0YXRlLCBvd25Qcm9wcyk7XFxuXFxuICAgIGlmIChtYXBEaXNwYXRjaFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMpIGRpc3BhdGNoUHJvcHMgPSBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKTtcXG5cXG4gICAgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaGFuZGxlTmV3U3RhdGUoKSB7XFxuICAgIHZhciBuZXh0U3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcbiAgICB2YXIgc3RhdGVQcm9wc0NoYW5nZWQgPSAhYXJlU3RhdGVQcm9wc0VxdWFsKG5leHRTdGF0ZVByb3BzLCBzdGF0ZVByb3BzKTtcXG4gICAgc3RhdGVQcm9wcyA9IG5leHRTdGF0ZVByb3BzO1xcblxcbiAgICBpZiAoc3RhdGVQcm9wc0NoYW5nZWQpIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuXFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZVN1YnNlcXVlbnRDYWxscyhuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykge1xcbiAgICB2YXIgcHJvcHNDaGFuZ2VkID0gIWFyZU93blByb3BzRXF1YWwobmV4dE93blByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHZhciBzdGF0ZUNoYW5nZWQgPSAhYXJlU3RhdGVzRXF1YWwobmV4dFN0YXRlLCBzdGF0ZSk7XFxuICAgIHN0YXRlID0gbmV4dFN0YXRlO1xcbiAgICBvd25Qcm9wcyA9IG5leHRPd25Qcm9wcztcXG5cXG4gICAgaWYgKHByb3BzQ2hhbmdlZCAmJiBzdGF0ZUNoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wc0FuZE5ld1N0YXRlKCk7XFxuICAgIGlmIChwcm9wc0NoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wcygpO1xcbiAgICBpZiAoc3RhdGVDaGFuZ2VkKSByZXR1cm4gaGFuZGxlTmV3U3RhdGUoKTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIHB1cmVGaW5hbFByb3BzU2VsZWN0b3IobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpIHtcXG4gICAgcmV0dXJuIGhhc1J1bkF0TGVhc3RPbmNlID8gaGFuZGxlU3Vic2VxdWVudENhbGxzKG5leHRTdGF0ZSwgbmV4dE93blByb3BzKSA6IGhhbmRsZUZpcnN0Q2FsbChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcyk7XFxuICB9O1xcbn1cXG5cXG4vLyBUT0RPOiBBZGQgbW9yZSBjb21tZW50c1xcblxcbi8vIElmIHB1cmUgaXMgdHJ1ZSwgdGhlIHNlbGVjdG9yIHJldHVybmVkIGJ5IHNlbGVjdG9yRmFjdG9yeSB3aWxsIG1lbW9pemUgaXRzIHJlc3VsdHMsXFxuLy8gYWxsb3dpbmcgY29ubmVjdEFkdmFuY2VkJ3Mgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHRvIHJldHVybiBmYWxzZSBpZiBmaW5hbFxcbi8vIHByb3BzIGhhdmUgbm90IGNoYW5nZWQuIElmIGZhbHNlLCB0aGUgc2VsZWN0b3Igd2lsbCBhbHdheXMgcmV0dXJuIGEgbmV3XFxuLy8gb2JqZWN0IGFuZCBzaG91bGRDb21wb25lbnRVcGRhdGUgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuXFxuXFxuZnVuY3Rpb24gZmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShkaXNwYXRjaCwgX3JlZjIpIHtcXG4gIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gX3JlZjIuaW5pdE1hcFN0YXRlVG9Qcm9wcyxcXG4gICAgICBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzID0gX3JlZjIuaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcXG4gICAgICBpbml0TWVyZ2VQcm9wcyA9IF9yZWYyLmluaXRNZXJnZVByb3BzLFxcbiAgICAgIG9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFsnaW5pdE1hcFN0YXRlVG9Qcm9wcycsICdpbml0TWFwRGlzcGF0Y2hUb1Byb3BzJywgJ2luaXRNZXJnZVByb3BzJ10pO1xcblxcbiAgdmFyIG1hcFN0YXRlVG9Qcm9wcyA9IGluaXRNYXBTdGF0ZVRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbiAgdmFyIG1hcERpc3BhdGNoVG9Qcm9wcyA9IGluaXRNYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbiAgdmFyIG1lcmdlUHJvcHMgPSBpbml0TWVyZ2VQcm9wcyhkaXNwYXRjaCwgb3B0aW9ucyk7XFxuXFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX192ZXJpZnlTdWJzZWxlY3RvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBvcHRpb25zLmRpc3BsYXlOYW1lKTtcXG4gIH1cXG5cXG4gIHZhciBzZWxlY3RvckZhY3RvcnkgPSBvcHRpb25zLnB1cmUgPyBwdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeSA6IGltcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3Rvcnk7XFxuXFxuICByZXR1cm4gc2VsZWN0b3JGYWN0b3J5KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwYXRjaCwgb3B0aW9ucyk7XFxufVxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHZlcmlmeVN1YnNlbGVjdG9ycztcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5cXG5cXG5mdW5jdGlvbiB2ZXJpZnkoc2VsZWN0b3IsIG1ldGhvZE5hbWUsIGRpc3BsYXlOYW1lKSB7XFxuICBpZiAoIXNlbGVjdG9yKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB2YWx1ZSBmb3IgJyArIG1ldGhvZE5hbWUgKyAnIGluICcgKyBkaXNwbGF5TmFtZSArICcuJyk7XFxuICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09ICdtYXBTdGF0ZVRvUHJvcHMnIHx8IG1ldGhvZE5hbWUgPT09ICdtYXBEaXNwYXRjaFRvUHJvcHMnKSB7XFxuICAgIGlmICghc2VsZWN0b3IuaGFzT3duUHJvcGVydHkoJ2RlcGVuZHNPbk93blByb3BzJykpIHtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnVGhlIHNlbGVjdG9yIGZvciAnICsgbWV0aG9kTmFtZSArICcgb2YgJyArIGRpc3BsYXlOYW1lICsgJyBkaWQgbm90IHNwZWNpZnkgYSB2YWx1ZSBmb3IgZGVwZW5kc09uT3duUHJvcHMuJyk7XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuZnVuY3Rpb24gdmVyaWZ5U3Vic2VsZWN0b3JzKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwbGF5TmFtZSkge1xcbiAgdmVyaWZ5KG1hcFN0YXRlVG9Qcm9wcywgJ21hcFN0YXRlVG9Qcm9wcycsIGRpc3BsYXlOYW1lKTtcXG4gIHZlcmlmeShtYXBEaXNwYXRjaFRvUHJvcHMsICdtYXBEaXNwYXRjaFRvUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxuICB2ZXJpZnkobWVyZ2VQcm9wcywgJ21lcmdlUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDIxMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGdldERpc3BsYXlOYW1lID0gZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoQ29tcCkge1xcbiAgcmV0dXJuIENvbXAuZGlzcGxheU5hbWUgfHwgQ29tcC5uYW1lIHx8ICdDb21wb25lbnQnO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0RGlzcGxheU5hbWUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OSk7XFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxuXFxuXFxuXFxudmFyIGhhbmRsZVN1Ym1pdCA9IGZ1bmN0aW9uIGhhbmRsZVN1Ym1pdChzdWJtaXQsIHByb3BzLCB2YWxpZCwgYXN5bmNWYWxpZGF0ZSwgZmllbGRzKSB7XFxuICB2YXIgZGlzcGF0Y2ggPSBwcm9wcy5kaXNwYXRjaCxcXG4gICAgICBvblN1Ym1pdEZhaWwgPSBwcm9wcy5vblN1Ym1pdEZhaWwsXFxuICAgICAgb25TdWJtaXRTdWNjZXNzID0gcHJvcHMub25TdWJtaXRTdWNjZXNzLFxcbiAgICAgIHN0YXJ0U3VibWl0ID0gcHJvcHMuc3RhcnRTdWJtaXQsXFxuICAgICAgc3RvcFN1Ym1pdCA9IHByb3BzLnN0b3BTdWJtaXQsXFxuICAgICAgc2V0U3VibWl0RmFpbGVkID0gcHJvcHMuc2V0U3VibWl0RmFpbGVkLFxcbiAgICAgIHNldFN1Ym1pdFN1Y2NlZWRlZCA9IHByb3BzLnNldFN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICBzeW5jRXJyb3JzID0gcHJvcHMuc3luY0Vycm9ycyxcXG4gICAgICB0b3VjaCA9IHByb3BzLnRvdWNoLFxcbiAgICAgIHZhbHVlcyA9IHByb3BzLnZhbHVlcyxcXG4gICAgICBwZXJzaXN0ZW50U3VibWl0RXJyb3JzID0gcHJvcHMucGVyc2lzdGVudFN1Ym1pdEVycm9ycztcXG5cXG5cXG4gIHRvdWNoLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpOyAvLyBtYXJrIGFsbCBmaWVsZHMgYXMgdG91Y2hlZFxcblxcbiAgaWYgKHZhbGlkIHx8IHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpIHtcXG4gICAgdmFyIGRvU3VibWl0ID0gZnVuY3Rpb24gZG9TdWJtaXQoKSB7XFxuICAgICAgdmFyIHJlc3VsdCA9IHZvaWQgMDtcXG4gICAgICB0cnkge1xcbiAgICAgICAgcmVzdWx0ID0gc3VibWl0KHZhbHVlcywgZGlzcGF0Y2gsIHByb3BzKTtcXG4gICAgICB9IGNhdGNoIChzdWJtaXRFcnJvcikge1xcbiAgICAgICAgdmFyIGVycm9yID0gc3VibWl0RXJyb3IgaW5zdGFuY2VvZiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IHN1Ym1pdEVycm9yLmVycm9ycyA6IHVuZGVmaW5lZDtcXG4gICAgICAgIHN0b3BTdWJtaXQoZXJyb3IpO1xcbiAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICBvblN1Ym1pdEZhaWwoZXJyb3IsIGRpc3BhdGNoLCBzdWJtaXRFcnJvciwgcHJvcHMpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGVycm9yIHx8IG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICAvLyBpZiB5b3UndmUgcHJvdmlkZWQgYW4gb25TdWJtaXRGYWlsIGNhbGxiYWNrLCBkb24ndCByZS10aHJvdyB0aGUgZXJyb3JcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgdGhyb3cgc3VibWl0RXJyb3I7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fX2RlZmF1bHQoKShyZXN1bHQpKSB7XFxuICAgICAgICBzdGFydFN1Ym1pdCgpO1xcbiAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKGZ1bmN0aW9uIChzdWJtaXRSZXN1bHQpIHtcXG4gICAgICAgICAgc3RvcFN1Ym1pdCgpO1xcbiAgICAgICAgICBzZXRTdWJtaXRTdWNjZWVkZWQoKTtcXG4gICAgICAgICAgaWYgKG9uU3VibWl0U3VjY2Vzcykge1xcbiAgICAgICAgICAgIG9uU3VibWl0U3VjY2VzcyhzdWJtaXRSZXN1bHQsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgcmV0dXJuIHN1Ym1pdFJlc3VsdDtcXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzdWJtaXRFcnJvcikge1xcbiAgICAgICAgICB2YXIgZXJyb3IgPSBzdWJtaXRFcnJvciBpbnN0YW5jZW9mIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fU3VibWlzc2lvbkVycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gc3VibWl0RXJyb3IuZXJyb3JzIDogdW5kZWZpbmVkO1xcbiAgICAgICAgICBzdG9wU3VibWl0KGVycm9yKTtcXG4gICAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgICBpZiAob25TdWJtaXRGYWlsKSB7XFxuICAgICAgICAgICAgb25TdWJtaXRGYWlsKGVycm9yLCBkaXNwYXRjaCwgc3VibWl0RXJyb3IsIHByb3BzKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBpZiAoZXJyb3IgfHwgb25TdWJtaXRGYWlsKSB7XFxuICAgICAgICAgICAgLy8gaWYgeW91J3ZlIHByb3ZpZGVkIGFuIG9uU3VibWl0RmFpbCBjYWxsYmFjaywgZG9uJ3QgcmUtdGhyb3cgdGhlIGVycm9yXFxuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRocm93IHN1Ym1pdEVycm9yO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkKCk7XFxuICAgICAgICBpZiAob25TdWJtaXRTdWNjZXNzKSB7XFxuICAgICAgICAgIG9uU3VibWl0U3VjY2VzcyhyZXN1bHQsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgIH07XFxuXFxuICAgIHZhciBhc3luY1ZhbGlkYXRlUmVzdWx0ID0gYXN5bmNWYWxpZGF0ZSAmJiBhc3luY1ZhbGlkYXRlKCk7XFxuICAgIGlmIChhc3luY1ZhbGlkYXRlUmVzdWx0KSB7XFxuICAgICAgcmV0dXJuIGFzeW5jVmFsaWRhdGVSZXN1bHQudGhlbihmdW5jdGlvbiAoYXN5bmNFcnJvcnMpIHtcXG4gICAgICAgIGlmIChhc3luY0Vycm9ycykge1xcbiAgICAgICAgICB0aHJvdyBhc3luY0Vycm9ycztcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkb1N1Ym1pdCgpO1xcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChhc3luY0Vycm9ycykge1xcbiAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICBvblN1Ym1pdEZhaWwoYXN5bmNFcnJvcnMsIGRpc3BhdGNoLCBudWxsLCBwcm9wcyk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYXN5bmNFcnJvcnMpO1xcbiAgICAgIH0pO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJldHVybiBkb1N1Ym1pdCgpO1xcbiAgICB9XFxuICB9IGVsc2Uge1xcbiAgICBzZXRTdWJtaXRGYWlsZWQuYXBwbHkodW5kZWZpbmVkLCBfdG9Db25zdW1hYmxlQXJyYXkoZmllbGRzKSk7XFxuICAgIGlmIChvblN1Ym1pdEZhaWwpIHtcXG4gICAgICBvblN1Ym1pdEZhaWwoc3luY0Vycm9ycywgZGlzcGF0Y2gsIG51bGwsIHByb3BzKTtcXG4gICAgfVxcbiAgICByZXR1cm4gc3luY0Vycm9ycztcXG4gIH1cXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhbmRsZVN1Ym1pdCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9leHRlbmRhYmxlQnVpbHRpbihjbHMpIHtcXG4gIGZ1bmN0aW9uIEV4dGVuZGFibGVCdWlsdGluKCkge1xcbiAgICBjbHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcXG4gIH1cXG5cXG4gIEV4dGVuZGFibGVCdWlsdGluLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY2xzLnByb3RvdHlwZSwge1xcbiAgICBjb25zdHJ1Y3Rvcjoge1xcbiAgICAgIHZhbHVlOiBjbHMsXFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXFxuICAgICAgd3JpdGFibGU6IHRydWUsXFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXFxuICAgIH1cXG4gIH0pO1xcblxcbiAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRXh0ZW5kYWJsZUJ1aWx0aW4sIGNscyk7XFxuICB9IGVsc2Uge1xcbiAgICBFeHRlbmRhYmxlQnVpbHRpbi5fX3Byb3RvX18gPSBjbHM7XFxuICB9XFxuXFxuICByZXR1cm4gRXh0ZW5kYWJsZUJ1aWx0aW47XFxufVxcblxcbnZhciBFeHRlbmRhYmxlRXJyb3IgPSBmdW5jdGlvbiAoX2V4dGVuZGFibGVCdWlsdGluMikge1xcbiAgX2luaGVyaXRzKEV4dGVuZGFibGVFcnJvciwgX2V4dGVuZGFibGVCdWlsdGluMik7XFxuXFxuICBmdW5jdGlvbiBFeHRlbmRhYmxlRXJyb3IoKSB7XFxuICAgIHZhciBtZXNzYWdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcXG5cXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV4dGVuZGFibGVFcnJvcik7XFxuXFxuICAgIC8vIGV4dGVuZGluZyBFcnJvciBpcyB3ZWlyZCBhbmQgZG9lcyBub3QgcHJvcGFnYXRlIGBtZXNzYWdlYFxcbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRXh0ZW5kYWJsZUVycm9yLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRXh0ZW5kYWJsZUVycm9yKSkuY2FsbCh0aGlzLCBtZXNzYWdlKSk7XFxuXFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ21lc3NhZ2UnLCB7XFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxcbiAgICAgIHZhbHVlOiBtZXNzYWdlLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXFxuICAgIH0pO1xcblxcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogX3RoaXMuY29uc3RydWN0b3IubmFtZSxcXG4gICAgICB3cml0YWJsZTogdHJ1ZVxcbiAgICB9KTtcXG5cXG4gICAgaWYgKEVycm9yLmhhc093blByb3BlcnR5KCdjYXB0dXJlU3RhY2tUcmFjZScpKSB7XFxuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoX3RoaXMsIF90aGlzLmNvbnN0cnVjdG9yKTtcXG4gICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMpO1xcbiAgICB9XFxuXFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ3N0YWNrJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogbmV3IEVycm9yKG1lc3NhZ2UpLnN0YWNrLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXFxuICAgIH0pO1xcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICByZXR1cm4gRXh0ZW5kYWJsZUVycm9yO1xcbn0oX2V4dGVuZGFibGVCdWlsdGluKEVycm9yKSk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoRXh0ZW5kYWJsZUVycm9yKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3NpbGVuY2VFdmVudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MCk7XFxuXFxuXFxudmFyIHNpbGVuY2VFdmVudHMgPSBmdW5jdGlvbiBzaWxlbmNlRXZlbnRzKGZuKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zaWxlbmNlRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50KSA/IGZuLmFwcGx5KHVuZGVmaW5lZCwgYXJncykgOiBmbi5hcHBseSh1bmRlZmluZWQsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzaWxlbmNlRXZlbnRzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fKTtcXG5cXG5cXG52YXIgYXN5bmNWYWxpZGF0aW9uID0gZnVuY3Rpb24gYXN5bmNWYWxpZGF0aW9uKGZuLCBzdGFydCwgc3RvcCwgZmllbGQpIHtcXG4gIHN0YXJ0KGZpZWxkKTtcXG4gIHZhciBwcm9taXNlID0gZm4oKTtcXG4gIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0KCkocHJvbWlzZSkpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdhc3luY1ZhbGlkYXRlIGZ1bmN0aW9uIHBhc3NlZCB0byByZWR1eEZvcm0gbXVzdCByZXR1cm4gYSBwcm9taXNlJyk7XFxuICB9XFxuICB2YXIgaGFuZGxlRXJyb3JzID0gZnVuY3Rpb24gaGFuZGxlRXJyb3JzKHJlamVjdGVkKSB7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZXJyb3JzKSB7XFxuICAgICAgaWYgKGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCkge1xcbiAgICAgICAgc3RvcChlcnJvcnMpO1xcbiAgICAgICAgcmV0dXJuIGVycm9ycztcXG4gICAgICB9IGVsc2UgaWYgKHJlamVjdGVkKSB7XFxuICAgICAgICBzdG9wKCk7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FzeW5jaHJvbm91cyB2YWxpZGF0aW9uIHByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGhvdXQgZXJyb3JzLicpO1xcbiAgICAgIH1cXG4gICAgICBzdG9wKCk7XFxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xcbiAgICB9O1xcbiAgfTtcXG4gIHJldHVybiBwcm9taXNlLnRoZW4oaGFuZGxlRXJyb3JzKGZhbHNlKSwgaGFuZGxlRXJyb3JzKHRydWUpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFzeW5jVmFsaWRhdGlvbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUgPSBmdW5jdGlvbiBkZWZhdWx0U2hvdWxkQXN5bmNWYWxpZGF0ZShfcmVmKSB7XFxuICB2YXIgaW5pdGlhbGl6ZWQgPSBfcmVmLmluaXRpYWxpemVkLFxcbiAgICAgIHRyaWdnZXIgPSBfcmVmLnRyaWdnZXIsXFxuICAgICAgcHJpc3RpbmUgPSBfcmVmLnByaXN0aW5lLFxcbiAgICAgIHN5bmNWYWxpZGF0aW9uUGFzc2VzID0gX3JlZi5zeW5jVmFsaWRhdGlvblBhc3NlcztcXG5cXG4gIGlmICghc3luY1ZhbGlkYXRpb25QYXNzZXMpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgc3dpdGNoICh0cmlnZ2VyKSB7XFxuICAgIGNhc2UgJ2JsdXInOlxcbiAgICAgIC8vIGJsdXJyaW5nXFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIGNhc2UgJ3N1Ym1pdCc6XFxuICAgICAgLy8gc3VibWl0dGluZywgc28gb25seSBhc3luYyB2YWxpZGF0ZSBpZiBmb3JtIGlzIGRpcnR5IG9yIHdhcyBuZXZlciBpbml0aWFsaXplZFxcbiAgICAgIC8vIGNvbnZlcnNlbHksIERPTidUIGFzeW5jIHZhbGlkYXRlIGlmIHRoZSBmb3JtIGlzIHByaXN0aW5lIGp1c3QgYXMgaXQgd2FzIGluaXRpYWxpemVkXFxuICAgICAgcmV0dXJuICFwcmlzdGluZSB8fCAhaW5pdGlhbGl6ZWQ7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGRlZmF1bHRTaG91bGRWYWxpZGF0ZSA9IGZ1bmN0aW9uIGRlZmF1bHRTaG91bGRWYWxpZGF0ZShfcmVmKSB7XFxuICB2YXIgdmFsdWVzID0gX3JlZi52YWx1ZXMsXFxuICAgICAgbmV4dFByb3BzID0gX3JlZi5uZXh0UHJvcHMsXFxuICAgICAgaW5pdGlhbFJlbmRlciA9IF9yZWYuaW5pdGlhbFJlbmRlcixcXG4gICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzID0gX3JlZi5sYXN0RmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgIGZpZWxkVmFsaWRhdG9yS2V5cyA9IF9yZWYuZmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgIHN0cnVjdHVyZSA9IF9yZWYuc3RydWN0dXJlO1xcblxcbiAgaWYgKGluaXRpYWxSZW5kZXIpIHtcXG4gICAgcmV0dXJuIHRydWU7XFxuICB9XFxuICByZXR1cm4gIXN0cnVjdHVyZS5kZWVwRXF1YWwodmFsdWVzLCBuZXh0UHJvcHMudmFsdWVzKSB8fCAhc3RydWN0dXJlLmRlZXBFcXVhbChsYXN0RmllbGRWYWxpZGF0b3JLZXlzLCBmaWVsZFZhbGlkYXRvcktleXMpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmYXVsdFNob3VsZFZhbGlkYXRlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxcblxcbnZhciBzcGxpY2UgPSBmdW5jdGlvbiBzcGxpY2UoYXJyYXksIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICBhcnJheSA9IGFycmF5IHx8IFtdO1xcblxcbiAgaWYgKGluZGV4IDwgYXJyYXkubGVuZ3RoKSB7XFxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICFyZW1vdmVOdW0pIHtcXG4gICAgICAvLyBpbnNlcnRpbmcgdW5kZWZpbmVkXFxuICAgICAgdmFyIF9jb3B5MiA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTtcXG4gICAgICBfY29weTIuc3BsaWNlKGluZGV4LCAwLCBudWxsKTtcXG4gICAgICBfY29weTJbaW5kZXhdID0gdW5kZWZpbmVkO1xcbiAgICAgIHJldHVybiBfY29weTI7XFxuICAgIH1cXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcXG4gICAgICB2YXIgX2NvcHkzID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhcnJheSkpO1xcbiAgICAgIF9jb3B5My5zcGxpY2UoaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUpOyAvLyByZW1vdmluZyBhbmQgYWRkaW5nXFxuICAgICAgcmV0dXJuIF9jb3B5MztcXG4gICAgfVxcbiAgICB2YXIgX2NvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICAgIF9jb3B5LnNwbGljZShpbmRleCwgcmVtb3ZlTnVtKTsgLy8gcmVtb3ZpbmdcXG4gICAgcmV0dXJuIF9jb3B5O1xcbiAgfVxcbiAgaWYgKHJlbW92ZU51bSkge1xcbiAgICAvLyB0cnlpbmcgdG8gcmVtb3ZlIG5vbi1leGlzdGFudCBpdGVtOiByZXR1cm4gb3JpZ2luYWwgYXJyYXlcXG4gICAgcmV0dXJuIGFycmF5O1xcbiAgfVxcbiAgLy8gdHJ5aW5nIHRvIGFkZCBvdXRzaWRlIG9mIHJhbmdlOiBqdXN0IHNldCB2YWx1ZVxcbiAgdmFyIGNvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICBjb3B5W2luZGV4XSA9IHZhbHVlO1xcbiAgcmV0dXJuIGNvcHk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzcGxpY2UpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG5cXG52YXIgZ2V0SW4gPSBmdW5jdGlvbiBnZXRJbihzdGF0ZSwgZmllbGQpIHtcXG4gIGlmICghc3RhdGUpIHtcXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcblxcbiAgdmFyIHBhdGggPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKTtcXG4gIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcXG4gIGlmICghbGVuZ3RoKSB7XFxuICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICB9XFxuXFxuICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAmJiAhIXJlc3VsdDsgKytpKSB7XFxuICAgIHJlc3VsdCA9IHJlc3VsdFtwYXRoW2ldXTtcXG4gIH1cXG5cXG4gIHJldHVybiByZXN1bHQ7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRJbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xcblxcblxcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG52YXIgc2V0SW5XaXRoUGF0aCA9IGZ1bmN0aW9uIHNldEluV2l0aFBhdGgoc3RhdGUsIHZhbHVlLCBwYXRoLCBwYXRoSW5kZXgpIHtcXG4gIGlmIChwYXRoSW5kZXggPj0gcGF0aC5sZW5ndGgpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcblxcbiAgdmFyIGZpcnN0ID0gcGF0aFtwYXRoSW5kZXhdO1xcbiAgdmFyIG5leHQgPSBzZXRJbldpdGhQYXRoKHN0YXRlICYmIHN0YXRlW2ZpcnN0XSwgdmFsdWUsIHBhdGgsIHBhdGhJbmRleCArIDEpO1xcblxcbiAgaWYgKCFzdGF0ZSkge1xcbiAgICB2YXIgaW5pdGlhbGl6ZWQgPSBpc05hTihmaXJzdCkgPyB7fSA6IFtdO1xcbiAgICBpbml0aWFsaXplZFtmaXJzdF0gPSBuZXh0O1xcbiAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7XFxuICB9XFxuXFxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZSkpIHtcXG4gICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoc3RhdGUpO1xcbiAgICBjb3B5W2ZpcnN0XSA9IG5leHQ7XFxuICAgIHJldHVybiBjb3B5O1xcbiAgfVxcblxcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgX2RlZmluZVByb3BlcnR5KHt9LCBmaXJzdCwgbmV4dCkpO1xcbn07XFxuXFxudmFyIHNldEluID0gZnVuY3Rpb24gc2V0SW4oc3RhdGUsIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHNldEluV2l0aFBhdGgoc3RhdGUsIHZhbHVlLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKSwgMCk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRJbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Mik7XFxuXFxuXFxuXFxudmFyIGN1c3RvbWl6ZXIgPSBmdW5jdGlvbiBjdXN0b21pemVyKG9iaiwgb3RoZXIpIHtcXG4gIGlmIChvYmogPT09IG90aGVyKSByZXR1cm4gdHJ1ZTtcXG4gIGlmICgob2JqID09IG51bGwgfHwgb2JqID09PSAnJyB8fCBvYmogPT09IGZhbHNlKSAmJiAob3RoZXIgPT0gbnVsbCB8fCBvdGhlciA9PT0gJycgfHwgb3RoZXIgPT09IGZhbHNlKSkgcmV0dXJuIHRydWU7XFxuXFxuICBpZiAob2JqICYmIG90aGVyICYmIG9iai5fZXJyb3IgIT09IG90aGVyLl9lcnJvcikgcmV0dXJuIGZhbHNlO1xcbiAgaWYgKG9iaiAmJiBvdGhlciAmJiBvYmouX3dhcm5pbmcgIT09IG90aGVyLl93YXJuaW5nKSByZXR1cm4gZmFsc2U7XFxufTtcXG5cXG52YXIgZGVlcEVxdWFsID0gZnVuY3Rpb24gZGVlcEVxdWFsKGEsIGIpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoYSwgYiwgY3VzdG9taXplcik7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChkZWVwRXF1YWwpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxudmFyIGRlbGV0ZUluV2l0aFBhdGggPSBmdW5jdGlvbiBkZWxldGVJbldpdGhQYXRoKHN0YXRlLCBmaXJzdCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIHJlc3RbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQgfHwgZmlyc3QgPT09IHVuZGVmaW5lZCkge1xcbiAgICByZXR1cm4gc3RhdGU7XFxuICB9XFxuICBpZiAocmVzdC5sZW5ndGgpIHtcXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgICAgaWYgKGZpcnN0IDwgc3RhdGUubGVuZ3RoKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZSAmJiBzdGF0ZVtmaXJzdF1dLmNvbmNhdChyZXN0KSk7XFxuICAgICAgICBpZiAocmVzdWx0ICE9PSBzdGF0ZVtmaXJzdF0pIHtcXG4gICAgICAgICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHN0YXRlKSk7XFxuICAgICAgICAgIGNvcHlbZmlyc3RdID0gcmVzdWx0O1xcbiAgICAgICAgICByZXR1cm4gY29weTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIHN0YXRlO1xcbiAgICB9XFxuICAgIGlmIChmaXJzdCBpbiBzdGF0ZSkge1xcbiAgICAgIHZhciBfcmVzdWx0ID0gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZSAmJiBzdGF0ZVtmaXJzdF1dLmNvbmNhdChyZXN0KSk7XFxuICAgICAgcmV0dXJuIHN0YXRlW2ZpcnN0XSA9PT0gX3Jlc3VsdCA/IHN0YXRlIDogX2V4dGVuZHMoe30sIHN0YXRlLCBfZGVmaW5lUHJvcGVydHkoe30sIGZpcnN0LCBfcmVzdWx0KSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgIGlmIChpc05hTihmaXJzdCkpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZWxldGUgbm9uLW51bWVyaWNhbCBpbmRleCBmcm9tIGFuIGFycmF5Jyk7XFxuICAgIH1cXG4gICAgaWYgKGZpcnN0IDwgc3RhdGUubGVuZ3RoKSB7XFxuICAgICAgdmFyIF9jb3B5ID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShzdGF0ZSkpO1xcbiAgICAgIF9jb3B5LnNwbGljZShmaXJzdCwgMSk7XFxuICAgICAgcmV0dXJuIF9jb3B5O1xcbiAgICB9XFxuICAgIHJldHVybiBzdGF0ZTtcXG4gIH1cXG4gIGlmIChmaXJzdCBpbiBzdGF0ZSkge1xcbiAgICB2YXIgX2NvcHkyID0gX2V4dGVuZHMoe30sIHN0YXRlKTtcXG4gICAgZGVsZXRlIF9jb3B5MltmaXJzdF07XFxuICAgIHJldHVybiBfY29weTI7XFxuICB9XFxuICByZXR1cm4gc3RhdGU7XFxufTtcXG5cXG52YXIgZGVsZXRlSW4gPSBmdW5jdGlvbiBkZWxldGVJbihzdGF0ZSwgZmllbGQpIHtcXG4gIHJldHVybiBkZWxldGVJbldpdGhQYXRoLmFwcGx5KHVuZGVmaW5lZCwgW3N0YXRlXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZmllbGQpKSkpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVsZXRlSW4pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGtleXMgPSBmdW5jdGlvbiBrZXlzKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPyBPYmplY3Qua2V5cyh2YWx1ZSkgOiBbXTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGtleXMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcbnZhciB0b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xcbn07XFxuXFxudmFyIGdldEVycm9yID0gZnVuY3Rpb24gZ2V0RXJyb3IodmFsdWUsIHZhbHVlcywgcHJvcHMsIHZhbGlkYXRvcnMpIHtcXG4gIHZhciBhcnJheSA9IHRvQXJyYXkodmFsaWRhdG9ycyk7XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBlcnJvciA9IGFycmF5W2ldKHZhbHVlLCB2YWx1ZXMsIHByb3BzKTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICB9XFxuICB9XFxufTtcXG5cXG52YXIgZ2VuZXJhdGVWYWxpZGF0b3IgPSBmdW5jdGlvbiBnZW5lcmF0ZVZhbGlkYXRvcih2YWxpZGF0b3JzLCBfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BzKSB7XFxuICAgIHZhciBlcnJvcnMgPSB7fTtcXG4gICAgT2JqZWN0LmtleXModmFsaWRhdG9ycykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgIHZhciB2YWx1ZSA9IGdldEluKHZhbHVlcywgbmFtZSk7XFxuICAgICAgdmFyIGVycm9yID0gZ2V0RXJyb3IodmFsdWUsIHZhbHVlcywgcHJvcHMsIHZhbGlkYXRvcnNbbmFtZV0pO1xcbiAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgZXJyb3JzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uc2V0SW4oZXJyb3JzLCBuYW1lLCBlcnJvcik7XFxuICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIGVycm9ycztcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZW5lcmF0ZVZhbGlkYXRvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjI2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgZ2V0RXJyb3JLZXlzID0gZnVuY3Rpb24gZ2V0RXJyb3JLZXlzKG5hbWUsIHR5cGUpIHtcXG4gIHN3aXRjaCAodHlwZSkge1xcbiAgICBjYXNlICdGaWVsZCc6XFxuICAgICAgcmV0dXJuIFtuYW1lLCBuYW1lICsgJy5fZXJyb3InXTtcXG4gICAgY2FzZSAnRmllbGRBcnJheSc6XFxuICAgICAgcmV0dXJuIFtuYW1lICsgJy5fZXJyb3InXTtcXG4gICAgZGVmYXVsdDpcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZmllbGQgdHlwZScpO1xcbiAgfVxcbn07XFxuXFxudmFyIGNyZWF0ZUhhc0Vycm9yID0gZnVuY3Rpb24gY3JlYXRlSGFzRXJyb3IoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG5cXG4gIHZhciBoYXNFcnJvciA9IGZ1bmN0aW9uIGhhc0Vycm9yKGZpZWxkLCBzeW5jRXJyb3JzLCBhc3luY0Vycm9ycywgc3VibWl0RXJyb3JzKSB7XFxuICAgIGlmICghc3luY0Vycm9ycyAmJiAhYXN5bmNFcnJvcnMgJiYgIXN1Ym1pdEVycm9ycykge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcblxcbiAgICB2YXIgbmFtZSA9IGdldEluKGZpZWxkLCAnbmFtZScpO1xcbiAgICB2YXIgdHlwZSA9IGdldEluKGZpZWxkLCAndHlwZScpO1xcbiAgICByZXR1cm4gZ2V0RXJyb3JLZXlzKG5hbWUsIHR5cGUpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzeW5jRXJyb3JzLCBrZXkpIHx8IGdldEluKGFzeW5jRXJyb3JzLCBrZXkpIHx8IGdldEluKHN1Ym1pdEVycm9ycywga2V5KTtcXG4gICAgfSk7XFxuICB9O1xcbiAgcmV0dXJuIGhhc0Vycm9yO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzRXJyb3IpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZUZpZWxkID0gZnVuY3Rpb24gY3JlYXRlRmllbGQoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBzZXRJbiA9IF9yZWYuc2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYudG9KUztcXG5cXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsLFxcbiAgICBnZXRJbjogZ2V0SW4sXFxuICAgIHRvSlM6IHRvSlNcXG4gIH0pO1xcblxcbiAgdmFyIEZpZWxkID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKEZpZWxkLCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGQocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGQpO1xcblxcbiAgICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGaWVsZC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkIG11c3QgYmUgaW5zaWRlIGEgY29tcG9uZW50IGRlY29yYXRlZCB3aXRoIHJlZHV4Rm9ybSgpJyk7XFxuICAgICAgfVxcblxcbiAgICAgIF90aGlzLm5vcm1hbGl6ZSA9IF90aGlzLm5vcm1hbGl6ZS5iaW5kKF90aGlzKTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkLCBbe1xcbiAgICAgIGtleTogJ3Nob3VsZENvbXBvbmVudFVwZGF0ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIG5leHRQcm9wcywgbmV4dFN0YXRlKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyKHRoaXMubmFtZSwgJ0ZpZWxkJywgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnByb3BzLnZhbGlkYXRlO1xcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnByb3BzLndhcm47XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm5hbWUgIT09IG5leHRQcm9wcy5uYW1lKSB7XFxuICAgICAgICAgIC8vIHVucmVnaXN0ZXIgb2xkIG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgICAgICAvLyByZWdpc3RlciBuZXcgbmFtZVxcbiAgICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgbmV4dFByb3BzLm5hbWUpLCAnRmllbGQnKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHRoaXMucHJvcHMud2l0aFJlZiwgJ0lmIHlvdSB3YW50IHRvIGFjY2VzcyBnZXRSZW5kZXJlZENvbXBvbmVudCgpLCAnICsgJ3lvdSBtdXN0IHNwZWNpZnkgYSB3aXRoUmVmIHByb3AgdG8gRmllbGQnKTtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFJlbmRlcmVkQ29tcG9uZW50KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbm9ybWFsaXplJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gbm9ybWFsaXplKG5hbWUsIHZhbHVlKSB7XFxuICAgICAgICB2YXIgbm9ybWFsaXplID0gdGhpcy5wcm9wcy5ub3JtYWxpemU7XFxuXFxuICAgICAgICBpZiAoIW5vcm1hbGl6ZSkge1xcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5nZXRWYWx1ZXMoKTtcXG4gICAgICAgIHZhciBwcmV2aW91c1ZhbHVlID0gdGhpcy52YWx1ZTtcXG4gICAgICAgIHZhciBuZXh0VmFsdWVzID0gc2V0SW4ocHJldmlvdXNWYWx1ZXMsIG5hbWUsIHZhbHVlKTtcXG4gICAgICAgIHJldHVybiBub3JtYWxpemUodmFsdWUsIHByZXZpb3VzVmFsdWUsIG5leHRWYWx1ZXMsIHByZXZpb3VzVmFsdWVzKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKENvbm5lY3RlZEZpZWxkLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXFxuICAgICAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLmNvbnRleHQsIHRoaXMucHJvcHMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZGlydHknLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuICF0aGlzLnByaXN0aW5lO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZCAmJiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlKCk7XFxuICAgICAgfVxcbiAgICB9XSk7XFxuXFxuICAgIHJldHVybiBGaWVsZDtcXG4gIH0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG4gIEZpZWxkLnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZy5pc1JlcXVpcmVkLFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUoW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nXSkuaXNSZXF1aXJlZCxcXG4gICAgZm9ybWF0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgbm9ybWFsaXplOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25CbHVyOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25DaGFuZ2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBvbkZvY3VzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25EcmFnU3RhcnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBvbkRyb3A6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwYXJzZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB2YWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5hcnJheU9mKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jKV0pLFxcbiAgICB3YXJuOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmFycmF5T2YoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMpXSksXFxuICAgIHdpdGhSZWY6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sXFxuICB9O1xcbiAgRmllbGQuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY3JlYXRlRmllbGRQcm9wc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMxKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gWydfcmVkdXhGb3JtJ107XFxuXFxudmFyIGNyZWF0ZUNvbm5lY3RlZEZpZWxkID0gZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGVkRmllbGQoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIHZhciBlcnJvciA9IGdldEluKHN5bmNFcnJvcnMsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSBlcnJvciBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgZXJyb3Igc3RydWN0dXJlIHdoZXJlXFxuICAgIC8vIGl0IGNhbiBiZSBzZXQgZGlyZWN0bHksIGl0IG1pZ2h0IG5lZWQgdG8gYmUgdW53cmFwcGVkIGZyb20gdGhlIF9lcnJvciBwcm9wZXJ0eVxcbiAgICByZXR1cm4gZXJyb3IgJiYgZXJyb3IuX2Vycm9yID8gZXJyb3IuX2Vycm9yIDogZXJyb3I7XFxuICB9O1xcblxcbiAgdmFyIGdldFN5bmNXYXJuaW5nID0gZnVuY3Rpb24gZ2V0U3luY1dhcm5pbmcoc3luY1dhcm5pbmdzLCBuYW1lKSB7XFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lKTtcXG4gICAgLy8gQmVjYXVzZSB0aGUgd2FybmluZyBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgd2FybmluZyBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX3dhcm5pbmcgcHJvcGVydHlcXG4gICAgcmV0dXJuIHdhcm5pbmcgJiYgd2FybmluZy5fd2FybmluZyA/IHdhcm5pbmcuX3dhcm5pbmcgOiB3YXJuaW5nO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZCwgX0NvbXBvbmVudCk7XFxuXFxuICAgIGZ1bmN0aW9uIENvbm5lY3RlZEZpZWxkKHByb3BzKSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbm5lY3RlZEZpZWxkKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihDb25uZWN0ZWRGaWVsZCkpLmNhbGwodGhpcywgcHJvcHMpKTtcXG5cXG4gICAgICBfdGhpcy5oYW5kbGVDaGFuZ2UgPSBfdGhpcy5oYW5kbGVDaGFuZ2UuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRm9jdXMgPSBfdGhpcy5oYW5kbGVGb2N1cy5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVCbHVyID0gX3RoaXMuaGFuZGxlQmx1ci5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVEcmFnU3RhcnQgPSBfdGhpcy5oYW5kbGVEcmFnU3RhcnQuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRHJvcCA9IF90aGlzLmhhbmRsZURyb3AuYmluZChfdGhpcyk7XFxuICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuXFxuICAgIF9jcmVhdGVDbGFzcyhDb25uZWN0ZWRGaWVsZCwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHZhciBuZXh0UHJvcHNLZXlzID0gT2JqZWN0LmtleXMobmV4dFByb3BzKTtcXG4gICAgICAgIHZhciB0aGlzUHJvcHNLZXlzID0gT2JqZWN0LmtleXModGhpcy5wcm9wcyk7XFxuICAgICAgICByZXR1cm4gbmV4dFByb3BzS2V5cy5sZW5ndGggIT09IHRoaXNQcm9wc0tleXMubGVuZ3RoIHx8IG5leHRQcm9wc0tleXMuc29tZShmdW5jdGlvbiAocHJvcCkge1xcbiAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczIucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdpc1ByaXN0aW5lJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaXNQcmlzdGluZSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnByaXN0aW5lO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFZhbHVlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVDaGFuZ2UnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcXG4gICAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMubmFtZSxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wcy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wcy5wYXJzZSxcXG4gICAgICAgICAgICBub3JtYWxpemUgPSBfcHJvcHMubm9ybWFsaXplLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlID0gX3Byb3BzLm9uQ2hhbmdlLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlID0gX3Byb3BzLnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xcbiAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XFxuICAgICAgICAgIG9uQ2hhbmdlKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZSBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5jaGFuZ2UobmFtZSwgbmV3VmFsdWUpKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVGb2N1cycsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wczIubmFtZSxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wczIuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgb25Gb2N1cyA9IF9wcm9wczIub25Gb2N1cyxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMi5fcmVkdXhGb3JtO1xcblxcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkZvY3VzKSB7XFxuICAgICAgICAgIG9uRm9jdXMoX2V4dGVuZHMoe30sIGV2ZW50LCB7XFxuICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XFxuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCkge1xcbiAgICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmZvY3VzKG5hbWUpKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVCbHVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMzLm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMzLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIHBhcnNlID0gX3Byb3BzMy5wYXJzZSxcXG4gICAgICAgICAgICBub3JtYWxpemUgPSBfcHJvcHMzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBvbkJsdXIgPSBfcHJvcHMzLm9uQmx1cixcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMy5fcmVkdXhGb3JtLFxcbiAgICAgICAgICAgIF92YWx1ZSA9IF9wcm9wczMuX3ZhbHVlLFxcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSBfcHJvcHMzLnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICAvLyBmb3IgY2hlY2tib3ggYW5kIHJhZGlvLCBpZiB0aGUgdmFsdWUgcHJvcGVydHkgb2YgY2hlY2tib3ggb3IgcmFkaW8gZXF1YWxzXFxuICAgICAgICAvLyB0aGUgdmFsdWUgcGFzc2VkIGJ5IGJsdXIgZXZlbnQsIHRoZW4gZmlyZSBibHVyIGFjdGlvbiB3aXRoIHByZXZpb3VzVmFsdWUuXFxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IF92YWx1ZSAmJiBfdmFsdWUgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZpb3VzVmFsdWU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xcbiAgICAgICAgaWYgKG9uQmx1cikge1xcbiAgICAgICAgICBvbkJsdXIoX2V4dGVuZHMoe30sIGV2ZW50LCB7XFxuICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XFxuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pLCBuZXdWYWx1ZSwgcHJldmlvdXNWYWx1ZSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoIWRlZmF1bHRQcmV2ZW50ZWQpIHtcXG4gICAgICAgICAgLy8gZGlzcGF0Y2ggYmx1ciBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5ibHVyKG5hbWUsIG5ld1ZhbHVlKSk7XFxuXFxuICAgICAgICAgIC8vIGNhbGwgcG9zdC1ibHVyIGNhbGxiYWNrXFxuICAgICAgICAgIGlmIChfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgICBfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUobmFtZSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRHJhZ1N0YXJ0JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRHJhZ1N0YXJ0KGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzNCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPSBfcHJvcHM0Lm9uRHJhZ1N0YXJ0LFxcbiAgICAgICAgICAgIHZhbHVlID0gX3Byb3BzNC52YWx1ZTtcXG5cXG4gICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9ldmVudENvbnN0c19fW1xcXCJhXFxcIiAvKiBkYXRhS2V5ICovXSwgdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xcblxcbiAgICAgICAgaWYgKG9uRHJhZ1N0YXJ0KSB7XFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0KGV2ZW50KTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVEcm9wJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRHJvcChldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczUgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHM1Lm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHM1LmRpc3BhdGNoLFxcbiAgICAgICAgICAgIG9uRHJvcCA9IF9wcm9wczUub25Ecm9wLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM1Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IF9wcm9wczUudmFsdWU7XFxuXFxuICAgICAgICB2YXIgbmV3VmFsdWUgPSBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfX1tcXFwiYVxcXCIgLyogZGF0YUtleSAqL10pO1xcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkRyb3ApIHtcXG4gICAgICAgICAgb25Ecm9wKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZSBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5jaGFuZ2UobmFtZSwgbmV3VmFsdWUpKTtcXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgX3Byb3BzNiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzNi5jb21wb25lbnQsXFxuICAgICAgICAgICAgd2l0aFJlZiA9IF9wcm9wczYud2l0aFJlZixcXG4gICAgICAgICAgICBuYW1lID0gX3Byb3BzNi5uYW1lLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM2Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzNi5ub3JtYWxpemUsXFxuICAgICAgICAgICAgb25CbHVyID0gX3Byb3BzNi5vbkJsdXIsXFxuICAgICAgICAgICAgb25DaGFuZ2UgPSBfcHJvcHM2Lm9uQ2hhbmdlLFxcbiAgICAgICAgICAgIG9uRm9jdXMgPSBfcHJvcHM2Lm9uRm9jdXMsXFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPSBfcHJvcHM2Lm9uRHJhZ1N0YXJ0LFxcbiAgICAgICAgICAgIG9uRHJvcCA9IF9wcm9wczYub25Ecm9wLFxcbiAgICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzNiwgWydjb21wb25lbnQnLCAnd2l0aFJlZicsICduYW1lJywgJ19yZWR1eEZvcm0nLCAnbm9ybWFsaXplJywgJ29uQmx1cicsICdvbkNoYW5nZScsICdvbkZvY3VzJywgJ29uRHJhZ1N0YXJ0JywgJ29uRHJvcCddKTtcXG5cXG4gICAgICAgIHZhciBfY3JlYXRlRmllbGRQcm9wcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHsgZ2V0SW46IGdldEluLCB0b0pTOiB0b0pTIH0sIG5hbWUsIF9leHRlbmRzKHt9LCByZXN0LCB7XFxuICAgICAgICAgIGZvcm06IF9yZWR1eEZvcm0uZm9ybSxcXG4gICAgICAgICAgb25CbHVyOiB0aGlzLmhhbmRsZUJsdXIsXFxuICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZSxcXG4gICAgICAgICAgb25Ecm9wOiB0aGlzLmhhbmRsZURyb3AsXFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0OiB0aGlzLmhhbmRsZURyYWdTdGFydCxcXG4gICAgICAgICAgb25Gb2N1czogdGhpcy5oYW5kbGVGb2N1c1xcbiAgICAgICAgfSkpLFxcbiAgICAgICAgICAgIGN1c3RvbSA9IF9jcmVhdGVGaWVsZFByb3BzLmN1c3RvbSxcXG4gICAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY3JlYXRlRmllbGRQcm9wcywgWydjdXN0b20nXSk7XFxuXFxuICAgICAgICBpZiAod2l0aFJlZikge1xcbiAgICAgICAgICBjdXN0b20ucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnc3RyaW5nJykge1xcbiAgICAgICAgICB2YXIgaW5wdXQgPSBwcm9wcy5pbnB1dCxcXG4gICAgICAgICAgICAgIG1ldGEgPSBwcm9wcy5tZXRhOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXFxuICAgICAgICAgIC8vIGZsYXR0ZW4gaW5wdXQgaW50byBvdGhlciBwcm9wc1xcblxcbiAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKGNvbXBvbmVudCwgX2V4dGVuZHMoe30sIGlucHV0LCBjdXN0b20pKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIGN1c3RvbSkpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gQ29ubmVjdGVkRmllbGQ7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBDb25uZWN0ZWRGaWVsZC5wcm9wVHlwZXMgPSB7XFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBwcm9wczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdFxcbiAgfTtcXG5cXG4gIHZhciBjb25uZWN0b3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X3JlZHV4X19bXFxcImFcXFwiIC8qIGNvbm5lY3QgKi9dKShmdW5jdGlvbiAoc3RhdGUsIG93blByb3BzKSB7XFxuICAgIHZhciBuYW1lID0gb3duUHJvcHMubmFtZSxcXG4gICAgICAgIF9vd25Qcm9wcyRfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX293blByb3BzJF9yZWR1eEZvcm0uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ2luaXRpYWwuJyArIG5hbWUpO1xcbiAgICB2YXIgaW5pdGlhbCA9IGluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5pdGlhbFN0YXRlIDogaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgdmFyIHZhbHVlID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzLicgKyBuYW1lKTtcXG4gICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgIHZhciBzeW5jRXJyb3IgPSBnZXRTeW5jRXJyb3IoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpLCBuYW1lKTtcXG4gICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICB2YXIgcHJpc3RpbmUgPSBkZWVwRXF1YWwodmFsdWUsIGluaXRpYWwpO1xcbiAgICByZXR1cm4ge1xcbiAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICBhc3luY1ZhbGlkYXRpbmc6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycpID09PSBuYW1lLFxcbiAgICAgIGRpcnR5OiAhcHJpc3RpbmUsXFxuICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgIHN0YXRlOiBnZXRJbihmb3JtU3RhdGUsICdmaWVsZHMuJyArIG5hbWUpLFxcbiAgICAgIHN1Ym1pdEVycm9yOiBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRFcnJvcnMuJyArIG5hbWUpLFxcbiAgICAgIHN1Ym1pdEZhaWxlZDogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyksXFxuICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3I6IHN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZzogc3luY1dhcm5pbmcsXFxuICAgICAgdmFsdWU6IHZhbHVlLFxcbiAgICAgIF92YWx1ZTogb3duUHJvcHMudmFsdWUgLy8gc2F2ZSB2YWx1ZSBwYXNzZWQgaW4gKGZvciBjaGVja2JveGVzKVxcbiAgICB9O1xcbiAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgd2l0aFJlZjogdHJ1ZSB9KTtcXG4gIHJldHVybiBjb25uZWN0b3IoQ29ubmVjdGVkRmllbGQpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdGVkRmllbGQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNFdmVudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MSk7XFxuXFxuXFxudmFyIGdldFNlbGVjdGVkVmFsdWVzID0gZnVuY3Rpb24gZ2V0U2VsZWN0ZWRWYWx1ZXMob3B0aW9ucykge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKG9wdGlvbnMpIHtcXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG9wdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XFxuICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnNbaW5kZXhdO1xcbiAgICAgIGlmIChvcHRpb24uc2VsZWN0ZWQpIHtcXG4gICAgICAgIHJlc3VsdC5wdXNoKG9wdGlvbi52YWx1ZSk7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn07XFxuXFxudmFyIGdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoZXZlbnQsIGlzUmVhY3ROYXRpdmUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0V2ZW50X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCkpIHtcXG4gICAgaWYgKCFpc1JlYWN0TmF0aXZlICYmIGV2ZW50Lm5hdGl2ZUV2ZW50ICYmIGV2ZW50Lm5hdGl2ZUV2ZW50LnRleHQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJldHVybiBldmVudC5uYXRpdmVFdmVudC50ZXh0O1xcbiAgICB9XFxuICAgIGlmIChpc1JlYWN0TmF0aXZlICYmIGV2ZW50Lm5hdGl2ZUV2ZW50ICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICByZXR1cm4gZXZlbnQubmF0aXZlRXZlbnQudGV4dDtcXG4gICAgfVxcbiAgICB2YXIgX2V2ZW50JHRhcmdldCA9IGV2ZW50LnRhcmdldCxcXG4gICAgICAgIHR5cGUgPSBfZXZlbnQkdGFyZ2V0LnR5cGUsXFxuICAgICAgICB2YWx1ZSA9IF9ldmVudCR0YXJnZXQudmFsdWUsXFxuICAgICAgICBjaGVja2VkID0gX2V2ZW50JHRhcmdldC5jaGVja2VkLFxcbiAgICAgICAgZmlsZXMgPSBfZXZlbnQkdGFyZ2V0LmZpbGVzLFxcbiAgICAgICAgZGF0YVRyYW5zZmVyID0gZXZlbnQuZGF0YVRyYW5zZmVyO1xcblxcbiAgICBpZiAodHlwZSA9PT0gJ2NoZWNrYm94Jykge1xcbiAgICAgIHJldHVybiBjaGVja2VkO1xcbiAgICB9XFxuICAgIGlmICh0eXBlID09PSAnZmlsZScpIHtcXG4gICAgICByZXR1cm4gZmlsZXMgfHwgZGF0YVRyYW5zZmVyICYmIGRhdGFUcmFuc2Zlci5maWxlcztcXG4gICAgfVxcbiAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdC1tdWx0aXBsZScpIHtcXG4gICAgICByZXR1cm4gZ2V0U2VsZWN0ZWRWYWx1ZXMoZXZlbnQudGFyZ2V0Lm9wdGlvbnMpO1xcbiAgICB9XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBldmVudDtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFZhbHVlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBpc1JlYWN0TmF0aXZlID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnByb2R1Y3QgJiYgd2luZG93Lm5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzUmVhY3ROYXRpdmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGF0YUtleTsgfSk7XFxudmFyIGRhdGFLZXkgPSAndGV4dCc7XFxuXFxuLyoqKi8gfSksXFxuLyogMjMyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciB2YWxpZGF0ZU5hbWVQcm9wID0gZnVuY3Rpb24gdmFsaWRhdGVOYW1lUHJvcChwcm9wKSB7XFxuICBpZiAoIXByb3ApIHtcXG4gICAgcmV0dXJuIG5ldyBFcnJvcignTm8gXFxcIm5hbWVzXFxcIiBwcm9wIHdhcyBzcGVjaWZpZWQgPEZpZWxkcy8+Jyk7XFxuICB9XFxuICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcCkgJiYgIXByb3AuX2lzRmllbGRBcnJheSkge1xcbiAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkIHByb3AgXFxcIm5hbWVzXFxcIiBzdXBwbGllZCB0byA8RmllbGRzLz4uIE11c3QgYmUgZWl0aGVyIGFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgdGhlIGZpZWxkcyBhcnJheSBnZW5lcmF0ZWQgYnkgRmllbGRBcnJheS4nKTtcXG4gIH1cXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZHMgPSBmdW5jdGlvbiBjcmVhdGVGaWVsZHMoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTLFxcbiAgICAgIHNpemUgPSBfcmVmLnNpemU7XFxuXFxuXFxuICB2YXIgQ29ubmVjdGVkRmllbGRzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsLFxcbiAgICBnZXRJbjogZ2V0SW4sXFxuICAgIHRvSlM6IHRvSlMsXFxuICAgIHNpemU6IHNpemVcXG4gIH0pO1xcblxcbiAgdmFyIEZpZWxkcyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZHMsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBGaWVsZHMocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGRzKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGRzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRmllbGRzKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkcyBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkcywgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsX3NoYWxsb3dDb21wYXJlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBuZXh0UHJvcHMsIG5leHRTdGF0ZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgICAgdmFyIGVycm9yID0gdmFsaWRhdGVOYW1lUHJvcCh0aGlzLnByb3BzLm5hbWVzKTtcXG4gICAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xcbiAgICAgICAgdmFyIHJlZ2lzdGVyID0gY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyO1xcblxcbiAgICAgICAgdGhpcy5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiByZWdpc3RlcihuYW1lLCAnRmllbGQnKTtcXG4gICAgICAgIH0pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgaWYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwodGhpcy5wcm9wcy5uYW1lcywgbmV4dFByb3BzLm5hbWVzKSkge1xcbiAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgICAgdmFyIF9jb250ZXh0JF9yZWR1eEZvcm0gPSBjb250ZXh0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgICByZWdpc3RlciA9IF9jb250ZXh0JF9yZWR1eEZvcm0ucmVnaXN0ZXIsXFxuICAgICAgICAgICAgICB1bnJlZ2lzdGVyID0gX2NvbnRleHQkX3JlZHV4Rm9ybS51bnJlZ2lzdGVyO1xcbiAgICAgICAgICAvLyB1bnJlZ2lzdGVyIG9sZCBuYW1lXFxuXFxuICAgICAgICAgIHRoaXMucHJvcHMubmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgIHJldHVybiB1bnJlZ2lzdGVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSkpO1xcbiAgICAgICAgICB9KTtcXG4gICAgICAgICAgLy8gcmVnaXN0ZXIgbmV3IG5hbWVcXG4gICAgICAgICAgbmV4dFByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKSwgJ0ZpZWxkJyk7XFxuICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgIHZhciB1bnJlZ2lzdGVyID0gY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXI7XFxuXFxuICAgICAgICB0aGlzLnByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIHVucmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh0aGlzLnByb3BzLndpdGhSZWYsICdJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZ2V0UmVuZGVyZWRDb21wb25lbnQoKSwgJyArICd5b3UgbXVzdCBzcGVjaWZ5IGEgd2l0aFJlZiBwcm9wIHRvIEZpZWxkcycpO1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0UmVuZGVyZWRDb21wb25lbnQoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG5cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRmllbGRzLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICBuYW1lczogdGhpcy5wcm9wcy5uYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKTtcXG4gICAgICAgICAgfSksXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZXMnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XFxuXFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5uYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5pc0RpcnR5KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncHJpc3RpbmUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuICF0aGlzLmRpcnR5O1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ZhbHVlcycsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZCAmJiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlcygpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gRmllbGRzO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgRmllbGRzLnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZXM6IGZ1bmN0aW9uIG5hbWVzKHByb3BzLCBwcm9wTmFtZSkge1xcbiAgICAgIHJldHVybiB2YWxpZGF0ZU5hbWVQcm9wKHByb3BzW3Byb3BOYW1lXSk7XFxuICAgIH0sXFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBmb3JtYXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwYXJzZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkcy5jb250ZXh0VHlwZXMgPSB7XFxuICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICByZXR1cm4gRmllbGRzO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NCk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgcHJvcHNUb05vdFVwZGF0ZUZvciA9IFsnX3JlZHV4Rm9ybSddO1xcblxcbnZhciBjcmVhdGVDb25uZWN0ZWRGaWVsZHMgPSBmdW5jdGlvbiBjcmVhdGVDb25uZWN0ZWRGaWVsZHMoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTLFxcbiAgICAgIHNpemUgPSBfcmVmLnNpemU7XFxuXFxuXFxuICB2YXIgZ2V0U3luY0Vycm9yID0gZnVuY3Rpb24gZ2V0U3luY0Vycm9yKHN5bmNFcnJvcnMsIG5hbWUpIHtcXG4gICAgdmFyIGVycm9yID0gZ2V0SW4oc3luY0Vycm9ycywgbmFtZSk7XFxuICAgIC8vIEJlY2F1c2UgdGhlIGVycm9yIGZvciB0aGlzIGZpZWxkIG1pZ2h0IG5vdCBiZSBhdCBhIGxldmVsIGluIHRoZSBlcnJvciBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX2Vycm9yIHByb3BlcnR5XFxuICAgIHJldHVybiBlcnJvciAmJiBlcnJvci5fZXJyb3IgPyBlcnJvci5fZXJyb3IgOiBlcnJvcjtcXG4gIH07XFxuXFxuICB2YXIgZ2V0U3luY1dhcm5pbmcgPSBmdW5jdGlvbiBnZXRTeW5jV2FybmluZyhzeW5jV2FybmluZ3MsIG5hbWUpIHtcXG4gICAgdmFyIHdhcm5pbmcgPSBnZXRJbihzeW5jV2FybmluZ3MsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSB3YXJuaW5nIGZvciB0aGlzIGZpZWxkIG1pZ2h0IG5vdCBiZSBhdCBhIGxldmVsIGluIHRoZSB3YXJuaW5nIHN0cnVjdHVyZSB3aGVyZVxcbiAgICAvLyBpdCBjYW4gYmUgc2V0IGRpcmVjdGx5LCBpdCBtaWdodCBuZWVkIHRvIGJlIHVud3JhcHBlZCBmcm9tIHRoZSBfd2FybmluZyBwcm9wZXJ0eVxcbiAgICByZXR1cm4gd2FybmluZyAmJiB3YXJuaW5nLl93YXJuaW5nID8gd2FybmluZy5fd2FybmluZyA6IHdhcm5pbmc7XFxuICB9O1xcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkcyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZHMsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZHMocHJvcHMpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdGVkRmllbGRzKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGRzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ29ubmVjdGVkRmllbGRzKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xcblxcbiAgICAgIF90aGlzLmhhbmRsZUNoYW5nZSA9IF90aGlzLmhhbmRsZUNoYW5nZS5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVGb2N1cyA9IF90aGlzLmhhbmRsZUZvY3VzLmJpbmQoX3RoaXMpO1xcbiAgICAgIF90aGlzLmhhbmRsZUJsdXIgPSBfdGhpcy5oYW5kbGVCbHVyLmJpbmQoX3RoaXMpO1xcblxcbiAgICAgIF90aGlzLm9uQ2hhbmdlRm5zID0gcHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlQ2hhbmdlKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgIH0sIHt9KTtcXG5cXG4gICAgICBfdGhpcy5vbkZvY3VzRm5zID0gcHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUZvY3VzKG5hbWUpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgfSwge30pO1xcblxcbiAgICAgIF90aGlzLm9uQmx1ckZucyA9IHByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUJsdXIobmFtZSwgZXZlbnQpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgfSwge30pO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGRzLCBbe1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICBpZiAodGhpcy5wcm9wcy5uYW1lcyAhPT0gbmV4dFByb3BzLm5hbWVzICYmIChzaXplKHRoaXMucHJvcHMubmFtZXMpICE9PSBzaXplKG5leHRQcm9wcy5uYW1lcykgfHwgbmV4dFByb3BzLm5hbWVzLnNvbWUoZnVuY3Rpb24gKG5leHROYW1lKSB7XFxuICAgICAgICAgIHJldHVybiAhX3RoaXMyLnByb3BzLl9maWVsZHNbbmV4dE5hbWVdO1xcbiAgICAgICAgfSkpKSB7XFxuXFxuICAgICAgICAgIC8vIG5hbWVzIGlzIGNoYW5nZWQuIFRoZSBjYWNoZWQgZXZlbnQgaGFuZGxlcnMgbmVlZCB0byBiZSB1cGRhdGVkXFxuICAgICAgICAgIHRoaXMub25DaGFuZ2VGbnMgPSBuZXh0UHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQ2hhbmdlKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgIH0sIHt9KTtcXG5cXG4gICAgICAgICAgdGhpcy5vbkZvY3VzRm5zID0gbmV4dFByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICAgICAgYWNjW25hbWVdID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5oYW5kbGVGb2N1cyhuYW1lKTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgIH0sIHt9KTtcXG5cXG4gICAgICAgICAgdGhpcy5vbkJsdXJGbnMgPSBuZXh0UHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQmx1cihuYW1lLCBldmVudCk7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgICAgICB9LCB7fSk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XFxuXFxuICAgICAgICB2YXIgbmV4dFByb3BzS2V5cyA9IE9iamVjdC5rZXlzKG5leHRQcm9wcyk7XFxuICAgICAgICB2YXIgdGhpc1Byb3BzS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucHJvcHMpO1xcbiAgICAgICAgcmV0dXJuIG5leHRQcm9wc0tleXMubGVuZ3RoICE9PSB0aGlzUHJvcHNLZXlzLmxlbmd0aCB8fCBuZXh0UHJvcHNLZXlzLnNvbWUoZnVuY3Rpb24gKHByb3ApIHtcXG4gICAgICAgICAgcmV0dXJuICF+cHJvcHNUb05vdFVwZGF0ZUZvci5pbmRleE9mKHByb3ApICYmICFkZWVwRXF1YWwoX3RoaXMzLnByb3BzW3Byb3BdLCBuZXh0UHJvcHNbcHJvcF0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaXNEaXJ0eScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRGlydHkoKSB7XFxuICAgICAgICB2YXIgX2ZpZWxkcyA9IHRoaXMucHJvcHMuX2ZpZWxkcztcXG5cXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhfZmllbGRzKS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiBfZmllbGRzW25hbWVdLmRpcnR5O1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0VmFsdWVzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWVzKCkge1xcbiAgICAgICAgdmFyIF9maWVsZHMgPSB0aGlzLnByb3BzLl9maWVsZHM7XFxuXFxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX2ZpZWxkcykucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgbmFtZSkge1xcbiAgICAgICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uc2V0SW4oYWNjdW11bGF0b3IsIG5hbWUsIF9maWVsZHNbbmFtZV0udmFsdWUpO1xcbiAgICAgICAgfSwge30pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLnJlbmRlcmVkQ29tcG9uZW50O1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2hhbmRsZUNoYW5nZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShuYW1lLCBldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgcGFyc2UgPSBfcHJvcHMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIHsgbmFtZTogbmFtZSwgcGFyc2U6IHBhcnNlLCBub3JtYWxpemU6IG5vcm1hbGl6ZSB9KTtcXG5cXG4gICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uY2hhbmdlKG5hbWUsIHZhbHVlKSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRm9jdXMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhuYW1lKSB7XFxuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMyLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMyLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmZvY3VzKG5hbWUpKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVCbHVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cihuYW1lLCBldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzMy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wczMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzMy5ub3JtYWxpemUsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczMuX3JlZHV4Rm9ybTtcXG5cXG4gICAgICAgIHZhciB2YWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2V2ZW50c19vbkNoYW5nZVZhbHVlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCwgeyBuYW1lOiBuYW1lLCBwYXJzZTogcGFyc2UsIG5vcm1hbGl6ZTogbm9ybWFsaXplIH0pO1xcblxcbiAgICAgICAgLy8gZGlzcGF0Y2ggYmx1ciBhY3Rpb25cXG4gICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uYmx1cihuYW1lLCB2YWx1ZSkpO1xcblxcbiAgICAgICAgLy8gY2FsbCBwb3N0LWJsdXIgY2FsbGJhY2tcXG4gICAgICAgIGlmIChfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgX3JlZHV4Rm9ybS5hc3luY1ZhbGlkYXRlKG5hbWUsIHZhbHVlKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgX3RoaXM0ID0gdGhpcztcXG5cXG4gICAgICAgIHZhciBfcHJvcHM0ID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICBjb21wb25lbnQgPSBfcHJvcHM0LmNvbXBvbmVudCxcXG4gICAgICAgICAgICB3aXRoUmVmID0gX3Byb3BzNC53aXRoUmVmLFxcbiAgICAgICAgICAgIF9maWVsZHMgPSBfcHJvcHM0Ll9maWVsZHMsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczQuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczQsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnX2ZpZWxkcycsICdfcmVkdXhGb3JtJ10pO1xcblxcbiAgICAgICAgdmFyIHNlY3Rpb25QcmVmaXggPSBfcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXg7XFxuXFxuICAgICAgICB2YXIgX09iamVjdCRrZXlzJHJlZHVjZSA9IE9iamVjdC5rZXlzKF9maWVsZHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIG5hbWUpIHtcXG4gICAgICAgICAgdmFyIGNvbm5lY3RlZFByb3BzID0gX2ZpZWxkc1tuYW1lXTtcXG5cXG4gICAgICAgICAgdmFyIF9jcmVhdGVGaWVsZFByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY3JlYXRlRmllbGRQcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoeyBnZXRJbjogZ2V0SW4sIHRvSlM6IHRvSlMgfSwgbmFtZSwgX2V4dGVuZHMoe30sIGNvbm5lY3RlZFByb3BzLCByZXN0LCB7XFxuICAgICAgICAgICAgb25CbHVyOiBfdGhpczQub25CbHVyRm5zW25hbWVdLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBfdGhpczQub25DaGFuZ2VGbnNbbmFtZV0sXFxuICAgICAgICAgICAgb25Gb2N1czogX3RoaXM0Lm9uRm9jdXNGbnNbbmFtZV1cXG4gICAgICAgICAgfSkpLFxcbiAgICAgICAgICAgICAgY3VzdG9tID0gX2NyZWF0ZUZpZWxkUHJvcHMuY3VzdG9tLFxcbiAgICAgICAgICAgICAgZmllbGRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY3JlYXRlRmllbGRQcm9wcywgWydjdXN0b20nXSk7XFxuXFxuICAgICAgICAgIGFjY3VtdWxhdG9yLmN1c3RvbSA9IGN1c3RvbTtcXG4gICAgICAgICAgdmFyIGZpZWxkTmFtZSA9IHNlY3Rpb25QcmVmaXggPyBuYW1lLnJlcGxhY2Uoc2VjdGlvblByZWZpeCArICcuJywgJycpIDogbmFtZTtcXG4gICAgICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBmaWVsZE5hbWUsIGZpZWxkUHJvcHMpO1xcbiAgICAgICAgfSwge30pLFxcbiAgICAgICAgICAgIGN1c3RvbSA9IF9PYmplY3Qka2V5cyRyZWR1Y2UuY3VzdG9tLFxcbiAgICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9PYmplY3Qka2V5cyRyZWR1Y2UsIFsnY3VzdG9tJ10pO1xcblxcbiAgICAgICAgaWYgKHdpdGhSZWYpIHtcXG4gICAgICAgICAgcHJvcHMucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIGN1c3RvbSkpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gQ29ubmVjdGVkRmllbGRzO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgQ29ubmVjdGVkRmllbGRzLnByb3BUeXBlcyA9IHtcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIF9maWVsZHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QuaXNSZXF1aXJlZCxcXG4gICAgcHJvcHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZXMgPSBvd25Qcm9wcy5uYW1lcyxcXG4gICAgICAgIF9vd25Qcm9wcyRfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX293blByb3BzJF9yZWR1eEZvcm0uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgcmV0dXJuIHtcXG4gICAgICBfZmllbGRzOiBuYW1lcy5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBuYW1lKSB7XFxuICAgICAgICB2YXIgaW5pdGlhbFN0YXRlID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbC4nICsgbmFtZSk7XFxuICAgICAgICB2YXIgaW5pdGlhbCA9IGluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5pdGlhbFN0YXRlIDogaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ3ZhbHVlcy4nICsgbmFtZSk7XFxuICAgICAgICB2YXIgc3luY0Vycm9yID0gZ2V0U3luY0Vycm9yKGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNFcnJvcnMnKSwgbmFtZSk7XFxuICAgICAgICB2YXIgc3luY1dhcm5pbmcgPSBnZXRTeW5jV2FybmluZyhnZXRJbihmb3JtU3RhdGUsICdzeW5jV2FybmluZ3MnKSwgbmFtZSk7XFxuICAgICAgICB2YXIgc3VibWl0dGluZyA9IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgICAgIHZhciBwcmlzdGluZSA9IHZhbHVlID09PSBpbml0aWFsO1xcbiAgICAgICAgYWNjdW11bGF0b3JbbmFtZV0gPSB7XFxuICAgICAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY1ZhbGlkYXRpbmcnKSA9PT0gbmFtZSxcXG4gICAgICAgICAgZGlydHk6ICFwcmlzdGluZSxcXG4gICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICAgICAgc3VibWl0RXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEVycm9ycy4nICsgbmFtZSksXFxuICAgICAgICAgIHN1Ym1pdEZhaWxlZDogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyksXFxuICAgICAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgICAgIHN5bmNFcnJvcjogc3luY0Vycm9yLFxcbiAgICAgICAgICBzeW5jV2FybmluZzogc3luY1dhcm5pbmcsXFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICAgICAgX3ZhbHVlOiBvd25Qcm9wcy52YWx1ZSAvLyBzYXZlIHZhbHVlIHBhc3NlZCBpbiAoZm9yIGNoZWNrYm94ZXMpXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xcbiAgICAgIH0sIHt9KVxcbiAgICB9O1xcbiAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgd2l0aFJlZjogdHJ1ZSB9KTtcXG4gIHJldHVybiBjb25uZWN0b3IoQ29ubmVjdGVkRmllbGRzKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUNvbm5lY3RlZEZpZWxkcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRBcnJheV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHRvQXJyYXkgPSBmdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XFxuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XFxufTtcXG5cXG52YXIgd3JhcEVycm9yID0gZnVuY3Rpb24gd3JhcEVycm9yKGZuLCBrZXkpIHtcXG4gIHJldHVybiBmbiAmJiBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciB2YWxpZGF0b3JzID0gdG9BcnJheShmbik7XFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciByZXN1bHQgPSB2YWxpZGF0b3JzW2ldLmFwcGx5KHZhbGlkYXRvcnMsIGFyZ3VtZW50cyk7XFxuICAgICAgaWYgKHJlc3VsdCkge1xcbiAgICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCByZXN1bHQpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfTtcXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZEFycmF5ID0gZnVuY3Rpb24gY3JlYXRlRmllbGRBcnJheShfcmVmMikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYyLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYyLmdldEluLFxcbiAgICAgIHNpemUgPSBfcmVmMi5zaXplO1xcblxcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkQXJyYXkgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Db25uZWN0ZWRGaWVsZEFycmF5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7IGRlZXBFcXVhbDogZGVlcEVxdWFsLCBnZXRJbjogZ2V0SW4sIHNpemU6IHNpemUgfSk7XFxuXFxuICB2YXIgRmllbGRBcnJheSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZEFycmF5LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGRBcnJheShwcm9wcywgY29udGV4dCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGaWVsZEFycmF5KTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGRBcnJheS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkQXJyYXkpKS5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSk7XFxuXFxuICAgICAgaWYgKCFjb250ZXh0Ll9yZWR1eEZvcm0pIHtcXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmllbGRBcnJheSBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkQXJyYXksIFt7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywgbmV4dFByb3BzLCBuZXh0U3RhdGUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxNb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xcblxcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0ucmVnaXN0ZXIodGhpcy5uYW1lLCAnRmllbGRBcnJheScsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIHdyYXBFcnJvcihfdGhpczIucHJvcHMudmFsaWRhdGUsICdfZXJyb3InKTtcXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIHdyYXBFcnJvcihfdGhpczIucHJvcHMud2FybiwgJ193YXJuaW5nJyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm5hbWUgIT09IG5leHRQcm9wcy5uYW1lKSB7XFxuICAgICAgICAgIC8vIHVucmVnaXN0ZXIgb2xkIG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgICAgICAvLyByZWdpc3RlciBuZXcgbmFtZVxcbiAgICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgbmV4dFByb3BzLm5hbWUpLCAnRmllbGRBcnJheScpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS51bnJlZ2lzdGVyKHRoaXMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0UmVuZGVyZWRDb21wb25lbnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZW5kZXJlZENvbXBvbmVudCgpIHtcXG4gICAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0KCkodGhpcy5wcm9wcy53aXRoUmVmLCAnSWYgeW91IHdhbnQgdG8gYWNjZXNzIGdldFJlbmRlcmVkQ29tcG9uZW50KCksICcgKyAneW91IG11c3Qgc3BlY2lmeSBhIHdpdGhSZWYgcHJvcCB0byBGaWVsZEFycmF5Jyk7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRSZW5kZXJlZENvbXBvbmVudCgpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3JlbmRlcicsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRmllbGRBcnJheSwgX2V4dGVuZHMoe30sIHRoaXMucHJvcHMsIHtcXG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxcbiAgICAgICAgICBzeW5jRXJyb3I6IHRoaXMuc3luY0Vycm9yLFxcbiAgICAgICAgICBzeW5jV2FybmluZzogdGhpcy5zeW5jV2FybmluZyxcXG4gICAgICAgICAgX3JlZHV4Rm9ybTogdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgIHJlZjogJ2Nvbm5lY3RlZCdcXG4gICAgICAgIH0pKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICduYW1lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgdGhpcy5wcm9wcy5uYW1lKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS52YWx1ZTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIEZpZWxkQXJyYXk7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBGaWVsZEFycmF5LnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZy5pc1JlcXVpcmVkLFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB2YWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHdhcm46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkQXJyYXkuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkQXJyYXk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGaWVsZEFycmF5KTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21hcFZhbHVlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY3JlYXRlRmllbGRBcnJheVByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzNik7XFxuXFxuXFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHByb3BzVG9Ob3RVcGRhdGVGb3IgPSBbJ19yZWR1eEZvcm0nLCAndmFsdWUnXTtcXG5cXG52YXIgY3JlYXRlQ29ubmVjdGVkRmllbGRBcnJheSA9IGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3RlZEZpZWxkQXJyYXkoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBzaXplID0gX3JlZi5zaXplO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIC8vIEZvciBhbiBhcnJheSwgdGhlIGVycm9yIGNhbiBfT05MWV8gYmUgdW5kZXIgX2Vycm9yLlxcbiAgICAvLyBUaGlzIGlzIHdoeSB0aGlzIGdldFN5bmNFcnJvciBpcyBub3QgdGhlIHNhbWUgYXMgdGhlXFxuICAgIC8vIG9uZSBpbiBGaWVsZC5cXG4gICAgcmV0dXJuIGdldEluKHN5bmNFcnJvcnMsIG5hbWUgKyAnLl9lcnJvcicpO1xcbiAgfTtcXG5cXG4gIHZhciBnZXRTeW5jV2FybmluZyA9IGZ1bmN0aW9uIGdldFN5bmNXYXJuaW5nKHN5bmNXYXJuaW5ncywgbmFtZSkge1xcbiAgICAvLyBGb3IgYW4gYXJyYXksIHRoZSB3YXJuaW5nIGNhbiBfT05MWV8gYmUgdW5kZXIgX3dhcm5pbmcuXFxuICAgIC8vIFRoaXMgaXMgd2h5IHRoaXMgZ2V0U3luY0Vycm9yIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGVcXG4gICAgLy8gb25lIGluIEZpZWxkLlxcbiAgICByZXR1cm4gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lICsgJy5fd2FybmluZycpO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZEFycmF5ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKENvbm5lY3RlZEZpZWxkQXJyYXksIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZEFycmF5KCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb25uZWN0ZWRGaWVsZEFycmF5KTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGRBcnJheS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKENvbm5lY3RlZEZpZWxkQXJyYXkpKS5jYWxsKHRoaXMpKTtcXG5cXG4gICAgICBfdGhpcy5nZXRWYWx1ZSA9IF90aGlzLmdldFZhbHVlLmJpbmQoX3RoaXMpO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGRBcnJheSwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIC8vIFVwZGF0ZSBpZiB0aGUgZWxlbWVudHMgb2YgdGhlIHZhbHVlIGFycmF5IHdhcyB1cGRhdGVkLlxcbiAgICAgICAgdmFyIHRoaXNWYWx1ZSA9IHRoaXMucHJvcHMudmFsdWU7XFxuICAgICAgICB2YXIgbmV4dFZhbHVlID0gbmV4dFByb3BzLnZhbHVlO1xcblxcbiAgICAgICAgaWYgKHRoaXNWYWx1ZSAmJiBuZXh0VmFsdWUpIHtcXG4gICAgICAgICAgaWYgKHRoaXNWYWx1ZS5sZW5ndGggIT09IG5leHRWYWx1ZS5sZW5ndGggfHwgdGhpc1ZhbHVlLmV2ZXJ5KGZ1bmN0aW9uICh2YWwpIHtcXG4gICAgICAgICAgICByZXR1cm4gbmV4dFZhbHVlLnNvbWUoZnVuY3Rpb24gKG5leHQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBkZWVwRXF1YWwodmFsLCBuZXh0KTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgfSkpIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIG5leHRQcm9wc0tleXMgPSBPYmplY3Qua2V5cyhuZXh0UHJvcHMpO1xcbiAgICAgICAgdmFyIHRoaXNQcm9wc0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BzKTtcXG4gICAgICAgIHJldHVybiBuZXh0UHJvcHNLZXlzLmxlbmd0aCAhPT0gdGhpc1Byb3BzS2V5cy5sZW5ndGggfHwgbmV4dFByb3BzS2V5cy5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgIC8vIHVzZWZ1bCB0byBkZWJ1ZyByZXJlbmRlcnNcXG4gICAgICAgICAgLy8gaWYgKCFwbGFpbi5kZWVwRXF1YWwodGhpcy5wcm9wc1sgcHJvcCBdLCBuZXh0UHJvcHNbIHByb3AgXSkpIHtcXG4gICAgICAgICAgLy8gICBjb25zb2xlLmluZm8ocHJvcCwgJ2NoYW5nZWQnLCB0aGlzLnByb3BzWyBwcm9wIF0sICc9PT4nLCBuZXh0UHJvcHNbIHByb3AgXSlcXG4gICAgICAgICAgLy8gfVxcbiAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczIucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRWYWx1ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKGluZGV4KSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZSAmJiBnZXRJbih0aGlzLnByb3BzLnZhbHVlLCBpbmRleCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzLmNvbXBvbmVudCxcXG4gICAgICAgICAgICB3aXRoUmVmID0gX3Byb3BzLndpdGhSZWYsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wcy5uYW1lLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICB2YWxpZGF0ZSA9IF9wcm9wcy52YWxpZGF0ZSxcXG4gICAgICAgICAgICB3YXJuID0gX3Byb3BzLndhcm4sXFxuICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnbmFtZScsICdfcmVkdXhGb3JtJywgJ3ZhbGlkYXRlJywgJ3dhcm4nXSk7XFxuXFxuICAgICAgICB2YXIgcHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19jcmVhdGVGaWVsZEFycmF5UHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGdldEluLCBuYW1lLCBfcmVkdXhGb3JtLmZvcm0sIF9yZWR1eEZvcm0uc2VjdGlvblByZWZpeCwgdGhpcy5nZXRWYWx1ZSwgcmVzdCk7XFxuICAgICAgICBpZiAod2l0aFJlZikge1xcbiAgICAgICAgICBwcm9wcy5yZWYgPSAncmVuZGVyZWRDb21wb25lbnQnO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShjb21wb25lbnQsIHByb3BzKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIENvbm5lY3RlZEZpZWxkQXJyYXk7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBDb25uZWN0ZWRGaWVsZEFycmF5LnByb3BUeXBlcyA9IHtcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgQ29ubmVjdGVkRmllbGRBcnJheS5jb250ZXh0VHlwZXMgPSB7XFxuICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZSA9IG93blByb3BzLm5hbWUsXFxuICAgICAgICBfb3duUHJvcHMkX3JlZHV4Rm9ybSA9IG93blByb3BzLl9yZWR1eEZvcm0sXFxuICAgICAgICBpbml0aWFsVmFsdWVzID0gX293blByb3BzJF9yZWR1eEZvcm0uaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9vd25Qcm9wcyRfcmVkdXhGb3JtLmdldEZvcm1TdGF0ZTtcXG5cXG4gICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgIHZhciBpbml0aWFsID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbC4nICsgbmFtZSkgfHwgaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgdmFyIHZhbHVlID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzLicgKyBuYW1lKTtcXG4gICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgIHZhciBzeW5jRXJyb3IgPSBnZXRTeW5jRXJyb3IoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpLCBuYW1lKTtcXG4gICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICB2YXIgcHJpc3RpbmUgPSBkZWVwRXF1YWwodmFsdWUsIGluaXRpYWwpO1xcbiAgICByZXR1cm4ge1xcbiAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lICsgJy5fZXJyb3InKSxcXG4gICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICBzdWJtaXRFcnJvcjogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RXJyb3JzLicgKyBuYW1lICsgJy5fZXJyb3InKSxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEZhaWxlZCcpLFxcbiAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgc3luY0Vycm9yOiBzeW5jRXJyb3IsXFxuICAgICAgc3luY1dhcm5pbmc6IHN5bmNXYXJuaW5nLFxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICBsZW5ndGg6IHNpemUodmFsdWUpXFxuICAgIH07XFxuICB9LCBmdW5jdGlvbiAoZGlzcGF0Y2gsIG93blByb3BzKSB7XFxuICAgIHZhciBuYW1lID0gb3duUHJvcHMubmFtZSxcXG4gICAgICAgIF9yZWR1eEZvcm0gPSBvd25Qcm9wcy5fcmVkdXhGb3JtO1xcbiAgICB2YXIgYXJyYXlJbnNlcnQgPSBfcmVkdXhGb3JtLmFycmF5SW5zZXJ0LFxcbiAgICAgICAgYXJyYXlNb3ZlID0gX3JlZHV4Rm9ybS5hcnJheU1vdmUsXFxuICAgICAgICBhcnJheVBvcCA9IF9yZWR1eEZvcm0uYXJyYXlQb3AsXFxuICAgICAgICBhcnJheVB1c2ggPSBfcmVkdXhGb3JtLmFycmF5UHVzaCxcXG4gICAgICAgIGFycmF5UmVtb3ZlID0gX3JlZHV4Rm9ybS5hcnJheVJlbW92ZSxcXG4gICAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3JlZHV4Rm9ybS5hcnJheVJlbW92ZUFsbCxcXG4gICAgICAgIGFycmF5U2hpZnQgPSBfcmVkdXhGb3JtLmFycmF5U2hpZnQsXFxuICAgICAgICBhcnJheVNwbGljZSA9IF9yZWR1eEZvcm0uYXJyYXlTcGxpY2UsXFxuICAgICAgICBhcnJheVN3YXAgPSBfcmVkdXhGb3JtLmFycmF5U3dhcCxcXG4gICAgICAgIGFycmF5VW5zaGlmdCA9IF9yZWR1eEZvcm0uYXJyYXlVbnNoaWZ0O1xcblxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgICAgYXJyYXlJbnNlcnQ6IGFycmF5SW5zZXJ0LFxcbiAgICAgIGFycmF5TW92ZTogYXJyYXlNb3ZlLFxcbiAgICAgIGFycmF5UG9wOiBhcnJheVBvcCxcXG4gICAgICBhcnJheVB1c2g6IGFycmF5UHVzaCxcXG4gICAgICBhcnJheVJlbW92ZTogYXJyYXlSZW1vdmUsXFxuICAgICAgYXJyYXlSZW1vdmVBbGw6IGFycmF5UmVtb3ZlQWxsLFxcbiAgICAgIGFycmF5U2hpZnQ6IGFycmF5U2hpZnQsXFxuICAgICAgYXJyYXlTcGxpY2U6IGFycmF5U3BsaWNlLFxcbiAgICAgIGFycmF5U3dhcDogYXJyYXlTd2FwLFxcbiAgICAgIGFycmF5VW5zaGlmdDogYXJyYXlVbnNoaWZ0XFxuICAgIH0sIGZ1bmN0aW9uIChhY3Rpb25DcmVhdG9yKSB7XFxuICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYWN0aW9uQ3JlYXRvci5iaW5kKG51bGwsIG5hbWUpLCBkaXNwYXRjaCk7XFxuICAgIH0pO1xcbiAgfSwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICByZXR1cm4gY29ubmVjdG9yKENvbm5lY3RlZEZpZWxkQXJyYXkpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdGVkRmllbGRBcnJheSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG52YXIgY3JlYXRlRmllbGRBcnJheVByb3BzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRBcnJheVByb3BzKGdldEluLCBuYW1lLCBmb3JtLCBzZWN0aW9uUHJlZml4LCBnZXRWYWx1ZSwgX3JlZikge1xcbiAgdmFyIGFycmF5SW5zZXJ0ID0gX3JlZi5hcnJheUluc2VydCxcXG4gICAgICBhcnJheU1vdmUgPSBfcmVmLmFycmF5TW92ZSxcXG4gICAgICBhcnJheVBvcCA9IF9yZWYuYXJyYXlQb3AsXFxuICAgICAgYXJyYXlQdXNoID0gX3JlZi5hcnJheVB1c2gsXFxuICAgICAgYXJyYXlSZW1vdmUgPSBfcmVmLmFycmF5UmVtb3ZlLFxcbiAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3JlZi5hcnJheVJlbW92ZUFsbCxcXG4gICAgICBhcnJheVNoaWZ0ID0gX3JlZi5hcnJheVNoaWZ0LFxcbiAgICAgIGFycmF5U3BsaWNlID0gX3JlZi5hcnJheVNwbGljZSxcXG4gICAgICBhcnJheVN3YXAgPSBfcmVmLmFycmF5U3dhcCxcXG4gICAgICBhcnJheVVuc2hpZnQgPSBfcmVmLmFycmF5VW5zaGlmdCxcXG4gICAgICBhc3luY0Vycm9yID0gX3JlZi5hc3luY0Vycm9yLFxcbiAgICAgIGRpcnR5ID0gX3JlZi5kaXJ0eSxcXG4gICAgICBsZW5ndGggPSBfcmVmLmxlbmd0aCxcXG4gICAgICBwcmlzdGluZSA9IF9yZWYucHJpc3RpbmUsXFxuICAgICAgc3VibWl0RXJyb3IgPSBfcmVmLnN1Ym1pdEVycm9yLFxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcXG4gICAgICBzdWJtaXRGYWlsZWQgPSBfcmVmLnN1Ym1pdEZhaWxlZCxcXG4gICAgICBzdWJtaXR0aW5nID0gX3JlZi5zdWJtaXR0aW5nLFxcbiAgICAgIHN5bmNFcnJvciA9IF9yZWYuc3luY0Vycm9yLFxcbiAgICAgIHN5bmNXYXJuaW5nID0gX3JlZi5zeW5jV2FybmluZyxcXG4gICAgICB2YWx1ZSA9IF9yZWYudmFsdWUsXFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWydhcnJheUluc2VydCcsICdhcnJheU1vdmUnLCAnYXJyYXlQb3AnLCAnYXJyYXlQdXNoJywgJ2FycmF5UmVtb3ZlJywgJ2FycmF5UmVtb3ZlQWxsJywgJ2FycmF5U2hpZnQnLCAnYXJyYXlTcGxpY2UnLCAnYXJyYXlTd2FwJywgJ2FycmF5VW5zaGlmdCcsICdhc3luY0Vycm9yJywgJ2RpcnR5JywgJ2xlbmd0aCcsICdwcmlzdGluZScsICdzdWJtaXRFcnJvcicsICdzdGF0ZScsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0dGluZycsICdzeW5jRXJyb3InLCAnc3luY1dhcm5pbmcnLCAndmFsdWUnLCAncHJvcHMnXSk7XFxuXFxuICB2YXIgZXJyb3IgPSBzeW5jRXJyb3IgfHwgYXN5bmNFcnJvciB8fCBzdWJtaXRFcnJvcjtcXG4gIHZhciB3YXJuaW5nID0gc3luY1dhcm5pbmc7XFxuICB2YXIgZmllbGROYW1lID0gc2VjdGlvblByZWZpeCA/IG5hbWUucmVwbGFjZShzZWN0aW9uUHJlZml4ICsgJy4nLCAnJykgOiBuYW1lO1xcbiAgdmFyIGZpbmFsUHJvcHMgPSBfZXh0ZW5kcyh7XFxuICAgIGZpZWxkczoge1xcbiAgICAgIF9pc0ZpZWxkQXJyYXk6IHRydWUsXFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFjaykge1xcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGZpZWxkTmFtZSArICdbJyArIGluZGV4ICsgJ10nLCBpbmRleCwgZmluYWxQcm9wcy5maWVsZHMpO1xcbiAgICAgICAgfSk7XFxuICAgICAgfSxcXG4gICAgICBnZXQ6IGdldFZhbHVlLFxcbiAgICAgIGdldEFsbDogZnVuY3Rpb24gZ2V0QWxsKCkge1xcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICAgIH0sXFxuICAgICAgaW5zZXJ0OiBhcnJheUluc2VydCxcXG4gICAgICBsZW5ndGg6IGxlbmd0aCxcXG4gICAgICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFjaykge1xcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCBbXSkubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZmllbGROYW1lICsgJ1snICsgaW5kZXggKyAnXScsIGluZGV4LCBmaW5hbFByb3BzLmZpZWxkcyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9LFxcbiAgICAgIG1vdmU6IGFycmF5TW92ZSxcXG4gICAgICBuYW1lOiBuYW1lLFxcbiAgICAgIHBvcDogZnVuY3Rpb24gcG9wKCkge1xcbiAgICAgICAgYXJyYXlQb3AoKTtcXG4gICAgICAgIHJldHVybiBnZXRJbih2YWx1ZSwgbGVuZ3RoIC0gMSk7XFxuICAgICAgfSxcXG4gICAgICBwdXNoOiBhcnJheVB1c2gsXFxuICAgICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2ssIGluaXRpYWwpIHtcXG4gICAgICAgIHJldHVybiAodmFsdWUgfHwgW10pLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIGl0ZW0sIGluZGV4KSB7XFxuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhhY2N1bXVsYXRvciwgZmllbGROYW1lICsgJ1snICsgaW5kZXggKyAnXScsIGluZGV4LCBmaW5hbFByb3BzLmZpZWxkcyk7XFxuICAgICAgICB9LCBpbml0aWFsKTtcXG4gICAgICB9LFxcbiAgICAgIHJlbW92ZTogYXJyYXlSZW1vdmUsXFxuICAgICAgcmVtb3ZlQWxsOiBhcnJheVJlbW92ZUFsbCxcXG4gICAgICBzaGlmdDogZnVuY3Rpb24gc2hpZnQoKSB7XFxuICAgICAgICBhcnJheVNoaWZ0KCk7XFxuICAgICAgICByZXR1cm4gZ2V0SW4odmFsdWUsIDApO1xcbiAgICAgIH0sXFxuICAgICAgc3dhcDogYXJyYXlTd2FwLFxcbiAgICAgIHVuc2hpZnQ6IGFycmF5VW5zaGlmdFxcbiAgICB9LFxcbiAgICBtZXRhOiB7XFxuICAgICAgZGlydHk6IGRpcnR5LFxcbiAgICAgIGVycm9yOiBlcnJvcixcXG4gICAgICBmb3JtOiBmb3JtLFxcbiAgICAgIHdhcm5pbmc6IHdhcm5pbmcsXFxuICAgICAgaW52YWxpZDogISFlcnJvcixcXG4gICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IHN1Ym1pdEZhaWxlZCxcXG4gICAgICB0b3VjaGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3RvdWNoZWQnKSksXFxuICAgICAgdmFsaWQ6ICFlcnJvclxcbiAgICB9XFxuICB9LCBwcm9wcywgcmVzdCk7XFxuICByZXR1cm4gZmluYWxQcm9wcztcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUZpZWxkQXJyYXlQcm9wcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcblxcbnZhciBjcmVhdGVGb3JtVmFsdWVTZWxlY3RvciA9IGZ1bmN0aW9uIGNyZWF0ZUZvcm1WYWx1ZVNlbGVjdG9yKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcblxcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaW52YXJpYW50X19fZGVmYXVsdCgpKGZvcm0sICdGb3JtIHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkJyk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICAgICAgZmllbGRzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gICAgICB9XFxuXFxuICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fX2RlZmF1bHQoKShmaWVsZHMubGVuZ3RoLCAnTm8gZmllbGRzIHNwZWNpZmllZCcpO1xcbiAgICAgIHJldHVybiBmaWVsZHMubGVuZ3RoID09PSAxID9cXG4gICAgICAvLyBvbmx5IHNlbGVjdGluZyBvbmUgZmllbGQsIHNvIHJldHVybiBpdHMgdmFsdWVcXG4gICAgICBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMuJyArIGZpZWxkc1swXSkgOlxcbiAgICAgIC8vIHNlbGVjdGluZyBtYW55IGZpZWxkcywgc28gcmV0dXJuIGFuIG9iamVjdCBvZiBmaWVsZCB2YWx1ZXNcXG4gICAgICBmaWVsZHMucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgZmllbGQpIHtcXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLnZhbHVlcy4nICsgZmllbGQpO1xcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBhY2N1bXVsYXRvciA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBmaWVsZCwgdmFsdWUpO1xcbiAgICAgIH0sIHt9KTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGb3JtVmFsdWVTZWxlY3Rvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuXFxuXFxudmFyIGNyZWF0ZVZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZVZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChjb25maWcpIHtcXG4gICAgdmFyIF9wcm9wJGdldEZvcm1TdGF0ZSRjbyA9IF9leHRlbmRzKHtcXG4gICAgICBwcm9wOiAndmFsdWVzJyxcXG4gICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICAgIH1cXG4gICAgfSwgY29uZmlnKSxcXG4gICAgICAgIGZvcm0gPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28uZm9ybSxcXG4gICAgICAgIHByb3AgPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28ucHJvcCxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9wcm9wJGdldEZvcm1TdGF0ZSRjby5nZXRGb3JtU3RhdGU7XFxuXFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X3JlZHV4X19bXFxcImFcXFwiIC8qIGNvbm5lY3QgKi9dKShmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wLCBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMnKSk7XFxuICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICByZXR1cm4ge307XFxuICAgIH0gLy8gaWdub3JlIGRpc3BhdGNoXFxuICAgICk7XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlVmFsdWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtTmFtZXMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtTmFtZXMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBrZXlzID0gX3JlZi5rZXlzO1xcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGtleXMoZ2V0Rm9ybVN0YXRlKHN0YXRlKSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybU5hbWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtVmFsdWVzID0gZnVuY3Rpb24gY3JlYXRlR2V0Rm9ybVZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtVmFsdWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1Jbml0aWFsVmFsdWVzKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLmluaXRpYWwnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtU3luY0Vycm9ycyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5zeW5jRXJyb3JzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5hc3luY0Vycm9ycycpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN5bmNXYXJuaW5ncyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1TeW5jV2FybmluZ3MoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3luY1dhcm5pbmdzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN5bmNXYXJuaW5ncyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN1Ym1pdEVycm9ycyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1TdWJtaXRFcnJvcnMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3VibWl0RXJyb3JzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN1Ym1pdEVycm9ycyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ByaXN0aW5lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNEaXJ0eSA9IGZ1bmN0aW9uIGNyZWF0ZUlzRGlydHkoc3RydWN0dXJlKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0sIGdldEZvcm1TdGF0ZSkge1xcbiAgICB2YXIgaXNQcmlzdGluZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzUHJpc3RpbmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSkoZm9ybSwgZ2V0Rm9ybVN0YXRlKTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiAhaXNQcmlzdGluZShzdGF0ZSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSXNEaXJ0eSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ZhbGlkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNJbnZhbGlkID0gZnVuY3Rpb24gY3JlYXRlSXNJbnZhbGlkKHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtLCBnZXRGb3JtU3RhdGUpIHtcXG4gICAgdmFyIGlzVmFsaWQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpKGZvcm0sIGdldEZvcm1TdGF0ZSk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gIWlzVmFsaWQoc3RhdGUpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzSW52YWxpZCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSXNTdWJtaXR0aW5nID0gZnVuY3Rpb24gY3JlYXRlSXNTdWJtaXR0aW5nKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0dGluZycpIHx8IGZhbHNlO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzU3VibWl0dGluZyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkID0gZnVuY3Rpb24gY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0U3VjY2VlZGVkJykgfHwgZmFsc2U7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVIYXNTdWJtaXRGYWlsZWQgPSBmdW5jdGlvbiBjcmVhdGVIYXNTdWJtaXRGYWlsZWQoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgICByZXR1cm4gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5zdWJtaXRGYWlsZWQnKSB8fCBmYWxzZTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVIYXNTdWJtaXRGYWlsZWQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI1MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG52YXIgRm9ybSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICBfaW5oZXJpdHMoRm9ybSwgX0NvbXBvbmVudCk7XFxuXFxuICBmdW5jdGlvbiBGb3JtKHByb3BzLCBjb250ZXh0KSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtKTtcXG5cXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZvcm0uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybSBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICB9XFxuICAgIHJldHVybiBfdGhpcztcXG4gIH1cXG5cXG4gIF9jcmVhdGVDbGFzcyhGb3JtLCBbe1xcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVySW5uZXJPblN1Ym1pdCh0aGlzLnByb3BzLm9uU3VibWl0KTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6ICdyZW5kZXInLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgnZm9ybScsIHRoaXMucHJvcHMpO1xcbiAgICB9XFxuICB9XSk7XFxuXFxuICByZXR1cm4gRm9ybTtcXG59KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuRm9ybS5wcm9wVHlwZXMgPSB7XFxuICBvblN1Ym1pdDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMuaXNSZXF1aXJlZFxcbn07XFxuRm9ybS5jb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChGb3JtKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG52YXIgRm9ybVNlY3Rpb24gPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgX2luaGVyaXRzKEZvcm1TZWN0aW9uLCBfQ29tcG9uZW50KTtcXG5cXG4gIGZ1bmN0aW9uIEZvcm1TZWN0aW9uKHByb3BzLCBjb250ZXh0KSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtU2VjdGlvbik7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGb3JtU2VjdGlvbi5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZvcm1TZWN0aW9uKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybVNlY3Rpb24gbXVzdCBiZSBpbnNpZGUgYSBjb21wb25lbnQgZGVjb3JhdGVkIHdpdGggcmVkdXhGb3JtKCknKTtcXG4gICAgfVxcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICBfY3JlYXRlQ2xhc3MoRm9ybVNlY3Rpb24sIFt7XFxuICAgIGtleTogJ2dldENoaWxkQ29udGV4dCcsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQsXFxuICAgICAgICAgIG5hbWUgPSB0aGlzLnByb3BzLm5hbWU7XFxuXFxuICAgICAgcmV0dXJuIHtcXG4gICAgICAgIF9yZWR1eEZvcm06IF9leHRlbmRzKHt9LCBjb250ZXh0Ll9yZWR1eEZvcm0sIHtcXG4gICAgICAgICAgc2VjdGlvblByZWZpeDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKVxcbiAgICAgICAgfSlcXG4gICAgICB9O1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogJ3JlbmRlcicsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgIGNoaWxkcmVuID0gX3Byb3BzLmNoaWxkcmVuLFxcbiAgICAgICAgICBuYW1lID0gX3Byb3BzLm5hbWUsXFxuICAgICAgICAgIGNvbXBvbmVudCA9IF9wcm9wcy5jb21wb25lbnQsXFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzLCBbJ2NoaWxkcmVuJywgJ25hbWUnLCAnY29tcG9uZW50J10pO1xcblxcbiAgICAgIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XFxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XFxuICAgICAgfVxcblxcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXFxuICAgICAgfSkpO1xcbiAgICB9XFxuICB9XSk7XFxuXFxuICByZXR1cm4gRm9ybVNlY3Rpb247XFxufShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbkZvcm1TZWN0aW9uLnByb3BUeXBlcyA9IHtcXG4gIG5hbWU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKVxcbn07XFxuXFxuRm9ybVNlY3Rpb24uZGVmYXVsdFByb3BzID0ge1xcbiAgY29tcG9uZW50OiAnZGl2J1xcbn07XFxuXFxuRm9ybVNlY3Rpb24uY2hpbGRDb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LmlzUmVxdWlyZWRcXG59O1xcblxcbkZvcm1TZWN0aW9uLmNvbnRleHRUeXBlcyA9IHtcXG4gIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKEZvcm1TZWN0aW9uKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcblxcbnZhciBhbnkgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYW55LFxcbiAgICBib29sID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgIGZ1bmMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgc2hhcGUgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc2hhcGUsXFxuICAgIHN0cmluZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcsXFxuICAgIG9uZU9mVHlwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUsXFxuICAgIG9iamVjdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3Q7XFxuXFxuXFxudmFyIHByb3BUeXBlcyA9IHtcXG4gIC8vIFN0YXRlOlxcbiAgYW55VG91Y2hlZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFueSBvZiB0aGUgZmllbGRzIGhhdmUgYmVlbiBtYXJrZWQgYXMgdG91Y2hlZFxcbiAgYXN5bmNWYWxpZGF0aW5nOiBvbmVPZlR5cGUoW2Jvb2wsIHN0cmluZ10pLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgYXN5bmMgdmFsaWRhdGlvbiBpcyBydW5uaW5nLCBhIHN0cmluZyBpZiBhIGZpZWxkIHRyaWdnZXJlZCBhc3luYyB2YWxpZGF0aW9uXFxuICBkaXJ0eTogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFueSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIGluaXRpYWxWYWx1ZXNcXG4gIGVycm9yOiBhbnksIC8vIGZvcm0td2lkZSBlcnJvciBmcm9tICdfZXJyb3InIGtleSBpbiB2YWxpZGF0aW9uIHJlc3VsdFxcbiAgZm9ybTogc3RyaW5nLmlzUmVxdWlyZWQsIC8vIHRoZSBuYW1lIG9mIHRoZSBmb3JtXFxuICBpbnZhbGlkOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlcmUgYXJlIGFueSB2YWxpZGF0aW9uIGVycm9yc1xcbiAgaW5pdGlhbGl6ZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSBoYXMgYmVlbiBpbml0aWFsaXplZFxcbiAgaW5pdGlhbFZhbHVlczogb2JqZWN0LCAvLyB0aGUgaW5pdGlhbFZhbHVlcyBvYmplY3QgcGFzc2VkIHRvIHJlZHV4Rm9ybVxcbiAgcHJpc3RpbmU6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyBpbml0aWFsVmFsdWVzXFxuICBwdXJlOiBib29sLmlzUmVxdWlyZWQsIC8vIGlmIHRydWUsIGltcGxlbWVudHMgc2hvdWxkQ29tcG9uZW50VXBkYXRlXFxuICBzdWJtaXR0aW5nOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlIGZvcm0gaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3VibWl0dGVkXFxuICBzdWJtaXRGYWlsZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSB3YXMgc3VibWl0dGVkIGFuZCBmYWlsZWQgZm9yIGFueSByZWFzb25cXG4gIHN1Ym1pdFN1Y2NlZWRlZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZSBmb3JtIHdhcyBzdWNjZXNzZnVsbHkgc3VibWl0dGVkXFxuICB2YWxpZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZXJlIGFyZSBubyB2YWxpZGF0aW9uIGVycm9yc1xcbiAgd2FybmluZzogYW55LCAvLyBmb3JtLXdpZGUgd2FybmluZyBmcm9tICdfd2FybmluZycga2V5IGluIHZhbGlkYXRpb24gcmVzdWx0XFxuICAvLyBBY3Rpb25zOlxcbiAgYXJyYXk6IHNoYXBlKHtcXG4gICAgaW5zZXJ0OiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIGluc2VydCBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gICAgbW92ZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBtb3ZlIGEgdmFsdWUgd2l0aGluIGFuIGFycmF5IGZpZWxkXFxuICAgIHBvcDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBwb3AgYSB2YWx1ZSBvZmYgb2YgYW4gYXJyYXkgZmllbGRcXG4gICAgcHVzaDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBwdXNoIGEgdmFsdWUgb250byBhbiBhcnJheSBmaWVsZFxcbiAgICByZW1vdmU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGEgdmFsdWUgZnJvbSBhbiBhcnJheSBmaWVsZFxcbiAgICByZW1vdmVBbGw6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGFsbCB0aGUgdmFsdWVzIGZyb20gYW4gYXJyYXkgZmllbGRcXG4gICAgc2hpZnQ6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gc2hpZnQgYSB2YWx1ZSBvdXQgb2YgYW4gYXJyYXkgZmllbGRcXG4gICAgc3BsaWNlOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIHNwbGljZSBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gICAgc3dhcDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzd2FwIHZhbHVlcyBpbiBhbiBhcnJheSBmaWVsZFxcbiAgICB1bnNoaWZ0OiBmdW5jLmlzUmVxdWlyZWQgLy8gZnVuY3Rpb24gdG8gdW5zaGlmdCBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gIH0pLFxcbiAgYXN5bmNWYWxpZGF0ZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byB0cmlnZ2VyIGFzeW5jIHZhbGlkYXRpb25cXG4gIGF1dG9maWxsOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBzZXQgYSB2YWx1ZSBvZiBhIGZpZWxkIGFuZCBtYXJrIGl0IGFzIGF1dG9maWxsZWRcXG4gIGJsdXI6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIG1hcmsgYSBmaWVsZCBhcyBibHVycmVkXFxuICBjaGFuZ2U6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBmaWVsZFxcbiAgY2xlYXJBc3luY0Vycm9yOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBjbGVhciB0aGUgYXN5bmMgZXJyb3Igb2YgYSBmaWVsZFxcbiAgZGVzdHJveTogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gZGVzdHJveSB0aGUgZm9ybSdzIGRhdGEgaW4gUmVkdXhcXG4gIGRpc3BhdGNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIHRoZSBSZWR1eCBkaXNwYXRjaCBhY3Rpb25cXG4gIGhhbmRsZVN1Ym1pdDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzdWJtaXQgdGhlIGZvcm1cXG4gIGluaXRpYWxpemU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGluaXRpYWxpemUgZm9ybSBkYXRhXFxuICByZXNldDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gcmVzZXQgdGhlIGZvcm0gZGF0YSB0byBwcmV2aW91c2x5IGluaXRpYWxpemVkIHZhbHVlc1xcbiAgdG91Y2g6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIG1hcmsgZmllbGRzIGFzIHRvdWNoZWRcXG4gIHN1Ym1pdDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gdHJpZ2dlciBhIHN1Ym1pc3Npb24gb2YgdGhlIHNwZWNpZmllZCBmb3JtXFxuICB1bnRvdWNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBtYXJrIGZpZWxkcyBhcyB1bnRvdWNoZWRcXG5cXG4gIC8vIHRyaWdnZXJTdWJtaXRcXG4gIHRyaWdnZXJTdWJtaXQ6IGJvb2wsIC8vIGlmIHRydWUsIHN1Ym1pdHMgdGhlIGZvcm0gb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1xcbiAgY2xlYXJTdWJtaXQ6IGZ1bmMuaXNSZXF1aXJlZCAvLyBjYWxsZWQgYmVmb3JlIGEgdHJpZ2dlcmVkIHN1Ym1pdCwgYnkgZGVmYXVsdCBjbGVhcnMgdHJpZ2dlclN1Ym1pdFxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAocHJvcFR5cGVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBwbGF0Zm9ybTY7XFxuXFxuLyoqKi8gfSksXFxuLyogMjU1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XFxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxcbiAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xcbiAgICB9XFxuICAgIHJldHVybiB0O1xcbn07XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciB1dWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTYpO1xcbnZhciByZWR1eF9mb3JtXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcXG52YXIgaGVscF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgVGV4dElucHV0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFRleHRJbnB1dCwgX3N1cGVyKTtcXG4gICAgZnVuY3Rpb24gVGV4dElucHV0KHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnJlbmRlclRleHQgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5wcm9wcywgbGFiZWwgPSBfYS5sYWJlbCwgZGlzYWJsZWQgPSBfYS5kaXNhYmxlZCwgYXV0b2ZvY3VzID0gX2EuYXV0b2ZvY3VzLCBoZWxwID0gX2EuaGVscCwgY29udGFpbmVyQ2xhc3MgPSBfYS5jb250YWluZXJDbGFzcywgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3MsIHR5cGUgPSBfYS50eXBlLCBzdGVwID0gX2Euc3RlcCwgcmFuZG9tR2VuZXJhdG9yID0gX2EucmFuZG9tR2VuZXJhdG9yLCBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLCBjb2xsYXBzZUVycm9yU3BhY2UgPSBfYS5jb2xsYXBzZUVycm9yU3BhY2U7XFxuICAgICAgICAgICAgdmFyIGlucHV0ID0gZmllbGQuaW5wdXQsIG1ldGEgPSBmaWVsZC5tZXRhO1xcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQnOiBtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yXFxuICAgICAgICAgICAgICAgIH0pIH0sXFxuICAgICAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgICAgICBoZWxwICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoaGVscF8xLmRlZmF1bHQsIHsgdGV4dDogaGVscCB9KSkgOiBudWxsLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJpbnB1dFxcXCIsIF9fYXNzaWduKHt9LCBpbnB1dCwgeyBrZXk6IGlucHV0Lm5hbWUsIHR5cGU6IHR5cGUgfHwgJ3RleHQnLCBzdGVwOiAhdHlwZSB8fCB0eXBlICE9PSAnbnVtYmVyJyA/IHVuZGVmaW5lZCA6IHN0ZXAsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgZGlzYWJsZWQ6IGRpc2FibGVkLCBhdXRvRm9jdXM6IGF1dG9mb2N1cywgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWNvbnRyb2wgaW5wdXQtYmxvY2snLCBpbnB1dENsYXNzLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2J0bi1wcmVmaXgnOiByYW5kb21HZW5lcmF0b3JcXG4gICAgICAgICAgICAgICAgICAgIH0pIH0pKSxcXG4gICAgICAgICAgICAgICAgcmFuZG9tR2VuZXJhdG9yID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogXFxcImJ0biBidG4taW5mbyBpbnB1dC1zdWZmaXhcXFwiLCBvbkNsaWNrOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gX3RoaXMuZ2VuZXJhdGVDbGllbnRTZWNyZXQoZmllbGQpOyB9IH0sXFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJmYXMgZmEtcmFuZG9tXFxcIiB9KSkpIDogbnVsbCxcXG4gICAgICAgICAgICAgICAgKG1ldGEudG91Y2hlZCAmJiAhIW1ldGEuZXJyb3IpID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwicFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidmFsaWRhdGlvbi1lcnJvci1tZXNzYWdlXFxcIiB9LCBtZXRhLmVycm9yKSA6IChjb2xsYXBzZUVycm9yU3BhY2UgPyBudWxsIDogUmVhY3QuY3JlYXRlRWxlbWVudChcXFwicFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidmFsaWRhdGlvbi1lcnJvci1tZXNzYWdlXFxcIiB9LCBcXFwiXFxcXHUwMEEwXFxcIikpKSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuZ2VuZXJhdGVDbGllbnRTZWNyZXQgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICBmaWVsZC5pbnB1dC5vbkNoYW5nZSh1dWlkLnYxKCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5zdGF0ZSA9IHt9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFRleHRJbnB1dC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgbmFtZSA9IF9hLm5hbWUsIGxhYmVsID0gX2EubGFiZWwsIGZvcm1hdCA9IF9hLmZvcm1hdCwgbm9ybWFsaXplID0gX2Eubm9ybWFsaXplLCBwYXJzZSA9IF9hLnBhcnNlLCB2YWxpZGF0ZSA9IF9hLnZhbGlkYXRlLCB3YXJuID0gX2Eud2FybjtcXG4gICAgICAgIHZhciBiYXNlRmllbGRQcm9wcyA9IHtcXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxcbiAgICAgICAgICAgIGZvcm1hdDogZm9ybWF0LFxcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogbm9ybWFsaXplLFxcbiAgICAgICAgICAgIHBhcnNlOiBwYXJzZSxcXG4gICAgICAgICAgICB2YWxpZGF0ZTogdmFsaWRhdGUsXFxuICAgICAgICAgICAgd2Fybjogd2FyblxcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZCwgX19hc3NpZ24oe30sIGJhc2VGaWVsZFByb3BzLCB7IGNvbXBvbmVudDogdGhpcy5yZW5kZXJUZXh0IH0pKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIFRleHRJbnB1dDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFRleHRJbnB1dDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHYxID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTcpO1xcbnZhciB2NCA9IF9fd2VicGFja19yZXF1aXJlX18oMjU4KTtcXG5cXG52YXIgdXVpZCA9IHY0O1xcbnV1aWQudjEgPSB2MTtcXG51dWlkLnY0ID0gdjQ7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB1dWlkO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI1NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG52YXIgcm5nID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nik7XFxudmFyIGJ5dGVzVG9VdWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nyk7XFxuXFxuLy8gKipgdjEoKWAgLSBHZW5lcmF0ZSB0aW1lLWJhc2VkIFVVSUQqKlxcbi8vXFxuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcXG4vLyBhbmQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3V1aWQuaHRtbFxcblxcbnZhciBfbm9kZUlkO1xcbnZhciBfY2xvY2tzZXE7XFxuXFxuLy8gUHJldmlvdXMgdXVpZCBjcmVhdGlvbiB0aW1lXFxudmFyIF9sYXN0TVNlY3MgPSAwO1xcbnZhciBfbGFzdE5TZWNzID0gMDtcXG5cXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Jyb29mYS9ub2RlLXV1aWQgZm9yIEFQSSBkZXRhaWxzXFxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcXG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xcbiAgdmFyIGIgPSBidWYgfHwgW107XFxuXFxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcXG4gIHZhciBub2RlID0gb3B0aW9ucy5ub2RlIHx8IF9ub2RlSWQ7XFxuICB2YXIgY2xvY2tzZXEgPSBvcHRpb25zLmNsb2Nrc2VxICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmNsb2Nrc2VxIDogX2Nsb2Nrc2VxO1xcblxcbiAgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XFxuICAvLyBzcGVjaWZpZWQuICBXZSBkbyB0aGlzIGxhemlseSB0byBtaW5pbWl6ZSBpc3N1ZXMgcmVsYXRlZCB0byBpbnN1ZmZpY2llbnRcXG4gIC8vIHN5c3RlbSBlbnRyb3B5LiAgU2VlICMxODlcXG4gIGlmIChub2RlID09IG51bGwgfHwgY2xvY2tzZXEgPT0gbnVsbCkge1xcbiAgICB2YXIgc2VlZEJ5dGVzID0gcm5nKCk7XFxuICAgIGlmIChub2RlID09IG51bGwpIHtcXG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcXG4gICAgICBub2RlID0gX25vZGVJZCA9IFtcXG4gICAgICAgIHNlZWRCeXRlc1swXSB8IDB4MDEsXFxuICAgICAgICBzZWVkQnl0ZXNbMV0sIHNlZWRCeXRlc1syXSwgc2VlZEJ5dGVzWzNdLCBzZWVkQnl0ZXNbNF0sIHNlZWRCeXRlc1s1XVxcbiAgICAgIF07XFxuICAgIH1cXG4gICAgaWYgKGNsb2Nrc2VxID09IG51bGwpIHtcXG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcXG4gICAgfVxcbiAgfVxcblxcbiAgLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcXG4gIC8vICgxNTgyLTEwLTE1IDAwOjAwKS4gIEpTTnVtYmVycyBhcmVuJ3QgcHJlY2lzZSBlbm91Z2ggZm9yIHRoaXMsIHNvXFxuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXFxuICB2YXIgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogbmV3IERhdGUoKS5nZXRUaW1lKCk7XFxuXFxuICAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXFxuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xcbiAgdmFyIG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxO1xcblxcbiAgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxcbiAgdmFyIGR0ID0gKG1zZWNzIC0gX2xhc3RNU2VjcykgKyAobnNlY3MgLSBfbGFzdE5TZWNzKS8xMDAwMDtcXG5cXG4gIC8vIFBlciA0LjIuMS4yLCBCdW1wIGNsb2Nrc2VxIG9uIGNsb2NrIHJlZ3Jlc3Npb25cXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XFxuICAgIGNsb2Nrc2VxID0gY2xvY2tzZXEgKyAxICYgMHgzZmZmO1xcbiAgfVxcblxcbiAgLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcXG4gIC8vIHRpbWUgaW50ZXJ2YWxcXG4gIGlmICgoZHQgPCAwIHx8IG1zZWNzID4gX2xhc3RNU2VjcykgJiYgb3B0aW9ucy5uc2VjcyA9PT0gdW5kZWZpbmVkKSB7XFxuICAgIG5zZWNzID0gMDtcXG4gIH1cXG5cXG4gIC8vIFBlciA0LjIuMS4yIFRocm93IGVycm9yIGlmIHRvbyBtYW55IHV1aWRzIGFyZSByZXF1ZXN0ZWRcXG4gIGlmIChuc2VjcyA+PSAxMDAwMCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3V1aWQudjEoKTogQ2FuXFxcXCd0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlYycpO1xcbiAgfVxcblxcbiAgX2xhc3RNU2VjcyA9IG1zZWNzO1xcbiAgX2xhc3ROU2VjcyA9IG5zZWNzO1xcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7XFxuXFxuICAvLyBQZXIgNC4xLjQgLSBDb252ZXJ0IGZyb20gdW5peCBlcG9jaCB0byBHcmVnb3JpYW4gZXBvY2hcXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwO1xcblxcbiAgLy8gYHRpbWVfbG93YFxcbiAgdmFyIHRsID0gKChtc2VjcyAmIDB4ZmZmZmZmZikgKiAxMDAwMCArIG5zZWNzKSAlIDB4MTAwMDAwMDAwO1xcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcXG4gIGJbaSsrXSA9IHRsID4+PiAxNiAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCA+Pj4gOCAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCAmIDB4ZmY7XFxuXFxuICAvLyBgdGltZV9taWRgXFxuICB2YXIgdG1oID0gKG1zZWNzIC8gMHgxMDAwMDAwMDAgKiAxMDAwMCkgJiAweGZmZmZmZmY7XFxuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xcbiAgYltpKytdID0gdG1oICYgMHhmZjtcXG5cXG4gIC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXFxuICBiW2krK10gPSB0bWggPj4+IDI0ICYgMHhmIHwgMHgxMDsgLy8gaW5jbHVkZSB2ZXJzaW9uXFxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjtcXG5cXG4gIC8vIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYCAoUGVyIDQuMi4yIC0gaW5jbHVkZSB2YXJpYW50KVxcbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwO1xcblxcbiAgLy8gYGNsb2NrX3NlcV9sb3dgXFxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7XFxuXFxuICAvLyBgbm9kZWBcXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgNjsgKytuKSB7XFxuICAgIGJbaSArIG5dID0gbm9kZVtuXTtcXG4gIH1cXG5cXG4gIHJldHVybiBidWYgPyBidWYgOiBieXRlc1RvVXVpZChiKTtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB2MTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHJuZyA9IF9fd2VicGFja19yZXF1aXJlX18oODYpO1xcbnZhciBieXRlc1RvVXVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oODcpO1xcblxcbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcXG5cXG4gIGlmICh0eXBlb2Yob3B0aW9ucykgPT0gJ3N0cmluZycpIHtcXG4gICAgYnVmID0gb3B0aW9ucyA9PT0gJ2JpbmFyeScgPyBuZXcgQXJyYXkoMTYpIDogbnVsbDtcXG4gICAgb3B0aW9ucyA9IG51bGw7XFxuICB9XFxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcXG5cXG4gIHZhciBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcXG5cXG4gIC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcXG4gIHJuZHNbNl0gPSAocm5kc1s2XSAmIDB4MGYpIHwgMHg0MDtcXG4gIHJuZHNbOF0gPSAocm5kc1s4XSAmIDB4M2YpIHwgMHg4MDtcXG5cXG4gIC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxcbiAgaWYgKGJ1Zikge1xcbiAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgMTY7ICsraWkpIHtcXG4gICAgICBidWZbaSArIGlpXSA9IHJuZHNbaWldO1xcbiAgICB9XFxuICB9XFxuXFxuICByZXR1cm4gYnVmIHx8IGJ5dGVzVG9VdWlkKHJuZHMpO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IHY0O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI1OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XFxuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcXG4gICAgICAgICAgICB0W3BdID0gc1twXTtcXG4gICAgfVxcbiAgICByZXR1cm4gdDtcXG59O1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgcmVkdXhfZm9ybV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgaGVscF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XFxudmFyIFNlbGVjdElucHV0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFNlbGVjdElucHV0LCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBTZWxlY3RJbnB1dChwcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5yZW5kZXJTZWxlY3QgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5wcm9wcywgbGFiZWwgPSBfYS5sYWJlbCwgb3B0aW9ucyA9IF9hLm9wdGlvbnMsIGRpc2FibGVkID0gX2EuZGlzYWJsZWQsIGhlbHAgPSBfYS5oZWxwLCBjb250YWluZXJDbGFzcyA9IF9hLmNvbnRhaW5lckNsYXNzLCBpbnB1dENsYXNzID0gX2EuaW5wdXRDbGFzcywgaGlkZUVtcHR5T3B0aW9uID0gX2EuaGlkZUVtcHR5T3B0aW9uLCBjb2xsYXBzZUVycm9yU3BhY2UgPSBfYS5jb2xsYXBzZUVycm9yU3BhY2U7XFxuICAgICAgICAgICAgdmFyIGlucHV0ID0gZmllbGQuaW5wdXQsIG1ldGEgPSBmaWVsZC5tZXRhO1xcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQnOiBtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yXFxuICAgICAgICAgICAgICAgIH0pIH0sXFxuICAgICAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgICAgICBoZWxwICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoaGVscF8xLmRlZmF1bHQsIHsgdGV4dDogaGVscCB9KSkgOiBudWxsLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzZWxlY3RcXFwiLCBfX2Fzc2lnbih7fSwgaW5wdXQsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWNvbnRyb2wnLCBpbnB1dENsYXNzKSwgZGlzYWJsZWQ6IGRpc2FibGVkIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgaGlkZUVtcHR5T3B0aW9uID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcIm9wdGlvblxcXCIsIHsgdmFsdWU6IFxcXCJcXFwiIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdCwgaWR4KSB7IHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJvcHRpb25cXFwiLCB7IGtleTogaWR4LCB2YWx1ZTogb3B0LnZhbHVlLCBkaXNhYmxlZDogb3B0LmRpc2FibGVkIH0sIG9wdC5sYWJlbCB8fCBvcHQudmFsdWUpOyB9KSksXFxuICAgICAgICAgICAgICAgIChtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yKSA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgbWV0YS5lcnJvcikgOiAoY29sbGFwc2VFcnJvclNwYWNlID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgXFxcIlxcXFx1MDBBMFxcXCIpKSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0ge307XFxuICAgICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG4gICAgU2VsZWN0SW5wdXQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgIHZhciBfYSA9IHRoaXMucHJvcHMsIG9wdGlvbnMgPSBfYS5vcHRpb25zLCBuYW1lID0gX2EubmFtZSwgZm9ybWF0ID0gX2EuZm9ybWF0LCBub3JtYWxpemUgPSBfYS5ub3JtYWxpemUsIHBhcnNlID0gX2EucGFyc2UsIHZhbGlkYXRlID0gX2EudmFsaWRhdGUsIHdhcm4gPSBfYS53YXJuLCBjb250YWluZXJDbGFzcyA9IF9hLmNvbnRhaW5lckNsYXNzLCBoZWxwID0gX2EuaGVscCwgbGFiZWwgPSBfYS5sYWJlbCwgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3M7XFxuICAgICAgICB2YXIgYmFzZUZpZWxkUHJvcHMgPSB7XFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcXG4gICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcXG4gICAgICAgICAgICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBwYXJzZTogcGFyc2UsXFxuICAgICAgICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlLFxcbiAgICAgICAgICAgIHdhcm46IHdhcm5cXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZCwgX19hc3NpZ24oe30sIGJhc2VGaWVsZFByb3BzLCB7IGNvbXBvbmVudDogdGhpcy5yZW5kZXJTZWxlY3QgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1ncm91cCcsIGNvbnRhaW5lckNsYXNzKSB9LFxcbiAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICBsYWJlbCxcXG4gICAgICAgICAgICAgICAgaGVscCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KGhlbHBfMS5kZWZhdWx0LCB7IHRleHQ6IGhlbHAgfSkpIDogbnVsbCxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzZWxlY3RcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1jb250cm9sJywgaW5wdXRDbGFzcyksIGRpc2FibGVkOiB0cnVlIH0pKSk7XFxuICAgIH07XFxuICAgIHJldHVybiBTZWxlY3RJbnB1dDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFNlbGVjdElucHV0O1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI2MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciBjbGFzc05hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XFxudmFyIHNwaW5uZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYxKTtcXG52YXIgVG9nZ2xlUGFuZWwgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xcbiAgICBfX2V4dGVuZHMoVG9nZ2xlUGFuZWwsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFRvZ2dsZVBhbmVsKHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnRvZ2dsZVBhbmVsQ29udGVudCA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy50b2dnbGFibGUgIT09IGZhbHNlKSB7XFxuICAgICAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcXG4gICAgICAgICAgICAgICAgICAgIG9wZW5lZDogIV90aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMudG9nZ2xlQ2FsbGJhY2spIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcm9wcy50b2dnbGVDYWxsYmFjayhfdGhpcy5zdGF0ZS5vcGVuZWQpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7XFxuICAgICAgICAgICAgb3BlbmVkOiBfdGhpcy5wcm9wcy5kZWZhdWx0T3BlbmVkXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFRvZ2dsZVBhbmVsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgdGl0bGVTcGlubmVyID0gdGhpcy5wcm9wcy5zaG93U3Bpbm5lciA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInNwaW5uZXItY29udGFpbmVyXFxcIiB9LFxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoc3Bpbm5lcl8xLmRlZmF1bHQsIG51bGwpKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIGxDdXN0b21Db250cm9scyA9IHRoaXMucHJvcHMubGVmdEN1c3RvbUNvbnRyb2xzID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtaGVhZGluZy1jb250cm9sc1xcXCIgfSwgdGhpcy5wcm9wcy5sZWZ0Q3VzdG9tQ29udHJvbHMpKSA6IG51bGw7XFxuICAgICAgICB2YXIgckN1c3RvbUNvbnRyb2xzID0gdGhpcy5wcm9wcy5yaWdodEN1c3RvbUNvbnRyb2xzID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtaGVhZGluZy1jb250cm9sc1xcXCIsIHN0eWxlOiB7IHJpZ2h0OiAwIH0gfSwgdGhpcy5wcm9wcy5yaWdodEN1c3RvbUNvbnRyb2xzKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIGNhbmNlbEJ0biA9ICh0aGlzLnByb3BzLmNhbmNlbEJ0biAmJiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5sYWJlbCAmJiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5hY3Rpb24pID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnYnRuJywgdGhpcy5wcm9wcy5jYW5jZWxCdG4uY3NzQ2xhc3MsIHtcXG4gICAgICAgICAgICAgICAgJ2J0bi1mb250IGJ0bi10cmFucyc6ICF0aGlzLnByb3BzLmNhbmNlbEJ0bi5jc3NDbGFzc1xcbiAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5hY3Rpb24gfSwgdGhpcy5wcm9wcy5jYW5jZWxCdG4ubGFiZWwpKSA6IG51bGw7XFxuICAgICAgICB2YXIgc3VibWl0QnRuID0gKHRoaXMucHJvcHMuc3VibWl0QnRuICYmIHRoaXMucHJvcHMuc3VibWl0QnRuLmxhYmVsICYmIHRoaXMucHJvcHMuc3VibWl0QnRuLmFjdGlvbikgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiYnV0dG9uXFxcIiwgeyB0eXBlOiBcXFwiYnV0dG9uXFxcIiwgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdidG4gcHVsbC1yaWdodCcsIHRoaXMucHJvcHMuc3VibWl0QnRuLmNzc0NsYXNzLCB7XFxuICAgICAgICAgICAgICAgICdidG4tc3VjY2Vzcyc6ICF0aGlzLnByb3BzLnN1Ym1pdEJ0bi5jc3NDbGFzc1xcbiAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnByb3BzLnN1Ym1pdEJ0bi5hY3Rpb24gfSwgdGhpcy5wcm9wcy5zdWJtaXRCdG4ubGFiZWwpKSA6IG51bGw7XFxuICAgICAgICB2YXIgcGFuZWxGb290ZXIgPSAoY2FuY2VsQnRuIHx8IHN1Ym1pdEJ0bikgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJwYW5lbC1mb290ZXJcXFwiIH0sXFxuICAgICAgICAgICAgY2FuY2VsQnRuLFxcbiAgICAgICAgICAgIHN1Ym1pdEJ0bikpIDogbnVsbDtcXG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0XFxcIiwgc3R5bGU6IHRoaXMucHJvcHMuY3VzdG9tU3R5bGUgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcyhcXFwicGFuZWwtaGVhZGluZyBcXFwiICsgdGhpcy5wcm9wcy5oZWFkZXJDdXN0b21DU1MsIHtcXG4gICAgICAgICAgICAgICAgICAgICdjbGljay1wb2ludGVyJzogdGhpcy5wcm9wcy50b2dnbGFibGUgIT09IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgJ2hpZGRlbic6ICEhdGhpcy5wcm9wcy5oaWRlVGl0bGVcXG4gICAgICAgICAgICAgICAgfSksIG9uQ2xpY2s6IHRoaXMudG9nZ2xlUGFuZWxDb250ZW50IH0sXFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImgzXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ3BhbmVsLXRpdGxlJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdoYXMtc3Bpbm5lcic6IHRoaXMucHJvcHMuc2hvd1NwaW5uZXJcXG4gICAgICAgICAgICAgICAgICAgIH0pIH0sIHRoaXMucHJvcHMucGFuZWxUaXRsZSksXFxuICAgICAgICAgICAgICAgIHRpdGxlU3Bpbm5lcixcXG4gICAgICAgICAgICAgICAgbEN1c3RvbUNvbnRyb2xzLFxcbiAgICAgICAgICAgICAgICByQ3VzdG9tQ29udHJvbHMsXFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdhY3Rpb25zJywgeyAnaGlkZGVuJzogdGhpcy5wcm9wcy50b2dnbGFibGUgPT09IGZhbHNlIH0pIH0sXFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2ZhcycsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZXZyb24tZG93bic6ICF0aGlzLnN0YXRlLm9wZW5lZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZXZyb24tdXAnOiB0aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIH0pKSksXFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ3BhbmVsLWJvZHknLCB7XFxuICAgICAgICAgICAgICAgICAgICAnaGlkZGVuJzogIXRoaXMuc3RhdGUub3BlbmVkXFxuICAgICAgICAgICAgICAgIH0pIH0sIHRoaXMucHJvcHMuY2hpbGRyZW4pLFxcbiAgICAgICAgICAgIHBhbmVsRm9vdGVyKSk7XFxuICAgIH07XFxuICAgIFRvZ2dsZVBhbmVsLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gKG5leHRQcm9wcykge1xcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVmYXVsdE9wZW5lZCAhPT0gbmV4dFByb3BzLmRlZmF1bHRPcGVuZWQpIHtcXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcXG4gICAgICAgICAgICAgICAgb3BlbmVkOiBuZXh0UHJvcHMuZGVmYXVsdE9wZW5lZFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9O1xcbiAgICByZXR1cm4gVG9nZ2xlUGFuZWw7XFxufShSZWFjdC5Db21wb25lbnQpKTtcXG5leHBvcnRzLmRlZmF1bHQgPSBUb2dnbGVQYW5lbDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XFxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcXG4gICAgfTtcXG59KSgpO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgc3Bpbm5lcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjIpO1xcbnZhciBTcGlubmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFNwaW5uZXIsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFNwaW5uZXIocHJvcHMpIHtcXG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgfVxcbiAgICBTcGlubmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX2EgPSB0aGlzLnByb3BzLCB0b3AgPSBfYS50b3AsIGJvdHRvbSA9IF9hLmJvdHRvbSwgcmlnaHQgPSBfYS5yaWdodCwgbGVmdCA9IF9hLmxlZnQsIHNpemUgPSBfYS5zaXplO1xcbiAgICAgICAgdmFyIHNwaW5uZXJTdHlsZSA9IHtcXG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcXG4gICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxcbiAgICAgICAgICAgIG1hcmdpbjogJ2F1dG8nLFxcbiAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXFxuICAgICAgICAgICAgdG9wOiB0b3AsXFxuICAgICAgICAgICAgYm90dG9tOiBib3R0b20sXFxuICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0LFxcbiAgICAgICAgICAgIGxlZnQ6IGxlZnRcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiAnc3Bpbm5lcicsIHN0eWxlOiBzcGlubmVyU3R5bGUgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJpbWdcXFwiLCB7IHNyYzogc3Bpbm5lcl8xLnNwaW5uZXIsIGFsdDogJ0xvYWRpbmcuLi4nLCB3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IDMyLCBoZWlnaHQ6IHRoaXMucHJvcHMuc2l6ZSB8fCAzMiB9KSkpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gU3Bpbm5lcjtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFNwaW5uZXI7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbmV4cG9ydHMuc3Bpbm5lciA9ICdkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhRQUJBQVBJQUFQeWxiZjJtYnYyNmovM09yLzdpMFA3dDR2MjdrQUFBQUNIL0MwNUZWRk5EUVZCRk1pNHdBd0VBQUFBaC9ob2lRM0psWVhSbFpDQjNhWFJvSUVOb2FXMXdiSGt1WTI5dElnQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NrbXF2Zmlxd2J2L25pS01aR21XUzZabUcraCs0aW1iNldvVDdhdkhjMS9mcXB6T3hldkpma0NNY0FnREdIMktaQkRBZkJXZnFLaFVTYTJDcnRnUmNvdnJla1BPTUUxTHJpelA0UEI0Ky9iR3NYTnB2WHAvNXBON1RIMUdmMENCUTROUUFHMFdoenRwYWlTRk40NVdrSkVDa3phVlJKZVJtaXVjWDU1cW9GTm5UWmlTYkcyaXFhcVpFN0t6dExXMnQ3aTBCYnU4dmI2OXVRd0J3OFRGeHNVTHY4cS93UXZIejhmSnk5TUZ6UXJRMk1QUzFNcldBTm5ZMjl5KzN1RFE0dU84NWViUkN1bk0xdXp0QU8vazhmTEk3dlhxOS9qYSt2dXE5Zk9IN3QwNmZ3RUtwanRJRU9BK2h2Z1Vqb01vVHlJM2l1d3NVc05vVG5yak5JN2dQQzREbVUxa3Q0RVJ2YWxjeWJKbGc0QzdITmFUYVpEbVFub3diVTdVZVJGblFKNGJnWDcwK1pEb1RLRWpqZGFFS1ZEcFRhWklUenJkQ1hWcVQ2dEJxMWJGT2xScnpxand2UDRFYTA5c1VhNUp6UjVGZTFKdFRiWmh2MjUxKy9RcjNMSnk3ZEtscWpmdjJMbCtpMjUxU2JpdzRRZ0pBQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTbG1xdmZncXdydi9uaktNWkdtV1M2Wm1HK2grNGltYjZXb1g3YXZIYzEvZnFwek94ZXZKZmtDTWNBZ0RHSDJLWkJEQWZCV2ZxS2hVU2EyQ3J0Z1Jjb3ZyZWtQT01FMUxyaXpQNFBCNCsvYkdzWE5wdlhwLzVwTjdUSDFHZjBDQlE0TlFBRzBXaHp0cGFpU0ZONDVXa0pFRGt6YVZSSmVSbWl1Y1g1NXFvRk5uVFppU2JHMmlxYXFaRTdLenRMVzJ0N2kwakc2NUN3Sy93TUhDd2FZc3ZRckR5Y1BGWE1mS3o3L01Hc2NBME0vU2pkVFd5dGk4enR2THJHVFUxZURDM1dYZjVzRG81T3ZFNG5UYTc5SHhldlAwN2Zqdit1cjg5b0QycmV2WGkxNjlSYnZjR1NTWXk2QUFocmdjUXJ3bGtaekZpeGd6TnRoVmhuR2pnZ0FnUTRvY0tWS2ZSd0FrVTVJMG1SQ2x5cGNCV0RMNkNGT2x6Rll1YTY0RWFBamh6Snc2Uy9LazVCTm4wSjFGeHlXVmQzVGtUYVZOaFM2OWR6SnF5S2RNcmNZY3VtbHFRSzFidmZhc3FoWHJQYkJtdjVibEdrb3NVYlJzcDVDMW1yWW5YTGRkNTBiVnlMZXZYMWtKQUFBaCtRUUpDZ0FBQUN3QUFBQUFRQUJBQUFBRC93aTYzUDR3U2xtcXZmaXF6TE1pWUNpTzR0S2QxWVoySCttTzVzcXBNdGErZUZ4cndHNER1S0RPVjZBUmIwSFMwR2RrQXBPdTVhNDVmVUpoMUZwV2hyeUNwTm9lTVdYMWZyY3JOS3JyQlhQRlkvYlZuWVlmeTJiNjJ1NDBsOVFuZ0N4NGJZSXpmRlYrSVhxQmlHR0taNDV2WTJTUUJJeURsRVdFYzRZZWtuV1dFNk9rcGFhbnFLbW1tcW9NQTYrd3NiS3htSWV0QUxPNXM3V2Z0N3Evcjd3L3ZzQzZ3anpFeGJ1ZXc2M0t1Y2NXdHdyUHk2Qjd5ZFhCek1qTzJyRFJaTm5hNFp2ajFlWFR1Ti9iMTQzbnorblQ3TzJzOC9UeThNcjUzdXo4cXZRRy9Fc1ZVSjNCZ3dnVE9yQVhvS0hEaHhBZktqQkFzYUxGaXhibFJkd1ljWE1peG84WE5YSWNHY0FqeUpNaVNXNDBlZkpqU3BVUVdiWU15VTBhQUpnckFjd0UrUkpuUTVrN0tmYjBDVFRvVUp4RmR4NkZtWFRtVXBWTld6NGxHUlZsVFRJK1krb01TdFBkb0t3U3QzS3RPSFZrVlo1WE40RjFlTlpsV2dWcmY0b2RhNkFzeDdZWTdlYWtTMWFoMzcrQUp5UUFBQ0g1QkFrS0FBQUFMQUFBQUFCQUFFQUFBQVAvQ0xyYy9qQktXYXE5K0tyTTgrNWdzWVRnUjNyQXlZMHFacmJWQzdOd25OWTJidCs0M1BvcVdnMTRJcEtFTTk1UW1XVCtuRUZvMFJpaWxxUkhhMGU3d2xhNUtKM0lleVZ2elYweDhxbEdvOXd1dUVadVdVZmJiWHBPQjQ3cngzaDhmWE9CUFlOMWY0YzdFNHlOam8rUWtaS01lWk1BQkppWm1wdWFkbE9XbDV5aW01NVpvS09vbUtWZnA2bWpxMldXcnErS1k2MnpwTFdnQ3JpY3NHZTN2YXE2dThLZHhNSEN2MTNKdmN0dnNzYkRpY1hTQk05KzBkTFljODI0M0lqZXMrQ0xrOWJYeU5yRzVMYnF5cnZ3OGZMekVnSDI5L2o1K0FvQy9mNy9BUDhwR0VDd29NR0RCaGZvVzZpUFg4Q0hBQWNpbkhoUUljT0xBUnhDM0NpUmlxSkhpeGdYYXR6NHNLUEhpU0JENWh0Sk1pS0FreDhWcUJRSm9DVkVrekFUeXB5NXNxYk5nRGh6RWt6Sk02UFBud0pmQ3EyNHM2Zzlsa2lEQ2lYS0UrcFBxVG1wenJScUV5dE1yU3E1dHZSNkVteElzU1RKeGdUZzlCNWFqa3FYRmpTTDhlM051SElIMEwxb3R5UmV1WHNaOWdYNmQybGdta2hkNXAzYjFPbGd4WXYxMHB0TXVmS2pCQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTbG1xdmZpcXpQUHVZTEdFNEVkNndNbU5LbWEyMVF1emNKeldObTdmdU56Nktsb05lQ0tTaERQZVVKbGsvcHhCYU5FWW9wYWtSMnRIdThKV3VTaWR5SHNsYjgxZE1mS3BScVBjTHJoR2JsbEgyMjE2VGdlTzY4ZDRmSDF6Z1QyRGRYK0hPeE9Nalk2UGtKR1NqQUdWbHBlWWw1TU1lWm1lbVp0MlV3Q2ZwWldoaW1Pa3BwK29pUXFzcmFpZHNhQ3pncXUxbXJlR3VicW52RXUrdjY2MHY4Q2h4c2ZGdU1lV3pMM095SnZLeE1GTjBnSFF3dG5iMk5MZVQ4TzY0VkhqdGVXanJ1dnM3ZTRMQXZIeTgvVHpDZ1A0K2ZyNytnb0Uvd0FEQ2d3SXI1NUJldmY0S2R6bmI2QkRnUVVQU2t5NHNHTERoeGdqU2pSSXNZYWl3b3NZSFdyY2lCQ0FSNHNBUW1aVVFQSmd4NVA5VXFvVXliSmx2WmN3OFlHY0NYQ2tUUUU0Yys3a1NjQ256YUF3aC9JMDJoTHBTYVV6bVpKMDZoR3FTcWticWFJa0NySG1UM2xhRjFvTmlYV2l5WndNWlhMOVY5YmxXYlQ1eHE0RThOWGVXN2dENUQ1c3kvRXVYTDAwNmRhTkYvYWoyclY4Yi9wRkMzamd1OGVRSXpOS0FBQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NobXF2Zmlxd3J2LzNnYU8zNUtkbVVpdTZqcWFhQnkwYmduVUpDeWZOTTcxUHQwT0E4UVZhOEtoNWVoaXNoVEsxTTFubzlvQVVlTFUrdHR5azFGbnptc0ZLOFV2TXRVOFJJUGMxNnhHSGFRYm9mSUtQR1JINHZON0hZRmRXSGt6ZlUySVQ0V0FpbU5jZ245eWd3V1ViRHVXam1tTWs1cHZubGNUb3FPa3BhYW5xS0lDcTZ5dHJxMnBESkNFcjdXdnNRdXpsUXEydmF1NG1RQyt2Y0NnZk1MRHRjVzZDOG5Ld015OHpxN0xzODNUc05EVzB0aS8ycERYM1FMVjROemQ1Ri9tMk9obDZ0UHNhKzdPOEhYSTR2UjM5dWZmNmZyci9PMzh2UU1ZVCtBOGd2V0tLVnpJc09HQ0FSQWpTcHdvVVFHQml4Z3phc3dZakh1aVI0b1dONHJVMlBHanlRRWhSNm9zZWRKalNwVWlXYmFjK0JJbVNXT1JBTXgwQ2NEbVNKazdJZGIwZVJGbzBLRkVqZTVFNmxQcFRLWTJuYmFFQ2xQcVNhb3JjUklLU3JNbjBadlJkSEtOaVBXbjFsMWl4NkwwK2hXalZaTmxZNTU5cUhadFc0NXpGZFMxZTdkbzNyUmo0MjRNNXJDdzRjTVJFZ0FBSWZrRUNRb0FBQUFzQUFBQUFFQUFRQUFBQS84SXV0eitNRW9wcXIzNHFzQzcvNTVTakdScGxrdW1aaHZvZnVJcG0rbHFDKzJyeDNOZjM2cWN6c1hyeVg1QWpIQUlBeGg5aW1RUXdId1ZuNmlvVkVtdGdxN1lFWEtMNjNwRHpqQk5TNjRzeitEd2VQdjJ4ckZ6YWIxNmYrYVRlMHg5Um45QWdVT0RVQUJ0Rm9jN2FXb2toVGVPVnBDUkJaTTJsVVNYa1pvcm5GK2VhcUJUWjAyWWtteHRvcW1xbVJPeXM3UzF0cmU0dEFPN3ZMMit2YmtNc0xFQXY4YS93UXZEQzhmTnU4bUpNOHpPeDlDa2NnclUxZERMMmRySTNMRFQzOERocXVQa3orYVk2T25XM2NYcHZPL2kzdklEOU9mMjh2bnMrKzdyUHYwajEwOWd2SHNGU3czOGxoRGJRWDRCRlQ0RW1BemVQWFVWNjFuYnlMRjNvMGNHQkVLS0hFbHlaTFFqMS9Bb0tNbXk1TWtUTDljQWFFa3paTXdzOEdyU3ZMa3FwMDZXUE1XazlMUHlwOHVoaEpBcU1ucTBtMCttSW9QR2VncVZnTlNyUmF0YVZTcU5LOHFaV3JjNjFSaFdiRDJxVUxHaVphcVdiTmkyK3NCcWhldFBibFc2QnN2aWxhalhLMHkvTWo4S0hrdzRRZ0lBSWZrRUNRb0FBQUFzQUFBQUFFQUFRQUFBQS84SXV0eitNRW81cXIzNEtzRzcvNTRTakdScGxrdW1aaHZvZnVJcG0rbHFEKzJyeDNOZjM2cWN6c1hyeVg1QWpIQUlBeGg5aW1RUXdId1ZuNmlvVkVtdGdxN1lFWEtMNjNwRHpqQk5TNjRzeitEd2VQdjJ4ckZ6YWIxNmYrYVRlMHg5Um45QWdVT0RVQUJ0Rm9jN2FXb2toVGVPVnBDUkFaTTJsVVNYa1pvcm5GK2VhcUJUWjAyWWtteHRvcW1xbVJPeXM3UzF0cmU0dEFTN3ZMMit2YmtNQmNQRXhjYkZDNy9LdjhFTHg4L0h5Y3ZUQk0wSzBOakQwdFRLMWdEWjJOdmN2dDdnME9ManZPWG0wUXJwek5iczdRRHY1UEh5eU83MTZ2ZjQydnI3cXZYemgrN2RPbjhGQ3FZN1NCRGdQb2I0Rkk2REtFOGlONHJzTEZMRGFFNTM0elNPNER3dUE1bE5aTGVCRWIycFhNbXlaUU9FLzJBbS9BYlRXVTJhQ0svZHhObFFwczZjUDN2ZTlCazBKVkdpUEkwTzNYbDBLZENrRmFGbWxOcXhhTlNtVDdFS3plcDBhME9xSWNHV0ZCdk82bFN0S2NtZVUvdk1iRlcyN2RCR2hXdk1iVmlrY3M4eTdhcVVLOUM4YjEwS0hrdzRRZ0lBT3c9PSc7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Bpbm5lci5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIG1kNV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjQpO1xcbnZhciBiYXNlNjQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2Nyk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgd29yZGluZ3NfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjY5KTtcXG52YXIgQ29uZmlnXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3MCk7XFxudmFyIERhdGFfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjcxKTtcXG5leHBvcnRzLkVNQUlMX1JFR0VYID0gL15cXFxcUytAXFxcXFMrXFxcXC5cXFxcUyskLztcXG5leHBvcnRzLkNPTE9SX0NPREVfUkVHRVggPSAvXiMoW0EtRmEtZjAtOV17Nn18W0EtRmEtZjAtOV17M30pJC87XFxuZXhwb3J0cy5TQ09QRV9LRVlXT1JEX1JFR0VYID0gL15bYS16QS1aMC05LV9+QCTCo3zigqzCpcKnJl0rJC87XFxuZXhwb3J0cy5NQVBfUFJPUEVSVFlfS0VZX1JFR0VYID0gL15bYS16QS1aMC05LV9dKyQvO1xcbmV4cG9ydHMuWE1MX1RBR19SRUdFWCA9IC9eW2EtekEtWl86XVthLXpBLVowLTlfOlxcXFwtXFxcXC5dKiQvO1xcbmV4cG9ydHMuSFRUUFNfVVJMX1JFR0VYID0gL2h0dHBzOlxcXFwvXFxcXC8od3d3XFxcXC4pP1stYS16QS1aMC05QDolLl9cXFxcK34jPV17MiwyNTZ9XFxcXC5bYS16XXsyLDZ9XFxcXGIoWy1hLXpBLVowLTlAOiVfXFxcXCsufiM/JlxcXFwvPV0qKS87XFxuZnVuY3Rpb24gZ2V0V29yZGluZ3Mod29yZGluZ3MsIGxvY2FsZSkge1xcbiAgICB2YXIgY29tYmluZWRXb3JkaW5ncyA9IGRlZXBDb3B5KHdvcmRpbmdzXzEuTVVMVElMQU5HVUFHRV9XT1JESU5HUywgd29yZGluZ3MpO1xcbiAgICB2YXIgcmVzID0gT2JqZWN0LmtleXMoY29tYmluZWRXb3JkaW5ncykucmVkdWNlKGZ1bmN0aW9uIChkaWMsIGtleSkge1xcbiAgICAgICAgZGljW2tleV0gPSBjb21iaW5lZFdvcmRpbmdzW2tleV1bbG9jYWxlXTtcXG4gICAgICAgIHJldHVybiBkaWM7XFxuICAgIH0sIHt9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRXb3JkaW5ncyA9IGdldFdvcmRpbmdzO1xcbmZ1bmN0aW9uIGNvbXBpbGVXb3JkaW5ncyh3b3JkaW5ncywgbG9jYWxlKSB7XFxuICAgIGxvY2FsZSA9IGxvY2FsZSB8fCBcXFwiZW4tVVNcXFwiO1xcbiAgICB2YXIgcmVzID0gT2JqZWN0LmtleXMod29yZGluZ3MpLnJlZHVjZShmdW5jdGlvbiAoZGljLCBrZXkpIHtcXG4gICAgICAgIGRpY1trZXldID0gd29yZGluZ3Nba2V5XVtsb2NhbGVdO1xcbiAgICAgICAgcmV0dXJuIGRpYztcXG4gICAgfSwge30pO1xcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmNvbXBpbGVXb3JkaW5ncyA9IGNvbXBpbGVXb3JkaW5ncztcXG5mdW5jdGlvbiBnZXRHcmF2YXRhclVybChlbWFpbCkge1xcbiAgICB2YXIgYmFzZVVybCA9ICdodHRwczovL3NlY3VyZS5ncmF2YXRhci5jb20vYXZhdGFyLyc7XFxuICAgIHZhciBxdWVyeVBhcmFtcyA9ICc/cz0yMDAmZD1tbSc7XFxuICAgIHJldHVybiBiYXNlVXJsICsgbWQ1XzEuZGVmYXVsdChlbWFpbC50cmltKCkudG9Mb3dlckNhc2UoKSkgKyBxdWVyeVBhcmFtcztcXG59XFxuZXhwb3J0cy5nZXRHcmF2YXRhclVybCA9IGdldEdyYXZhdGFyVXJsO1xcbmZ1bmN0aW9uIGlzVmFsaWRQYXNzd29yZChwYXNzd29yZCkge1xcbiAgICB2YXIgbWluTWF4TGVuZ3RoID0gL15bXFxcXHNcXFxcU117OCwzMn0kLywgdXBwZXIgPSAvW0EtWl0vLCBsb3dlciA9IC9bYS16XS8sIG51bWJlciA9IC9bMC05XS8sIGNvdW50ID0gMDtcXG4gICAgaWYgKG1pbk1heExlbmd0aC50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgaWYgKHVwcGVyLnRlc3QocGFzc3dvcmQpKSB7XFxuICAgICAgICAgICAgY291bnQrKztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChsb3dlci50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgICAgIGNvdW50Kys7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobnVtYmVyLnRlc3QocGFzc3dvcmQpKSB7XFxuICAgICAgICAgICAgY291bnQrKztcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gY291bnQgPj0gMjtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkUGFzc3dvcmQgPSBpc1ZhbGlkUGFzc3dvcmQ7XFxuZnVuY3Rpb24gaXNWYWxpZEVtYWlsKGVtYWlsKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkVNQUlMX1JFR0VYLnRlc3QoZW1haWwpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRFbWFpbCA9IGlzVmFsaWRFbWFpbDtcXG5mdW5jdGlvbiBpc1ZhbGlkQ29sb3JDb2RlKGNvbG9yKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkNPTE9SX0NPREVfUkVHRVgudGVzdChjb2xvcik7XFxufVxcbmV4cG9ydHMuaXNWYWxpZENvbG9yQ29kZSA9IGlzVmFsaWRDb2xvckNvZGU7XFxuZnVuY3Rpb24gaXNOb3RFbXB0eSh2YWx1ZSkge1xcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID4gMDtcXG59XFxuZXhwb3J0cy5pc05vdEVtcHR5ID0gaXNOb3RFbXB0eTtcXG5mdW5jdGlvbiBpc1ZhbGlkU2NvcGVLZXl3b3JkKHZhbHVlKSB7XFxuICAgIHJldHVybiBleHBvcnRzLlNDT1BFX0tFWVdPUkRfUkVHRVgudGVzdCh2YWx1ZSk7XFxufVxcbmV4cG9ydHMuaXNWYWxpZFNjb3BlS2V5d29yZCA9IGlzVmFsaWRTY29wZUtleXdvcmQ7XFxuZnVuY3Rpb24gaXNWYWxpZEtleUNoYXIodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuTUFQX1BST1BFUlRZX0tFWV9SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkS2V5Q2hhciA9IGlzVmFsaWRLZXlDaGFyO1xcbmZ1bmN0aW9uIGlzVmFsaWRYTUxUYWcodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuWE1MX1RBR19SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkWE1MVGFnID0gaXNWYWxpZFhNTFRhZztcXG5mdW5jdGlvbiBpc1ZhbGlkSHR0cHNVcmwodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuSFRUUFNfVVJMX1JFR0VYLnRlc3QodmFsdWUpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRIdHRwc1VybCA9IGlzVmFsaWRIdHRwc1VybDtcXG5mdW5jdGlvbiBlc2NhcGVYbWwoeG1sKSB7XFxuICAgIHJldHVybiB4bWwucmVwbGFjZSgvWzw+JidcXFwiXS9nLCBmdW5jdGlvbiAoYykge1xcbiAgICAgICAgc3dpdGNoIChjKSB7XFxuICAgICAgICAgICAgY2FzZSAnPCc6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJmx0JztcXG4gICAgICAgICAgICBjYXNlICc+JzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmZ3QnO1xcbiAgICAgICAgICAgIGNhc2UgJyYnOlxcbiAgICAgICAgICAgICAgICByZXR1cm4gJyZhbXAnO1xcbiAgICAgICAgICAgIGNhc2UgJ1xcXFwnJzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmYXBvcyc7XFxuICAgICAgICAgICAgY2FzZSAnXFxcIic6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJnF1b3QnO1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuZXhwb3J0cy5lc2NhcGVYbWwgPSBlc2NhcGVYbWw7XFxuZnVuY3Rpb24gdXRmOEpTT05fdG9fYjY0VVJJKGpzb24pIHtcXG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChiYXNlNjQuZW5jb2RlKGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoanNvbikpKSkpO1xcbn1cXG5leHBvcnRzLnV0ZjhKU09OX3RvX2I2NFVSSSA9IHV0ZjhKU09OX3RvX2I2NFVSSTtcXG5mdW5jdGlvbiBVUkliNjRfdG9fdXRmOEpTT04oc3RyKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGJhc2U2NC5kZWNvZGUoZGVjb2RlVVJJQ29tcG9uZW50KHN0cikpKSkpO1xcbiAgICB9XFxuICAgIGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgY29uc29sZS5sb2coJ0pTT04gcGFyc2luZyBlcnJvcjogJywgZXJyb3IpO1xcbiAgICAgICAgcmV0dXJuIHt9O1xcbiAgICB9XFxufVxcbmV4cG9ydHMuVVJJYjY0X3RvX3V0ZjhKU09OID0gVVJJYjY0X3RvX3V0ZjhKU09OO1xcbmZ1bmN0aW9uIGFycmF5TWluKGFycikge1xcbiAgICByZXR1cm4gYXJyLnJlZHVjZShmdW5jdGlvbiAocHJldiwgbmV4dCkge1xcbiAgICAgICAgcmV0dXJuIChwcmV2IDwgbmV4dCA/IHByZXYgOiBuZXh0KTtcXG4gICAgfSk7XFxufVxcbmV4cG9ydHMuYXJyYXlNaW4gPSBhcnJheU1pbjtcXG5mdW5jdGlvbiBhcnJheU1heChhcnIpIHtcXG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIG5leHQpIHtcXG4gICAgICAgIHJldHVybiAocHJldiA+IG5leHQgPyBwcmV2IDogbmV4dCk7XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmFycmF5TWF4ID0gYXJyYXlNYXg7XFxuZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xcbiAgICBpZiAoIXNpemUpIHtcXG4gICAgICAgIHJldHVybiAnMCBCJztcXG4gICAgfVxcbiAgICB2YXIgayA9IDEwMDA7XFxuICAgIHZhciBzaXplcyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQiddO1xcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZyhrKSk7XFxuICAgIHZhciB1bml0ID0gaSA8IDUgPyBzaXplc1tpXSA6IHNpemVzWzRdO1xcbiAgICByZXR1cm4gKHNpemUgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgxKSArICcgJyArIHVuaXQ7XFxufVxcbmV4cG9ydHMuZm9ybWF0RmlsZVNpemUgPSBmb3JtYXRGaWxlU2l6ZTtcXG5mdW5jdGlvbiBnZXRRdWVyeVBhcmFtcyhzZWFyY2hTdHJpbmcpIHtcXG4gICAgaWYgKCFzZWFyY2hTdHJpbmcpIHtcXG4gICAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbiAgICB2YXIgcXVlcnlTdHJpbmdQYXJhbXMgPSBzZWFyY2hTdHJpbmcuc3Vic3RyKDEpLnNwbGl0KCcmJyk7XFxuICAgIHZhciBxdWVyeVBhcmFtcyA9IHF1ZXJ5U3RyaW5nUGFyYW1zLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBxdWVyeVN0clBhcmFtKSB7XFxuICAgICAgICB2YXIga2V5VmFsdWUgPSBxdWVyeVN0clBhcmFtLnNwbGl0KCc9Jyk7XFxuICAgICAgICBpZiAoa2V5VmFsdWUubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICAgICAgYWNjW2tleVZhbHVlWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlWYWx1ZVsxXSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICB9LCB7fSk7XFxuICAgIHJldHVybiBxdWVyeVBhcmFtcztcXG59XFxuZXhwb3J0cy5nZXRRdWVyeVBhcmFtcyA9IGdldFF1ZXJ5UGFyYW1zO1xcbmZ1bmN0aW9uIGFkZFF1ZXJ5UGFyYW0odXJpLCBrZXksIHZhbHVlKSB7XFxuICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xcbiAgICBsaW5rLmhyZWYgPSB1cmk7XFxuICAgIGlmIChsaW5rLnNlYXJjaCkge1xcbiAgICAgICAgbGluay5zZWFyY2ggKz0gKCcmJyArIGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgICBsaW5rLnNlYXJjaCA9ICgnPycgKyBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xcbiAgICB9XFxuICAgIHJldHVybiBsaW5rO1xcbn1cXG5leHBvcnRzLmFkZFF1ZXJ5UGFyYW0gPSBhZGRRdWVyeVBhcmFtO1xcbmZ1bmN0aW9uIG9yZGVyQXNjKG9iamVjdCkge1xcbiAgICB2YXIgcmVzdWx0ID0ge307XFxuICAgIE9iamVjdC5rZXlzKG9iamVjdCkuc29ydCgpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcXG4gICAgfSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcbmV4cG9ydHMub3JkZXJBc2MgPSBvcmRlckFzYztcXG5mdW5jdGlvbiBvcmRlckRlc2Mob2JqZWN0KSB7XFxuICAgIHZhciByZXN1bHQgPSB7fTtcXG4gICAgT2JqZWN0LmtleXMob2JqZWN0KS5zb3J0KCkucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcXG4gICAgfSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcbmV4cG9ydHMub3JkZXJEZXNjID0gb3JkZXJEZXNjO1xcbmZ1bmN0aW9uIHNhdmVEYXRhQXNKU09ORmlsZShkYXRhLCBmaWxlTmFtZSwgZXh0ZW5zaW9uKSB7XFxuICAgIHZhciBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgJ1xcXFx0Jyk7XFxuICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2pzb25dLCB7XFxuICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vanNvbidcXG4gICAgfSk7XFxuICAgIHRyaWdnZXJEYXRhRG93bmxvYWQoYmxvYiwgZmlsZU5hbWUgKyBcXFwiX1xcXCIgKyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3Vic3RyKDAsIDE5KSArIChleHRlbnNpb24gfHwgJy5qc29uJykpO1xcbn1cXG5leHBvcnRzLnNhdmVEYXRhQXNKU09ORmlsZSA9IHNhdmVEYXRhQXNKU09ORmlsZTtcXG5mdW5jdGlvbiBkb3dubG9hZERhdGFGaWxlKGJhc2U2NERhdGFTdHJpbmcsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkge1xcbiAgICB2YXIgYjY0U3RyaW5nID0gJ2RhdGE6JyArIGNvbnRlbnRUeXBlICsgJztiYXNlNjQsJyArIGJhc2U2NERhdGFTdHJpbmc7XFxuICAgIHRyaWdnZXJEYXRhRG93bmxvYWQoYjY0U3RyaW5nLCBmaWxlTmFtZSwgdHJ1ZSk7XFxufVxcbmV4cG9ydHMuZG93bmxvYWREYXRhRmlsZSA9IGRvd25sb2FkRGF0YUZpbGU7XFxuZnVuY3Rpb24gdHJpZ2dlckRhdGFEb3dubG9hZChkYXRhLCBmaWxlTmFtZSwgZGF0YVVybCkge1xcbiAgICB2YXIgdXJsID0gZGF0YVVybCA/IGRhdGEgOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGRhdGEpO1xcbiAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcXG4gICAgbGluay5ocmVmID0gdXJsO1xcbiAgICBsaW5rWydkb3dubG9hZCddID0gZmlsZU5hbWU7XFxuICAgIGxpbmsuY2xpY2soKTtcXG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xcbn1cXG5mdW5jdGlvbiBoYXNSZXF1aXJlZFJlc291cmNlKGFwcEVuZHBvaW50cywgYXBwSW5zdGFuY2VOYW1lLCBmZWF0dXJlSWQpIHtcXG4gICAgaWYgKGFwcEVuZHBvaW50cyAmJiBhcHBFbmRwb2ludHNbYXBwSW5zdGFuY2VOYW1lXSkge1xcbiAgICAgICAgaWYgKGFwcEVuZHBvaW50c1thcHBJbnN0YW5jZU5hbWVdW2ZlYXR1cmVJZF0pIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZmFsc2U7XFxufVxcbmV4cG9ydHMuaGFzUmVxdWlyZWRSZXNvdXJjZSA9IGhhc1JlcXVpcmVkUmVzb3VyY2U7XFxuZnVuY3Rpb24gcmVwbGFjZVRlbXBsYXRlVmlld05hbWUodGVtcGxhdGVkSHRtbCwgdmlld05hbWUpIHtcXG4gICAgcmV0dXJuIHRlbXBsYXRlZEh0bWwucmVwbGFjZSgve3tWSUVXTkFNRX19L2csIHZpZXdOYW1lKTtcXG59XFxuZXhwb3J0cy5yZXBsYWNlVGVtcGxhdGVWaWV3TmFtZSA9IHJlcGxhY2VUZW1wbGF0ZVZpZXdOYW1lO1xcbmZ1bmN0aW9uIHJlcGxhY2VUZW1wbGF0ZUZsYWdzKHRlbXBsYXRlZEh0bWwsIGxvY2FsZSkge1xcbiAgICB2YXIgZmxhZ3NSZWdleCA9IC97e0ZMQUdTXFxcXD0oLiopfX0vZztcXG4gICAgdmFyIG1hdGNoUmVzID0gZmxhZ3NSZWdleC5leGVjKHRlbXBsYXRlZEh0bWwpO1xcbiAgICBpZiAobWF0Y2hSZXMgJiYgbWF0Y2hSZXMubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICB2YXIgZmxhZ3MgPSBtYXRjaFJlc1sxXS5zcGxpdCgnLCcpO1xcbiAgICAgICAgdmFyIGZsYWdzSHRtbCA9ICcnO1xcbiAgICAgICAgZm9yICh2YXIgZmxhZ05hbWUgaW4gRGF0YV8xLmZsYWdzRGVmKSB7XFxuICAgICAgICAgICAgdmFyIGZsYWdEZWYgPSBEYXRhXzEuZmxhZ3NEZWZbZmxhZ05hbWVdO1xcbiAgICAgICAgICAgIGlmIChmbGFnTmFtZSAhPT0gJ2V1bnJlYWQnKSB7XFxuICAgICAgICAgICAgICAgIGlmICgoZmxhZ0RlZi5pbnZlcnNlZCAmJiBmbGFncy5pbmRleE9mKGZsYWdOYW1lKSA9PT0gLTEpIHx8ICghZmxhZ0RlZi5pbnZlcnNlZCAmJiBmbGFncy5pbmRleE9mKGZsYWdOYW1lKSAhPT0gLTEpKSB7XFxuICAgICAgICAgICAgICAgICAgICBmbGFnc0h0bWwgKz0gJzxzcGFuIGNsYXNzPVxcXCJmYS1mdyByaWdodC1zcGFjZWQgdGV4dC14bGFyZ2UgJyArIGZsYWdEZWYuaWNvbkNvbG9yICsgJyAnICsgZmxhZ0RlZi5pY29uU2hhcGUgKyAnXFxcIiB0aXRsZT1cXFwiJyArIGZsYWdEZWYuZmxhZ0xhYmVsW2xvY2FsZV0gKyAnXFxcIj48L3NwYW4+JztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sLnJlcGxhY2UoZmxhZ3NSZWdleCwgZmxhZ3NIdG1sKTtcXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sO1xcbiAgICB9XFxufVxcbmV4cG9ydHMucmVwbGFjZVRlbXBsYXRlRmxhZ3MgPSByZXBsYWNlVGVtcGxhdGVGbGFncztcXG5mdW5jdGlvbiBnZXRTdHlsZURlZihzdHlsZUNvbmYpIHtcXG4gICAgdmFyIHN0eWxlcyA9IHN0eWxlQ29uZi5zcGxpdCgnLCcpO1xcbiAgICB2YXIgcmVzID0ge1xcbiAgICAgICAgaWNvbjogbnVsbCxcXG4gICAgICAgIGJ0bjogbnVsbCxcXG4gICAgICAgIGNvbG9yOiBudWxsXFxuICAgIH07XFxuICAgIHN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdHlsZSkge1xcbiAgICAgICAgaWYgKHN0eWxlLmluZGV4T2YoJ2ljb246JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmljb24gPSBzdHlsZS5yZXBsYWNlKCdpY29uOicsICcnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChzdHlsZS5pbmRleE9mKCdidG46JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmJ0biA9IHN0eWxlLnJlcGxhY2UoJ2J0bjonLCAnJyk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoc3R5bGUuaW5kZXhPZignY29sb3I6JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmNvbG9yID0gc3R5bGUucmVwbGFjZSgnY29sb3I6JywgJycpO1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRTdHlsZURlZiA9IGdldFN0eWxlRGVmO1xcbmZ1bmN0aW9uIGdldEFjY2VwdExhbmd1YWdlSGVhZGVyKGxvY2FsZSkge1xcbiAgICB2YXIgbm90U2VsZWN0ZWQgPSBDb25maWdfMS5BVkFJTEFCTEVfTEFOR1VBR0VTLmZpbHRlcihmdW5jdGlvbiAobGFuZ3VhZ2UsIGlkeCkge1xcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlLmxvY2FsZSAhPT0gbG9jYWxlICYmIGlkeCA8IDM7XFxuICAgIH0pLm1hcChmdW5jdGlvbiAobGFuZ3VhZ2UsIGlkeCkge1xcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlLmxvY2FsZS5zdWJzdHIoMCwgMikudG9Mb3dlckNhc2UoKSArICc7cT0nICsgKDAuOCAtIChpZHggLyAxMCkpLnRvU3RyaW5nKCk7XFxuICAgIH0pO1xcbiAgICByZXR1cm4gbG9jYWxlLnN1YnN0cigwLCAyKS50b0xvd2VyQ2FzZSgpICsgJywnICsgbm90U2VsZWN0ZWQuam9pbignLCcpO1xcbn1cXG5leHBvcnRzLmdldEFjY2VwdExhbmd1YWdlSGVhZGVyID0gZ2V0QWNjZXB0TGFuZ3VhZ2VIZWFkZXI7XFxuZnVuY3Rpb24gZ2V0STE4bkxhYmVsKGxvY2FsZSwgbGFiZWxNYXAsIG5vUmVnaW9uLCB1cHBlcikge1xcbiAgICB2YXIgcmVzID0gbnVsbDtcXG4gICAgdmFyIGxhbmd1YWdlID0gbG9jYWxlO1xcbiAgICBpZiAobm9SZWdpb24pIHtcXG4gICAgICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3Vic3RyKDAsIDIpO1xcbiAgICB9XFxuICAgIGlmICh1cHBlcikge1xcbiAgICAgICAgbGFuZ3VhZ2UgPSBsYW5ndWFnZS50b1VwcGVyQ2FzZSgpO1xcbiAgICB9XFxuICAgIGlmIChsYWJlbE1hcCkge1xcbiAgICAgICAgaWYgKGxhYmVsTWFwW2xhbmd1YWdlXSkge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwW2xhbmd1YWdlXTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghcmVzICYmIGxhbmd1YWdlICE9PSAnRU4nKSB7XFxuICAgICAgICAgICAgcmVzID0gbGFiZWxNYXBbJ0VOJ107XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXJlcyAmJiBsYW5ndWFnZSAhPT0gJ2VuJykge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwWydlbiddO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFyZXMgJiYgbGFuZ3VhZ2UgIT09ICdlbi1VUycpIHtcXG4gICAgICAgICAgICByZXMgPSBsYWJlbE1hcFsnZW4tVVMnXTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmdldEkxOG5MYWJlbCA9IGdldEkxOG5MYWJlbDtcXG5mdW5jdGlvbiBnZXRKU1RyZWVEYXRhKG9yZ1RyZWVEYXRhLCBvcGVuZWROb2Rlcykge1xcbiAgICByZXR1cm4gb3JnVHJlZURhdGEgPyB7XFxuICAgICAgICBpZDogb3JnVHJlZURhdGEuaWQsXFxuICAgICAgICB0ZXh0OiBvcmdUcmVlRGF0YS5pZCA9PT0gJzAnID8gJycgOiBvcmdUcmVlRGF0YS5lbGVtZW50TmFtZSxcXG4gICAgICAgIGRhdGE6IHtcXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogb3JnVHJlZURhdGEuZGVzY3JpcHRpb24sXFxuICAgICAgICAgICAgcHJvcGVydGllc01hcDogb3JnVHJlZURhdGEucHJvcGVydGllc01hcCxcXG4gICAgICAgICAgICBwYXJlbnRJZDogb3JnVHJlZURhdGEucGFyZW50SWQsXFxuICAgICAgICAgICAgY2hpbGROYW1lczogb3JnVHJlZURhdGEuY2hpbGRyZW4gPyBvcmdUcmVlRGF0YS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiBjaGlsZC5lbGVtZW50TmFtZTsgfSkgOiBbXVxcbiAgICAgICAgfSxcXG4gICAgICAgIGNoaWxkcmVuOiBvcmdUcmVlRGF0YS5jaGlsZHJlbiA/IG9yZ1RyZWVEYXRhLmNoaWxkcmVuLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcXG4gICAgICAgICAgICByZXR1cm4gZ2V0SlNUcmVlRGF0YShjaGlsZCwgb3BlbmVkTm9kZXMpO1xcbiAgICAgICAgfSkgOiBudWxsLFxcbiAgICAgICAgaWNvbjogY2xhc3NOYW1lcygnZmFzIGZhLWZ3Jywge1xcbiAgICAgICAgICAgICdmYS10aC1sYXJnZSBmb250LWNvbG9yLWxpZ2h0ZXInOiBvcmdUcmVlRGF0YS5pZCAhPT0gJzAnLFxcbiAgICAgICAgICAgICdmYS10ZXJtaW5hbCBibGFjay1jb2xvcic6IG9yZ1RyZWVEYXRhLmlkID09PSAnMCcsXFxuICAgICAgICB9KSxcXG4gICAgICAgIHN0YXRlOiB7XFxuICAgICAgICAgICAgb3BlbmVkOiBvcGVuZWROb2RlcyA/IG9wZW5lZE5vZGVzLmluZGV4T2Yob3JnVHJlZURhdGEuaWQpICE9PSAtMSA6IGZhbHNlLFxcbiAgICAgICAgICAgIGRpc2FibGVkOiBvcmdUcmVlRGF0YS5pZCA9PT0gJy0xJ1xcbiAgICAgICAgfVxcbiAgICB9IDogbnVsbDtcXG59XFxuZXhwb3J0cy5nZXRKU1RyZWVEYXRhID0gZ2V0SlNUcmVlRGF0YTtcXG5mdW5jdGlvbiBsb2FkVG9vbHRpcHMoZWxlbWVudCkge1xcbiAgICBpZiAoIU1vZGVybml6ci50b3VjaGV2ZW50cykge1xcbiAgICAgICAgdmFyICRlbGVtZW50VG9vbHRpcHNfMSA9ICQoZWxlbWVudCkuZmluZCgnW2RhdGEtdG9nZ2xlPVxcXCJ0b29sdGlwXFxcIl0nKTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHNfMS50b29sdGlwKHtcXG4gICAgICAgICAgICBjb250YWluZXI6ICdib2R5JyxcXG4gICAgICAgICAgICBwbGFjZW1lbnQ6ICdhdXRvIHRvcCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgJGVsZW1lbnRUb29sdGlwc18xLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICAkZWxlbWVudFRvb2x0aXBzXzEudG9vbHRpcCgnaGlkZScpO1xcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuZXhwb3J0cy5sb2FkVG9vbHRpcHMgPSBsb2FkVG9vbHRpcHM7XFxuZnVuY3Rpb24gdW5sb2FkVG9vbHRpcHMoZWxlbWVudCkge1xcbiAgICBpZiAoIU1vZGVybml6ci50b3VjaGV2ZW50cykge1xcbiAgICAgICAgdmFyICRlbGVtZW50VG9vbHRpcHMgPSAkKGVsZW1lbnQpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cXFwidG9vbHRpcFxcXCJdJyk7XFxuICAgICAgICAkZWxlbWVudFRvb2x0aXBzLnRvb2x0aXAoJ2hpZGUnKTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHMudG9vbHRpcCgnZGVzdHJveScpO1xcbiAgICAgICAgJCgnZGl2LnRvb2x0aXAnKS5yZW1vdmUoKTtcXG4gICAgfVxcbn1cXG5leHBvcnRzLnVubG9hZFRvb2x0aXBzID0gdW5sb2FkVG9vbHRpcHM7XFxuZnVuY3Rpb24gZ3JvdXBCeVByb3BlcnR5KGxpc3QsIHByb3BlcnR5TmFtZSkge1xcbiAgICByZXR1cm4gbGlzdC5yZWR1Y2UoZnVuY3Rpb24gKGdyb3VwZWQsIGl0ZW0pIHtcXG4gICAgICAgIHZhciBrZXkgPSBpdGVtW3Byb3BlcnR5TmFtZV07XFxuICAgICAgICBncm91cGVkW2tleV0gPSBncm91cGVkW2tleV0gfHwgW107XFxuICAgICAgICBncm91cGVkW2tleV0ucHVzaChpdGVtKTtcXG4gICAgICAgIHJldHVybiBncm91cGVkO1xcbiAgICB9LCB7fSk7XFxufVxcbmV4cG9ydHMuZ3JvdXBCeVByb3BlcnR5ID0gZ3JvdXBCeVByb3BlcnR5O1xcbmZ1bmN0aW9uIGFkZFZhbFRvQXJyYXlOb0R1cChhcnJheSwgdmFsdWUpIHtcXG4gICAgaWYgKGFycmF5LmluZGV4T2YodmFsdWUpID09PSAtMSkge1xcbiAgICAgICAgcmV0dXJuIGFycmF5LmNvbmNhdCh2YWx1ZSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGFycmF5LnNsaWNlKCk7XFxufVxcbmV4cG9ydHMuYWRkVmFsVG9BcnJheU5vRHVwID0gYWRkVmFsVG9BcnJheU5vRHVwO1xcbmZ1bmN0aW9uIHJlbW92ZVZhbEZyb21BcnJheU5vRHVwKGFycmF5LCB2YWx1ZSkge1xcbiAgICByZXR1cm4gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBlbGVtZW50ICE9PSB2YWx1ZTsgfSk7XFxufVxcbmV4cG9ydHMucmVtb3ZlVmFsRnJvbUFycmF5Tm9EdXAgPSByZW1vdmVWYWxGcm9tQXJyYXlOb0R1cDtcXG5mdW5jdGlvbiBnZXROZXN0ZWRWYWx1ZShvYmosIGtleVBhdGgpIHtcXG4gICAgaWYgKCFvYmopIHtcXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICAgIH1cXG4gICAgdmFyIHByb3BzID0ga2V5UGF0aC5zcGxpdCgnLicpO1xcbiAgICBpZiAocHJvcHMubGVuZ3RoID09PSAxKSB7XFxuICAgICAgICByZXR1cm4gb2JqW3Byb3BzWzBdXTtcXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICAgIHJldHVybiBnZXROZXN0ZWRWYWx1ZShvYmpbcHJvcHNbMF1dLCBwcm9wcy5zbGljZSgxKS5qb2luKCcuJykpO1xcbiAgICB9XFxufVxcbmV4cG9ydHMuZ2V0TmVzdGVkVmFsdWUgPSBnZXROZXN0ZWRWYWx1ZTtcXG5mdW5jdGlvbiBmaWx0ZXJDb2xsZWN0aW9uKGNvbGxlY3Rpb24sIHByb3BlcnRpZXMsIHNlYXJjaFN0cmluZykge1xcbiAgICB2YXIgc2VhcmNoRWxlbWVudHMgPSBzZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpO1xcbiAgICB2YXIgZmlsdGVyZWRDb2xsZWN0aW9uID0gc2VhcmNoU3RyaW5nID8gY29sbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcXG4gICAgICAgIHZhciBkYXRhID0gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XFxuICAgICAgICAgICAgaWYgKHByb3BlcnR5LnNwbGl0KCcuJykubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TmVzdGVkVmFsdWUoaXRlbSwgcHJvcGVydHkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bcHJvcGVydHldO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLmpvaW4oKS50b0xvd2VyQ2FzZSgpO1xcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBzZWFyY2hFbGVtZW50cy5tYXAoZnVuY3Rpb24gKHNlYXJjaCkgeyByZXR1cm4gZGF0YS5pbmRleE9mKHNlYXJjaCkgIT09IC0xOyB9KTtcXG4gICAgICAgIHJldHVybiBtYXRjaGVzLmZpbHRlcihmdW5jdGlvbiAobWF0Y2hlZCkgeyByZXR1cm4gIW1hdGNoZWQ7IH0pLmxlbmd0aCA9PT0gMDtcXG4gICAgfSkgOiBjb2xsZWN0aW9uO1xcbiAgICByZXR1cm4gZmlsdGVyZWRDb2xsZWN0aW9uO1xcbn1cXG5leHBvcnRzLmZpbHRlckNvbGxlY3Rpb24gPSBmaWx0ZXJDb2xsZWN0aW9uO1xcbmZ1bmN0aW9uIGJhc2U2NERlY29kZShlbmNvZGVkRGF0YSkge1xcbiAgICByZXR1cm4gYmFzZTY0LmRlY29kZShlbmNvZGVkRGF0YSk7XFxufVxcbmV4cG9ydHMuYmFzZTY0RGVjb2RlID0gYmFzZTY0RGVjb2RlO1xcbmZ1bmN0aW9uIGRlZXBDb3B5KGRhdGEsIGV4dGVuc2lvbnMpIHtcXG4gICAgcmV0dXJuICFleHRlbnNpb25zID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhIHx8IHt9KSkgOiAkLmV4dGVuZCh7fSwgZGF0YSwgZXh0ZW5zaW9ucyk7XFxufVxcbmV4cG9ydHMuZGVlcENvcHkgPSBkZWVwQ29weTtcXG5mdW5jdGlvbiBoYW5kbGVEdXBsaWNhdGVOYW1lRnJvbUFycmF5KG5hbWUsIGNvbnRhaW5lcikge1xcbiAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcXG4gICAgdmFyIHJlcyA9IG5hbWU7XFxuICAgIHZhciBpZHggPSAxO1xcbiAgICB3aGlsZSAoY29udGFpbmVyLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIHJlcyA9PT0gYzsgfSkpIHtcXG4gICAgICAgIGlmIChmaXJzdFRpbWUpIHtcXG4gICAgICAgICAgICByZXMgPSByZXMuY29uY2F0KFxcXCJfXFxcIiArIGlkeCk7XFxuICAgICAgICB9XFxuICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICByZXMgPSByZXMucmVwbGFjZSgvX1tcXFxcZF0rJC8sIFxcXCJfXFxcIiArIGlkeCk7XFxuICAgICAgICB9XFxuICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcXG4gICAgICAgIGlkeCsrO1xcbiAgICB9XFxuICAgIHJldHVybiByZXM7XFxufVxcbmV4cG9ydHMuaGFuZGxlRHVwbGljYXRlTmFtZUZyb21BcnJheSA9IGhhbmRsZUR1cGxpY2F0ZU5hbWVGcm9tQXJyYXk7XFxuZnVuY3Rpb24gZGF0ZUJ5TG9jYWxUb1N0cmluZyhsb2NhbGUsIGRhdGUsIG9wdGlvbnMpIHtcXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgZGVlcENvcHkoe1xcbiAgICAgICAgbW9udGg6ICdudW1lcmljJyxcXG4gICAgICAgIGRheTogJ251bWVyaWMnLFxcbiAgICAgICAgeWVhcjogJ251bWVyaWMnLFxcbiAgICAgICAgaG91cjogJ251bWVyaWMnLFxcbiAgICAgICAgbWludXRlOiAnbnVtZXJpYydcXG4gICAgfSwgb3B0aW9ucykpO1xcbn1cXG5leHBvcnRzLmRhdGVCeUxvY2FsVG9TdHJpbmcgPSBkYXRlQnlMb2NhbFRvU3RyaW5nO1xcbmZ1bmN0aW9uIGdldEl0ZW1zQnlJZHgoY29sbGVjdGlvbiwgaW5kZXhlcykge1xcbiAgICByZXR1cm4gaW5kZXhlcy5tYXAoZnVuY3Rpb24gKGlkeCkgeyByZXR1cm4gY29sbGVjdGlvbltpZHhdOyB9KTtcXG59XFxuZXhwb3J0cy5nZXRJdGVtc0J5SWR4ID0gZ2V0SXRlbXNCeUlkeDtcXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAodGV4dCkge1xcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bLVtcXFxcXXt9KCkqKz8uLFxcXFxcXFxcXiR8I10vZywgJ1xcXFxcXFxcJCYnKTtcXG59XFxuZXhwb3J0cy5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjY0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbihmdW5jdGlvbigpe1xcbiAgdmFyIGNyeXB0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjUpLFxcbiAgICAgIHV0ZjggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg5KS51dGY4LFxcbiAgICAgIGlzQnVmZmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjYpLFxcbiAgICAgIGJpbiA9IF9fd2VicGFja19yZXF1aXJlX18oODkpLmJpbixcXG5cXG4gIC8vIFRoZSBjb3JlXFxuICBtZDUgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xcbiAgICAvLyBDb252ZXJ0IHRvIGJ5dGUgYXJyYXlcXG4gICAgaWYgKG1lc3NhZ2UuY29uc3RydWN0b3IgPT0gU3RyaW5nKVxcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RpbmcgPT09ICdiaW5hcnknKVxcbiAgICAgICAgbWVzc2FnZSA9IGJpbi5zdHJpbmdUb0J5dGVzKG1lc3NhZ2UpO1xcbiAgICAgIGVsc2VcXG4gICAgICAgIG1lc3NhZ2UgPSB1dGY4LnN0cmluZ1RvQnl0ZXMobWVzc2FnZSk7XFxuICAgIGVsc2UgaWYgKGlzQnVmZmVyKG1lc3NhZ2UpKVxcbiAgICAgIG1lc3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtZXNzYWdlLCAwKTtcXG4gICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZSkpXFxuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9TdHJpbmcoKTtcXG4gICAgLy8gZWxzZSwgYXNzdW1lIGJ5dGUgYXJyYXkgYWxyZWFkeVxcblxcbiAgICB2YXIgbSA9IGNyeXB0LmJ5dGVzVG9Xb3JkcyhtZXNzYWdlKSxcXG4gICAgICAgIGwgPSBtZXNzYWdlLmxlbmd0aCAqIDgsXFxuICAgICAgICBhID0gIDE3MzI1ODQxOTMsXFxuICAgICAgICBiID0gLTI3MTczMzg3OSxcXG4gICAgICAgIGMgPSAtMTczMjU4NDE5NCxcXG4gICAgICAgIGQgPSAgMjcxNzMzODc4O1xcblxcbiAgICAvLyBTd2FwIGVuZGlhblxcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcXG4gICAgICBtW2ldID0gKChtW2ldIDw8ICA4KSB8IChtW2ldID4+PiAyNCkpICYgMHgwMEZGMDBGRiB8XFxuICAgICAgICAgICAgICgobVtpXSA8PCAyNCkgfCAobVtpXSA+Pj4gIDgpKSAmIDB4RkYwMEZGMDA7XFxuICAgIH1cXG5cXG4gICAgLy8gUGFkZGluZ1xcbiAgICBtW2wgPj4+IDVdIHw9IDB4ODAgPDwgKGwgJSAzMik7XFxuICAgIG1bKCgobCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBsO1xcblxcbiAgICAvLyBNZXRob2Qgc2hvcnRjdXRzXFxuICAgIHZhciBGRiA9IG1kNS5fZmYsXFxuICAgICAgICBHRyA9IG1kNS5fZ2csXFxuICAgICAgICBISCA9IG1kNS5faGgsXFxuICAgICAgICBJSSA9IG1kNS5faWk7XFxuXFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkgKz0gMTYpIHtcXG5cXG4gICAgICB2YXIgYWEgPSBhLFxcbiAgICAgICAgICBiYiA9IGIsXFxuICAgICAgICAgIGNjID0gYyxcXG4gICAgICAgICAgZGQgPSBkO1xcblxcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDBdLCAgNywgLTY4MDg3NjkzNik7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcXG4gICAgICBjID0gRkYoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTcsICA2MDYxMDU4MTkpO1xcbiAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBtW2krIDNdLCAyMiwgLTEwNDQ1MjUzMzApO1xcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDRdLCAgNywgLTE3NjQxODg5Nyk7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgNV0sIDEyLCAgMTIwMDA4MDQyNik7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsgN10sIDIyLCAtNDU3MDU5ODMpO1xcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDhdLCAgNywgIDE3NzAwMzU0MTYpO1xcbiAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW2krIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xcbiAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBtW2krMTBdLCAxNywgLTQyMDYzKTtcXG4gICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtpKzExXSwgMjIsIC0xOTkwNDA0MTYyKTtcXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKzEyXSwgIDcsICAxODA0NjAzNjgyKTtcXG4gICAgICBkID0gRkYoZCwgYSwgYiwgYywgbVtpKzEzXSwgMTIsIC00MDM0MTEwMSk7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsxNV0sIDIyLCAgMTIzNjUzNTMyOSk7XFxuXFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgMV0sICA1LCAtMTY1Nzk2NTEwKTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyA2XSwgIDksIC0xMDY5NTAxNjMyKTtcXG4gICAgICBjID0gR0coYywgZCwgYSwgYiwgbVtpKzExXSwgMTQsICA2NDM3MTc3MTMpO1xcbiAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBtW2krIDBdLCAyMCwgLTM3Mzg5NzMwMik7XFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgNV0sICA1LCAtNzAxNTU4NjkxKTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKzEwXSwgIDksICAzODAxNjA4Myk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsxNV0sIDE0LCAtNjYwNDc4MzM1KTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyA0XSwgMjAsIC00MDU1Mzc4NDgpO1xcbiAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBtW2krIDldLCAgNSwgIDU2ODQ0NjQzOCk7XFxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsxNF0sICA5LCAtMTAxOTgwMzY5MCk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsgM10sIDE0LCAtMTg3MzYzOTYxKTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyA4XSwgMjAsICAxMTYzNTMxNTAxKTtcXG4gICAgICBhID0gR0coYSwgYiwgYywgZCwgbVtpKzEzXSwgIDUsIC0xNDQ0NjgxNDY3KTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyAyXSwgIDksIC01MTQwMzc4NCk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsgN10sIDE0LCAgMTczNTMyODQ3Myk7XFxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsxMl0sIDIwLCAtMTkyNjYwNzczNCk7XFxuXFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgNV0sICA0LCAtMzc4NTU4KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcXG4gICAgICBjID0gSEgoYywgZCwgYSwgYiwgbVtpKzExXSwgMTYsICAxODM5MDMwNTYyKTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzE0XSwgMjMsIC0zNTMwOTU1Nik7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgMV0sICA0LCAtMTUzMDk5MjA2MCk7XFxuICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1baSsgNF0sIDExLCAgMTI3Mjg5MzM1Myk7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgN10sIDE2LCAtMTU1NDk3NjMyKTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcXG4gICAgICBhID0gSEgoYSwgYiwgYywgZCwgbVtpKzEzXSwgIDQsICA2ODEyNzkxNzQpO1xcbiAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBtW2krIDBdLCAxMSwgLTM1ODUzNzIyMik7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgM10sIDE2LCAtNzIyNTIxOTc5KTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKyA2XSwgMjMsICA3NjAyOTE4OSk7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgOV0sICA0LCAtNjQwMzY0NDg3KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKzEyXSwgMTEsIC00MjE4MTU4MzUpO1xcbiAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBtW2krMTVdLCAxNiwgIDUzMDc0MjUyMCk7XFxuICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1baSsgMl0sIDIzLCAtOTk1MzM4NjUxKTtcXG5cXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyAwXSwgIDYsIC0xOTg2MzA4NDQpO1xcbiAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBtW2krIDddLCAxMCwgIDExMjY4OTE0MTUpO1xcbiAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBtW2krMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDVdLCAyMSwgLTU3NDM0MDU1KTtcXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKzEyXSwgIDYsICAxNzAwNDg1NTcxKTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKzEwXSwgMTUsIC0xMDUxNTIzKTtcXG4gICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtpKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyA4XSwgIDYsICAxODczMzEzMzU5KTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKzE1XSwgMTAsIC0zMDYxMTc0NCk7XFxuICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIG1baSsgNl0sIDE1LCAtMTU2MDE5ODM4MCk7XFxuICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIG1baSsxM10sIDIxLCAgMTMwOTE1MTY0OSk7XFxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsgNF0sICA2LCAtMTQ1NTIzMDcwKTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKzExXSwgMTAsIC0xMTIwMjEwMzc5KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTUsICA3MTg3ODcyNTkpO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDldLCAyMSwgLTM0MzQ4NTU1MSk7XFxuXFxuICAgICAgYSA9IChhICsgYWEpID4+PiAwO1xcbiAgICAgIGIgPSAoYiArIGJiKSA+Pj4gMDtcXG4gICAgICBjID0gKGMgKyBjYykgPj4+IDA7XFxuICAgICAgZCA9IChkICsgZGQpID4+PiAwO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBjcnlwdC5lbmRpYW4oW2EsIGIsIGMsIGRdKTtcXG4gIH07XFxuXFxuICAvLyBBdXhpbGlhcnkgZnVuY3Rpb25zXFxuICBtZDUuX2ZmICA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XFxuICAgIHZhciBuID0gYSArIChiICYgYyB8IH5iICYgZCkgKyAoeCA+Pj4gMCkgKyB0O1xcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xcbiAgfTtcXG4gIG1kNS5fZ2cgID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcXG4gICAgdmFyIG4gPSBhICsgKGIgJiBkIHwgYyAmIH5kKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcbiAgbWQ1Ll9oaCAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYiBeIGMgXiBkKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcbiAgbWQ1Ll9paSAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYyBeIChiIHwgfmQpKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcblxcbiAgLy8gUGFja2FnZSBwcml2YXRlIGJsb2Nrc2l6ZVxcbiAgbWQ1Ll9ibG9ja3NpemUgPSAxNjtcXG4gIG1kNS5fZGlnZXN0c2l6ZSA9IDE2O1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xcbiAgICBpZiAobWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2UgPT09IG51bGwpXFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50ICcgKyBtZXNzYWdlKTtcXG5cXG4gICAgdmFyIGRpZ2VzdGJ5dGVzID0gY3J5cHQud29yZHNUb0J5dGVzKG1kNShtZXNzYWdlLCBvcHRpb25zKSk7XFxuICAgIHJldHVybiBvcHRpb25zICYmIG9wdGlvbnMuYXNCeXRlcyA/IGRpZ2VzdGJ5dGVzIDpcXG4gICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5hc1N0cmluZyA/IGJpbi5ieXRlc1RvU3RyaW5nKGRpZ2VzdGJ5dGVzKSA6XFxuICAgICAgICBjcnlwdC5ieXRlc1RvSGV4KGRpZ2VzdGJ5dGVzKTtcXG4gIH07XFxuXFxufSkoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuKGZ1bmN0aW9uKCkge1xcbiAgdmFyIGJhc2U2NG1hcFxcbiAgICAgID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLFxcblxcbiAgY3J5cHQgPSB7XFxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIGxlZnRcXG4gICAgcm90bDogZnVuY3Rpb24obiwgYikge1xcbiAgICAgIHJldHVybiAobiA8PCBiKSB8IChuID4+PiAoMzIgLSBiKSk7XFxuICAgIH0sXFxuXFxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIHJpZ2h0XFxuICAgIHJvdHI6IGZ1bmN0aW9uKG4sIGIpIHtcXG4gICAgICByZXR1cm4gKG4gPDwgKDMyIC0gYikpIHwgKG4gPj4+IGIpO1xcbiAgICB9LFxcblxcbiAgICAvLyBTd2FwIGJpZy1lbmRpYW4gdG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYVxcbiAgICBlbmRpYW46IGZ1bmN0aW9uKG4pIHtcXG4gICAgICAvLyBJZiBudW1iZXIgZ2l2ZW4sIHN3YXAgZW5kaWFuXFxuICAgICAgaWYgKG4uY29uc3RydWN0b3IgPT0gTnVtYmVyKSB7XFxuICAgICAgICByZXR1cm4gY3J5cHQucm90bChuLCA4KSAmIDB4MDBGRjAwRkYgfCBjcnlwdC5yb3RsKG4sIDI0KSAmIDB4RkYwMEZGMDA7XFxuICAgICAgfVxcblxcbiAgICAgIC8vIEVsc2UsIGFzc3VtZSBhcnJheSBhbmQgc3dhcCBhbGwgaXRlbXNcXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG4ubGVuZ3RoOyBpKyspXFxuICAgICAgICBuW2ldID0gY3J5cHQuZW5kaWFuKG5baV0pO1xcbiAgICAgIHJldHVybiBuO1xcbiAgICB9LFxcblxcbiAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBhbnkgbGVuZ3RoIG9mIHJhbmRvbSBieXRlc1xcbiAgICByYW5kb21CeXRlczogZnVuY3Rpb24obikge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW107IG4gPiAwOyBuLS0pXFxuICAgICAgICBieXRlcy5wdXNoKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NikpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYmlnLWVuZGlhbiAzMi1iaXQgd29yZHNcXG4gICAgYnl0ZXNUb1dvcmRzOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIHdvcmRzID0gW10sIGkgPSAwLCBiID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrLCBiICs9IDgpXFxuICAgICAgICB3b3Jkc1tiID4+PiA1XSB8PSBieXRlc1tpXSA8PCAoMjQgLSBiICUgMzIpO1xcbiAgICAgIHJldHVybiB3b3JkcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBiaWctZW5kaWFuIDMyLWJpdCB3b3JkcyB0byBhIGJ5dGUgYXJyYXlcXG4gICAgd29yZHNUb0J5dGVzOiBmdW5jdGlvbih3b3Jkcykge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW10sIGIgPSAwOyBiIDwgd29yZHMubGVuZ3RoICogMzI7IGIgKz0gOClcXG4gICAgICAgIGJ5dGVzLnB1c2goKHdvcmRzW2IgPj4+IDVdID4+PiAoMjQgLSBiICUgMzIpKSAmIDB4RkYpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBoZXggc3RyaW5nXFxuICAgIGJ5dGVzVG9IZXg6IGZ1bmN0aW9uKGJ5dGVzKSB7XFxuICAgICAgZm9yICh2YXIgaGV4ID0gW10sIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSA+Pj4gNCkudG9TdHJpbmcoMTYpKTtcXG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSAmIDB4RikudG9TdHJpbmcoMTYpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGhleC5qb2luKCcnKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGhleCBzdHJpbmcgdG8gYSBieXRlIGFycmF5XFxuICAgIGhleFRvQnl0ZXM6IGZ1bmN0aW9uKGhleCkge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW10sIGMgPSAwOyBjIDwgaGV4Lmxlbmd0aDsgYyArPSAyKVxcbiAgICAgICAgYnl0ZXMucHVzaChwYXJzZUludChoZXguc3Vic3RyKGMsIDIpLCAxNikpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBiYXNlLTY0IHN0cmluZ1xcbiAgICBieXRlc1RvQmFzZTY0OiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIGJhc2U2NCA9IFtdLCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAzKSB7XFxuICAgICAgICB2YXIgdHJpcGxldCA9IChieXRlc1tpXSA8PCAxNikgfCAoYnl0ZXNbaSArIDFdIDw8IDgpIHwgYnl0ZXNbaSArIDJdO1xcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspXFxuICAgICAgICAgIGlmIChpICogOCArIGogKiA2IDw9IGJ5dGVzLmxlbmd0aCAqIDgpXFxuICAgICAgICAgICAgYmFzZTY0LnB1c2goYmFzZTY0bWFwLmNoYXJBdCgodHJpcGxldCA+Pj4gNiAqICgzIC0gaikpICYgMHgzRikpO1xcbiAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgYmFzZTY0LnB1c2goJz0nKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJhc2U2NC5qb2luKCcnKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJhc2UtNjQgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBiYXNlNjRUb0J5dGVzOiBmdW5jdGlvbihiYXNlNjQpIHtcXG4gICAgICAvLyBSZW1vdmUgbm9uLWJhc2UtNjQgY2hhcmFjdGVyc1xcbiAgICAgIGJhc2U2NCA9IGJhc2U2NC5yZXBsYWNlKC9bXkEtWjAtOStcXFxcL10vaWcsICcnKTtcXG5cXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMCwgaW1vZDQgPSAwOyBpIDwgYmFzZTY0Lmxlbmd0aDtcXG4gICAgICAgICAgaW1vZDQgPSArK2kgJSA0KSB7XFxuICAgICAgICBpZiAoaW1vZDQgPT0gMCkgY29udGludWU7XFxuICAgICAgICBieXRlcy5wdXNoKCgoYmFzZTY0bWFwLmluZGV4T2YoYmFzZTY0LmNoYXJBdChpIC0gMSkpXFxuICAgICAgICAgICAgJiAoTWF0aC5wb3coMiwgLTIgKiBpbW9kNCArIDgpIC0gMSkpIDw8IChpbW9kNCAqIDIpKVxcbiAgICAgICAgICAgIHwgKGJhc2U2NG1hcC5pbmRleE9mKGJhc2U2NC5jaGFyQXQoaSkpID4+PiAoNiAtIGltb2Q0ICogMikpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJ5dGVzO1xcbiAgICB9XFxuICB9O1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBjcnlwdDtcXG59KSgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI2NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vKiFcXG4gKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyXFxuICpcXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxcbiAqIEBsaWNlbnNlICBNSVRcXG4gKi9cXG5cXG4vLyBUaGUgX2lzQnVmZmVyIGNoZWNrIGlzIGZvciBTYWZhcmkgNS03IHN1cHBvcnQsIGJlY2F1c2UgaXQncyBtaXNzaW5nXFxuLy8gT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseVxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIChpc0J1ZmZlcihvYmopIHx8IGlzU2xvd0J1ZmZlcihvYmopIHx8ICEhb2JqLl9pc0J1ZmZlcilcXG59XFxuXFxuZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xcbiAgcmV0dXJuICEhb2JqLmNvbnN0cnVjdG9yICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcXG59XFxuXFxuLy8gRm9yIE5vZGUgdjAuMTAgc3VwcG9ydC4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseS5cXG5mdW5jdGlvbiBpc1Nsb3dCdWZmZXIgKG9iaikge1xcbiAgcmV0dXJuIHR5cGVvZiBvYmoucmVhZEZsb2F0TEUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zbGljZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0J1ZmZlcihvYmouc2xpY2UoMCwgMCkpXFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDI2NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlLCBnbG9iYWwpIHt2YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyohIGh0dHA6Ly9tdGhzLmJlL2Jhc2U2NCB2MC4xLjAgYnkgQG1hdGhpYXMgfCBNSVQgbGljZW5zZSAqL1xcbjsoZnVuY3Rpb24ocm9vdCkge1xcblxcblxcdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlcyBgZXhwb3J0c2AuXFxuXFx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cztcXG5cXG5cXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC5cXG5cXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXFxuXFx0XFx0bW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMgJiYgbW9kdWxlO1xcblxcblxcdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgLCBmcm9tIE5vZGUuanMgb3IgQnJvd3NlcmlmaWVkIGNvZGUsIGFuZCB1c2VcXG5cXHQvLyBpdCBhcyBgcm9vdGAuXFxuXFx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcXG5cXHRpZiAoZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwpIHtcXG5cXHRcXHRyb290ID0gZnJlZUdsb2JhbDtcXG5cXHR9XFxuXFxuXFx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuXFxuXFx0dmFyIEludmFsaWRDaGFyYWN0ZXJFcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcXG5cXHRcXHR0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xcblxcdH07XFxuXFx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcjtcXG5cXHRJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcXG5cXG5cXHR2YXIgZXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XFxuXFx0XFx0Ly8gTm90ZTogdGhlIGVycm9yIG1lc3NhZ2VzIHVzZWQgdGhyb3VnaG91dCB0aGlzIGZpbGUgbWF0Y2ggdGhvc2UgdXNlZCBieVxcblxcdFxcdC8vIHRoZSBuYXRpdmUgYGF0b2JgL2BidG9hYCBpbXBsZW1lbnRhdGlvbiBpbiBDaHJvbWl1bS5cXG5cXHRcXHR0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yKG1lc3NhZ2UpO1xcblxcdH07XFxuXFxuXFx0dmFyIFRBQkxFID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xcblxcdC8vIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvY29tbW9uLW1pY3Jvc3ludGF4ZXMuaHRtbCNzcGFjZS1jaGFyYWN0ZXJcXG5cXHR2YXIgUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyA9IC9bXFxcXHRcXFxcblxcXFxmXFxcXHIgXS9nO1xcblxcblxcdC8vIGBkZWNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYXRvYmAgYXMgZGVzY3JpYmVkIGluIHRoZVxcblxcdC8vIEhUTUwgU3RhbmRhcmQuIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYXRvYlxcblxcdC8vIFRoZSBvcHRpbWl6ZWQgYmFzZTY0LWRlY29kaW5nIGFsZ29yaXRobSB1c2VkIGlzIGJhc2VkIG9uIEBhdGvigJlzIGV4Y2VsbGVudFxcblxcdC8vIGltcGxlbWVudGF0aW9uLiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9hdGsvMTAyMDM5NlxcblxcdHZhciBkZWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xcblxcdFxcdGlucHV0ID0gU3RyaW5nKGlucHV0KVxcblxcdFxcdFxcdC5yZXBsYWNlKFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMsICcnKTtcXG5cXHRcXHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xcblxcdFxcdGlmIChsZW5ndGggJSA0ID09IDApIHtcXG5cXHRcXHRcXHRpbnB1dCA9IGlucHV0LnJlcGxhY2UoLz09PyQvLCAnJyk7XFxuXFx0XFx0XFx0bGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xcblxcdFxcdH1cXG5cXHRcXHRpZiAoXFxuXFx0XFx0XFx0bGVuZ3RoICUgNCA9PSAxIHx8XFxuXFx0XFx0XFx0Ly8gaHR0cDovL3doYXR3Zy5vcmcvQyNhbHBoYW51bWVyaWMtYXNjaWktY2hhcmFjdGVyc1xcblxcdFxcdFxcdC9bXithLXpBLVowLTkvXS8udGVzdChpbnB1dClcXG5cXHRcXHQpIHtcXG5cXHRcXHRcXHRlcnJvcihcXG5cXHRcXHRcXHRcXHQnSW52YWxpZCBjaGFyYWN0ZXI6IHRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuJ1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBiaXRDb3VudGVyID0gMDtcXG5cXHRcXHR2YXIgYml0U3RvcmFnZTtcXG5cXHRcXHR2YXIgYnVmZmVyO1xcblxcdFxcdHZhciBvdXRwdXQgPSAnJztcXG5cXHRcXHR2YXIgcG9zaXRpb24gPSAtMTtcXG5cXHRcXHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xcblxcdFxcdFxcdGJ1ZmZlciA9IFRBQkxFLmluZGV4T2YoaW5wdXQuY2hhckF0KHBvc2l0aW9uKSk7XFxuXFx0XFx0XFx0Yml0U3RvcmFnZSA9IGJpdENvdW50ZXIgJSA0ID8gYml0U3RvcmFnZSAqIDY0ICsgYnVmZmVyIDogYnVmZmVyO1xcblxcdFxcdFxcdC8vIFVubGVzcyB0aGlzIGlzIHRoZSBmaXJzdCBvZiBhIGdyb3VwIG9mIDQgY2hhcmFjdGVyc+KAplxcblxcdFxcdFxcdGlmIChiaXRDb3VudGVyKysgJSA0KSB7XFxuXFx0XFx0XFx0XFx0Ly8g4oCmY29udmVydCB0aGUgZmlyc3QgOCBiaXRzIHRvIGEgc2luZ2xlIEFTQ0lJIGNoYXJhY3Rlci5cXG5cXHRcXHRcXHRcXHRvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShcXG5cXHRcXHRcXHRcXHRcXHQweEZGICYgYml0U3RvcmFnZSA+PiAoLTIgKiBiaXRDb3VudGVyICYgNilcXG5cXHRcXHRcXHRcXHQpO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0XFx0cmV0dXJuIG91dHB1dDtcXG5cXHR9O1xcblxcblxcdC8vIGBlbmNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYnRvYWAgYXMgZGVzY3JpYmVkIGluIHRoZVxcblxcdC8vIEhUTUwgU3RhbmRhcmQ6IGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYnRvYVxcblxcdHZhciBlbmNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xcblxcdFxcdGlucHV0ID0gU3RyaW5nKGlucHV0KTtcXG5cXHRcXHRpZiAoL1teXFxcXDAtXFxcXHhGRl0vLnRlc3QoaW5wdXQpKSB7XFxuXFx0XFx0XFx0Ly8gTm90ZTogbm8gbmVlZCB0byBzcGVjaWFsLWNhc2UgYXN0cmFsIHN5bWJvbHMgaGVyZSwgYXMgc3Vycm9nYXRlcyBhcmVcXG5cXHRcXHRcXHQvLyBtYXRjaGVkLCBhbmQgdGhlIGlucHV0IGlzIHN1cHBvc2VkIHRvIG9ubHkgY29udGFpbiBBU0NJSSBhbnl3YXkuXFxuXFx0XFx0XFx0ZXJyb3IoXFxuXFx0XFx0XFx0XFx0J1RoZSBzdHJpbmcgdG8gYmUgZW5jb2RlZCBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgb2YgdGhlICcgK1xcblxcdFxcdFxcdFxcdCdMYXRpbjEgcmFuZ2UuJ1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBwYWRkaW5nID0gaW5wdXQubGVuZ3RoICUgMztcXG5cXHRcXHR2YXIgb3V0cHV0ID0gJyc7XFxuXFx0XFx0dmFyIHBvc2l0aW9uID0gLTE7XFxuXFx0XFx0dmFyIGE7XFxuXFx0XFx0dmFyIGI7XFxuXFx0XFx0dmFyIGM7XFxuXFx0XFx0dmFyIGQ7XFxuXFx0XFx0dmFyIGJ1ZmZlcjtcXG5cXHRcXHQvLyBNYWtlIHN1cmUgYW55IHBhZGRpbmcgaXMgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBsb29wLlxcblxcdFxcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGggLSBwYWRkaW5nO1xcblxcblxcdFxcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XFxuXFx0XFx0XFx0Ly8gUmVhZCB0aHJlZSBieXRlcywgaS5lLiAyNCBiaXRzLlxcblxcdFxcdFxcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCAxNjtcXG5cXHRcXHRcXHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKSA8PCA4O1xcblxcdFxcdFxcdGMgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xcblxcdFxcdFxcdGJ1ZmZlciA9IGEgKyBiICsgYztcXG5cXHRcXHRcXHQvLyBUdXJuIHRoZSAyNCBiaXRzIGludG8gZm91ciBjaHVua3Mgb2YgNiBiaXRzIGVhY2gsIGFuZCBhcHBlbmQgdGhlXFxuXFx0XFx0XFx0Ly8gbWF0Y2hpbmcgY2hhcmFjdGVyIGZvciBlYWNoIG9mIHRoZW0gdG8gdGhlIG91dHB1dC5cXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTggJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMiAmIDB4M0YpICtcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDYgJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciAmIDB4M0YpXFxuXFx0XFx0XFx0KTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKHBhZGRpbmcgPT0gMikge1xcblxcdFxcdFxcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCA4O1xcblxcdFxcdFxcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xcblxcdFxcdFxcdGJ1ZmZlciA9IGEgKyBiO1xcblxcdFxcdFxcdG91dHB1dCArPSAoXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMCkgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyID4+IDQpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDIpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdCc9J1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fSBlbHNlIGlmIChwYWRkaW5nID09IDEpIHtcXG5cXHRcXHRcXHRidWZmZXIgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDQpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdCc9PSdcXG5cXHRcXHRcXHQpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRyZXR1cm4gb3V0cHV0O1xcblxcdH07XFxuXFxuXFx0dmFyIGJhc2U2NCA9IHtcXG5cXHRcXHQnZW5jb2RlJzogZW5jb2RlLFxcblxcdFxcdCdkZWNvZGUnOiBkZWNvZGUsXFxuXFx0XFx0J3ZlcnNpb24nOiAnMC4xLjAnXFxuXFx0fTtcXG5cXG5cXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcXG5cXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XFxuXFx0aWYgKFxcblxcdFxcdHRydWVcXG5cXHQpIHtcXG5cXHRcXHQhKF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gKGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdHJldHVybiBiYXNlNjQ7XFxuXFx0XFx0fSkuY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fLCBleHBvcnRzLCBtb2R1bGUpLFxcblxcdFxcdFxcdFxcdF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fICE9PSB1bmRlZmluZWQgJiYgKG1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18pKTtcXG5cXHR9XFx0ZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgIWZyZWVFeHBvcnRzLm5vZGVUeXBlKSB7XFxuXFx0XFx0aWYgKGZyZWVNb2R1bGUpIHsgLy8gaW4gTm9kZS5qcyBvciBSaW5nb0pTIHYwLjguMCtcXG5cXHRcXHRcXHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBiYXNlNjQ7XFxuXFx0XFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cXG5cXHRcXHRcXHRmb3IgKHZhciBrZXkgaW4gYmFzZTY0KSB7XFxuXFx0XFx0XFx0XFx0YmFzZTY0Lmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBiYXNlNjRba2V5XSk7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9IGVsc2UgeyAvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXFxuXFx0XFx0cm9vdC5iYXNlNjQgPSBiYXNlNjQ7XFxuXFx0fVxcblxcbn0odGhpcykpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2OCkobW9kdWxlKSwgX193ZWJwYWNrX3JlcXVpcmVfXygyOCkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDI2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xcblxcdGlmKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XFxuXFx0XFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XFxuXFx0XFx0bW9kdWxlLnBhdGhzID0gW107XFxuXFx0XFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XFxuXFx0XFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImxvYWRlZFxcXCIsIHtcXG5cXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcblxcdFxcdFxcdGdldDogZnVuY3Rpb24oKSB7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIG1vZHVsZS5sO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9KTtcXG5cXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcXFwiaWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUuaTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XFxuXFx0fVxcblxcdHJldHVybiBtb2R1bGU7XFxufTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5NVUxUSUxBTkdVQUdFX1dPUkRJTkdTID0ge1xcbiAgICBzYXZlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2F2ZScsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZXInXFxuICAgIH0sXFxuICAgIHNhdmVDaGFuZ2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2F2ZSBjaGFuZ2VzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnJlZ2lzdHJlciBtb2RpZmljYXRpb25zJ1xcbiAgICB9LFxcbiAgICBjYW5jZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYW5jZWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXInXFxuICAgIH0sXFxuICAgIGVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsJ1xcbiAgICB9LFxcbiAgICBzdWJtaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdWJtaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGlkZXInXFxuICAgIH0sXFxuICAgIGNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maXJtJyxcXG4gICAgICAgICdmci1GUic6ICdDb25maXJtZXInXFxuICAgIH0sXFxuICAgIGRlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RlbGV0ZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyJ1xcbiAgICB9LFxcbiAgICBlbmFibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW5hYmxlZCcsXFxuICAgICAgICAnZnItRlInOiAnQWN0aWYnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGVybWlzc2lvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Blcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBkZXNjcmlwdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rlc2NyaXB0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXNjcmlwdGlvbidcXG4gICAgfSxcXG4gICAgbmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSdcXG4gICAgfSxcXG4gICAgbm9EYXRhRm91bmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBkYXRhIGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUgZG9ubsOpZSdcXG4gICAgfSxcXG4gICAgZmlyc3RuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmlyc3QgbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqW5vbSdcXG4gICAgfSxcXG4gICAgbG9hZGluZ0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9hZGluZyBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyIGRlIGNoYXJnZW1lbnQnXFxuICAgIH0sXFxuICAgIGRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscydcXG4gICAgfSxcXG4gICAgbGFzdG5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IG5hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSdcXG4gICAgfSxcXG4gICAgZXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyJ1xcbiAgICB9LFxcbiAgICByZWdpc3Rlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZ2lzdGVyJyxcXG4gICAgICAgICdmci1GUic6ICdTXFxcXCdlbnJlZ2lzdHJlcidcXG4gICAgfSxcXG4gICAgaW5zdGFuY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnN0YW5jZScsXFxuICAgICAgICAnZnItRlInOiAnSW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICB0aXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RpdGxlJyxcXG4gICAgICAgICdmci1GUic6ICdUaXRyZSdcXG4gICAgfSxcXG4gICAgdXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyJ1xcbiAgICB9LFxcbiAgICBtcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01yLicsXFxuICAgICAgICAnZnItRlInOiAnTS4nXFxuICAgIH0sXFxuICAgIG1yczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01ycy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01tZSdcXG4gICAgfSxcXG4gICAgbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNcy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lbGxlJ1xcbiAgICB9LFxcbiAgICBwcm9mOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvZi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ByJ1xcbiAgICB9LFxcbiAgICBkcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RyLicsXFxuICAgICAgICAnZnItRlInOiAnRHInXFxuICAgIH0sXFxuICAgIHNhbHV0YXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTYWx1dGF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTYWx1dGF0aW9uJ1xcbiAgICB9LFxcbiAgICBjb21wYW55OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29tcGFueScsXFxuICAgICAgICAnZnItRlInOiAnU29jacOpdMOpJ1xcbiAgICB9LFxcbiAgICBjb21wYW55TmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbXBhbnkgbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnTm9tIGRlIGxhIHNvY2nDqXTDqSdcXG4gICAgfSxcXG4gICAgYWRkcmVzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZHJlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FkcmVzc2UnXFxuICAgIH0sXFxuICAgIGNpdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdWaWxsZSdcXG4gICAgfSxcXG4gICAgc3RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnw4l0YXQnXFxuICAgIH0sXFxuICAgIGNvdW50cnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb3VudHJ5JyxcXG4gICAgICAgICdmci1GUic6ICdQYXlzJ1xcbiAgICB9LFxcbiAgICB6aXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdaaXAnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvZGUgcG9zdGFsJ1xcbiAgICB9LFxcbiAgICBwaG9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bob25lJyxcXG4gICAgICAgICdmci1GUic6ICdUw6lsw6lwaG9uZSdcXG4gICAgfSxcXG4gICAgbW9iaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9iaWxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2JpbGUnXFxuICAgIH0sXFxuICAgIHdlYnNpdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXZWJzaXRlJyxcXG4gICAgICAgICdmci1GUic6ICdTaXRlIHdlYidcXG4gICAgfSxcXG4gICAgc3RhcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnRMOpbWFycmVyJ1xcbiAgICB9LFxcbiAgICBzdG9wOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RvcCcsXFxuICAgICAgICAnZnItRlInOiAnQXJyw6p0ZXInXFxuICAgIH0sXFxuICAgIHJlc2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1LDqWluaXRpYWxpc2VyJ1xcbiAgICB9LFxcbiAgICBlZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlcidcXG4gICAgfSxcXG4gICAgY3JlYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXInXFxuICAgIH0sXFxuICAgIGFjdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBY3Rpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdBY3Rpb25zJ1xcbiAgICB9LFxcbiAgICBpbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5mbycsXFxuICAgICAgICAnZnItRlInOiAnSW5mbydcXG4gICAgfSxcXG4gICAgc2VhcmNoUGxhY2Vob2xkZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWFyY2guLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hlcmNoZXIuLi4nXFxuICAgIH0sXFxuICAgIGtleToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0tleScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqSdcXG4gICAgfSxcXG4gICAgdmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWYWx1ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyJ1xcbiAgICB9LFxcbiAgICBmaWVsZFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVxdWlyZWQgZmllbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wIG9ibGlnYXRvaXJlJ1xcbiAgICB9LFxcbiAgICBzaG93RGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgZGV0YWlscycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIGNsb3NlRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlIGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Zlcm1lciBsZXMgZMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIHNlYXJjaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCcsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlcidcXG4gICAgfSxcXG4gICAgYWRtaW5pc3RyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZG1pbmlzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQWRtaW5pc3RyYXRpb24nXFxuICAgIH0sXFxuICAgIGl0ZW1DcmVhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBjcmVhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnQgY3LDqcOpJ1xcbiAgICB9LFxcbiAgICBpdGVtVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gdXBkYXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG1vZGlmacOpJ1xcbiAgICB9LFxcbiAgICBpdGVtUmVuYW1lZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVuYW1lZCcsXFxuICAgICAgICAnZnItRlInOiAnTm9tIGRlIGxcXFxcJ8OpbMOpbWVudCBtb2RpZmnDqSdcXG4gICAgfSxcXG4gICAgaXRlbURlbGV0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBzdXBwcmltw6knXFxuICAgIH0sXFxuICAgIGNvbmZpcm1EZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGl0ZW1zSW1wb3J0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtcyBpbXBvcnRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50cyBpbXBvcnTDqXMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1JdGVtc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlc2UgaXRlbXM/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgY2VzIMOpbMOpbWVudHMgPydcXG4gICAgfSxcXG4gICAgaXRlbXNEZWxldGVJbXBvc3NpYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGNhblxcXFwndCBkZWxldGUgdGhlc2UgaXRlbXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9zc2libGUgZGUgc3VwcHJpbWVyIGNlcyDDqWzDqW1lbnRzJ1xcbiAgICB9LFxcbiAgICB3YXJuaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2FybmluZycsXFxuICAgICAgICAnZnItRlInOiAnQXR0ZW50aW9uJ1xcbiAgICB9LFxcbiAgICBleHBvcnRKU09OOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IGFzIEpTT04nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4cG9ydGVyIChKU09OKSdcXG4gICAgfSxcXG4gICAgcHJvZmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Byb2ZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb2ZpbCdcXG4gICAgfSxcXG4gICAgdGFyZ2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGFyZ2V0JyxcXG4gICAgICAgICdmci1GUic6ICdDaWJsZSdcXG4gICAgfSxcXG4gICAgYnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdieScsXFxuICAgICAgICAnZnItRlInOiAncGFyJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkRW1haWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGVtYWlsJyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZE51bWJlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ011c3QgYmUgYSBudW1iZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RvaXQgw6p0cmUgdW4gbm9tYnJlJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBodHRwcyB1cmwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VybCBodHRwcyBpbnZhbGlkJ1xcbiAgICB9LFxcbiAgICBzdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2VzcycsXFxuICAgICAgICAnZnItRlInOiAnU3VjY8OocydcXG4gICAgfSxcXG4gICAgdGFiTGlzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xpc3QgKHt0b3RhbH0pJyxcXG4gICAgICAgICdmci1GUic6ICdMaXN0ZSAoe3RvdGFsfSknXFxuICAgIH0sXFxuICAgIHRhYkVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IC0ge25hbWV9JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICB0YWJBZGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgLSBOZXcgaXRlbScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciAtIE5vdXZlbCDDqWzDqW1lbnQnXFxuICAgIH0sXFxuICAgIHRhYlJ1bjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1biAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnRXjDqWN1dGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICB0YWJWaWV3OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgLSB7bmFtZX0nXFxuICAgIH0sXFxuICAgIHNlbGVjdEFsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdG91dCdcXG4gICAgfSxcXG4gICAgdW5zZWxlY3RBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVbnNlbGVjdCBhbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXPDqWxlY3Rpb25uZXIgdG91dCdcXG4gICAgfSxcXG4gICAgYWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyJ1xcbiAgICB9LFxcbiAgICBpbXBvcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbXBvcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyJ1xcbiAgICB9LFxcbiAgICBleHBvcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBvcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4cG9ydGVyJ1xcbiAgICB9LFxcbiAgICBleHBvcnRBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBvcnQgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciB0b3V0J1xcbiAgICB9LFxcbiAgICBkZWxldGVBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgdG91dCdcXG4gICAgfSxcXG4gICAgc2F2ZUFsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTYXV2ZWdhcmRlciB0b3V0J1xcbiAgICB9LFxcbiAgICBydW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdSdW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4w6ljdXRlcidcXG4gICAgfSxcXG4gICAgcmVuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVuYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdSZW5vbW1lcidcXG4gICAgfSxcXG4gICAgZHVwbGljYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHVwbGljYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEdXBsaXF1ZXInXFxuICAgIH0sXFxuICAgIHR5cGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1R5cGVzJ1xcbiAgICB9LFxcbiAgICBmdWxsc2NyZWVuOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnVsbC1zY3JlZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BsZWluIMOpY3JhbidcXG4gICAgfSxcXG4gICAgcmVkdWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVkdWNlJyxcXG4gICAgICAgICdmci1GUic6ICdSw6lkdWlyZSdcXG4gICAgfSxcXG4gICAgYXBwS2V5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwbGljYXRpb24ga2V5JyxcXG4gICAgICAgICdmci1GUic6ICdDbMOpIGRcXFxcJ2FwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBhcHBJbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwbGljYXRpb24gaW5mbycsXFxuICAgICAgICAnZnItRlInOiAnSW5mb3JtYXRpb24gc3VyIGxcXFxcJ2FwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0TW9kaWZpY2F0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFzdCBtb2RpZmljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlcm5pw6hyZSBtb2RpZmljYXRpb24nXFxuICAgIH0sXFxuICAgIGxhc3RNb2RpZmljYXRpb25CeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3QgbW9kaWZpY2F0aW9uIG1hZGUgYnkge25hbWV9IG9uIHtkYXRlfScsXFxuICAgICAgICAnZnItRlInOiAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBmYWl0ZSBwYXIge25hbWV9IGxlIHtkYXRlfSdcXG4gICAgfSxcXG4gICAga2V5RXhpc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXkgYWxyZWFkeSBleGlzdC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIGNsw6kgZXhpc3RlIGTDqWrDoC4nXFxuICAgIH0sXFxuICAgIHNpemU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaXplJyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUnXFxuICAgIH0sXFxuICAgIHRhYkNsb3NlVW5zYXZlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIHRoaXMgdGFiIGFuZCBsb3NlIHlvdXIgdXBkYXRlcz8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgYXZleiBlZmZlY3R1w6kgZGVzIG1vZGlmaWNhdGlvbnMgc2FucyBsZXMgZW5yZWdpc3RyZXIuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGZlcm1lciBjZXQgb25nbGV0IGV0IHBlcmRyZSBsZXMgZG9ubsOpZXMgbm9uIHNhdXZlZ2FyZMOpZXMgPydcXG4gICAgfSxcXG4gICAgbmFtZUFscmVhZHlUYWtlbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05hbWUgYWxyZWFkeSB0YWtlbi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSBkw6lqw6AgdXRpbGlzw6kuJ1xcbiAgICB9LFxcbiAgICBuYW1lTm9Eb3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBjYW5ub3QgY29udGFpbiBhIFxcXFwnLlxcXFwnJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gbmUgcGV1dCBwYXMgY29udGVuaXIgZGUgXFxcXCcuXFxcXCcnXFxuICAgIH0sXFxuICAgIHJlc291cmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzb3VyY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Jlc3NvdXJjZSdcXG4gICAgfSxcXG4gICAgdGFyZ2V0Um9vdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhcmdldCByb290JyxcXG4gICAgICAgICdmci1GUic6ICdSYWNpbmUgZGUgbGEgY2libGUnXFxuICAgIH0sXFxuICAgIHRhcmdldFBhdGg6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYXJnZXQgcGF0aCcsXFxuICAgICAgICAnZnItRlInOiAnQ2hlbWluIHZlcnMgbGEgY2libGUnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9wZXJ0aWVzJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXNFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhbnkgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgblxcXFwnYXZleiBhdWN1bmUgcHJvcHJpw6l0w6knXFxuICAgIH0sXFxuICAgIGtleVVuaXF1ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBrZXkgbXVzdCBiZSB1bmlxdWUuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSBjbMOpIGRvaXQgw6p0cmUgdW5pcXVlLidcXG4gICAgfSxcXG4gICAgcHJvcGVydHlBZGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIHByb3ByacOpdMOpJ1xcbiAgICB9LFxcbiAgICBtdWx0aWxhbmd1YWdlRmllbGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGlzIGEgbXVsdGlsaW5ndWFsIGZpZWxkLiBFbmdsaXNoIGlzIHJlcXVpcmVkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2VjaSBlc3QgdW4gY2hhbXAgbXVsdGlsaW5ndWUuIExcXFxcJ2FuZ2xhaXMgZXN0IG9ibGlnYXRvaXJlLidcXG4gICAgfSxcXG4gICAgZW5nbGlzaERlc2NyaXB0aW9uUmVxdWlyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbmdsaXNoIGRlc2NyaXB0aW9uIGlzIHJlcXVpcmVkLicsXFxuICAgICAgICAnZnItRlInOiAnTGEgZGVzY3JpcHRpb24gYW5nbGFpc2UgZXN0IG9ibGlnYXRvaXJlLidcXG4gICAgfSxcXG4gICAgbWF4U2l6ZTFHQjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01heGltdW0gc2l6ZSBhbGxvd2VkIGlzIDFHQi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIHRhaWxsZSBtYXhpbWFsZSBhdXRob3Jpc8OpZSBlc3QgZGUgMUdPLidcXG4gICAgfSxcXG4gICAgaW52YWxpZFNpemVNYXgxR0I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHRvbyBiaWcsIG1heGltdW0gc2l6ZSBhbGxvd2VkIGlzIDFHQi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgdHJvcCBsb3VyZCwgbGEgdGFpbGxlIG1heGltYWxlIGF1dGhvcmlzw6llIGVzdCBkZSAxR08uJ1xcbiAgICB9LFxcbiAgICBuYW1lQWxyZWFkeUV4aXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLicsXFxuICAgICAgICAnZnItRlInOiAnQ2Ugbm9tIGV4aXN0ZSBkw6lqw6AuJ1xcbiAgICB9LFxcbiAgICByZXNvdXJjZU5vdEZvdW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gcmVzb3VyY2UgaGFzIGJlZW4gZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSByZXNzb3VyY2UgblxcXFwnYSDDqXTDqSB0cm91dsOpZSdcXG4gICAgfSxcXG4gICAgcmVzb3VyY2VzQXR0YWNoZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNvdXJjZSBhdHRhY2hlZCcsXFxuICAgICAgICAnZnItRlInOiAnUmVzc291cmNlIGF0dGFjaMOpZSdcXG4gICAgfSxcXG4gICAgY29uZmlybVVwZGF0ZUZvckNvbnNpc3RhbmN5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXQgc2VlbXMgbGlrZSB5b3VyIGl0ZW1zIGFyZSBub3Qgc3luY2hyb25pemVkIHdpdGggdGhlIHNlcnZlciBhbnltb3JlLCB5b3Ugc2hvdWxkIHNhdmUgeW91ciB3b3JrIGFuZCB1cGRhdGUgdGhlIHNlcnZpY2UuJyxcXG4gICAgICAgICdmci1GUic6ICdJbCBzZW1ibGUgcXVlIHZvcyDDqWzDqW1lbnRzIG5lIHNvbnQgcGx1cyBzeW5jaHJvbmlzw6lzIGF2ZWMgbGUgc2VydmV1ciwgdm91cyBkZXZyaWV6IHNhdXZlZ2FyZGVyIHZvdHJlIHRyYXZhaWwgZXQgbWV0dHJlIMOgIGpvdXIgbGUgc2VydmljZS4nXFxuICAgIH0sXFxuICAgIGl0ZW1Ob3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gbm90IGZvdW5kLicsXFxuICAgICAgICAnZnItVVMnOiAnQXVjdW4gw6lsw6ltZW50IHRyb3V2w6kuJ1xcbiAgICB9LFxcbiAgICBzdGF0dXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0dXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N0YXR1dCdcXG4gICAgfSxcXG4gICAgbm9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vbmUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuJ1xcbiAgICB9LFxcbiAgICBpdGVtc1JlYWRvbmx5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlc2XigIJpdGVtcyBhcmUgb25seSByZWFkYWJsZS4gVGhleSBjYW4gbm90IGJlIGRlbGV0ZWQuJyxcXG4gICAgICAgICdmci1GUic6ICdDZXMgw6lsw6ltZW50cyBuZSBzb250IHBhcyBtb2RpZmlhYmxlcy4gSWxzIG5lIHBldXZlbnQgcGFzIMOqdHJlIHN1cHByaW3DqXMuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VucmVnaXN0cmVtZW50J1xcbiAgICB9LFxcbiAgICBiYWNrVG9Mb2dpbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2sgdG8gc2lnbiBpbiBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkZSBjb25uZXhpb24nXFxuICAgIH0sXFxuICAgIHJlZ2lzdHJhdGlvblN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdWNjZXNzZnVsIHJlZ2lzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZW1lbnQgcsOpdXNzaSdcXG4gICAgfSxcXG4gICAgc3VjY2Vzc1JlZ2lzdGVyTWFpbFNlbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3Ugd2lsbCByZWNlaXZlIGEgY29uZmlybWF0aW9uIGVtYWlsLicsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBhbGxleiByZWNldm9pciB1biBlbWFpbCBkZSBjb25maXJtYXRpb24uJ1xcbiAgICB9LFxcbiAgICBzdWNjZXNzUmVnaXN0cmF0aW9uTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lmIHlvdSBhbHJlYWR5IHNldCB5b3VyIHBhc3N3b3JkLCB5b3UgY2FuIG5vdyBzaWduIGluLiBPdGhlcndpc2UsIHBsZWFzZSBjbGljayBvbiB0aGUgbGluayBzZW50IHRvIHlvdSBieSBlbWFpbCB0byBhY3RpdmF0ZSB5b3VyIGFjY291bnQuJyxcXG4gICAgICAgICdmci1GUic6ICdTaSB2b3VzIGF2ZXogZMOpasOgIGNyw6nDqSB2b3RyZSBtb3QgZGUgcGFzc2UsIHZvdXMgcG91dmV6IHZvdXMgY29ubmVjdGVyIGTDqHMgbWFpbnRlbmFudC4gU2lub24sIHZvdXMgdHJvdXZlcmV6IHVuIGxpZW4gZGFucyBsXFxcXCdlbWFpbCBkZSBjb25maXJtYXRpb24gcXVpIHZvdXMgcGVtZXR0cmEgZFxcXFwnYWN0aXZlciB2b3RyZSBjb21wdGUuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb25FbWFpbEhlbHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYWtlIHN1cmUgdGhlIGVtYWlsIGlzIGNvcnJlY3QgdG8gcmVjZWl2ZSB0aGUgY29uZmlybWF0aW9uIGxpbmsnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHZvdXMgYXNzdXJlciBxdWUgdm90cmUgZW1haWwgZXN0IGNvcnJlY3QgcG91ciBwb3V2b2lyIGZpbmFsaXNlciBsXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgcGxlYXNlV2FpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSB3YWl0JyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBwYXRpZW50ZXInXFxuICAgIH0sXFxuICAgIGltcG9ydExvYWRpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3VyIGltcG9ydCBmaWxlIGlzIGJlaW5nIHByb2Nlc3NlZC4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgaW1wb3J0IGVzdCBlbiBjb3VycyBkZSB0cmFpdGVtZW50Li4uJ1xcbiAgICB9LFxcbiAgICBleHBvcnRMb2FkaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBleHBvcnQgZmlsZSBpcyBiZWluZyBwcmVwYXJlZC4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgZXhwb3J0IGVzdCBlbiBjb3VycyBkZSBjaGFyZ2VtZW50Li4uJ1xcbiAgICB9LFxcbiAgICBjbG9zZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlJyxcXG4gICAgICAgICdmci1GUic6ICdGZXJtZXInXFxuICAgIH0sXFxuICAgIHNlcnZpY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlJyxcXG4gICAgICAgICdmci1GUic6ICdTZXJ2aWNlJ1xcbiAgICB9LFxcbiAgICByZW5hbWVEaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBjbG9zZSBhbnkgdmlldyBvciBlZGl0IHRhYiBjb25jZXJuaW5nIHRoaXMgaXRlbSBpZiB5b3Ugd2FudCB0byByZW5hbWUgaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIGZlcm1lciB0b3V0IG9uZ2xldCBjb25jZXJuYW50IGNldCDDqWzDqW1lbnQgc2kgdm91cyBzb3VoYWl0ZXogbGUgcmVub21tZXInXFxuICAgIH0sXFxuICAgIGRlbGV0ZURpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGNsb3NlIGFueSB2aWV3IG9yIGVkaXQgdGFiIGNvbmNlcm5pbmcgdGhpcyBpdGVtIGlmIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgZmVybWVyIHRvdXQgb25nbGV0IGNvbmNlcm5hbnQgY2V0IMOpbMOpbWVudCBzaSB2b3VzIHNvdWhhaXRleiBsZSBzdXBwcmltZXInXFxuICAgIH0sXFxuICAgIHJlc3VsdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3Jlc3VsdCcsXFxuICAgICAgICAnZnItRlInOiAncsOpc3VsdGF0J1xcbiAgICB9LFxcbiAgICByZXN1bHRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAncmVzdWx0cycsXFxuICAgICAgICAnZnItRlInOiAncsOpc3VsdGF0cydcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlTGFiZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RyYXRpb24gdHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSBkXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25SZWdpc3RyYXRpb25UeXBlRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugc2VsZWN0IHRoZSB0eXBlIG9mIHJlZ2lzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc8OpbGVjdGlvbm5lciBsZSB0eXBlIGRcXFxcJ2VucmVnaXN0cmVtZW50J1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblR5cGVTdXBwbGllcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N1cHBsaWVyJyxcXG4gICAgICAgICdmci1GUic6ICdGb3Vybmlzc2V1cidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlQ2FwaXRhbFByb2plY3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYXBpdGFsIFByb2plY3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhcGl0YWwgUHJvamVjdCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlSW50ZXJuYWxVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW50ZXJuYWwgVXNlcicsXFxuICAgICAgICAnZnItRlInOiAnSW50ZXJuYWwgVXNlcidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25JbnRybzE6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIENvbW11bml0eSBlbmFibGVzIENoZXZyb24gU3VwcGxpZXJzLCBDaGV2cm9uIEludGVybmFsIFVzZXJzIGFuZCBDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdHMgdG8gcGVyZm9ybSBlbGVjdHJvbmljIHRyYW5zYWN0aW9ucyB3aXRoIENoZXZyb24gSVQgc3lzdGVtcyBpbiBhIGhpZ2hseSBzZWN1cmUgYnV0IHZlcnkgZWFzeSBtYW5uZXIuJyxcXG4gICAgICAgICdmci1GUic6ICdDZXR0ZSBjb21tdW5hdXTDqSBwZXJtZXQgYXV4IGZvdXJuaXNzZXVycywgXFxcIkludGVybmFsIFVzZXJcXFwiIGV0IFxcXCJDYXBpdGFsIFByb2plY3RcXFwiIENoZXZyb24gZGUgcsOpYWxpc2VyIGRlcyDDqWNoYW5nZXMgw6lsZWN0cm9uaXF1ZXMgYXZlYyBsZXMgc3lzdMOobWVzIGluZm9ybWF0aXF1ZXMgZGUgQ2hldnJvbiBkZSBmYcOnb24gc2ltcGxlIGV0IHPDqWN1cmlzw6llLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25TdXBwbGllckludHJvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8gYmUgcGFydCBvZiB0aGUgQ2hldnJvbiBDb21tdW5pdHksIHlvdSBtdXN0IGhhdmUgYmVlbiBpbnZpdGVkIGFuZC9vciBhdXRob3JpemVkIGJ5IENoZXZyb24uJyxcXG4gICAgICAgICdmci1GUic6ICdQb3VyIGZhaXJlIHBhcnRpZSBkZSBsYSBjb21tdW5hdXTDqSBDaGV2cm9uLCB2b3VzIGRldmV6IGF2b2lyIHJlw6d1IHVuZSBpbnZpdGF0aW9uIGV0L291IHVuZSBhdXRvcmlzYXRpb24gZGUgbGEgcGFydCBkZSBDaGV2cm9uLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25QaWR4aWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEJyxcXG4gICAgICAgICdmci1GUic6ICdQSURYIElEJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZEhlbHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgQ2hldnJvbiBQSURYIElEIGlzIGZvdW5kIGluIHRoZSBpbnZpdGF0aW9uIGVtYWlsIHNlbnQgYnkgQ2hldnJvbicsXFxuICAgICAgICAnZnItRlInOiAnTGUgXFxcIlBJRFggSURcXFwiIENoZXZyb24gc2UgdHJvdXZlIGRhbnMgbFxcXFwnZW1haWwgZFxcXFwnaW52aXRhdGlvbiBlbnZvecOpIHBhciBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGVudGVyIHRoZSBDaGV2cm9uIFBJRFggSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHNhaXNpciBsZSBcXFwiUElEWCBJRFxcXCIgQ2hldnJvbidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25WZW5kb3JpZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VSUCBWZW5kb3IgSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VSUCBWZW5kb3IgSUQnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gRVJQIFZlbmRvciBJRCBpcyBmb3VuZCBpbiB0aGUgaW52aXRhdGlvbiBlbWFpbCBzZW50IHRvIHlvdSBieSBDaGV2cm9uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBcXFwiRVJQIFZlbmRvciBJRFxcXCIgQ2hldnJvbiBzZSB0cm91dmUgZGFucyBsXFxcXCdlbWFpbCBkXFxcXCdpbnZpdGF0aW9uIGVudm95w6kgcGFyIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBFUlAgVmVuZG9yIElEJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgbGUgXFxcIkVSUCBWZW5kb3IgSURcXFwiIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uQWdyZWVtZW50SW50cm86IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxzcGFuPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlBsZWFzZSByZWFkIHRoZSZuYnNwOzwvc3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8YSB0YXJnZXQ9XFxcXFxcXCJfYmxhbmtcXFxcXFxcIiBocmVmPVxcXFxcXFwiaHR0cDovL3d3dy5iMmVlbi5jb20vX2NvbW11bml0eW1hdGVyaWFsL2NoZXZyb24vQWdyZWVtZW50X2IyZWVuX0NoZXZyb25fUHJvZC5wZGZcXFxcXFxcIj5jb250cmFjdHVhbCBhZ3JlZW1lbnQ8L2E+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7YW5kIGNvbmZpcm0gYmVsb3c8L3NwYW4+XFxcXG4gICAgICAgICAgICA8L3NwYW4+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8c3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5NZXJjaSBkZSBsaXJlJm5ic3A7PC9zcGFuPlxcXFxuICAgICAgICAgICAgICAgIDxhIHRhcmdldD1cXFxcXFxcIl9ibGFua1xcXFxcXFwiIGhyZWY9XFxcXFxcXCJodHRwOi8vd3d3LmIyZWVuLmNvbS9fY29tbXVuaXR5bWF0ZXJpYWwvY2hldnJvbi9BZ3JlZW1lbnRfYjJlZW5fQ2hldnJvbl9Qcm9kLnBkZlxcXFxcXFwiPmwnYWNjb3JkIGNvbnRyYWN0dWVsPC9hPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPiZuYnNwO2V0IGRlIHZhbGlkZXIgY2ktZGVzc291czwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvc3Bhbj5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudExhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSSBoYXZlIHJlYWQgYW5kIEkgYWNjZXB0IHRoZSBUZXJtcyBhbmQgQ29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCcsXFxuICAgICAgICAnZnItRlInOiAnSlxcXFwnYWkgbHUgZXQgYWNjZXB0ZSBsZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlcyBkZSBjZSBjb250cmF0J1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGFjY2VwdCB0aGUgVGVybXMgYW5kIENvbmRpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHZhbGlkZXIgbGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZXMnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uSW50ZXJuYWxVc2VySW50cm8yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8gZ2V0IHlvdXIgcmVnaXN0cmF0aW9uIGFjY2VwdGVkLCBwbGVhc2UgcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgUElEWCBJRCBhbmQgQ2hldnJvbiBwYXNzd29yZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BvdXIgcG91cnN1aXZyZSB2b3RyZSBlbnJlZ2lzdHJlbWVudCwgbWVyY2kgZFxcXFwnZW50cmVyIGxlIFxcXCJQSURYIElEXFxcIiBldCBtb3QgZGUgcGFzc2UgQ2hldnJvbiBwdWlzIHZhbGlkZXIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2hldnJvbiBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGFzc3dvcmRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gcGFzc3dvcmQgaXMgZm91bmQgaW4gdGhlIGludml0YXRpb24gZW1haWwgc2VudCBieSBDaGV2cm9uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtb3QgZGUgcGFzc2UgQ2hldnJvbiBzZSB0cm91dmUgZGFucyBsXFxcXCdlbWFpbCBkXFxcXCdpbnZpdGF0aW9uIGVudm95w6kgcGFyIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGFzc3dvcmRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc2Fpc2lyIGxlIG1vdCBkZSBwYXNzZSBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkNhcGl0YWxQcm9qZWN0SW50cm86IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3UgYXJlIGNyZWF0aW5nIHRoaXMgYWNjb3VudCBmb3IgYSBDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgY3LDqWV6IGNlIGNvbXB0ZSBwb3VyIHVuIFxcXCJDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdFxcXCIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZFZlbmRvcmlkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEIC8gRVJQIFZlbmRvciBJRCBhcmUgbm90IGNvcnJlY3QuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWVzIHlvdSBwcm92aWRlZCBhbmQgcmV0cnkuJyxcXG4gICAgICAgICdmci1GUic6ICdcXFwiUElEWCBJRFxcXCIgLyBcXFwiRVJQIFZlbmRvciBJRFxcXCIgaW5jb3JyZWN0cy4gTWVyY2kgZGUgdsOpcmlmaWVyIGxlcyB2YWxldXJzIHNhaXNpZXMgYXZhbnQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGlkeGlkUGFzc3dvcmRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BJRFggSUQgLyBDaGV2cm9uIFBhc3N3b3JkIGFyZSBub3QgY29ycmVjdC4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZXMgeW91IHByb3ZpZGVkIGFuZCByZXRyeS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1xcXCJQSURYIElEXFxcIiAvIE1vdCBkZSBwYXNzZSBpbmNvcnJlY3RzLiBNZXJjaSBkZSB2w6lyaWZpZXIgbGVzIHZhbGV1cnMgc2Fpc2llcyBhdmFudCBkZSByw6llc3NheWVyLidcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldFRvb2x0aXBEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZSBncm91cGUgZGUgcGVybWlzc2lvbnMnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRUb29sdGlwRWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VkaXQgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgY2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcENsb25lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIGEgbmV3IHBlcm1pc3Npb24gc2V0IHdpdGggcHJlZmlsbGVkIGRhdGEgZnJvbSB0aGlzIG9uZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuIG5vdXZlYXUgZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGF2ZWMgbGVzIGRvbm7DqWVzIGRlIGNlbHVpLWNpJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcENyb3NzSW5zdGFuY2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBpcyBhIGdsb2JhbCBwZXJtaXNzaW9uIHNldCcsXFxuICAgICAgICAnZnItRlInOiAnQ2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGVzdCBnbG9iYWwnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRBdExlYXN0T25lU2NvcGVSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F0IGxlYXN0IG9uZSBzY29wZSBzdHJpbmcgaXMgcmVxdWlyZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1IG1vaW5zIHVuIHNjb3BlIGRvaXQgw6p0cmUgcmVuc2VpZ27DqSdcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldHNEZWxldGVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHBlcm1pc3Npb24gc2V0PycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIGdyb3VwZSBkZSBwZXJtaXNzaW9ucyA/J1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYXNzb2NpYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzYXNzb2NpYXRlIHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXNhc3NvY2llciBjZXQgdXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIHJlYWxtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVhbG0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RvbWFpbmUnXFxuICAgIH0sXFxuICAgIGVtYWlsVmVyaWZpZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbWFpbCB2ZXJpZmllZCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgY29uZmlybcOpJ1xcbiAgICB9LFxcbiAgICBwb2xpY2llczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BvbGljaWVzJyxcXG4gICAgICAgICdmci1GUic6ICdEcm9pdHMgZFxcXFwnYWNjw6hzJ1xcbiAgICB9LFxcbiAgICBvcmdQb3NpdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcmdhbml6YXRpb24gcG9zaXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdQb3NpdGlvbnMgZFxcXFwnb3JnYW5pc2F0aW9uJ1xcbiAgICB9LFxcbiAgICB1c2VyUmVsb2FkT3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIHVzZXIgb3JnYW5pemF0aW9uIHBvc2l0aW9ucycsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgbGVzIHBvc2l0aW9ucyBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldCcsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICB1c2VyUmVzZW5kQWN0aXZhdGlvbkVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZW5kIGFjdGl2YXRpb24gZW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbnZveWVyIGxcXFxcJ2VtYWlsIGRcXFxcJ2FjdGl2YXRpb24nXFxuICAgIH0sXFxuICAgIHVzZXJTaG93T3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyB1c2VyIG9yZ2FuaXphdGlvbiBwb3NpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGVzIHBvc2l0aW9ucyBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRzRm9ySW5zdGFuY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldHMgZm9yIGluc3RhbmNlJyxcXG4gICAgICAgICdmci1GUic6ICdHcm91cGVzIGRlIHBlcm1pc3Npb25zIHBvdXIgbFxcXFwnaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIG90aGVyUHJvcGVydGllczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ090aGVyIHByb3BlcnRpZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1dHJlcyBwcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIHNldCBtdXN0IGJlIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdSBtb2lucyB1biBncm91cGUgZGUgcGVybWlzc2lvbnMgZG/DrnQgw6p0cmUgYXNzaWduw6kgw6AgbFxcXFwndXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIG9yZ1Bvc2l0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3JnYW5pemF0aW9uIHBvc2l0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdQb3NpdGlvbiBkYW5zIGxcXFxcJ29yZ2FuaXNhdGlvbidcXG4gICAgfSxcXG4gICAgdXNlcnNFbWFpbFBsYWNlaG9sZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsLi4uJ1xcbiAgICB9LFxcbiAgICBzZWFyY2hCeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCBieScsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlciBwYXInXFxuICAgIH0sXFxuICAgIHRvb2x0aXBBZGRVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZSB0aGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgbmV3IHVzZXIgeW91IHdhbnQgdG8gYXNzb2NpYXRlIHRvIHRoaXMgaW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VudHJlciBsXFxcXCdhZHJlc3NlIGVtYWlsIGR1IG5vdXZlbCB1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogYXNzb2NpZXIgw6AgY2V0dGUgaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIGFzc29jaWF0ZVVzZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBc3NvY2lhdGUgbmV3IHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fzc29jaWVyIG5vdXZlbCB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgdXNlckRlbGV0ZUNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgdXNlcj8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgdXRpbGlzYXRldXIgPydcXG4gICAgfSxcXG4gICAgdXNlckRpc2Fzc29jaWF0ZUNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGlzYXNzb2NpYXRlIHRoaXMgdXNlciBmcm9tIHRoZSBjdXJyZW50IGluc3RhbmNlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgZMOpc2Fzc29jaWVyIGNldCB1dGlsaXNhdGV1ciBkZSBsXFxcXCdpbnN0YW5jZSA/J1xcbiAgICB9LFxcbiAgICBzaG93QWxsVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHVzZXJzIG9mIGFsbCBpbnN0YW5jZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyB1dGlsaXNhdGV1cnMgZGUgdG91dGVzIGxlcyBpbnN0YW5jZXMnXFxuICAgIH0sXFxuICAgIHNob3dTY29wZWxlc3NVc2Vyczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ09ubHkgZGlzcGxheSB1c2VycyB3aXRob3V0IGFueSBwZXJtaXNzaW9uJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBzZXVsZW1lbnQgbGVzIHV0aWxpc2F0ZXVycyBzYW5zIGRyb2l0cyBkXFxcXCdhY2PDqHMnXFxuICAgIH0sXFxuICAgIHNob3dPcmdsZXNzVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmx5IGRpc3BsYXkgdXNlcnMgd2l0aG91dCBhbnkgYXNzb2NpYXRlZCBvcmcgbm9kZScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgc2V1bGVtZW50IGxlcyB1dGlsaXNhdGV1cnMgc2FucyBwb3NpdGlvbiBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIGRpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2Fzc29jaWF0ZScsXFxuICAgICAgICAnZnItRlInOiAnRMOpc2Fzc29jaWVyJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Blcm1pc3Npb24gc2V0cycsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlcyBkZSBwZXJtaXNzaW9ucydcXG4gICAgfSxcXG4gICAgdXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VycycsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXJzJ1xcbiAgICB9LFxcbiAgICBmaWVsZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWVsZHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wcydcXG4gICAgfSxcXG4gICAgaXNLZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXk/JyxcXG4gICAgICAgICdmci1GUic6ICdDbMOpID8nXFxuICAgIH0sXFxuICAgIGFkZEZpZWxkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgZmllbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gY2hhbXAnXFxuICAgIH0sXFxuICAgIGNyZWF0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIGEgbmV3IHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXIgdW5lIG5vdXZlbGxlIHRhYmxlJ1xcbiAgICB9LFxcbiAgICBlZGl0VGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVcGRhdGUgdGhlIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2RpZmllciBsYSB0YWJsZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZFhtbFRhZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgdmFsdWUuIEFsbG93ZWQgY2hhcnM6IGEteiBBLVogMC05IF8gOiAtIC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGV1ciBpbnZhbGlkZS4gQ2FyYWN0w6hyZXMgYXV0b3Jpc8OpcyA6IGEteiBBLVogMC05IF8gOiAtIC4nXFxuICAgIH0sXFxuICAgIHdpZHRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2lkdGgnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhcmdldXInXFxuICAgIH0sXFxuICAgIGhlaWdodDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hlaWdodCcsXFxuICAgICAgICAnZnItRlInOiAnSGF1dGV1cidcXG4gICAgfSxcXG4gICAgc21hbGxTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU21hbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BldGl0J1xcbiAgICB9LFxcbiAgICBtZWRpdW1TaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVkaXVtJyxcXG4gICAgICAgICdmci1GUic6ICdNb3llbidcXG4gICAgfSxcXG4gICAgbGFyZ2VTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFyZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dyYW5kJ1xcbiAgICB9LFxcbiAgICBmdWxsU2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Z1bGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BsZWluJ1xcbiAgICB9LFxcbiAgICBlZGl0RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICB2aWV3RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICByZXByb2Nlc3NEb2N1bWVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcHJvY2VzcyBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnUmVsYW5jZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHJlbG9hZERvY3VtZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICdSZWNoYXJnZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHByaW50RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmludCBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnSW1wcmltZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHZpZXdGb3JtSnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IHRoZSBmb3JtJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIGZvcm11bGFpcmUnXFxuICAgIH0sXFxuICAgIGVkaXRGb3JtSnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHVzaW5nIHRoZSBmb3JtJyxcXG4gICAgICAgICdmci1GUic6ICdFZGl0ZXIgw6AgbFxcXFwnYWlkZSBkdSBmb3JtdWxhaXJlJ1xcbiAgICB9LFxcbiAgICB2aWV3U291cmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyB0aGUgc291cmNlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxhIHNvdXJjZSdcXG4gICAgfSxcXG4gICAgZWRpdE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgdmlld01lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgcmVwcm9jZXNzTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcHJvY2VzcyBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZWxhbmNlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICByZWxvYWRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hhcmdlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBwcmludE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmludCBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdJbXByaW1lciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBsb2NrZWRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBtZXNzYWdlIGlzIGN1cnJlbnRseSBsb2NrZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIG1lc3NhZ2UgZXN0IHZlcnJvdWlsbMOpJ1xcbiAgICB9LFxcbiAgICBiYWNrVG9MaXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmV0dXJuIHRvIGxpc3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBsaXN0ZSdcXG4gICAgfSxcXG4gICAgZW1wdHlBcHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb25lJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUnXFxuICAgIH0sXFxuICAgIG5vQXBwU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBhcHBsaWNhdGlvbiBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIGFwcGxpY2F0aW9uIHPDqWxlY3Rpb25uw6llJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RBcHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYW4gYXBwbGljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdW5lIGFwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsb2dvdXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaWduIG91dCcsXFxuICAgICAgICAnZnItRlInOiAnRMOpY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0U3luY0RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IHN5bmNocm9uaXphdGlvbiBkYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEYXRlIGRlIGRlcm5pw6hyZSBzeW5jaHJvbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVDb25maWd1cmF0aW9uSW52YWxpZE5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlLiBBdXRob3JpemVkIGNoYXJhY3RlcnMgOiBhLXogQS1aIDAtOSBfIDogLSAuJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIgaW52YWxpZGUuIENhcmFjdMOocmVzIGF1dG9yaXPDqXMgOiBhLXogQS1aIDAtOSBfIDogLSAuJ1xcbiAgICB9LFxcbiAgICBob21lQ29uZmlndXJhdGlvbk5hbWVBbHJlYWR5VXNlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBuYW1lIGB7bmFtZX1gaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBjb25maWd1cmF0aW9uLCBjaG9vc2UgYW5vdGhlciBvbmUgcGxlYXNlJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gYHtuYW1lfWAgZXN0IGTDqWrDoCB1dGlsaXPDqSBwb3VyIHVuZSBhdXRyZSBjb25maWd1cmF0aW9uLCB2ZXVpbGxleiBlbiBjaG9pc2lyIHVuIGF1dHJlJ1xcbiAgICB9LFxcbiAgICBpbnN0YW5jZUNoYW5nZURpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5zdGFuY2UgY2hhbmdlIGlzblxcXFwndCBwb3NzaWJsZSB3aGVuIHlvdSBhcmUgZWRpdGluZyB1c2VycyBvciBwZXJtaXNzaW9uIHNldHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW5nZXIgZFxcXFwnaW5zdGFuY2UgZXN0IGltcG9zc2libGUgcGVuZGFudCBsXFxcXCfDqWRpdGlvbiBkXFxcXCd1dGlsaXNhdGV1cnMgb3UgZGUgZ3JvdXBlcyBkZSBwZXJtaXNzaW9ucy4nXFxuICAgIH0sXFxuICAgIHF1aXRFZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUXVpdCBlZGl0JyxcXG4gICAgICAgICdmci1GUic6ICdBbm51bGVyIMOpZGl0aW9uJ1xcbiAgICB9LFxcbiAgICByZWxvYWRJbnN0YW5jZXNMaXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIGluc3RhbmNlcyBsaXN0JyxcXG4gICAgICAgICdmci1GUic6ICdSYWZyYcOuY2hpciBsYSBsaXN0ZSBkZXMgaW5zdGFuY2VzJ1xcbiAgICB9LFxcbiAgICBpbnN0YW5jZUZldGNoV2FybmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FwcCBlbmRwb2ludHMgbm90IGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGVzIFxcXFwnZW5kcG9pbnRzXFxcXCcgbmUgc29udCBwYXMgY2hhcmfDqXMnXFxuICAgIH0sXFxuICAgIG1lbnU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZW51JyxcXG4gICAgICAgICdmci1GUic6ICdNZW51J1xcbiAgICB9LFxcbiAgICBob21lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG9tZScsXFxuICAgICAgICAnZnItRlInOiAnQWNjdWVpbCdcXG4gICAgfSxcXG4gICAgcmVwb3J0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcG9ydHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhcHBvcnRzJ1xcbiAgICB9LFxcbiAgICB3b3JrSXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXb3JrIEl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdUw6JjaGVzJ1xcbiAgICB9LFxcbiAgICB0YWJsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYWJsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1RhYmxlcydcXG4gICAgfSxcXG4gICAgZG9jdW1lbnRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRG9jdW1lbnRzJyxcXG4gICAgICAgICdmci1GUic6ICdEb2N1bWVudHMnXFxuICAgIH0sXFxuICAgIG9hdXRoU2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPQXV0aCBTZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZXMgT0F1dGgnXFxuICAgIH0sXFxuICAgIG9yZ2FuaXNhdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcmdhbml6YXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdPcmdhbmlzYXRpb25zJ1xcbiAgICB9LFxcbiAgICBsb2NhbFRlc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMb2NhbCB0ZXN0JyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0IGxvY2FsJ1xcbiAgICB9LFxcbiAgICByZXRyeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHJ5PycsXFxuICAgICAgICAnZnItRlInOiAnUsOpZXNzYXllciA/J1xcbiAgICB9LFxcbiAgICBub01lbnVFbnRyeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGVudHJ5IGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtZW51IGFjY2Vzc2libGUnXFxuICAgIH0sXFxuICAgIGNyZWF0ZWRNZXNzYWdlc0lkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZWQgbWVzc2FnZShzKSBJRChzKTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEKHMpIGR1L2RlcyBtZXNzYWdlKHMpIGNyw6nDqShzKSA6J1xcbiAgICB9LFxcbiAgICBmbGFnTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZsYWcgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnTWFycXVlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBmbGFnczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZsYWdzJyxcXG4gICAgICAgICdmci1GUic6ICdNYXJxdWV1cnMnXFxuICAgIH0sXFxuICAgIGF2YWlsYWJsZUZpZWxkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F2YWlsYWJsZSBmaWVsZHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wcyBkaXNwb25pYmxlcydcXG4gICAgfSxcXG4gICAgYWx3YXlzVmlzaWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fsd2F5cyB2aXNpYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdUb3Vqb3VycyB2aXNpYmxlJ1xcbiAgICB9LFxcbiAgICB2aXNpYmxlSWZPcGVuZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaXNpYmxlIGlmIG9wZW5lZCcsXFxuICAgICAgICAnZnItRlInOiAnVmlzaWJsZSBzaSBvdXZlcnQnXFxuICAgIH0sXFxuICAgIGJhY2tncm91bmRDb2xvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2tncm91bmQgY29sb3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvdWxldXIgZHUgZm9uZCdcXG4gICAgfSxcXG4gICAgZm9udENvbG9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVmYXVsdCBmb250IGNvbG9yJyxcXG4gICAgICAgICdmci1GUic6ICdDb3VsZXVyIGRlIGJhc2UgZHUgdGV4dGUnXFxuICAgIH0sXFxuICAgIGNyZWF0ZU1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDcmVhdGUgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuIG1lc3NhZ2UnXFxuICAgIH0sXFxuICAgIHVwbG9hZEZpbGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBsb2FkIGZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnZveWVyIGRlcyBmaWNoaWVycydcXG4gICAgfSxcXG4gICAgZW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2xvc2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlcm1pbmVyJ1xcbiAgICB9LFxcbiAgICBwcm9jZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvY2VzcycsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgZmlsZXNEcm9wcGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnZmlsZShzKSBkcm9wcGVkJyxcXG4gICAgICAgICdmci1GUic6ICdmaWNoaWVyKHMpIGTDqXBvc8OpKHMpJ1xcbiAgICB9LFxcbiAgICBmaWxlc1VwbG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnZmlsZShzKSB1cGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnZmljaGllcihzKSBlbnZvecOpKHMpJ1xcbiAgICB9LFxcbiAgICBzaG93UHJvY2Vzc2VkRmlsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgZmlsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBmaWNoaWVycyB0cmFpdMOpcyBhdmVjIHN1Y2PDqHMnXFxuICAgIH0sXFxuICAgIGhpZGVQcm9jZXNzZWRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGUgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnTWFzcXVlciBsZXMgZmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzJ1xcbiAgICB9LFxcbiAgICBmaWxlc1N1Ym1pdFN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzICEnXFxuICAgIH0sXFxuICAgIGhpZGRlbkNvbHVtbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIaWRkZW4gY29sdW1ucycsXFxuICAgICAgICAnZnItRlInOiAnQ29sb25uZXMgY2FjaMOpZXMnXFxuICAgIH0sXFxuICAgIGhpZGRlbkNvbHVtbnNUaXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICcoY2xpY2sgdG8gcmUtZGlzcGxheSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJyhjbGlxdWVyIHBvdXIgcsOpLWFmZmljaGVyKSdcXG4gICAgfSxcXG4gICAgYWxsQ29sdW1uc1Zpc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbGwgY29sdW1ucyBhcmUgY3VycmVudGx5IGRpc3BsYXllZC4gSGlkZGVucyBjb2x1bW5zIGNhbiBiZSBmb3VuZCBoZXJlIGFuZCByZS1kaXNwbGF5ZWQuJyxcXG4gICAgICAgICdmci1GUic6ICdUb3V0ZXMgbGVzIGNvbG9ubmVzIHNvbnQgYWN0dWVsbGVtZW50IHZpc2libGVzLiBMZXMgY29sb25uZXMgY2FjaMOpZXMgYXBwYXJhaXRyb250IGljaSBldCBwb3Vycm9udCDDqnRyZSByw6ktYWZmaWNow6llcy4nXFxuICAgIH0sXFxuICAgIGRhdGVGcm9tOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJvbScsXFxuICAgICAgICAnZnItRlInOiAnRMOpYnV0J1xcbiAgICB9LFxcbiAgICBkYXRlVG86IHtcXG4gICAgICAgICdlbi1VUyc6ICdUbycsXFxuICAgICAgICAnZnItRlInOiAnRmluJ1xcbiAgICB9LFxcbiAgICBkb2N1bWVudFR5cGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3JyxcXG4gICAgICAgICdmci1GUic6ICdWdWUnXFxuICAgIH0sXFxuICAgIGNvbGxhcHNlT3B0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29sbGFwc2UgYWZ0ZXIgc2VhcmNoJyxcXG4gICAgICAgICdmci1GUic6ICdSw6lkdWlyZSBhcHLDqHMgcmVjaGVyY2hlJ1xcbiAgICB9LFxcbiAgICByZXNldFNlYXJjaE9wdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhdW5jaCBzZWFyY2ggYWZ0ZXIgcmVzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmNlciBsYSByZWNoZXJjaGUgYXByw6hzIHLDqWluaXRpYWxpc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5TGFiZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IGxhYmVsJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsYWJlbCdcXG4gICAgfSxcXG4gICAgd29ya2Zsb3dJblByb2dyZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW4gYSB3b3JrZmxvdycsXFxuICAgICAgICAnZnItRlInOiAnRmx1eCBlbiBjb3VycydcXG4gICAgfSxcXG4gICAgYXNzaWduVXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fzc2lnbiB1c2VyJyxcXG4gICAgICAgICdmci1GUic6ICdBc3NpZ25lciB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgYXNzaWduZWRVc2Vyczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fzc2lnbmVkIHVzZXIocyknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyKHMpIGFzc2lnbsOpKHMpJ1xcbiAgICB9LFxcbiAgICBhc3NpZ25Vc2VyVG9Qb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCB0aGlzIHVzZXIgdG8gdGhpcyBwb3NpdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciBjZXQgdXRpbGlzYXRldXIgw6AgY2V0dGUgcG9zaXRpb24nXFxuICAgIH0sXFxuICAgIHJlbW92ZVVzZXJPcmdQb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbW92ZSB0aGlzIHVzZXIgZnJvbSB0aGlzIHBvc2l0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgY2V0IHV0aWxpc2F0ZXVyIGRlIGNldHRlIHBvc2l0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXlvdXRCdWlsZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGF5b3V0IGJ1aWxkZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BlcnNvbm5hbGlzYXRpb24gZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICB0aGVtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZW1lJyxcXG4gICAgICAgICdmci1GUic6ICdUaMOobWUnXFxuICAgIH0sXFxuICAgIGZvbnRTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRm9udCBzaXplJyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUgY2FyYWN0w6hyZXMnXFxuICAgIH0sXFxuICAgIHNob3dJbnZpc2libGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyBpbnZpc2libGVzJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsZXMgY2FyYWN0w6hyZXMgaW52aXNpYmxlcydcXG4gICAgfSxcXG4gICAgc2hvd0d1dHRlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgZ3V0dGVyJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsYSBtYXJnZSdcXG4gICAgfSxcXG4gICAgc2hvd0luZGVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaW5kZW50IGd1aWRlcycsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgbGVzIGd1aWRlcyBkXFxcXCdpbmRlbnRhdGlvbidcXG4gICAgfSxcXG4gICAgd3JhcDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dyYXAnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWJvcmRlbWVudCdcXG4gICAgfSxcXG4gICAgcHJldmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ByZXZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byw6l2aXN1YWxpc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBzaG93SGlkZGVuQ29sdW1uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaGlkZGVuIGNvbHVtbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBjb2xvbm5lcyBjYWNow6llcydcXG4gICAgfSxcXG4gICAgcmVzZXREaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBhbGwgZGlzcGxheSBzZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUsOpaW5pdGlhbGlzZXIgbGVzIHByw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5SGlkZGVuQ29sdW1uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGRlbiBjb2x1bW5zIChjbGljayB0byByZS1kaXNwbGF5KScsXFxuICAgICAgICAnZnItRlInOiAnQ29sb25uZXMgY2FjaMOpZXMgKGNsaXF1ZXIgcG91ciByw6ktYWZmaWNoZXIpJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3NDaGFuZ2VkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBzZXR0aW5ncyBjaGFuZ2VkIScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqWbDqXJlbmNlcyBkXFxcXCdhZmZpY2hhZ2UgbW9kaWZpw6llcyAhJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHNldHRpbmdzIScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqWbDqXJlbmNlcyBkXFxcXCdhZmZpY2hhZ2UnXFxuICAgIH0sXFxuICAgIGRhdGFncmlkU2F2ZURpc3BsYXlTZXR0aW5nczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIlxcXFxuICAgICAgICAgICAgPGRpdj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5EbyB5b3Ugd2FudCB0byBzYXZlIHlvdXIgbW9kaWZpY2F0aW9ucz88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPllvdXIgcHJlZmVyZW5jZXMgKHByZXNlbmNlLCB3aWR0aCBhbmQgb3JkZXIgb2YgY29sdW1ucy4uLikgd2lsbCBiZSBzYXZlZCBpbiB5b3VyIHVzZXIgcHJvZmlsZS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8ZGl2PlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlZvdWxlei12b3VzIHNhdXZlZ2FyZGVyIHZvcyBtb2RpZmljYXRpb25zID88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPlZvcyBwclxcXFx1MDBFOWZcXFxcdTAwRTlyZW5jZXMgZCdhZmZpY2hhZ2UgKHByXFxcXHUwMEU5c2VuY2UsIGxhcmdldXIgZXQgb3JkcmUgZGVzIGNvbG9ubmVzLi4uKSBzZXJvbnQgZW5yZWdpc3RyXFxcXHUwMEU5ZXMgZGFucyB2b3RyZSBwcm9maWwgdXRpbGlzYXRldXIuPC9lbT5cXFxcbiAgICAgICAgICAgIDwvZGl2PlxcXFxuICAgICAgICBcXFwiXFxuICAgIH0sXFxuICAgIGRpc3BsYXlTZXR0aW5nc1Jlc2V0Q29uZmlybToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXNldCBhbGwgeW91ciBkaXNwbGF5IHNldHRpbmdzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcsOpaW5pdGlhbGlzZXIgdm9zIHByw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlID8nXFxuICAgIH0sXFxuICAgIGRpc3BsYXlNb2RlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBtb2RlOicsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoYWdlIDonXFxuICAgIH0sXFxuICAgIGRpc3BsYXlMYXB0b3A6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZWRpdW0gc2NyZWVuIHNpemUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3JhbiBkZSB0YWlsbGUgbW95ZW5uZSdcXG4gICAgfSxcXG4gICAgZGlzcGxheURlc2t0b3A6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXJnZSBzY3JlZW4gc2l6ZScsXFxuICAgICAgICAnZnItRlInOiAnw4ljcmFuIGRlIGdyYW5kZSB0YWlsbGUnXFxuICAgIH0sXFxuICAgIHVuZXhwZWN0ZWRFcnJvckNoZWNrVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQW4gdW5leHBlY3RlZCBlcnJvciBoYXMgb2NjdXJlZC4gUGxlYXNlIHJldHJ5IGFuZCBjaGVjayBmb3IgdGhlIFVSTCB5b3UgcmVxdWVzdGVkIG9yIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvci4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VuZSBlcnJldXIgZXN0IHN1cnZlbnVlLiBNZXJjaSBkZSByw6llc3NheWVyIGVuIHbDqXJpZmlhbnQgbFxcXFwnVVJMIG91IGNvbnRhY3RleiB2b3RyZSBhZG1pbmlzdHJhdGV1ciBzeXN0w6htZS4nXFxuICAgIH0sXFxuICAgIHNlZUVycm9yRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlZSBlcnJvciBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlcyBkw6l0YWlscyBkZSBsXFxcXCdlcnJldXInXFxuICAgIH0sXFxuICAgIHNlY29uZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlY29uZCcsXFxuICAgICAgICAnZnItRlInOiAnU2Vjb25kZSdcXG4gICAgfSxcXG4gICAgbWludXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWludXRlJyxcXG4gICAgICAgICdmci1GUic6ICdNaW51dGUnXFxuICAgIH0sXFxuICAgIGhvdXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIb3VyJyxcXG4gICAgICAgICdmci1GUic6ICdIZXVyZSdcXG4gICAgfSxcXG4gICAgZGF5T2ZNb250aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RheSBvZiBtb250aCcsXFxuICAgICAgICAnZnItRlInOiAnSm91ciBkdSBtb2lzJ1xcbiAgICB9LFxcbiAgICBtb250aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vbnRoJyxcXG4gICAgICAgICdmci1GUic6ICdNb2lzJ1xcbiAgICB9LFxcbiAgICBkYXlPZldlZWs6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEYXkgb2Ygd2VlaycsXFxuICAgICAgICAnZnItRlInOiAnSm91ciBkZSBsYSBzZW1haW5lJ1xcbiAgICB9LFxcbiAgICB5ZWFyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWWVhcicsXFxuICAgICAgICAnZnItRlInOiAnQW5uw6llJ1xcbiAgICB9LFxcbiAgICBpbnB1dEludmFsaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGlucHV0JyxcXG4gICAgICAgICdmci1GUic6ICdDaGFtcCBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgaW1wb3J0RGF0YUZyb21GaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0IGRhdGEgZnJvbSBhIGZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyIGRlcyBkb25uw6llcyBkZXB1aXMgdW4gZmljaGllcidcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgZmlsZScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllciBzw6lsZWN0aW9ubsOpJ1xcbiAgICB9LFxcbiAgICBmaWxlVHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGUgdHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSBkdSBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBmaWVsZHNTZXBhcmF0b3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWVsZHMgc2VwYXJhdG9yJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lwYXJhdGV1ciBkZSBjb2xvbm5lcydcXG4gICAgfSxcXG4gICAgZW5jb2Rpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbmNvZGluZycsXFxuICAgICAgICAnZnItRlInOiAnRW5jb2RhZ2UnXFxuICAgIH0sXFxuICAgIHF1b3RlQ2hhcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1b3RlIGNoYXJhY3RlcicsXFxuICAgICAgICAnZnItRlInOiAnQ2FyYWN0w6hyZSBkZSBndWlsbGVtZXQnXFxuICAgIH0sXFxuICAgIGhlYWRlck9uRmlyc3RSb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIZWFkZXJzIG9uIGZpcnN0IHJvdycsXFxuICAgICAgICAnZnItRlInOiAnRW50w6p0ZXMgc3VyIGxhIHByZW1pw6hyZSBsaWduZSdcXG4gICAgfSxcXG4gICAgb3ZlcndyaXRlRXhpc3RpbmdEYXRhOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3ZlcndyaXRlIGV4aXN0aW5nIGRhdGEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3Jhc2VyIGxlcyBkb25uw6llcyBleGlzdGFudGVzJ1xcbiAgICB9LFxcbiAgICBkcm9wWm9uZVRpdGxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHJvcCBmaWxlcyBoZXJlIHRvIHVwbG9hZCB0aGVtJyxcXG4gICAgICAgICdmci1GUic6ICdEw6lwb3NlciBsZXMgZmljaGllcnMgw6AgZW52b3llciBpY2knXFxuICAgIH0sXFxuICAgIGRyb3Bab25lU3VidGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICcob3IgY2xpY2spJyxcXG4gICAgICAgICdmci1GUic6ICcob3UgY2xpcXVlciknXFxuICAgIH0sXFxuICAgIGludmFsaWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBmaWxlKHMpJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVyKHMpIGludmFsaWRlKHMpJ1xcbiAgICB9LFxcbiAgICBjb250ZW50VHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FjY2VwdGVkIENvbnRlbnQtdHlwZXM6JyxcXG4gICAgICAgICdmci1GUic6ICdDb250ZW50LXR5cGVzIGFjY2VwdMOpcyA6J1xcbiAgICB9LFxcbiAgICBtYXhTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWF4IHNpemU6JyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUgbWF4IDonXFxuICAgIH0sXFxuICAgIHVua25vd25Gb3JtYXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd1bmtub3duIGZvcm1hdCcsXFxuICAgICAgICAnZnItRlInOiAndW5rbm93biBzaXplJ1xcbiAgICB9LFxcbiAgICBhZGRUZXh0UHJvcGVydHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgYSB0ZXh0IHByb3BlcnR5JyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSB2YWxldXIgZGUgdHlwZSB0ZXh0ZSdcXG4gICAgfSxcXG4gICAgYWRkRmlsZVByb3BlcnR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgZmlsZSBwcm9wZXJ0eScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1biBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgZmlsZTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gZmljaGllciA6J1xcbiAgICB9LFxcbiAgICBkb3dubG9hZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rvd25sb2FkJyxcXG4gICAgICAgICdmci1GUic6ICdUw6lsw6ljaGFyZ2VyJ1xcbiAgICB9LFxcbiAgICB1cGxvYWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBsb2FkIGEgZmlsZScsXFxuICAgICAgICAnZnItRlInOiAnRW52b3llciB1biBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RlZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZSBzw6lsZWN0aW9ubsOpZSdcXG4gICAgfSxcXG4gICAgYWRkTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgYSBsYW5ndWFnZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICByZW1vdmVMYW5ndWFnZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVtb3ZlIHNlbGVjdGVkIGxhbmd1YWdlJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgbGEgbGFuZ3VlIHPDqWxlY3Rpb25uw6llJ1xcbiAgICB9LFxcbiAgICBjbG9zZUxhbmd1YWdlU2VsZWN0b3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDbG9zZSBsYW5ndWFnZSBzZWxlY3RvcicsXFxuICAgICAgICAnZnItRlInOiAnRmVybWVyIGxhIHPDqWxlY3Rpb24gZGUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICBzZWFyY2hMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCBsYW5ndWFnZS4uLicsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlciB1bmUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICBwYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUGFnZSdcXG4gICAgfSxcXG4gICAgb2Y6IHtcXG4gICAgICAgICdlbi1VUyc6ICdvZicsXFxuICAgICAgICAnZnItRlInOiAnc3VyJ1xcbiAgICB9LFxcbiAgICBwZGZMb2FkaW5nRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQREYgbG9hZGluZyBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyIGRlIGNoYXJnZW1lbnQgZHUgUERGJ1xcbiAgICB9LFxcbiAgICBub0ZpbGVDaG9zZW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBmaWxlIGNob3NlbicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gZmljaGllciBjaG9pc2knXFxuICAgIH0sXFxuICAgIGZpbGVVcGxvYWRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGUgdXBsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgdMOpbMOpY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgcHJldmlld0xvd2VyQ2FzZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3ByZXZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2FwZXLDp3UnXFxuICAgIH0sXFxuICAgIGZpbGVVcGxvYWRGYWlsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHVwbG9hZCBmYWlsZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY2hlYyBkdSB0w6lsw6ljaGFyZ2VtZW50IGR1IGZpY2hpZXInXFxuICAgIH0sXFxuICAgIHJlc3RhcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXN0YXJ0JyxcXG4gICAgICAgICdmci1GUic6ICdSZWTDqW1hcnJlcidcXG4gICAgfSxcXG4gICAgc2hvd1N0YXR1c0NvbnRyb2xzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyBzdGF0dXMgY29udHJvbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBjb250csO0bGVzIGRlIHN0YXR1dCdcXG4gICAgfSxcXG4gICAgaGlkZVN0YXR1c0NvbnRyb2xzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSGlkZSBzdGF0dXMgY29udHJvbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhY2hlciBsZXMgY29udHLDtGxlcyBkZSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIHJlZnJlc2hTdGF0dXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWZyZXNoIHN0YXR1cycsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgc3RhdHV0J1xcbiAgICB9LFxcbiAgICBydW5uaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVubmluZycsXFxuICAgICAgICAnZnItRlInOiAnRW4gY291cnMnXFxuICAgIH0sXFxuICAgIHN0b3BwZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdG9wcGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBcnLDqnTDqSdcXG4gICAgfSxcXG4gICAgc29ydEJ5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU29ydCBieScsXFxuICAgICAgICAnZnItRlInOiAnVHJpZXIgcGFyJ1xcbiAgICB9LFxcbiAgICBjcmVhdGVDaGlsZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZSBjaGlsZCcsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIGVuZmFudCdcXG4gICAgfSxcXG4gICAgdmFsaWRhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWYWxpZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgdHJlZVVwZGF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJRCcsXFxuICAgICAgICAnZnItRlInOiAnSUQnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXNLZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9wZXJ0aWVzIGtleShzKScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqShzKSBkZSBwcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIGludmFsaWRVbmlxdWVOb2RlTmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vZGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSBhbW9uZyBkaXJlY3QgY2hpbGRyZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG5vbSBkdSBub2V1ZCBkb2l0IMOqdHJlIHVuaXF1ZSBwYXJtaSBsZXMgZW5mYW50cyBkaXJlY3RzJ1xcbiAgICB9LFxcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZGl0aW9uYWwgcHJvcGVydGllcycsXFxuICAgICAgICAnZnItRlInOiAnUHJvcHJpw6l0w6lzIGFkZGl0aW9ubmVsbGVzJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RlZE5vZGVEZXRhaWxzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgbm9kZSBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscyBkdSBub2V1ZCBzw6lsZWN0aW9ubsOpJ1xcbiAgICB9LFxcbiAgICBleHBhbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBhbmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXBsaWVyJ1xcbiAgICB9LFxcbiAgICBjb2xsYXBzZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbGxhcHNlJyxcXG4gICAgICAgICdmci1GUic6ICdQbGllcidcXG4gICAgfSxcXG4gICAgdXNlckRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyIGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm9ybWF0aW9ucydcXG4gICAgfSxcXG4gICAgdmlld0J5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBieScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgcGFyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgdXNlcicsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1biB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgdXNlckVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBlbWFpbCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgZGUgbFxcXFwndXRpbHNhdGV1cidcXG4gICAgfSxcXG4gICAgc2VsZWN0VmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYSB2YWx1ZScsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1bmUgdmFsZXVyJ1xcbiAgICB9LFxcbiAgICBhZGRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciBkZXMgZmljaGllcnMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1Vc2Vyc0Rpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNhc3NvY2lhdGUgdGhlIHNlbGVjdGVkIHVzZXIocykgZnJvbSB0aGUgY3VycmVudCBpbnN0YW5jZT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGTDqXNhc3NvY2llciBsXFxcXCcobGVzKSB1dGlsaXNhdGV1cihzKSBzw6lsZWN0aW9ubsOpKHMpIGRlIGxcXFxcJ2luc3RhbmNlID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1Vc2Vyc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIHVzZXIocyk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbFxcXFwnKGxlcykgdXRpbGlzYXRldXIocykgc8OpbGVjdGlvbm7DqShzKSA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtUGVybXNldHNEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCBwZXJtaXNzaW9uIHNldChzKT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBsZShzKSBncm91cGUocykgZGUgcGVybWlzc2lvbnMgc8OpbGVjdGlvbm7DqShzKSA/J1xcbiAgICB9LFxcbiAgICBwZXJtc2V0c0RlbGV0ZVN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldChzKSBkZWxldGVkIScsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlKHMpIGRlIHBlcm1pc3Npb25zIHN1cHByaW3DqXMgISdcXG4gICAgfSxcXG4gICAgcGVybXNldHNEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAncGVybWlzc2lvbiBzZXQocykgbm90IGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2dyb3VwZShzKSBkZSBwZXJtaXNzaW9ucyBub24gc3VwcHJpbcOpKHMpJ1xcbiAgICB9LFxcbiAgICB1c2Vyc0RlbGV0ZVN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyKHMpIGRlbGV0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1cihzKSBzdXBwcmltw6kocykgISdcXG4gICAgfSxcXG4gICAgdXNlcnNEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAndXNlcihzKSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAndXRpbGlzYXRldXIocykgbm9uIHN1cHByaW3DqShzKSdcXG4gICAgfSxcXG4gICAgdXNlcnNEaXNhc3NvY2lhdGVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlcihzKSBkaXNhc3NvY2lhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIocykgZMOpc2Fzc29jacOpKHMpICEnXFxuICAgIH0sXFxuICAgIHVzZXJzRGlzYXNzb2NpYXRlRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3VzZXIocykgbm90IGRpc2Fzc29jaWF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3V0aWxpc2F0ZXVyKHMpIG5vbiBkw6lzYXNzb2Npw6kocyknXFxuICAgIH0sXFxuICAgIHJlY29yZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWNvcmRzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnRyw6llcydcXG4gICAgfSxcXG4gICAgbm9BdmFpbGFibGVUYWJsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyB0YWJsZXMgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIHRhYmxlIGRpc3BvbmlibGUuJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RUYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuZSB0YWJsZSdcXG4gICAgfSxcXG4gICAgZGVsZXRlVGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgdGhpcyB0YWJsZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIGNldHRlIHRhYmxlJ1xcbiAgICB9LFxcbiAgICBkZWxldGVBbGxSZWNvcmRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGFsbCByZWNvcmRzJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgdG91dCBsZSBjb250ZW51J1xcbiAgICB9LFxcbiAgICBleHBvcnRUb0V4Y2VsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IHRvIEV4Y2VsJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciB2ZXJzIEV4Y2VsJ1xcbiAgICB9LFxcbiAgICBpbXBvcnREYXRhOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0IGRhdGEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyIGRlcyBkb25uw6llcydcXG4gICAgfSxcXG4gICAgYWRkUmVjb3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgbmV3IHJlY29yZCcsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgZW50csOpZSdcXG4gICAgfSxcXG4gICAgdGFibGVOYW1lSW52YWxpZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhYmxlIG5hbWUgaXMgZW1wdHkgb3IgaW5jb3JyZWN0JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gZGUgbGEgdGFibGUgZXN0IHZpZGUgb3UgaW52YWxpZGUnXFxuICAgIH0sXFxuICAgIHRhYmxlRmllbGRzRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyB0YWJsZSBmaWVsZHMgYWRkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIGNoYW1wIHJlbnNlaWduw6knXFxuICAgIH0sXFxuICAgIHRhYmxlS2V5c0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8ga2V5IGZvdW5kIGZvciB0aGUgdGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBjbMOpIHJlbnNlaWduw6llJ1xcbiAgICB9LFxcbiAgICB0YWJsZUludmFsaWRWYWx1ZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlKHMpIHN1cHBsaWVkIGZvciB0aGUgdGFibGUgc3RydWN0dXJlJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIocykgaW52YWxpZGUocykgZm91cm5pZShzKSBwb3VyIGTDqWZpbmlyIGxhIHN0cnVjdHVyZSBkZSBsYSB0YWJsZSdcXG4gICAgfSxcXG4gICAgbm90aGluZ1RvU2F2ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vdGhpbmcgdG8gc2F2ZSBoZXJlIScsXFxuICAgICAgICAnZnItRlInOiAnUmllbiDDoCBlbnJlZ2lzdHJlciAhJ1xcbiAgICB9LFxcbiAgICBjb25maXJtUmVjb3JkRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXR0ZSBlbnRyw6llID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1BbGxSZWNvcmRzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBhbGwgcmVjb3JkcyBpbiB0aGlzIHRhYmxlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIHRvdXRlcyBsZXMgZG9ubsOpZXMgZGUgY2V0dGUgdGFibGUgPydcXG4gICAgfSxcXG4gICAgY29uZmlybURlbGV0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHRhYmxlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNldHRlIHRhYmxlID8nXFxuICAgIH0sXFxuICAgIGRvd25sb2FkV2lsbFN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIGRvd2xvYWQgd2lsbCBzdGFydCBhdXRvbWF0aWNhbGx5JyxcXG4gICAgICAgICdmci1GUic6ICdMZSB0w6lsw6ljaGFyZ2VtZW50IHZhIGTDqW1hcnJlciBhdXRvbWF0aXF1ZW1lbnQnXFxuICAgIH0sXFxuICAgIHJlY29yZHNQcm9jZXNzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd7bmJSZWNvcmRzfSByb3cocykgcHJvY2Vzc2VkLicsXFxuICAgICAgICAnZnItRlInOiAne25iUmVjb3Jkc30gZW5yZWdpc3RyZW1lbnQocykgdHJhaXTDqShzKS4nXFxuICAgIH0sXFxuICAgIG9rOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT0snLFxcbiAgICAgICAgJ2ZyLUZSJzogJ09LJ1xcbiAgICB9LFxcbiAgICBjb25maXJtQ2hhbmdlV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHZpZXcgYW5kIGxvb3NlIHRoZSBjaGFuZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnTGUgY29udGVudSBhIMOpdMOpIGNoYW5nw6kuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGNoYW5nZXIgZGUgdnVlIGV0IHBlcmRyZSBjZXMgY2hhbmdlbWVudHMgPydcXG4gICAgfSxcXG4gICAgY29uZmlybURlbGV0ZUl0ZW06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1SZWxvYWRXaXRob3V0U2F2aW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbG9hZCB0aGlzIGl0ZW0/JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBjb250ZW51IGEgw6l0w6kgY2hhbmfDqS4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVjaGFyZ2VyIGNldCDDqWzDqW1lbnQgPydcXG4gICAgfSxcXG4gICAgY29uZmlybVJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXByb2Nlc3MgdGhpcyBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVsYW5jZXIgY2V0IMOpbMOpbWVudCA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtU2F2ZUFuZFJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBoYXZlIG1hZGUgc29tZSBjaGFuZ2VzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc2F2ZSBBTkQgcmVwcm9jZXNzIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIGNvbnRlbnUgYSDDqXTDqSBjaGFuZ8OpLiDDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzYXV2ZWdhcmRlciBFVCByZWxhbmNlciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGl0ZW1SZXByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVwcm9jZXNzZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCByZWxhbmPDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlcHJvY2Vzc0ZhaWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCByZXByb2Nlc3NlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiByZWxhbmPDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSByZWxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IHJlY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbG9hZEZhaWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCByZWxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiByZWNoYXJnw6knXFxuICAgIH0sXFxuICAgIGl0ZW1TYXZlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gc2F2ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBlbnJlZ2lzdHLDqSdcXG4gICAgfSxcXG4gICAgaXRlbVNhdmVGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3Qgc2F2ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBub24gZW5yZWdpc3Ryw6knXFxuICAgIH0sXFxuICAgIGl0ZW1EZWxldGVGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiBzdXBwcmltw6knXFxuICAgIH0sXFxuICAgIHJlc2V0Q2hhbmdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc2V0IGNoYW5nZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXIgbGVzIGNoYW5nZW1lbnRzJ1xcbiAgICB9LFxcbiAgICBlcnJvck9jY3VyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbiBlcnJvciBvY2N1cmVkJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSdcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Db25maXJtVGV4dFN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvJyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pcidcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Db25maXJtVGV4dEVuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3RoaXMgd29yayBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnY2V0dGUgdMOiY2hlID8nXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybVRpdGxlTGFuZ3VhZ2VTc2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYW5ndWFnZSBzZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZSBkZXMgbGFuZ3VlcydcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVfYWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVfZWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZSBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnTWlzZSDDoCBqb3VyIGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1UaXRsZUZvcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZSBpbicsXFxuICAgICAgICAnZnItRlInOiAnRnJhbWUgZW4nXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybUhlbHBlckVtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmllbGQgbXVzdCBiZSBwcm92aWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnQ2UgY2hhbXAgZG9pdCDDqnRyZSByZW5zZWlnbsOpJ1xcbiAgICB9LFxcbiAgICBpZFVuaXF1ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgSUQgbXVzdCBiZSB1bmlxdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIElEIGRvaXQgw6p0cmUgdW5pcXVlJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1IZWxwZXJMYW5ndWFnZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGNhbiBzZWxlY3QgdGhlIGxhbmd1YWdlIHRvIGVkaXQgYW5kIHJlbW92ZSB0aGUgb25lIHlvdSBkb25cXFxcJ3Qgd2FudCBhbnltb3JlIGhlcmUuIFlvdSBtdXN0IGZpbGwgYXQgbGVhc3QgdGhlIEVOIGxhbmd1YWdlIHRvIGJlIGFibGUgdG8gc2F2ZSB5b3VyIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIHBvdXZleiBzw6lsZWN0aW9ubmVyIGxhIGxhbmd1ZSDDoCBlZGl0ZXIgZXQgc3VwcHJpbWVyIGNlbGxlcyBkb250IHZvdXMgblxcXFwnYXZleiBwbHVzIGJlc29pbiBpY2kuIFZvdXMgZGV2ZXogcmVuc2VpZ25lciBhdSBtb2lucyBsYSBsYW5ndWUgRU4gcG91ciBwb3V2b2lyIHNhdXZlZ2FyZGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtR3JpZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFuZ3VhZ2UgY2hvaWNlIChJU08gY29kZSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2l4IGRlIGxhIGxhbmd1ZSAoY29kZSBJU08pJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1HcmlkTGFuZ3VhZ2VzU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYW5ndWFnZXMgc2VsZWN0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZXMgc8OpbGVjdGlvbm7DqWVzJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJEYXRhTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFTicsXFxuICAgICAgICAnZnItRlInOiAnRlInXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlclRleHRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGZyYW1lIHRvIGRpc3BsYXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBmcmFtZSDDoCBhZmZpY2hlcidcXG4gICAgfSxcXG4gICAgZnJhbWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJhbWVzJyxcXG4gICAgICAgICdmci1GUic6ICdGcmFtZXMnXFxuICAgIH0sXFxuICAgIHVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VSTCcsXFxuICAgICAgICAnZnItRlInOiAnVVJMJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJCdXR0b25FZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlciBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgbGEgZnJhbWUnXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlckJ1dHRvblByZXZpZXc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmV2aWV3IGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBcGVyw6d1IGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICByZWZyZXNoRnJhbWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVmcmVzaCBmcmFtZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FjdHVhbGlzZXIgbGVzIGZyYW1lcydcXG4gICAgfSxcXG4gICAgYWRkRnJhbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgZnJhbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBjYW5jZWxGcmFtZUVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYW5jZWwgZnJhbWUgZWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnQW5udWxlciBsXFxcXCfDqWRpdGlvbiBkZSBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uQmFjazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHVybiB0byBIb21lIHBhZ2VzIGNvbmZpZ3VyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBwYWdlIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHBhZ2VzIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGRhdGFMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VOJyxcXG4gICAgICAgICdmci1GUic6ICdGUidcXG4gICAgfSxcXG4gICAgZnJhbWVwcmV2aWV3VGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZSBwcmV2aWV3JyxcXG4gICAgICAgICdmci1GUic6ICdBcGVyw6d1IGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZXByZXZpZXdUaXRsZVNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IHlvdXIgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb24gZGUgbGEgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICB1bmlxdWVJZFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSUQgbXVzdCBiZSB1bmlxdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xcXFxcJ0lEIGRvaXQgw6p0cmUgdW5pcXVlJ1xcbiAgICB9LFxcbiAgICBodHRwc1VybFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTXVzdCBiZSBhIHZhbGlkIEhUVFBTIFVSTCcsXFxuICAgICAgICAnZnItRlInOiAnVVJMIEhUVFBTIHZhbGlkZSByZXF1aXNlJ1xcbiAgICB9LFxcbiAgICBub01vZHVsZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gbW9kdWxlIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtb2R1bGUgc8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVIZWFkZXJMYXlvdXRUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpZ3VyZSBsYXlvdXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbmZpZ3VyYXRpb24gZGUgbGEgcHLDqXNlbnRhdGlvbidcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVNb2R1bGVzQXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBhdmFpbGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vZHVsZXMgZGlzcG9uaWJsZXMnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc1NlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnTW9kdWxlcyBzw6lsZWN0aW9ubsOpcydcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVCdXR0b25Db25maWd1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOpdHJhZ2UgZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvbkRlZmF1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXN0b3JlIGRlZmF1bHQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmUgcGFyIGTDqWZhdXQnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lQnV0dG9uU2VsZWN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IG1vZHVsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2l4IGRlcyBtb2R1bGVzJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvbkJhY2s6IHtcXG4gICAgICAgICdlbi1VUyc6ICdCYWNrIHRvIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUmV0b3VyIMOgIGxhIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVTZWxlY3RlZEVtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRpZG5cXFxcJ3Qgc2VsZWN0IGFueSBtb2R1bGVzJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogc8OpbGVjdGlvbm7DqSBhdWN1biBtb2R1bGUnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc0VtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gbW9kdWxlcyBhdmFpbGFibGUgaW4gdGhpcyBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtb2R1bGUgZGlzcG9uaWJsZSBkYW5zIGNldHRlIGNvbmZpZ3VyYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVQYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdQYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVOYXZpZ2F0ZURlZmF1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgSG9tZSBwYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJhdGlvbiBkZXMgcGFnZXMgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZU5hdmlnYXRlT3duOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3VzdG9taXplIHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdDb25maWd1cmVyIGNldHRlIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZVN0YXR1c0VtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRvblxcXFwndCBoYXZlIGFueSBtb2R1bGVzIHRvIGRpc3BsYXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgblxcXFwnYXZleiBhdWN1biBtb2R1bGUgw6AgYWZmaWNoZXInXFxuICAgIH0sXFxuICAgIGhvbWVTZWxlY3ROb25lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IHlvdXIgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdDaG9pc2lzc2V6IHZvdHJlIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0hlYWRlckF2YWlsYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vZHVsZXMgYXZhaWxhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIGRpc3BvbmlibGVzJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzSGVhZGVyU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNb2R1bGVzIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIHPDqWxlY3Rpb25uw6lzJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzSGVhZGVyQ29uZmlndXJhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpZ3VyZWQgSG9tZSBwYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnUGFnZXMgZFxcXFwnYWNjdWVpbCBjb25maWd1cmFibGVzJ1xcbiAgICB9LFxcbiAgICB0eXBlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0VkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2RpZmllciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NEdXBsaWNhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEdXBsaWNhdGUgdGhpcyBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0R1cGxpcXVlciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgdGhpcyBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NDb25maWd1cmVsYXlvdXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdQZXJzb25hbGlzYXRpb24gZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzU2F2ZXNlbGVjdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgeW91ciBzZWxlY3Rpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1NhdXZlZ2FyZGVyIHZvdHJlIHPDqWxlY3Rpb24nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NBZGREZWZhdWx0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzQnV0dG9uQmFjazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2sgdG8gSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzRnJhbWVzcGFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZyYW1lcyBtYW5hZ2VyJyxcXG4gICAgICAgICdmci1GUic6ICdHZXN0aW9ubmFpcmUgZGVzIEZyYW1lcydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc1RleHRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGlzIG5vIG1vZHVsZXMgYXZhaWxhYmxlIGluIHlvdXIgY3VycmVudCBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdJbCBuXFxcXCd5IGEgYXVjdW4gbW9kdWxlcyBkaXNwb25pYmxlcyBwb3VyIGNldHRlIGNvbmZpZ3VyYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NTZWxlY3REZWZhdWx0dmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgaG9tZScsXFxuICAgICAgICAnZnItRlInOiAnQ2hvaXNpc3NleiBsYSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NNb2RhbERlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSBhYm91dCBkZWxldGluZyB0aGlzIHNldHRpbmcgPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNldHRlIGNvbmZpZ3VyYXRpb24gPydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0Vycm9ySW5Vc2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBge25hbWV9YGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgY29uZmlndXJhdGlvbiwgY2hvb3NlIGFub3RoZXIgb25lIHBsZWFzZScsXFxuICAgICAgICAnZnItRlInOiAnTGUgbm9tIGB7bmFtZX1gIGVzdCBkw6lqw6AgdXRpbGlzw6kgcG91ciB1bmUgYXV0cmUgY29uZmlndXJhdGlvbiwgdmV1aWxsZXogZW4gY2hvaXNpciB1biBhdXRyZSdcXG4gICAgfSxcXG4gICAgYXBwTG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwIGxvYWRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FwcCBsYW5jw6llICEnXFxuICAgIH0sXFxuICAgIGludmFsaWRQYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgcGFzc3dvcmQgbXVzdCBiZSA4IHRvIDMyIGNoYXJhY3RlcnMgbG9uZyBhbmQgY29udGFpbnMgYXQgbGVhc3QgMSB1cHBlci9sb3dlciBjYXNlIGxldHRlciBhbmQgMSBudW1iZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG1vdCBkZSBwYXNzZSBkb2l0IGNvbnRlbmlyIGVudHJlIDggZXQgMzIgY2FyYWN0w6hyZXMgZXQgYXUgbW9pbnMgMSBtYWp1c2N1bGUvbWludXNjdWxlIGV0IDEgY2hpZmZyZSdcXG4gICAgfSxcXG4gICAgY2FyZFRlbXBsYXRlRnVsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgYXJlYSBjYW5ub3QgY29udGFpbiBtb3JlIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdDZXQgem9uZSBuZSBwZXV0IHBhcyBjb250ZW5pciBwbHVzIGRcXFxcJ8OpbMOpbWVudHMnXFxuICAgIH0sXFxuICAgIGludmFsaWRDb2xvckNvZGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb2xvciBjb2RlIGlzIGludmFsaWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvZGUgY291bGV1ciBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgbWFuZGF0b3J5VmFsdWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWFuZGF0b3J5IHZhbHVlKHMpOicsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyKHMpIG9ibGlnYXRvaXJlKHMpIDonXFxuICAgIH0sXFxuICAgIHBhc3N3b3JkVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bhc3N3b3JkIHVwZGF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vdCBkZSBwYXNzZSBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBkZXRhaWxzVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RldGFpbHMgdXBkYXRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXRhaWxzIG1pcyDDoCBqb3VyICEnXFxuICAgIH0sXFxuICAgIHNldHRpbmdzVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NldHRpbmdzIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOodHJlcyBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBhdmF0YXJVcGRhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXZhdGFyIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdBdmF0YXIgbWlzIMOgIGpvdXIgISdcXG4gICAgfSxcXG4gICAgdXNlckFzc29jaWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyIHN1Y2Nlc3NmdWxseSBhc3NvY2lhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIgYXNzb2Npw6kgYXZlYyBzdWNjw6hzICEnXFxuICAgIH0sXFxuICAgIHVzZXJBc3NvY2lhdGVSZXNlbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbWFpbCBzZW50JyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBlbnZvecOpICEnXFxuICAgIH0sXFxuICAgIHVzZXJEaXNhc3NvY2lhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBkaXNhc3NvY2lhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1ciBkw6lzYXNzb2Npw6knXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VEZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZShzKSBkZWxldGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlKHMpIHN1cHByaW3DqXMnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VSZXByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbnQgbWVzc2FnZShzKSBmb3IgcmVwcm9jZXNzaW5nJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlKHMpIMOgIHJlbGFuY2VyIGVudm95w6lzJ1xcbiAgICB9LFxcbiAgICB1c2VyQWxyZWFkeUV4aXN0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSB1c2VyIHlvdSB3YW50IHRvIGFzc29jaWF0ZSB0byB0aGlzIGluc3RhbmNlIGFscmVhZHkgZXhpc3RzIG9uIHRoZSBzeXN0ZW0gKGFuZCBtYXliZSBhbHJlYWR5IGFzc29jaWF0ZWQgdG8gb3RoZXIgaW5zdGFuY2VzKS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xcXFxcJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHZvdWxleiBhc3NvY2llciBzdXIgY2V0dGUgaW5zdGFuY2UgZXhpc3RlIGTDqWrDoCBzdXIgbGUgc3lzdMOobWUuIElsIGVzdCBwZXV0IMOqdHJlIMOpZ2FsZW1lbnQgZMOpasOgIGFzc29jacOpIMOgIGRcXFxcJ2F1dHJlcyBpbnN0YW5jZXMuJ1xcbiAgICB9LFxcbiAgICB1bmV4cGVjdGVkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQuIFBsZWFzZSB0cnkgYWdhaW4uJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZS4gTWVyY2kgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHJlZ2lzdHJhdGlvblVuYXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVnaXN0cmF0aW9uIGlzIG5vdCBhdmFpbGFibGUuJyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXOKAmWVucmVnaXN0cmVtZW50IG5cXFxcJ2VzdCBwYXMgZGlzcG9uaWJsZS4nXFxuICAgIH0sXFxuICAgIGZvcmdvdFBhc3N3b3JkVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnUsOpaW5pdGlhbGlzZXIgbW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICBmb3Jnb3RQYXNzd29yZE1lc3NhZ2VTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2VcXFxcJ3ZlIHNlbnQgeW91IGFuIGVtYWlsLiBDbGljayB0aGUgbGluayBpbiB0aGUgZW1haWwgdG8gcmVzZXQgeW91ciBwYXNzd29yZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vdXMgdm91cyBhdm9ucyBlbnZvecOpIHVuIGVtYWlsLiBDbGlxdWV6IHN1ciBsZSBsaWVuIGRhbnMgbFxcXFwnZW1haWwgcG91ciByw6lpbml0aWFsaXNlciB2b3RyZSBtb3QgZGUgcGFzc2UuJ1xcbiAgICB9LFxcbiAgICBydW5uaW5nSm9iczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1bm5pbmcgam9icycsXFxuICAgICAgICAnZnItRlInOiAnVMOiY2hlcyBlbiBjb3VycydcXG4gICAgfSxcXG4gICAgbm9SdW5uaW5nSm9iOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gcnVubmluZyBqb2InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSB0w6JjaGUgZW4gY291cnMnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpb3JpdHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ByaW9yaXTDqSdcXG4gICAgfSxcXG4gICAgY3JlYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6nDqSBsZSdcXG4gICAgfSxcXG4gICAgbGFzdFN0YXR1c01vZGlmaWNhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3Qgc3RhdHVzIG1vZGlmaWNhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBkdSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIHN0YWNrdHJhY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGFja3RyYWNlJyxcXG4gICAgICAgICdmci1GUic6ICdTdGFja3RyYWNlJ1xcbiAgICB9LFxcbiAgICBmaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVycydcXG4gICAgfSxcXG4gICAgdmlld0xhc3RNZXNzYWdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcgbGFzdCBtZXNzYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZGVybmllcnMgbWVzc2FnZXMnXFxuICAgIH0sXFxuICAgIHZpZXdTdGFja3RyYWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBzdGFja3RyYWNlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxhIHN0YWNrdHJhY2UnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5SGlnaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZ2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0hhdXRlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eU1lZGl1bToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lZGl1bScsXFxuICAgICAgICAnZnItRlInOiAnTW95ZW5uZSdcXG4gICAgfSxcXG4gICAgcHJpb3JpdHlMb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMb3cnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Jhc3NlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eVZlcnlMb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWZXJ5IGxvdycsXFxuICAgICAgICAnZnItRlInOiAnVHLDqHMgYmFzc2UnXFxuICAgIH0sXFxuICAgIGpvYlN0YXR1c0NvbXBsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29tcGxldGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlcm1pbsOpJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNRdWV1ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdRdWV1ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VuIGF0dGVudGUnXFxuICAgIH0sXFxuICAgIGpvYlN0YXR1c0luRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbiBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNSdW5uaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVubmluZycsXFxuICAgICAgICAnZnItRlInOiAnRW4gY291cnMnXFxuICAgIH0sXFxuICAgIG1hcmtBc1JlYWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYXJrIGFzIHJlYWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01hcnF1ZXIgY29tbWUgbHUnXFxuICAgIH0sXFxuICAgIGNhbmNlbEpvYkNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2FuY2VsIHRoaXMgam9iPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgYW5udWxlciBjZXR0ZSB0w6JjaGUgPydcXG4gICAgfSxcXG4gICAgcGFzc3dvcmRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB5b3VyIHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICByZW1lbWJlck1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnS2VlcCBtZSBzaWduZWQgaW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dhcmRlciBtYSBjb25uZXhpb24nXFxuICAgIH0sXFxuICAgIGZvcmdvdFBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRm9yZ290IHBhc3N3b3JkPycsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlIG91Ymxpw6kgPydcXG4gICAgfSxcXG4gICAgbm90UmVnaXN0ZXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vdCBhbHJlYWR5IHJlZ2lzdGVyZWQ/JyxcXG4gICAgICAgICdmci1GUic6ICdQYXMgZW5jb3JlIGVucmVnaXN0csOpKGUpID8nXFxuICAgIH0sXFxuICAgIGludmFsaWRMb2dpblVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgbG9naW4gVVJMIScsXFxuICAgICAgICAnZnItRlInOiAnVVJMIGRlIGxvZ2luIGludmFsaWRlICEnXFxuICAgIH0sXFxuICAgIHVzZXJBbHJlYWR5UmVnaXN0ZXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgdXNlciBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyIGTDqWrDoCBlbnJlZ2lzdHLDqSdcXG4gICAgfSxcXG4gICAgdXNlckFscmVhZHlSZWdpc3RlcmVkVGVzdFByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgb24gdGVzdCBvciBwcm9kdWN0aW9uIGVudmlyb25tZW50JyxcXG4gICAgICAgICdmci1GUic6ICcgc3VyIHVuIGRlcyBlbnZpcm9ubmVtZW50cyAodGVzdCBvdSBwcm9kdWN0aW9uKSdcXG4gICAgfSxcXG4gICAgc2VsZWN0RW52aXJvbm1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgZW52aXJvbm1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgZW52aXJvbm5lbWVudCdcXG4gICAgfSxcXG4gICAgdGVzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Rlc3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlc3QnXFxuICAgIH0sXFxuICAgIHByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9kdWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9kdWN0aW9uJ1xcbiAgICB9LFxcbiAgICB0ZXN0QW5kUHJvZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Rlc3QgJiBQcm9kdWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0ICYgUHJvZHVjdGlvbidcXG4gICAgfSxcXG4gICAgZW52RXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugc2VsZWN0IHRoZSByZWdpc3RyYXRpb24gZW52aXJvbm1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHPDqWxlY3Rpb25uZXIgc3VyIHF1ZWwgZW52aXJvbm5lbWVudCB2b3VzIHNvdWhhaXRleiB2b3VzIGVucmVnaXN0cmVyJ1xcbiAgICB9LFxcbiAgICBsb2dvdXRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9nZ2luZyBvdXQuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWNvbm5leGlvbi4uLidcXG4gICAgfSxcXG4gICAgbG9nb3V0U3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBoYXZlIGJlZW4gc2lnbmVkIG91dCcsXFxuICAgICAgICAnZnItRlInOiAnVm91cyDDqnRlcyBtYWludGVuYW50IGTDqWNvbm5lY3TDqSdcXG4gICAgfSxcXG4gICAgbG9nb3V0QnV0dG9uTG9naW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdHbyB0byBzaWduIGluIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FsbGVyIMOgIGxhIHBhZ2UgZGUgY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBzZXJ2ZXJDb25uZXhpb25GYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ291bGQgbm90IGNvbm5lY3QgdG8gdGhlIHNlcnZlciBmb3IgaW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb2Jsw6htZSBsb3JzIGRlIGxhIGNvbm5leGlvbiBzZXJ2ZXVyIHBvdXIgbFxcXFwnaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIHN0YWxlTG9naW5TZXNzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBsb2dpbiBzZXNzaW9uIGlzIGV4cGlyZWQuIFBsZWFzZSB3YWl0LCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVmcmVzaGVkIGluIDUgc2Vjb25kcy4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgc2Vzc2lvbiBkZSBjb25uZXhpb24gYSBleHBpcsOpLiBNZXJjaSBkZSBwYXRpZW50ZXIsIGNlbGxlLWNpIHNlcmEgYXV0b21hdGlxdWVtZW50IGFjdHVhbGlzw6llIGRhbnMgNSBzZWNvbmRlcy4uLidcXG4gICAgfSxcXG4gICAgd3JvbmdVc2VybmFtZVBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsIGV0L291IG1vdCBkZSBwYXNzZSBpbnZhbGlkZSAhJ1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYWJsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIHVzZXIgYWNjb3VudCBpcyBkaXNhYmxlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIGNvbXB0ZSB1dGlsaXNhdGV1ciBlc3QgZMOpc2FjdGl2w6kgISdcXG4gICAgfSxcXG4gICAgbWVtYmVyc2hpcEVleHBpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBjb21wYW55IE1lbWJlcnNoaXAgZXhwaXJlZCBvbiA8c3Ryb25nPntleHBpcnlEYXRlfTwvc3Ryb25nPi4gUGxlYXNlIGFzayB5b3VyIGNvbXBhbnnigJlzIENvbW11bml0eSBhZG1pbmlzdHJhdG9yPHN0cm9uZz57YWRtaW5Db250YWN0fTwvc3Ryb25nPiB0byByZW5ldyB0aGUgTWVtYmVyc2hpcC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIGFib25uZW1lbnQgYSBleHBpcsOpIGxlIDxzdHJvbmc+e2V4cGlyeURhdGV9PC9zdHJvbmc+LiBNZXJjaSBkZSBjb250YWN0ZXIgdm90cmUgYWRtaW5pc3RyYXRldXI8c3Ryb25nPnthZG1pbkNvbnRhY3R9PC9zdHJvbmc+IHBvdXIgcmVub3V2ZWxlciBsZSBzZXJ2aWNlLidcXG4gICAgfSxcXG4gICAgdW5zdWJzY3JpYmVGYWlsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb3VsZCBub3QgdW5zdWJzY3JpYmUgdGhpcyBhY2NvdW50IGZyb20gdGhpcyBpbnN0YW5jZS9jb21tdW5pdHkuJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9ibMOobWUgbG9ycyBkZSBsYSBkw6lzYXNzb2NpYXRpb24gZGUgY2UgY29tcHRlIHN1ciBjZXR0ZSBpbnN0YW5jZS9jb21tdW5hdXTDqS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkQjJhdXRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIEltcG9zc2libGUgdW5zdWJzY3JpcHRpb246IHRoZXJlIGlzIG5vIHN1YnNjcmlwdGlvbiBvbiBpbnN0YW5jZSAoKikuJyxcXG4gICAgICAgICdmci1GUic6ICcgSW1wb3NzaWJsZSBkZSBzZSBkw6lzaW5zY3JpcmU6IGlsIG5cXFxcJ3kgYSBwYXMgZFxcXFwnaW5zY3JpcHRpb24gcG9zc2libGUgc3VyIGxcXFxcJ2luc3RhbmNlICgqKS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkSW5zdGFuY2VOb3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJyBDb3VsZCBub3QgZmluZCBzZWxlY3RlZCBpbnN0YW5jZSBkZWZpbml0aW9uLiBQbGVhc2UgcmVsb2FkIHRoZSBwYWdlIGFuZCByZXRyeS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJyBJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGVzIHByb3ByacOpdMOpcyBkZSBsXFxcXCdpbnN0YW5jZSBzw6lsZWN0aW9ubsOpZS4gTWVyY2kgZGUgcmVjaGFyZ2VyIGxhIHBhZ2UgZXQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkTm9CYXNlVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIEludmFsaWQgYmFzZVVybCBmb3VuZCBmb3IgdGhlIGN1cnJlbnQgaW5zdGFuY2UuJyxcXG4gICAgICAgICdmci1GUic6ICcgVVJMIGRlIGxcXFxcJ2luc3RhbmNlIHPDqWxlY3Rpb25uw6llIGludmFsaWRlLidcXG4gICAgfSxcXG4gICAgdXNlck5vdEFzc29jaWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgVXNlciBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdGFuY2UuJyxcXG4gICAgICAgICdmci1GUic6ICcgVXRpbGlzYXRldXIgbm9uIGFzc29jacOpIMOgIGNldHRlIGluc3RhbmNlLidcXG4gICAgfSxcXG4gICAgdW5zdWJzY3JpYmVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBzdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIGZyb20gY29tbXVuaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZMOpc2Fzc29jacOpIGRlIGNldHRlIGluc3RhbmNlLidcXG4gICAgfSxcXG4gICAgbm9QZXJtaXNzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRvblxcXFwndCBoYXZlIGFjY2VzcyB0byBhbnkgaW5zdGFuY2UhIFBsZWFzZSBjaGVjayB5b3VyIGFjY291bnQgc2V0dGluZ3Mgd2l0aCB5b3VyIGFkbWluaXN0cmF0b3IuJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYXVjdW4gZHJvaXQgZW5yZWdpc3Ryw6kuIE1lcmNpIGRlIHbDqXJpZmllciBsZSBwYXJhbcOpdHJhZ2UgZGUgdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyIGF2ZWMgdm90cmUgYWRtaW5pc3RyYXRldXIuJ1xcbiAgICB9LFxcbiAgICBuZXdWZXJzaW9uQXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIHBvcnRhbCBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIGEgbmV3IHZlcnNpb24uIFBsZWFzZSBzYXZlIHlvdXIgY3VycmVudCB3b3JrLCB0aGUgdXBkYXRlIHdpbGwgYmUgZG9uZSBhdXRvbWF0aWNhbGx5IGluIDkwIHNlY29uZHMuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIHBvcnRhaWwgZG9pdCDDqnRyZSBtaXMgw6Agam91ciB2ZXJzIHVuIG5vdXZlbGxlIHZlcnNpb24uIE1lcmNpIGRlIHNhdXZlZ2FyZGVyIHZvcyB0cmF2YXV4IGVuIGNvdXJzLCBsYSBtaXNlIMOgIGpvdXIgc2UgZmVyYSBhdXRvbWF0aXF1ZW1lbnQgZGFucyA5MCBzZWNvbmRlcy4uLidcXG4gICAgfSxcXG4gICAgdXBkYXRlTm93OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBkYXRlIG5vdyEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01ldHRyZSDDoCBqb3VyIG1haW50ZW5hbnQgISdcXG4gICAgfSxcXG4gICAgbm90Rm91bmRUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc291cmNlIG5vdCBmb3VuZCcsXFxuICAgICAgICAnZnItRlInOiAnUmVzc291cmNlIGludHJvdXZhYmxlJ1xcbiAgICB9LFxcbiAgICBub3RGb3VuZE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgcmVxdWVzdGVkIHJlc291cmNlIHdhcyBub3QgZm91bmQuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSByZXNzb3VyY2UgZGVtYW5kw6llIGVzdCBpbnRyb3V2YWJsZS4nXFxuICAgIH0sXFxuICAgIHNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2V0dGluZ3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmVzJ1xcbiAgICB9LFxcbiAgICBvdGhlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPdGhlcnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1dHJlcydcXG4gICAgfSxcXG4gICAgZGV2ZWxvcG1lbnRUb29sczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RldmVsb3BtZW50IHRvb2xzJyxcXG4gICAgICAgICdmci1GUic6ICdPdXRpbHMgZGUgZMOpdmVsb3BwZW1lbnQnXFxuICAgIH0sXFxuICAgIGNvZGVFZGl0b3JDb25maWd1cmF0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29kZSBlZGl0b3IgY29uZmlndXJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJhdGlvbiBkZXMgw6lkaXRldXJzIGRlIGNvZGUnXFxuICAgIH0sXFxuICAgIG5ld1Bhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTmV3IHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdOb3V2ZWF1IG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgY29uZmlybVBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29uZmlybSBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlybWVyIG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcmVmcmVzaFBlcm1pc3Npb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPGRpdj5SZWZyZXNoPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+UmFmcmFcXFxcdTAwRUVjaGlyPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiXFxuICAgIH0sXFxuICAgIGN0eVVuc3Vic2NyaWJlOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPGRpdj5VbnN1YnNjcmliZSBmcm9tPGJyIC8+dGhpcyBDb21tdW5pdHk8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+TWUgZFxcXFx1MDBFOXNpbnNjcmlyZTxiciAvPmRlIGNldHRlIENvbW11bmF1dFxcXFx1MDBFOTwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgZGVsZXRlQWNjb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+RGVsZXRlPGJyIC8+bXkgYWNjb3VudDwvZGl2PlxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiPGRpdj5TdXBwcmltZXIgbW9uPGJyIC8+Y29tcHRlIHV0aWxpc2F0ZXVyPC9kaXY+XFxcIlxcbiAgICB9LFxcbiAgICBleHBvcnRQZXJtaXNzaW9uczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+RXhwb3J0PGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+RXhwb3J0ZXI8YnIgLz5wZXJtaXNzaW9uczwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgbWVzc2FnZXNBdXRvcmVmcmVzaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F1dG8tcmVmcmVzaCBtZXNzYWdlcyBsaXN0IGRlbGF5JyxcXG4gICAgICAgICdmci1GUic6ICdEw6lsYWkgZGUgcmFmcmHDrmNoaXNzZW1lbnQgZGUgbGEgbGlzdGUgZGVzIG1lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICBkaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ2Rpc2FibGVkJyxcXG4gICAgICAgICdmci1GUic6ICdkw6lzYWN0aXbDqSdcXG4gICAgfSxcXG4gICAgcHJlZmVycmVkTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmVmZXJyZWQgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZSBwcsOpZsOpcsOpZSdcXG4gICAgfSxcXG4gICAgdXNlckRlbGV0ZUFjY291bnRDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPHA+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB5b3UgYWNjb3VudD88L3A+XFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCI8cD5cXFxcdTAwQ0F0ZXMtdm91cyBzXFxcXHUwMEZCcihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIgPzwvcD5cXFwiXFxuICAgIH0sXFxuICAgIHVzZXJEZWxldGVBY2NvdW50Q29uZmlybVN1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxwPlxcXFxuICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XFxcXFxcXCJkYW5nZXItY29sb3IgYm90dG9tLW1hcmdpbiB0ZXh0LXh4bGFyZ2VcXFxcXFxcIj5XQVJOSU5HPC9oMz5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5BcmUgeW91IDxzdHJvbmc+UkVBTExZPC9zdHJvbmc+IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHlvdSBhY2NvdW50PyBZb3Ugd29uJ3QgYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHBvcnRhbCBhbnltb3JlLi4uPC9zcGFuPlxcXFxuICAgICAgICAgICAgPC9wPlxcXFxuICAgICAgICBcXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIlxcXFxuICAgICAgICAgICAgPHA+XFxcXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cXFxcXFxcImRhbmdlci1jb2xvciBib3R0b20tbWFyZ2luIHRleHQteHhsYXJnZVxcXFxcXFwiPkFUVEVOVElPTjwvaDM+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+XFxcXHUwMENBdGVzLXZvdXMgPHN0cm9uZz5WUkFJTUVOVDwvc3Ryb25nPiBzXFxcXHUwMEZCcihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIgPyBWb3VzIG5lIHBvdXJyZXogcGx1cyBhY2NcXFxcdTAwRTlkZXIgYXUgcG9ydGFpbC4uLjwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvcD5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICB1c2VyVW5zdWJzY3JpYmVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBjb21tdW5pdHk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgdm90cmUgY29tcHRlIGluc2NyaXB0aW9uIMOgIGNldHRlIGNvbW11bmF1dMOpID8nXFxuICAgIH0sXFxuICAgIHNldHBhc3N3b3JkVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXQgYSBuZXcgcGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6llciB1biBub3V2ZWF1IG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcGFzc3dvcmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICBzaWduSW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaWduIGluJyxcXG4gICAgICAgICdmci1GUic6ICdTZSBjb25uZWN0ZXInXFxuICAgIH0sXFxuICAgIHNldHBhc3N3b3JkU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgcGFzc3dvcmQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNldC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIG1vdCBkZSBwYXNzZSBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkUGFzc3dvcmRDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFzc3dvcmRzIGFyZSBub3QgaWRlbnRpY2FsJyxcXG4gICAgICAgICdmci1GUic6ICdMZXMgMiBtb3RzIGRlIHBhc3NlIG5lIHNvbnQgcGFzIGlkZW50aXF1ZXMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1NdWx0aXBsZU1lc3NhZ2VzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgbWVzc2FnZXM/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1NdWx0aXBsZVJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXByb2Nlc3MgdGhlIHNlbGVjdGVkIG1lc3NhZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVsYW5jZXIgbGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzID8nXFxuICAgIH0sXFxuICAgIG11bHRpcGxlUmVwcm9jZXNzU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lc3NhZ2VzIHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlcyByZWxhbmPDqXMnXFxuICAgIH0sXFxuICAgIG11bHRpcGxlUmVwcm9jZXNzRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ21lc3NhZ2Uocykgbm90IHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICdtZXNzYWdlKHMpIG5vbiByZWxhbmPDqShzKSdcXG4gICAgfSxcXG4gICAgZmV0Y2htc2dGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZSBjYW5ub3QgYmUgbG9hZGVkJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtZXNzYWdlIG5lIHBldXQgw6p0cmUgY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgbWVzc2FnZXNEZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZXMgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVzc2FnZXMgc3VwcHJpbcOpcydcXG4gICAgfSxcXG4gICAgbWVzc2FnZVNhdmVEaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+RG8geW91IHdhbnQgdG8gc2F2ZSB5b3VyIG1vZGlmaWNhdGlvbnM/PC9zcGFuPjxici8+XFxcXG4gICAgICAgICAgICAgICAgPGVtIGNsYXNzPVxcXFxcXFwidGV4dC1tZWRpdW1cXFxcXFxcIj5Zb3VyIHByZWZlcmVuY2VzIChwcmVzZW5jZSwgd2lkdGggYW5kIG9yZGVyIG9mIGNvbHVtbnMsIGFjdGlvbiByZWxhdGVkIHRvIFxcXFx1MjAxQ1NlYXJjaFxcXFx1MjAxRCBhbmQgXFxcXHUyMDFDUmVzZXRcXFxcdTIwMUQgYnV0dG9ucy4uLikgd2lsbCBiZSBzYXZlZCBpbiB5b3VyIHVzZXIgcHJvZmlsZS4gTm90ZSB0aGF0IHlvdSBjYW4gc2F2ZSBzcGVjaWZpYyBzZXR0aW5ncyBmb3IgZWFjaCBkaXNwbGF5IG1vZGUgKG1vYmlsZSwgbWVkaXVtIGFuZCBsYXJnZSBzY3JlZW4pLjwvZW0+XFxcXG4gICAgICAgICAgICA8L2Rpdj5cXFxcbiAgICAgICAgXFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+Vm91bGV6LXZvdXMgc2F1dmVnYXJkZXIgdm9zIG1vZGlmaWNhdGlvbnMgPzwvc3Bhbj48YnIvPlxcXFxuICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cXFxcXFxcInRleHQtbWVkaXVtXFxcXFxcXCI+Vm9zIHByXFxcXHUwMEU5ZlxcXFx1MDBFOXJlbmNlcyBkJ2FmZmljaGFnZSAocHJcXFxcdTAwRTlzZW5jZSwgbGFyZ2V1ciBldCBvcmRyZSBkZXMgY29sb25uZXMsIGFjdGlvbiBkZXMgYm91dG9ucyBcXFxcdTIwMUNSZWNoZXJjaGVyXFxcXHUyMDFEIGV0IFxcXFx1MjAxQ1JcXFxcdTAwRTlpbml0aWFsaXNlclxcXFx1MjAxRC4uLikgc2Vyb250IGVucmVnaXN0clxcXFx1MDBFOWVzIGRhbnMgdm90cmUgcHJvZmlsIHV0aWxpc2F0ZXVyLiBWb3VzIHBvdXZleiBzYXV2ZWdhcmRlciBkZXMgcGFyYW1cXFxcdTAwRTh0cmVzIHNwXFxcXHUwMEU5Y2lmaXF1ZXMgcG91ciBjaGFxdWUgbW9kZSBkJ2FmZmljaGFnZSAobW9iaWxlLCBtb3llbiBldCBncmFuZCBcXFxcdTAwRTljcmFuKS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCJcXG4gICAgfSxcXG4gICAgbXVsdGlwbGVEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnbWVzc2FnZShzKSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnbWVzc2FnZShzKSBub24gc3VwcHJpbcOpcydcXG4gICAgfSxcXG4gICAgZmV0Y2hkb2NGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRG9jdW1lbnQgY2Fubm90IGJlIGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGUgZG9jdW1lbnQgbmUgcGV1dCDDqnRyZSBjaGFyZ8OpJ1xcbiAgICB9LFxcbiAgICBjb25maXJtQ2xvc2VNZXNzYWdlU3VibWl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIHRoaXMgbWVzc2FnZSBzdWJtaXNzaW9uIHNlc3Npb24/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciB0ZXJtaW5lciBjZXR0ZSBzZXNzaW9uIGRlIGNyw6lhdGlvbiBkZSBtZXNzYWdlID8nXFxuICAgIH0sXFxuICAgIG5vVmlld0FjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhY2Nlc3MgdG8gYW55IHZpZXcgb24gdGhpcyBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYWNjw6hzIMOgIGF1Y3VuZSB2dWUgc3VyIGNldHRlIHBhZ2UnXFxuICAgIH0sXFxuICAgIG5vUmVzdWx0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlc3VsdHMgZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIHLDqXN1bHRhdCdcXG4gICAgfSxcXG4gICAgcmVmcmVzaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZnJlc2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhZnJhw65jaGlyJ1xcbiAgICB9LFxcbiAgICByZXByb2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXByb2Nlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbGFuY2VyJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZU1zZ1JlcHJvY2Vzc0ltcG9zc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmUgb3IgbW9yZSBvZiB0aGUgc2VsZWN0ZWQgbWVzc2FnZXMgY2Fubm90IGJlIHJlcHJvY2Vzc2VkLiBQbGVhc2UgY2hlY2sgeW91ciBzZWxlY3Rpb24gYW5kIHJldHJ5IScsXFxuICAgICAgICAnZnItRlInOiAnVW4gb3UgcGx1c2lldXJzIGRlcyBtZXNzYWdlcyBzw6lsZWN0aW9ubsOpcyBuZSBwZXV2ZW50IHBhcyDDqnRyZSByZWxhbmPDqXMuIE1lcmNpIGRlIHZlcmlmaWVyIHZvdHJlIHPDqWxlY3Rpb24gZXQgZGUgcsOpZXNzYXllciAhJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZU1zZ0RlbGV0ZUltcG9zc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmUgb3IgbW9yZSBvZiB0aGUgc2VsZWN0ZWQgbWVzc2FnZXMgY2Fubm90IGJlIGRlbGV0ZWQuIFBsZWFzZSBjaGVjayB5b3VyIHNlbGVjdGlvbiBhbmQgcmV0cnkhJyxcXG4gICAgICAgICdmci1GUic6ICdVbiBvdSBwbHVzaWV1cnMgZGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzIG5lIHBldXZlbnQgcGFzIMOqdHJlIHN1cHByaW3DqXMuIE1lcmNpIGRlIHZlcmlmaWVyIHZvdHJlIHPDqWxlY3Rpb24gZXQgZGUgcsOpZXNzYXllciAhJ1xcbiAgICB9LFxcbiAgICBjb25maXJtTm9kZURlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBub2RlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIG5vZXVkID8nXFxuICAgIH0sXFxuICAgIHJvb3RUcmVlRGlzcGxheToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jvb3QgdHJlZSBkaXNwbGF5ZWQ6JyxcXG4gICAgICAgICdmci1GUic6ICdBcmJyZSByYWNpbmUgYWZmaWNow6kgOidcXG4gICAgfSxcXG4gICAgb3JnYW5pc2F0aW9uc0NvbmZpcm1EZWxldGVMYXN0UG9zaXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGlzIHRoZSBvbmx5IG9yZ2FuaXphdGlvbiBwb3NpdGlvbiBoZWxkIGJ5IHRoaXMgdXNlci4gSWYgeW91IGRlbGV0ZSBpdCwgeW91IHdvblxcXFwndCBiZSBhYmxlIHRvIHJlLWFzc2lnbiB0aGlzIHVzZXIgYW55d2hlcmUgaW4gdGhlIHRyZWUuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjb21wbGV0ZWx5IHJlbW92ZSB0aGlzIHVzZXIgZnJvbSB0aGUgb3JnYW5pemF0aW9uPycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyDDqnRlcyBzdXIgbGUgcG9pbnQgZGUgc3VwcHJpbWVyIGxhIHNldWxlIHBvc2l0aW9uIHRlbnVlIHBhciBjZXQgdXRpbGlzYXRldXIgZGFucyBsXFxcXCdvcmdhbmlzYXRpb24uIFNpIHZvdXMgbGEgc3VwcHJpbWV6LCB2b3VzIG5lIHBvdXJyZXogcGx1cyBkdSB0b3V0IHLDqWFzc2lnbmVyIGNldCB1dGlsaXNhdGV1ciBkYW5zIGxcXFxcJ2FyYnJlLiDDinRlcy12b3VzIGNlcnRhaW4gZGUgdm91bG9pciBzdXBwcmltZXIgY29tcGzDqHRlbWVudCBjZXQgdXRpbGlzYXRldXIgZGUgbFxcXFwnb3JnYW5pc2F0aW9uID8nXFxuICAgIH0sXFxuICAgIG5vQXZhaWxhYmxlUmVwb3J0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlcG9ydHMgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gcmFwcG9ydCBkaXNwb25pYmxlLidcXG4gICAgfSxcXG4gICAgc2VsZWN0UmVwb3J0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgcmVwb3J0JyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuIHJhcHBvcnQnXFxuICAgIH0sXFxuICAgIHByaW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcHJpbWVyJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlQ29uZmlybUxlYXZlV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBsZWF2ZSB0aGlzIHBhZ2UgYW5kIGxvc2UgeW91ciB1cGRhdGVzPycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBhdmV6IGVmZmVjdHXDqSBkZXMgbW9kaWZpY2F0aW9ucyBzYW5zIGxlcyBlbnJlZ2lzdHJlci4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcXVpdHRlciBjZXR0ZSBwYWdlIGV0IHBlcmRyZSBsZXMgZG9ubsOpZXMgbm9uIHNhdXZlZ2FyZMOpZXMgPydcXG4gICAgfSxcXG4gICAgc2VydmljZVZlcnNpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlIHZlcnNpb246JyxcXG4gICAgICAgICdmci1GUic6ICdWZXJzaW9uIGR1IHNlcnZpY2UgOidcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25Db21wbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ09wZXJhdGlvbiBjb21wbGV0ZScsXFxuICAgICAgICAnZnItRlInOiAnT3DDqXJhdGlvbiB0ZXJtaW7DqWUnXFxuICAgIH0sXFxuICAgIGJhdGNoT3BlcmF0aW9uUHJvY2Vzc2VkSXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9jZXNzZWQgaXRlbXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudHMgdHJhaXTDqXMnXFxuICAgIH0sXFxuICAgIGVycm9yczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Vycm9ycycsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVycydcXG4gICAgfSxcXG4gICAgc3VjY2Vzc2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2Vzc2VzJyxcXG4gICAgICAgICdmci1GUic6ICdSw6l1c3NpcydcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25BbGxHb29kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWxsIGl0ZW1zIGhhdmUgYmVlbiBwcm9jZXNzZWQuIEV2ZXJ5dGhpbmcgd2VudCB3ZWxsIScsXFxuICAgICAgICAnZnItRlInOiAnVG91cyBsZXMgw6lsw6ltZW50cyBvbnQgw6l0w6kgdHJhaXTDqXMgISdcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25FcnJvcnNPY2N1cmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU29tZSBlcnJvcnMgb2NjdXJlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXMgZXJyZXVycyBzb250IHN1cnZlbnVlcyBsb3JzIGRlcyB0cmFpdGVtZW50cy4nXFxuICAgIH0sXFxuICAgIGl0ZW1JZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEIMOpbMOpbWVudCdcXG4gICAgfSxcXG4gICAgc3RhdHVzQ29kZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N0YXR1cyBjb2RlJyxcXG4gICAgICAgICdmci1GUic6ICdDb2RlIEhUVFAnXFxuICAgIH0sXFxuICAgIGVycm9yTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Vycm9yIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2UgZFxcXFwnZXJyZXVyJ1xcbiAgICB9LFxcbiAgICB3b3JrSXRlbVByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dvcmsgaXRlbSBwcm9jZXNzZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdUw6JjaGUgdHJhaXTDqWUgISdcXG4gICAgfSxcXG4gICAgdmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyJ1xcbiAgICB9LFxcbiAgICBuYW1lQWxyZWFkeVVzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIG5hbWUgaXMgYWxyZWFkeSB1c2VkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2Ugbm9tIGVzdCBkw6lqw6AgdXRpbGlzw6kuJ1xcbiAgICB9LFxcbiAgICB1bmtub3duOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVW5rbm93bicsXFxuICAgICAgICAnZnItRlInOiAnSW5jb25udSdcXG4gICAgfSxcXG4gICAgc2VydmljZVN0YXR1c0NvbmZpZ0NoYW5nZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gaGFzIGNoYW5nZWQgc2luY2UgbGFzdCBzdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnTGEgY29uZmlndXJhdGlvbiBkdSBzZXJ2aWNlIGEgY2hhbmfDqSBkZXB1aXMgbGUgZGVybmllciBkw6ltYXJyYWdlJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlU3RhdHVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VydmljZSBzdGF0dXM6JyxcXG4gICAgICAgICdmci1GUic6ICfDiXRhdCBkdSBzZXJ2aWNlIDonXFxuICAgIH1cXG59O1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI3MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5leHBvcnRzLkFWQUlMQUJMRV9MQU5HVUFHRVMgPSBbXFxuICAgIHtcXG4gICAgICAgIGxhYmVsOiAnRU4nLFxcbiAgICAgICAgbG9jYWxlOiAnZW4tVVMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhYmVsOiAnRlInLFxcbiAgICAgICAgbG9jYWxlOiAnZnItRlInXFxuICAgIH1cXG5dO1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvbmZpZy5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5mbGFnc0RlZiA9IHtcXG4gICAgJ2V1bnJlYWQnOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtZW52ZWxvcGUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZm9udC1jb2xvci1saWdodGVyJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdVbnJlYWQnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdOb24gbHUnXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgICdkd2FybmluZyc6IHtcXG4gICAgICAgIGljb25TaGFwZTogJ2ZhcyBmYS1leGNsYW1hdGlvbi10cmlhbmdsZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdkYW5nZXItY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ1dhcm5pbmcnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdBdHRlbnRpb24nXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgICdjaW1wb3J0YW50Jzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLXN0YXInLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnd2FybmluZy1jb2xvcicsXFxuICAgICAgICBmbGFnTGFiZWw6IHtcXG4gICAgICAgICAgICAnZW4tVVMnOiAnSW1wb3J0YW50JyxcXG4gICAgICAgICAgICAnZnItRlInOiAnSW1wb3J0YW50J1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYmluZm8nOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtc3F1YXJlJyxcXG4gICAgICAgIGljb25Db2xvcjogJ2luZm8tY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ0luZm8nLFxcbiAgICAgICAgICAgICdmci1GUic6ICdJbmZvJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYW9rJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWNpcmNsZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdwcmltYXJ5LWNvbG9yJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdPSycsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ09LJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYWF2aXNpYmxlJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWFyY2hpdmUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZm9udC1jb2xvci1saWdodGVyJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdBcmNoaXZlZCcsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ0FyY2hpdsOpJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIGludmVyc2VkOiB0cnVlLFxcbiAgICAgICAgZGVmYXVsdFNlYXJjaFN0YXRlOiB0cnVlXFxuICAgIH0sXFxufTtcXG5leHBvcnRzLmxhbmd1YWdlSXNvID0gW1xcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBZmFyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBQicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBYmtoYXonXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F2ZXN0YW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FGJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0FmcmlrYWFucydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQWthbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQU0nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQW1oYXJpYydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQU4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJhZ29uZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBcmFiaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Fzc2FtZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBdmFyaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F5bWFyYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQVonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXplcmJhaWphbmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jhc2hraXInXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0JlbGFydXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0J1bGdhcmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQkgnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQmloYXJpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCaXNsYW1hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCYW1iYXJhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCZW5nYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaWJldGFuIFN0YW5kYXJkJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCcmV0b24nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jvc25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NhdGFsYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoZWNoZW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoYW1vcnJvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDb3JzaWNhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ1InLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3JlZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3plY2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09sZCBDaHVyY2ggU2xhdm9uaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NodXZhc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dlbHNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdEQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdEYW5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0RFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dlcm1hbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRFYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRGl2ZWhpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdEWicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdEem9uZ2toYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRUUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXdlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdFTCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdFd2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VuZ2xpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VzcGVyYW50bydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRVMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3BhbmlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRVQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXN0b25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jhc3F1ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGVyc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRnVsYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmlubmlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmlqaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdGYXJvZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdGcmVuY2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0ZZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dlc3Rlcm4gRnJpc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR0EnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSXJpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Njb3R0aXNoIEdhZWxpYydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnR2FsaWNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0d1YXJhbsOtJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdHVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHdWphcmF0aSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR1YnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFueCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSGF1c2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hlYnJldydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSGluZGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hpcmkgTW90dSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSFInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3JvYXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hhaXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0h1bmdhcmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSFknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJtZW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0haJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hlcmVybydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSW50ZXJsaW5ndWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0luZG9uZXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludGVybGluZ3VlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJRycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJZ2JvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOdW9zdSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSW51cGlhcSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSU8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSWRvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJY2VsYW5kaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0l0YWxpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludWt0aXR1dCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSmFwYW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0pWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0phdmFuZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHZW9yZ2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0cnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS29uZ28nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tpa3V5dSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0onLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS3dhbnlhbWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0themFraCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FsYWFsbGlzdXQnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tNJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tobWVyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLYW5uYWRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLb3JlYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0thbnVyaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FzaG1pcmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t1cmRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tvbWknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Nvcm5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t5cmd5eidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGF0aW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xCJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0x1eGVtYm91cmdpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dhbmRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaW1idXJnaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaW5nYWxhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMYW8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0xpdGh1YW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0x1YmEtS2F0YW5nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTFYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGF0dmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsYWdhc3knXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01IJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hcnNoYWxsZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNxIFvcmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01LJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hY2Vkb25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01MJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hbGF5YWxhbSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTU4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTW9uZ29saWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYXJhdGhpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYWxheeKAjidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsdGVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQnVybWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTmF1cnUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05CJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcndlZ2lhbiBCb2ttw6VsJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J0aGVybiBOZGViZWxlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOZXBhbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05HJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05kb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRHV0Y2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05OJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcndlZ2lhbiBOeW5vcnNrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdOTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J3ZWdpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05SJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvdXRoZXJuIE5kZWJlbGUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05WJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05hdmFqbydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTlknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ2hpY2hld2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09DJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09jY2l0YW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09KJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09qaWJ3ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnT00nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnT3JvbW8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09SJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09yaXlhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdPUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdPc3NldGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGFuamFiaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUMSBbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1BMJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1BvbGlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUFMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGFzaHRvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdQVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdQb3J0dWd1ZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdRVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdRdWVjaHVhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdSb21hbnNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLaXJ1bmRpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdSb21hbmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUlUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUnVzc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUlcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2lueWFyd2FuZGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NhbnNrcml0J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTQycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTYXJkaW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NpbmRoaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0UnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTm9ydGhlcm4gU2FtaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0cnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2FuZ28nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NpbmhhbGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Nsb3ZhaydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2xvdmVuZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU00nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2Ftb2FuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTaG9uYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU08nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU29tYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTUScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBbGJhbmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1InLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2VyYmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3dhdGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvdXRoZXJuIFNvdGhvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTdW5kYW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3ZWRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3YWhpbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhbWlsJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdURScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUZWx1Z3UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhamlrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaGFpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaWdyaW55YSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHVya21lbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGFnYWxvZydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVE4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHN3YW5hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHVya2lzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHNvbmdhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYXRhcidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHdpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUWScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYWhpdGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVXlnaHVyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdVSycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdVa3JhaW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1VyZHUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VaJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1V6YmVrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdWRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdWZW5kYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVmlldG5hbWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVk8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVm9sYXDDvGsnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1dBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dhbGxvb24nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1dPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dvbG9mJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdYSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdYaG9zYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWUknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWWlkZGlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWU8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWW9ydWJhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdaQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdaaHVhbmcnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1pIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoaW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1pVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1p1bHUnXFxuICAgIH1cXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzSXNvID0gW1xcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQURcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFuZG9ycmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVW5pdGVkIEFyYWIgRW1pcmF0ZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBRlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWZnaGFuaXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW50aWd1YSBhbmQgQmFyYnVkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbmd1aWxsYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbGJhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFybWVuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW5nb2xhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFudGFyY3RpY2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXJnZW50aW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFtZXJpY2FuIFNhbW9hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkF1c3RyaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXVzdHJhbGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFydWJhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVhcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIsOFbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBemVyYmFpamFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvc25pYSBhbmQgSGVyemVnb3ZpbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFyYmFkb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFuZ2xhZGVzaFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCZWxnaXVtXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJ1cmtpbmEgRmFzb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCdWxnYXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCYWhyYWluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQklcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJ1cnVuZGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVuaW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgQmFydGjDqWxlbXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVybXVkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcnVuZWlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQm9saXZpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJRXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb25haXJlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJyYXppbFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCYWhhbWFzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJodXRhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJWXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb3V2ZXQgSXNsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvdHN3YW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQllcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJlbGFydXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVsaXplXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhbmFkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb2NvcyBbS2VlbGluZ10gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUmVwdWJsaWMgb2YgdGhlIENvbmdvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlN3aXR6ZXJsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkl2b3J5IENvYXN0XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0tcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNvb2sgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGlsZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYW1lcm9vblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGluYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb2xvbWJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb3N0YSBSaWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1VcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN1YmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2FwZSBWZXJkZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDdXJhY2FvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNocmlzdG1hcyBJc2xhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ3lwcnVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1pcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN6ZWNoIFJlcHVibGljXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiREVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdlcm1hbnlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJESlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGppYm91dGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJES1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGVubWFya1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEb21pbmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEb21pbmljYW4gUmVwdWJsaWNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJEWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWxnZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFY3VhZG9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRUVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVzdG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRWd5cHRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiV2VzdGVybiBTYWhhcmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRXJpdHJlYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTcGFpblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFdGhpb3BpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGaW5sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRkpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZpamlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRmFsa2xhbmQgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNaWNyb25lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZhcm9lIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJhbmNlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdhYm9uXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVuaXRlZCBLaW5nZG9tXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0RcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdyZW5hZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR2VvcmdpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGcmVuY2ggR3VpYW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1ZXJuc2V5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdoYW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdpYnJhbHRhclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHcmVlbmxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR2FtYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR05cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1aW5lYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWFkZWxvdXBlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVxdWF0b3JpYWwgR3VpbmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdyZWVjZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWF0ZW1hbGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR3VhbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWluZWEtQmlzc2F1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1eWFuYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkhLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJIb25nIEtvbmdcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJITVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSGVhcmQgSXNsYW5kIGFuZCBNY0RvbmFsZCBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkhvbmR1cmFzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSFJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNyb2F0aWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSGFpdGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSHVuZ2FyeVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJbmRvbmVzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXJlbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJc3JhZWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXNsZSBvZiBNYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSW5kaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIklyYXFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXJhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJY2VsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkl0YWx5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkplcnNleVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKYW1haWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkpvcmRhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKYXBhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLZW55YVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLeXJneXpzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhbWJvZGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIktpcmliYXRpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS01cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNvbW9yb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJLTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgS2l0dHMgYW5kIE5ldmlzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1BcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5vcnRoIEtvcmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIEtvcmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkt1d2FpdFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYXltYW4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLYXpha2hzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxhb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGViYW5vblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBMdWNpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWVjaHRlbnN0ZWluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNyaSBMYW5rYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWJlcmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxlc290aG9cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGl0aHVhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkx1eGVtYm91cmdcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGF0dmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFlcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxpYnlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vcm9jY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9uYWNvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTURcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbGRvdmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9udGVuZWdyb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1GXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBNYXJ0aW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFkYWdhc2NhclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1IXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXJzaGFsbCBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hY2Vkb25pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1MXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWxpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk15YW5tYXIgW0J1cm1hXVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1OXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNb25nb2xpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1PXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWNhb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1QXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNUVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFydGluaXF1ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1SXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXVyaXRhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbnRzZXJyYXRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsdGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWF1cml0aXVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGRpdmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGF3aVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1YXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNZXhpY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsYXlzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW96YW1iaXF1ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5BXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOYW1pYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTkNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5ldyBDYWxlZG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJORVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmlnZXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJORlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9yZm9sayBJc2xhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmlnZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5JXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOaWNhcmFndWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmV0aGVybGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9yd2F5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlBcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5lcGFsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5hdXJ1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5pdWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmV3IFplYWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJPTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiT21hblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYW5hbWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGVydVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGcmVuY2ggUG9seW5lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUEdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBhcHVhIE5ldyBHdWluZWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGhpbGlwcGluZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUG9sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUE1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IFBpZXJyZSBhbmQgTWlxdWVsb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGl0Y2Fpcm4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQdWVydG8gUmljb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYWxlc3RpbmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUG9ydHVnYWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFsYXVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFyYWd1YXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJRQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUWF0YXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUsOpdW5pb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJST1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUm9tYW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlJTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZXJiaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUnVzc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlJ3YW5kYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYXVkaSBBcmFiaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU29sb21vbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNleWNoZWxsZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3VkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3dlZGVuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNpbmdhcG9yZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBIZWxlbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2xvdmVuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTbG92YWtpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTaWVycmEgTGVvbmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FuIE1hcmlub1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZW5lZ2FsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU09cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvbWFsaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3VyaW5hbWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU291dGggU3VkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU8OjbyBUb23DqSBhbmQgUHLDrW5jaXBlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVsIFNhbHZhZG9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNpbnQgTWFhcnRlblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTeXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTd2F6aWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVERcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNoYWRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJURlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVEdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRvZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGhhaWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGFqaWtpc3RhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUb2tlbGF1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVExcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVhc3QgVGltb3JcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya21lbmlzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlR1bmlzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVG9uZ2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya2V5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRyaW5pZGFkIGFuZCBUb2JhZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHV2YWx1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRhaXdhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUYW56YW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVa3JhaW5lXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVUdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVnYW5kYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJVU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVW5pdGVkIFN0YXRlc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVcnVndWF5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVVpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlV6YmVraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmF0aWNhbiBDaXR5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlZlbmV6dWVsYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcml0aXNoIFZpcmdpbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVklcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlUuUy4gVmlyZ2luIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmlldG5hbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZVXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJWYW51YXR1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiV0ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIldhbGxpcyBhbmQgRnV0dW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiV1NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhbW9hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIktvc292b1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIllFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJZZW1lblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIllUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXlvdHRlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIEFmcmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlpNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJaYW1iaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJaV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiWmltYmFid2VcXFwiXFxuICAgIH1cXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzTmFtZVByZVNlbGVjdGlvbiA9IFtcXG4gICAgXFxcIlVuaXRlZCBTdGF0ZXNcXFwiLFxcbiAgICBcXFwiQ2FuYWRhXFxcIixcXG4gICAgXFxcIkZyYW5jZVxcXCIsXFxuICAgIFxcXCJHZXJtYW55XFxcIixcXG4gICAgXFxcIk1leGljb1xcXCJcXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzTmFtZSA9IFtcXG4gICAgXFxcIkFmZ2hhbmlzdGFuXFxcIixcXG4gICAgXFxcIsOFbGFuZFxcXCIsXFxuICAgIFxcXCJBbGJhbmlhXFxcIixcXG4gICAgXFxcIkFsZ2VyaWFcXFwiLFxcbiAgICBcXFwiQW1lcmljYW4gU2Ftb2FcXFwiLFxcbiAgICBcXFwiQW5kb3JyYVxcXCIsXFxuICAgIFxcXCJBbmdvbGFcXFwiLFxcbiAgICBcXFwiQW5ndWlsbGFcXFwiLFxcbiAgICBcXFwiQW50YXJjdGljYVxcXCIsXFxuICAgIFxcXCJBbnRpZ3VhIGFuZCBCYXJidWRhXFxcIixcXG4gICAgXFxcIkFyZ2VudGluYVxcXCIsXFxuICAgIFxcXCJBcm1lbmlhXFxcIixcXG4gICAgXFxcIkFydWJhXFxcIixcXG4gICAgXFxcIkF1c3RyYWxpYVxcXCIsXFxuICAgIFxcXCJBdXN0cmlhXFxcIixcXG4gICAgXFxcIkF6ZXJiYWlqYW5cXFwiLFxcbiAgICBcXFwiQmFoYW1hc1xcXCIsXFxuICAgIFxcXCJCYWhyYWluXFxcIixcXG4gICAgXFxcIkJhbmdsYWRlc2hcXFwiLFxcbiAgICBcXFwiQmFyYmFkb3NcXFwiLFxcbiAgICBcXFwiQmVsYXJ1c1xcXCIsXFxuICAgIFxcXCJCZWxnaXVtXFxcIixcXG4gICAgXFxcIkJlbGl6ZVxcXCIsXFxuICAgIFxcXCJCZW5pblxcXCIsXFxuICAgIFxcXCJCZXJtdWRhXFxcIixcXG4gICAgXFxcIkJodXRhblxcXCIsXFxuICAgIFxcXCJCb2xpdmlhXFxcIixcXG4gICAgXFxcIkJvbmFpcmVcXFwiLFxcbiAgICBcXFwiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYVxcXCIsXFxuICAgIFxcXCJCb3Rzd2FuYVxcXCIsXFxuICAgIFxcXCJCb3V2ZXQgSXNsYW5kXFxcIixcXG4gICAgXFxcIkJyYXppbFxcXCIsXFxuICAgIFxcXCJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnlcXFwiLFxcbiAgICBcXFwiQnJpdGlzaCBWaXJnaW4gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJCcnVuZWlcXFwiLFxcbiAgICBcXFwiQnVsZ2FyaWFcXFwiLFxcbiAgICBcXFwiQnVya2luYSBGYXNvXFxcIixcXG4gICAgXFxcIkJ1cnVuZGlcXFwiLFxcbiAgICBcXFwiQ2FtYm9kaWFcXFwiLFxcbiAgICBcXFwiQ2FtZXJvb25cXFwiLFxcbiAgICBcXFwiQ2FuYWRhXFxcIixcXG4gICAgXFxcIkNhcGUgVmVyZGVcXFwiLFxcbiAgICBcXFwiQ2F5bWFuIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljXFxcIixcXG4gICAgXFxcIkNoYWRcXFwiLFxcbiAgICBcXFwiQ2hpbGVcXFwiLFxcbiAgICBcXFwiQ2hpbmFcXFwiLFxcbiAgICBcXFwiQ2hyaXN0bWFzIElzbGFuZFxcXCIsXFxuICAgIFxcXCJDb2NvcyBbS2VlbGluZ10gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJDb2xvbWJpYVxcXCIsXFxuICAgIFxcXCJDb21vcm9zXFxcIixcXG4gICAgXFxcIkNvb2sgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJDb3N0YSBSaWNhXFxcIixcXG4gICAgXFxcIkNyb2F0aWFcXFwiLFxcbiAgICBcXFwiQ3ViYVxcXCIsXFxuICAgIFxcXCJDdXJhY2FvXFxcIixcXG4gICAgXFxcIkN5cHJ1c1xcXCIsXFxuICAgIFxcXCJDemVjaCBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1xcXCIsXFxuICAgIFxcXCJEZW5tYXJrXFxcIixcXG4gICAgXFxcIkRqaWJvdXRpXFxcIixcXG4gICAgXFxcIkRvbWluaWNhXFxcIixcXG4gICAgXFxcIkRvbWluaWNhbiBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJFYXN0IFRpbW9yXFxcIixcXG4gICAgXFxcIkVjdWFkb3JcXFwiLFxcbiAgICBcXFwiRWd5cHRcXFwiLFxcbiAgICBcXFwiRWwgU2FsdmFkb3JcXFwiLFxcbiAgICBcXFwiRXF1YXRvcmlhbCBHdWluZWFcXFwiLFxcbiAgICBcXFwiRXJpdHJlYVxcXCIsXFxuICAgIFxcXCJFc3RvbmlhXFxcIixcXG4gICAgXFxcIkV0aGlvcGlhXFxcIixcXG4gICAgXFxcIkZhbGtsYW5kIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiRmFyb2UgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJGaWppXFxcIixcXG4gICAgXFxcIkZpbmxhbmRcXFwiLFxcbiAgICBcXFwiRnJhbmNlXFxcIixcXG4gICAgXFxcIkZyZW5jaCBHdWlhbmFcXFwiLFxcbiAgICBcXFwiRnJlbmNoIFBvbHluZXNpYVxcXCIsXFxuICAgIFxcXCJGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXNcXFwiLFxcbiAgICBcXFwiR2Fib25cXFwiLFxcbiAgICBcXFwiR2FtYmlhXFxcIixcXG4gICAgXFxcIkdlb3JnaWFcXFwiLFxcbiAgICBcXFwiR2VybWFueVxcXCIsXFxuICAgIFxcXCJHaGFuYVxcXCIsXFxuICAgIFxcXCJHaWJyYWx0YXJcXFwiLFxcbiAgICBcXFwiR3JlZWNlXFxcIixcXG4gICAgXFxcIkdyZWVubGFuZFxcXCIsXFxuICAgIFxcXCJHcmVuYWRhXFxcIixcXG4gICAgXFxcIkd1YWRlbG91cGVcXFwiLFxcbiAgICBcXFwiR3VhbVxcXCIsXFxuICAgIFxcXCJHdWF0ZW1hbGFcXFwiLFxcbiAgICBcXFwiR3Vlcm5zZXlcXFwiLFxcbiAgICBcXFwiR3VpbmVhXFxcIixcXG4gICAgXFxcIkd1aW5lYS1CaXNzYXVcXFwiLFxcbiAgICBcXFwiR3V5YW5hXFxcIixcXG4gICAgXFxcIkhhaXRpXFxcIixcXG4gICAgXFxcIkhlYXJkIElzbGFuZCBhbmQgTWNEb25hbGQgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJIb25kdXJhc1xcXCIsXFxuICAgIFxcXCJIb25nIEtvbmdcXFwiLFxcbiAgICBcXFwiSHVuZ2FyeVxcXCIsXFxuICAgIFxcXCJJY2VsYW5kXFxcIixcXG4gICAgXFxcIkluZGlhXFxcIixcXG4gICAgXFxcIkluZG9uZXNpYVxcXCIsXFxuICAgIFxcXCJJcmFuXFxcIixcXG4gICAgXFxcIklyYXFcXFwiLFxcbiAgICBcXFwiSXJlbGFuZFxcXCIsXFxuICAgIFxcXCJJc2xlIG9mIE1hblxcXCIsXFxuICAgIFxcXCJJc3JhZWxcXFwiLFxcbiAgICBcXFwiSXRhbHlcXFwiLFxcbiAgICBcXFwiSXZvcnkgQ29hc3RcXFwiLFxcbiAgICBcXFwiSmFtYWljYVxcXCIsXFxuICAgIFxcXCJKYXBhblxcXCIsXFxuICAgIFxcXCJKZXJzZXlcXFwiLFxcbiAgICBcXFwiSm9yZGFuXFxcIixcXG4gICAgXFxcIkthemFraHN0YW5cXFwiLFxcbiAgICBcXFwiS2VueWFcXFwiLFxcbiAgICBcXFwiS2lyaWJhdGlcXFwiLFxcbiAgICBcXFwiS29zb3ZvXFxcIixcXG4gICAgXFxcIkt1d2FpdFxcXCIsXFxuICAgIFxcXCJLeXJneXpzdGFuXFxcIixcXG4gICAgXFxcIkxhb3NcXFwiLFxcbiAgICBcXFwiTGF0dmlhXFxcIixcXG4gICAgXFxcIkxlYmFub25cXFwiLFxcbiAgICBcXFwiTGVzb3Rob1xcXCIsXFxuICAgIFxcXCJMaWJlcmlhXFxcIixcXG4gICAgXFxcIkxpYnlhXFxcIixcXG4gICAgXFxcIkxpZWNodGVuc3RlaW5cXFwiLFxcbiAgICBcXFwiTGl0aHVhbmlhXFxcIixcXG4gICAgXFxcIkx1eGVtYm91cmdcXFwiLFxcbiAgICBcXFwiTWFjYW9cXFwiLFxcbiAgICBcXFwiTWFjZWRvbmlhXFxcIixcXG4gICAgXFxcIk1hZGFnYXNjYXJcXFwiLFxcbiAgICBcXFwiTWFsYXdpXFxcIixcXG4gICAgXFxcIk1hbGF5c2lhXFxcIixcXG4gICAgXFxcIk1hbGRpdmVzXFxcIixcXG4gICAgXFxcIk1hbGlcXFwiLFxcbiAgICBcXFwiTWFsdGFcXFwiLFxcbiAgICBcXFwiTWFyc2hhbGwgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJNYXJ0aW5pcXVlXFxcIixcXG4gICAgXFxcIk1hdXJpdGFuaWFcXFwiLFxcbiAgICBcXFwiTWF1cml0aXVzXFxcIixcXG4gICAgXFxcIk1heW90dGVcXFwiLFxcbiAgICBcXFwiTWV4aWNvXFxcIixcXG4gICAgXFxcIk1pY3JvbmVzaWFcXFwiLFxcbiAgICBcXFwiTW9sZG92YVxcXCIsXFxuICAgIFxcXCJNb25hY29cXFwiLFxcbiAgICBcXFwiTW9uZ29saWFcXFwiLFxcbiAgICBcXFwiTW9udGVuZWdyb1xcXCIsXFxuICAgIFxcXCJNb250c2VycmF0XFxcIixcXG4gICAgXFxcIk1vcm9jY29cXFwiLFxcbiAgICBcXFwiTW96YW1iaXF1ZVxcXCIsXFxuICAgIFxcXCJNeWFubWFyIFtCdXJtYV1cXFwiLFxcbiAgICBcXFwiTmFtaWJpYVxcXCIsXFxuICAgIFxcXCJOYXVydVxcXCIsXFxuICAgIFxcXCJOZXBhbFxcXCIsXFxuICAgIFxcXCJOZXRoZXJsYW5kc1xcXCIsXFxuICAgIFxcXCJOZXcgQ2FsZWRvbmlhXFxcIixcXG4gICAgXFxcIk5ldyBaZWFsYW5kXFxcIixcXG4gICAgXFxcIk5pY2FyYWd1YVxcXCIsXFxuICAgIFxcXCJOaWdlclxcXCIsXFxuICAgIFxcXCJOaWdlcmlhXFxcIixcXG4gICAgXFxcIk5pdWVcXFwiLFxcbiAgICBcXFwiTm9yZm9sayBJc2xhbmRcXFwiLFxcbiAgICBcXFwiTm9ydGggS29yZWFcXFwiLFxcbiAgICBcXFwiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXFxcIixcXG4gICAgXFxcIk5vcndheVxcXCIsXFxuICAgIFxcXCJPbWFuXFxcIixcXG4gICAgXFxcIlBha2lzdGFuXFxcIixcXG4gICAgXFxcIlBhbGF1XFxcIixcXG4gICAgXFxcIlBhbGVzdGluZVxcXCIsXFxuICAgIFxcXCJQYW5hbWFcXFwiLFxcbiAgICBcXFwiUGFwdWEgTmV3IEd1aW5lYVxcXCIsXFxuICAgIFxcXCJQYXJhZ3VheVxcXCIsXFxuICAgIFxcXCJQZXJ1XFxcIixcXG4gICAgXFxcIlBoaWxpcHBpbmVzXFxcIixcXG4gICAgXFxcIlBpdGNhaXJuIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiUG9sYW5kXFxcIixcXG4gICAgXFxcIlBvcnR1Z2FsXFxcIixcXG4gICAgXFxcIlB1ZXJ0byBSaWNvXFxcIixcXG4gICAgXFxcIlFhdGFyXFxcIixcXG4gICAgXFxcIlJlcHVibGljIG9mIHRoZSBDb25nb1xcXCIsXFxuICAgIFxcXCJSb21hbmlhXFxcIixcXG4gICAgXFxcIlJ1c3NpYVxcXCIsXFxuICAgIFxcXCJSd2FuZGFcXFwiLFxcbiAgICBcXFwiUsOpdW5pb25cXFwiLFxcbiAgICBcXFwiU2FpbnQgQmFydGjDqWxlbXlcXFwiLFxcbiAgICBcXFwiU2FpbnQgSGVsZW5hXFxcIixcXG4gICAgXFxcIlNhaW50IEtpdHRzIGFuZCBOZXZpc1xcXCIsXFxuICAgIFxcXCJTYWludCBMdWNpYVxcXCIsXFxuICAgIFxcXCJTYWludCBNYXJ0aW5cXFwiLFxcbiAgICBcXFwiU2FpbnQgUGllcnJlIGFuZCBNaXF1ZWxvblxcXCIsXFxuICAgIFxcXCJTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lc1xcXCIsXFxuICAgIFxcXCJTYW1vYVxcXCIsXFxuICAgIFxcXCJTYW4gTWFyaW5vXFxcIixcXG4gICAgXFxcIlNhdWRpIEFyYWJpYVxcXCIsXFxuICAgIFxcXCJTZW5lZ2FsXFxcIixcXG4gICAgXFxcIlNlcmJpYVxcXCIsXFxuICAgIFxcXCJTZXljaGVsbGVzXFxcIixcXG4gICAgXFxcIlNpZXJyYSBMZW9uZVxcXCIsXFxuICAgIFxcXCJTaW5nYXBvcmVcXFwiLFxcbiAgICBcXFwiU2ludCBNYWFydGVuXFxcIixcXG4gICAgXFxcIlNsb3Zha2lhXFxcIixcXG4gICAgXFxcIlNsb3ZlbmlhXFxcIixcXG4gICAgXFxcIlNvbG9tb24gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJTb21hbGlhXFxcIixcXG4gICAgXFxcIlNvdXRoIEFmcmljYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJTb3V0aCBLb3JlYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBTdWRhblxcXCIsXFxuICAgIFxcXCJTcGFpblxcXCIsXFxuICAgIFxcXCJTcmkgTGFua2FcXFwiLFxcbiAgICBcXFwiU3VkYW5cXFwiLFxcbiAgICBcXFwiU3VyaW5hbWVcXFwiLFxcbiAgICBcXFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblxcXCIsXFxuICAgIFxcXCJTd2F6aWxhbmRcXFwiLFxcbiAgICBcXFwiU3dlZGVuXFxcIixcXG4gICAgXFxcIlN3aXR6ZXJsYW5kXFxcIixcXG4gICAgXFxcIlN5cmlhXFxcIixcXG4gICAgXFxcIlPDo28gVG9tw6kgYW5kIFByw61uY2lwZVxcXCIsXFxuICAgIFxcXCJUYWl3YW5cXFwiLFxcbiAgICBcXFwiVGFqaWtpc3RhblxcXCIsXFxuICAgIFxcXCJUYW56YW5pYVxcXCIsXFxuICAgIFxcXCJUaGFpbGFuZFxcXCIsXFxuICAgIFxcXCJUb2dvXFxcIixcXG4gICAgXFxcIlRva2VsYXVcXFwiLFxcbiAgICBcXFwiVG9uZ2FcXFwiLFxcbiAgICBcXFwiVHJpbmlkYWQgYW5kIFRvYmFnb1xcXCIsXFxuICAgIFxcXCJUdW5pc2lhXFxcIixcXG4gICAgXFxcIlR1cmtleVxcXCIsXFxuICAgIFxcXCJUdXJrbWVuaXN0YW5cXFwiLFxcbiAgICBcXFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXFxcIixcXG4gICAgXFxcIlR1dmFsdVxcXCIsXFxuICAgIFxcXCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiVS5TLiBWaXJnaW4gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJVZ2FuZGFcXFwiLFxcbiAgICBcXFwiVWtyYWluZVxcXCIsXFxuICAgIFxcXCJVbml0ZWQgQXJhYiBFbWlyYXRlc1xcXCIsXFxuICAgIFxcXCJVbml0ZWQgS2luZ2RvbVxcXCIsXFxuICAgIFxcXCJVbml0ZWQgU3RhdGVzXFxcIixcXG4gICAgXFxcIlVydWd1YXlcXFwiLFxcbiAgICBcXFwiVXpiZWtpc3RhblxcXCIsXFxuICAgIFxcXCJWYW51YXR1XFxcIixcXG4gICAgXFxcIlZhdGljYW4gQ2l0eVxcXCIsXFxuICAgIFxcXCJWZW5lenVlbGFcXFwiLFxcbiAgICBcXFwiVmlldG5hbVxcXCIsXFxuICAgIFxcXCJXYWxsaXMgYW5kIEZ1dHVuYVxcXCIsXFxuICAgIFxcXCJXZXN0ZXJuIFNhaGFyYVxcXCIsXFxuICAgIFxcXCJZZW1lblxcXCIsXFxuICAgIFxcXCJaYW1iaWFcXFwiLFxcbiAgICBcXFwiWmltYmFid2VcXFwiXFxuXTtcXG5leHBvcnRzLmRlZmF1bHRVc2VySW1nID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBWkFBQUFHUUNBSUFBQUFQM2FHYkFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0UW9MRHlJaTlmTzkzZ0FBSUFCSlJFRlVlTnJ0blhlVVhkVjk3Mzk3NzNOdW5WdW1GMDFSUTcwZ0licHBCbVBjNHVRUmg0UmsyWDR2TG5pWjkzQVN4M0ZjMG9peFk4ZTQ0Zm9TbHpoT0NQYXpEUVNiSWhBZ0MxR0VoQW9hamRwbzJwMTI1NWE1OWJTOTN4OGpJU0hUWmpUbG5IdS9uNFZsekRKYW1uM08vcHp2YjFlV3llVUlBQUM4QUVjVEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUNBc0FBQ0VCUUFBRUJZQUFFQllBQUFJQ3dBQUlDd0FBSUN3QUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUY0TkRVMEFwb3M2NDcvVXFYL0lHRTJhenFSaDVTeG4wbkJzS2NPNkNQdEVSQk1obnhiMUNhVk8vdzdzNUgrbWZnRUF3Z0t6Z1ZTa1NDbEZpa2d3R3N3YlBhbmlrV3p4Y0tiWWt5NGRMeHFqcGsybVE0Wk5sbnlkMzRzUkJUVFNCUGxFbXk2V1J3S1hORVhQYjZqWjJGVFRHdlpMUll3Ukk4YmhNUEFhTDFFbWwwTXJnRFBUazFUS1VZb1JHOG9iMjRmU3o0M2xEcVNLQjdJbE0xc2lSeEk3TXhyTktDYTlsTkNtL2tZcEN1a2JtNk52YW9wc2FJaGMwQlJ0cS9FSnpqaGpnaEZuRUJpQXNNQVp1VWNTMlZMWlVsbFNEZVdOSndmVGp5WFNUdzVtUzlrU01acEtQa1JzYnV1M3FSU25GQ2xGdW1odmlMeDFVZnpxOXZnRkxkRzRYOU1ZMHdYbloxU2dBTUlDMWVVcFJWUjJaTUZ5K3JMbGJRUHBSeFBwcDRhemxDc1Q1OFRZS1U4dFZOSlRVMkdQU0xVMFJtNWMzblRUaXVhdXFEOGd1Rjl3Qm5OQldLQktQTVVZbVk3S1c4NXd3Zmp4b2RFZmRBK1hKZ3FrdVVCU3J5RXZxVWlxenRiWUh5eHYvTDNsVFcwMS9ocGQrQVZUQ3VhQ3NFQWx3aGtwUlRuTFNSblc4OE9UM3o0dzlPenhKQkVqd2NncjQwUlNrVlNrMU9iRjlSOWF2K2pTUmJGNnZ4N1JCV01FYzBGWW9HSlV4WlJTeWJMVk4xbSsrOURJOXc0TlU3Wk1taUR2VHNoSlJiWkRzY0F0cTl0dVd0bXlLT0tyOStzK3dhVlMwQmFFQmJ5S1lFd3FOVm95ajZaTFgzK2gvOEdESThROEZhbGV0MVIwSkJGZHRxenhnMnZiTnJWRTI4UCtnTVlkQ1cxQldNQnJxbEtraHZKbVQ2cndyWDBERDNlUEVtT2tWZWpHQmtlU0kxdGJZbjk3MGVLTFcyTmRFYjlQUUZzUUZ2REVFMldrYzViSW0zdkhjOS9aTi9oSXp4Z1JWYXlxenE0VDViTDIrS2N1Nkx5Z05kWVZDZWljMlJMV2dyQ0FXL0VKbmpQdFBSUDVIKzVQM0wxdmlLU3FDbFdkbGJha09uOUovVzBiMmk5dWl5Mk9CbTJwRUxZZ0xPQXVOTTZJcUR0ZGZLUjM0bFBQSEtlOFFVSlU3MVk5UnhMUjIxYTFmUGo4am9zYWErb0NldG1SZUVrZ0xMRHdjRVord2Z0ejVaMko3SmYzRE96dFN4Rm5oQzE1aXNpUkZQWjljbFBuTzFjMGJhd1BNeUpVaUJBV1dFajhndWN0NXplamsvZDBELy9uaThOa09sVlhBNzQyVXBGU3k5dmluOXJTZVcxblhVdklWN0lSdFNBc01QOVBqaWlraVVPWndpOFBqOTN4d2tBcFhTVEJDVnVGWHhGYmlvRDJnWTN0NzF2YnRybWh4c1NvRm9RRjVoUEJtR0MwZFRoNzErNytodytQa1NOSklGaTlYdFFpMnRCZSs0a3RuVGQwMVlkMVlXQlVDOElDODFNRzVpem52cU5qbjM2dWIzUjBramhEc0hwREtDTEhpVVdEdDU3ZjhVZXJXMWJHUTBYYlFkQ0NzTUFjVXFPTHc1bmlEdzhrdnJ0M01Kc3pNR0kxYlJ6Sk5ISE5zb2JidG5TOXRTMk84aERDQW5NQ1o2UnovbkFpODdYbis1ODROdTVZRHNyQW1VWXRSVkoxdEVUdnVHVHA3eXh0MERpek1Ic0lZWUZaUkRER0dOMTNmUHl2bmpvK01JSXk4SnpmZXlKbHkrYmEwSjl0Nlh6dm1yWTZ2NGFGV2hBV21CMDB6bXlwZm5aazdMTTdqZzFQNUprbWtBZG15MW1Sc08vbXRXMS9ka0hua21nQUt4NGdMREFMdGpJZDlSK0hSdjcrcVdQam1STFRPR3cxbXpoUzZPS0c4NXB1djJ6WnVycFFFYzZDc01DTTBUa3IyZkpITHlidTJOazdrU3ZEVm5PQ1ZNVFlWY3NiNzd6eXZIVjFJZVFzQ0F2TUJCOW5rNWJ6blJjR3Y3cXJMNVBIaE9CY29oUXhkdkhpK3J1dVhybStMb1R4TEFnTFROTldncWZLMXBkMm5malhGd2J6SlFzVGd2UGhMR0lidTJyLzc1dFhiYWdMdzFrUUZwaUdyY1pLNW1kM0hMdm40TEJoT3RqSlBGL09JaUsxdktQMng5ZXQzbGdiTXJIV3dYM2d1KzA2ZE03R1MrWm5kaHo3eWY0RWJEVy9uMjhpWWtjSDBqYy9jckE3Vy9aeDlBNElDN3dtZ3JGSjAvbnE3djUvM3o4a3BZU3RGc1JadlFPWld4NDdOSkF2NjJoL0NBdTg2c05nWkRqeVJ3ZUh2LzVjMzlUVUZkcGtZWnpGMkhPOUU3ZHM2eGt2V1JxY0JXR0JWK2dtakd4SlB6ODYvdGtuRGp1MmhLMFdPbWZSdGlQakg5OStaTkswQlo0RmhBWE82aUJTMFVNbmtoOTk1S0Jsb3hKMGk3Tis5dUx3NTU4OVVYSWtIZ2lFQlU2amlKNUpaUDdrVndjc0M2UHNibktXb204ODEvZWR2UU9XVkhncUVCWTR5WXNUaGJmZnY4K3hIRlNDTG5UVzN6eDU5SjZlVVFlbjBFQllnQkdObCszTDczdEJsaXpZeXJYTytzakQzYnRISjJFc0NLdmFNUno1cDFzUFVxWU1XN25hV1ZKZTk5LzdKOG9XR2dQQ3FsNGNwYjYzZitqSkkrTVl0M0s5c3hqbGpac2ZPb2lMd2lDc0trVVJ2VENXKzh6amgyRXJyempyMmVQSnIrL3BoN0lnckdva2JUalgzcmNYbGFDbnVndjdoKzFIZDQ5T29pVWdyS29yQm05OFlCOFZURFNGNTNMV2RmZnZUUmsyV2dMQ3FpSyt1bnRnVDE4SzhjcVRGTXozL09vQUNrTUlxenErMEVUSE02WGJmM01VUTFmZURWblBuNWo0bHdNSlBFQUlxL0tSaXY3NGtZTm9CNC8zRy9hSjdVZEdpeGFVQldGVk1vS3hmenMwMGoyVVFWTjRIc3Y1K1BZanFPa2hyQXF1SkdpaWJOMzJ4R0VNWFZVRzl4NGNlV1F3Zy9ObklLeEtiV3YyVnp1T2Nrd3dWYzRuaUc3YzJsMjJKWXdGWVZVYU9tZmJoN1AvZFNDQnV3MHFDUzFiK3NLdUV6b09VNGF3S3V0TFRDVmIvdW1qaHdoejRaV0ZyZWpPWFgzZDZRSU8rWU93S2dlLzRIZnU2UitmS0tBcEtsSmFmL0hrRVF4a1FWaVYwc1NNSnNyV2wxOFl0SEdnVWlVaWxkclpsM3A4S09PRHRDQ3NDaUNvaVR2M0RsSUpKNU5VTEpaVS8vVGNpWlBIS2dNSXk3c3dSdW15OWQwRFF3WnVFcTdna0NYVjg0T1o3Y01JV1JDV3h3bHI0czc5UXpZMk9WZjRkNG5LanZ6SzgvMEN3b0t3UEIydnNvYjkzUmNUWlJ2eHFzSnhIUG4wUVBxNTBVbmN2UXBoZVpXUUpyN2ZQV0pueTFqTlVBMWZwN3hwZjNsM3YxK2dUMEZZM294WGVkUDUwY0hobk9WZ05MWWFzQjI1dlQrOWV6eUh6VG9RbHZmd2MzNWZiM0l3bFNlc1pxaWFiMVMyWkgxbHowQllGMmdNQ010cnd0TDRUN3BIc2dhdUdxd2lMTnQ1YWpBOVVqQTRIanFFNVNFRVkwZlRwVVBqT1lYVkRGVkdvV1Q5ZCsrRVgwQllFSlozQ0dqOG5tUGpHY1BHNkZXMVZZVVRodjNMWStNK0RMMURXRjVxVnNZZTZSMmZMT015NTZwRDJmTFFlUDV3dW9TaGR3akxHK2ljN1JtYlBKRXFFaTRxcU1hUVJhbWllZS94Y2F4dmdMQzhRVkFUZHg4ZEh5c2hYbFZwVlpndVcxdjdKcEN3SUN4UGZGL0pzT1hUQSttaVlXRUFxMHFScWpkVmZINDBoMVh2RUpicjYwSEJueHViSEo0c1lYVjdOWCsxeG9ybXIvdFRxQW9oTE5jTGk3TWRJOWtVNWdlcnV5ck1scTJuRXhtaG9YOUJXTzVHRTN4SElwdkdBRmFWNDhpeFhIbXNZR0lGS1lUbDR0WmtMRlUweDdNbHduclJxZzlaNlpLMWR3ekRXQkNXbStNVlovc204dW15alhoVjljS2laTm5hTlE1aFFWZ3VSdWRzMTFnK1djYjhJSVRGTWlYcjZkRkpnWEYzQ011OUNVdnc3U1BaVk5GRXdnTGt5TlJrZVJ3Ym9TRXNsellsWTZtaW1jWUFGamdWc3BKRmMzOHlqNm9Rd25KcFBiZ3ZtVThpWG9HVHdxS3hrclVid29LdzNJbGdyQ2RUVEJzMm1nSk1HU3RWdHA1S0YzRXpCWVRsU21GeDZpc1lremdRR1p4S1dHUTZUczVBNG9hd1hObVVqQjNNR1VYTHdZV2E0Q1dLcHAwdVlma29oT1hHTHlxanZFRW1FaFk0SGJKeXBwM0ltemgvRk1KeVhieEtGbzI4aVFFczhMSnYyS1RwSkxDeUFjSnlHNExSY01ITUlWNkJsNU16N2FHaUlTQXNDTXR0Q1N0Uk1ITVc3c2dCTHlzSk02WXprRGRRRWtKWWJrdFliQ2hmbmtSSkNGNXVyTHhwSDhrYkhDc2JJQ3kzbFlTRFJUT0xraEM4UEdHUjZSZ0ZFeTBCWWJtdUpFd2FkaEdiY3NEWktNdHlERWZpUXdaaHVZdXNMYVZVV0lRRnprcFp0bEtHb3pDMkNXRzVLL3lYSFlsN3ZjQnZZMGxwMkZoT0RHRzVEVnVTbEhndHdXOEppMG9vQ1NFc2x5VXNSa2hZNEJVL1pJNHMyeElsSVlUbEtoUlpEb1FGZm51c3dKSUtnKzRRbHF2ZVNiSWQ1V0RBSGJ4eVNhaVFzQ0FzZDVXREpWdWFVc0pZNEJWS1Fxa01CKzhHaE9VbVpabFNPcWdId2FzSXE0eVNFTUp5V1ZYSXNJc1F2TWFnQVlDdzNJSWk1ZU5NWTR3SUlRdWNqY2FaWHdpOEdSQ1dpNHpsMTdpR0RhN2dsZEE1OHd0OHpDQXNGL21LZE00Z0xQQnFDU3VnY1FWZlFWZ3VnakVTR01ZQ3IvQTEwemtMQ0E1ZlFWaXVlaThWQ1U0SVdlQ1ZFcFpmSUdGQldPNTdNWWt4akZTQXM5QTU5d3QwTkFqTGJiNUN3Z0t2a2JEd0tZT3czRlFTVXAwdW1PQ1lEQUpualJYNEJBdjdCRXBDQ010Rk9FcDFCSDB4WGFBcHdGbjVpZ2QwblRQNENzSnlsN0Rhd3I2b0xoQ3d3Sm54aW5UUkdQYmpyWUN3M0lWVTFCYjJSM3lDRVAzQkdjUjkydUtRejhGYkFXRzVMV0cxaFBRSVNrTHdzb1JGVVYyMGhTRXNDTXQ5Q2FzMTdJL29Hc0kvT0xNa2pQaEVXOGlQZ3p3Z0xMY0pTOVVHOUlCUFlHTStPSk9JTGxxUnNDQXNkK0lMKzBqakNGbmdwWkl3NHROYWF2d1N3b0t3WEJleXBGb1RDOVg0ZFN6RkFpOTFMMTlBcS9WcktBa2hMTmRoSzdXK0x0Z1F3REFXbUlwWEtoRFFWOWVGa2E0Z0xEZGlTYlcrcnFZaG9HTmxBNWlxQnhzQ3ZnME5OWmFVYUF3SXkzMEpTNnFWZGVGNHlJZW1BRk1KcXlHb3Jhc0wyeWdJSVN4M3dvamFhMFBjaDZvUUVDbXE5K3ZyNm1zZ0xBakxyU0ZMcWMwTk5mVUJEZVB1c0JYNVJMZzJxQXZzSW9TdzNJb2wxWWI2bWpxL0RsL0JXTFYrN2ZJR3hDc0l5ODBKUzhyTlRaSDZJTWJkNFN1cUMrZ2I2aUFzQ012RlNFVVJuL0RWaGdpYkNxdGRXS29wNkx1MExZWXBRZ2pMM1ZXaG8yN3VyRzBPK2hDeXFqbGVrVS9yYUluRXNHUVV3bkk1aGlPdjdhaHRDbUVZcTZyajFhS1E3M2M3Nnd3SDhRckNjamVPVWt2ajRYaGRtQVMyUVZjdnpXSGZEWjExSm9RRllYbWdLclRsZXhiWDE2TXFyRm8wSG11c3FRM29xQWNoTEE5Z1NubDlaMTFkQUZWaGxkYUR6VUg5L1YzMXFBY2hMRzh3dFVlbk1SN0VyVjlWS1N5cURmcmUzRkZyT2ZoZVFWamVxUXB2WE5ZUXgwYm9La1R3NXZwUWV6U0lRL3NnTE05Z09QTDNsamJXaDdFUnV1cnF3YWFRZnV1YXRyTGxvREVnTE0vZ0tMVWtGbHpYVVNzMHJDQ3RKaGpycWcyL2Uya2o1Z2NoTEk5UnNKeFBiMmh2Q0dHdXNIcmlGVVg5Mmsycld3aDczeUVzejJGTGRXRkw3THptQ09ObzVHcWhPZUwva3hWTlpjUXJDTXVMbEd6bjR4dmJZMzRjajFVVitIVis5ZExHNWhDdW5JQ3d2SW5weUxjdmFWaGNHOExkWDlWUUQ5WUVmZjluWFZ2ZXhuQTdoT1hkMTFpcDk2OXZDK0x1cjRydlNJSnRXQlJiMXhCeHNMd2R3dkl1WlVmKzBYbk5iVEdFckFxUFZ3R2Y5cW56TzR1V2pjYUFzRHlkc0tnMm9IOXdVNGVHdmRDVmkrRHNpczdhcTl2akZ1SVZoT1YxU3Jaenk5clc5VTBSR0t0aWhSWFVQbmZwVW13ZWhMQXFvMXdnditDZnZIZ3BFMmp0Q29ReCt2MVZMWnViSWpnTkdjS3FFQXhIdm10SncxVmRkV2p1eXFNeEdyemp3c1Y1N01XQnNDb0pTZW9mTDFzbWZkaXBVMm44eFlWZGJUVUJwQ3NJcTZLd3BkclNITGxwZFN0MjZsUk9NVWkwcmpuNm9UVnRSYXk5Z3JBcWo3SWpiNzlvY1YwOGhLYW9EQlNqZjNqVE1oL21meUdzeW55L0ZYVkVBbCs2WWptaGZxaUVJbDk5YUhQWFd6cnFzSlFCd3FwWURFZStaMW5qSDI5b0p4eEg2ZkdQejhxVzZLY3Y3SkxZd1FCaFZYd2Q4YmVYTG1tdUQrRlY5ekNDZi9XYWxmVkJIUU9TRUZibEY0WnROZjY3cmxtRjBYZXZZanVmdW56WjVhMHhMTHlDc0tyamhaZnF1bzdhMnk1ZFFwaGQ4aHhTYmU2cS8rajZSVGhEQnNLcUloaWpqNTNmc2JJdGpnRjRMejAxSWhMc3E5ZXNyTUY2T2dpcjJxZ0w2TisrYmpYNU5ZWnZ0VWRzcFN6bjY5ZXZXVjhmeGhPRHNLb09SYlNwb2ViSGIxK3JGTTZlOGNMek11eS92bXJGSHl4dndzT0NzS3EzTUx5aHMvN0wxNjlXcG8xdTRHb3M1OFpON1IvZXNDaW9vY3RBV0ZXTXp0bE5LNXB2dld5NU1uSDJtMXR4NUtyMitPMlhMYXYxYTZnRklheHFKNktMMnpaM3ZIVk5LMkhIdnd1UlNrUURQM2pyMmtWaFAyd0ZZUUZTUkUxQi9ZdFhubmRlZTV4d0NKeXJhbmFsU09lL2VNZUdWYlVoMkFyQ0FxZWR0VGdhK09IMWEwUHhFQlk2dU9pNUtQVWY3OXh3ZVF0T2k0V3d3Tmw5ZzliVmhmN3JIZXNvcUdNUnZDdXduVy9lc1BhNmpscU53VmNRRm5pbG5QV201dWgvdm1NZDZRTE9XbUFzNTR0dldYUGppbWEvNEhnU0VCWjQxZWR4UTN2ZEQ5NjJsampEN3VnRnROVmZYN25pNXRVdFFRMjJnckRBYTRZc3p1aGRpeHUrOXBiVnhBbk9XcEJLOEphTGwzeDQ0NktvVDBQTWRSc2Ftc0NGenRJNWUvL3FWcDhtUHZMSVFUSWxGc0xQSDQ3ODJLWEwvbUpMVjl5dk9kQVZoQVhlb0xNWTBYdFhOT3VhK01EV2Jpb1loSEhmK1doMDlja3JsdCsycWJOR0Y3QVZTa0l3dmU1aktmVW55eHQvK3JhMThWZ0lZL0J6WDRyVDMxMjE0dU1YZE1GV0VCYVlJV1ZIdm50eC9VL2V0bVpwWXdUT210TWkvSE5Yci9qWXhnNmY0TEFWaEFWbVR0R1cxM2ZVL2V2MWF6WXZpcE5TR0lhZmRVU043MHZYcmY3WStSMmNFNDdsZzdEQXVWS3duRGUxeGI1MTNhcnJsall3emhDMVppbFlLU0phMFZSenp3M3IvbXhkbXkwVnRoaTRINWJKNWRBS25pQ2c4ZUc4ZWZzengzLzA0ckJqT3BnNlBFZGJjYzZ2VzFKLyt4WEx0elJGY2lhMm5VTllZTGJST1NORmQrd2Z2R3RYZnpaYk9qbWJDS1p2SzgydnZYOXQyMmN1WHRJYTloVnRpVmFFc01EY1BEQkdVVjM3NWZIeGYzcm14SE9Kak9OSXJIaVlscW9ZWXcyMW9ROXU3dmowK25aaWhHdFFJU3h3V2k2YzJKUlBwcVRDNk5UL0ppSWlXNnFaelVsRmZPSklwdnk1cDQvZmZYalVLbG5FNGF3M2dGU2FMcTdwcXZ2NFJZdXY3NnliTk8wWnREMW5wUFBUSTcrSzFOUnZvazc2a0JSaExBekM4a1JURWpIR09DTkdKQmhUUkRuTHlScFcwWmFHSTIycExLa01xY3BTT1ZLU1ZDVFZpcnJ3a2xqUW5ORVpXRDdCbFZSL3YzZmdwd2NTdmVONWtncmFlbzFnUlVTMWtjQWZybW45N0piRmpTRzlNS096RWdWakJkdDVlamlycHRURldZaHpIMk82WUZPL0JqVVI5V2xSbjlBWWswUlNLYVZJS3N5U1FGaHVpbEdDTVowencxRlp3ODZZVnRxd3h3eTdWTGI3czZYRDZVS2lhS1lOTzI4Nk9kdkpXakp2T1dUWlpEbGt5ZC9kc09qVGx5eGQzeEF1MnpOeEZpT0tCdlFuQmxQZjJqM3dZRjlxTW05TVdSTVA1YXhnUlJxL3RDMyt2ZzJMUHJDbXRlekltVjJBcW5FMmFUci9zbi9vYjdiMWtGTGswMGdYZmszVTZqemlFeEZOaS9oNFU4aDNYankwSkJhc0RmbHFmVnBkUUl2NzliaGZDMnJja2NwUkNGOFExc0xsS2NHWmovT0M3ZlJObG85TmxnYXk1UlBaMHJGczhVaW1kQ2hib2x6NTVGWm14azRWaE96MHYweU1HSkVqdDNUV2ZmR3FGWmUzUmtzemNwWWlDbXBjS3ZybWk0bGZIQng1YWloTnRrVFVPcTBxb3E3NjhQWExHbS9iMEw2MkladzFabmh3dmsvd3NhTDVyVDJEWDl4NTdHVHpubFVLVHYyOVVpZlh5Z1gxam5od1pUeTBQQlpjRWd0MnhvSmRzZUN5YUNEdTF4eXBMSVhRQldITnI2Y01SL1pPbG5xeXBlN3gvTTZoek1PRGFTZFhQalZ3eFU1NjZvMTFxcTZtbXE5ZHMvTHRuZlVsMjFFei9WTkYvZHFMRTRWdjdCOTYrT2hZNzNoK0duK0F5cXdCaWFTa2tPLzNsOVQvNFpyVy83R3NxV1E3cGxRemE1R2d4ZzluaXQvWVBmQzlYWDNFK1J1YW1WV0s1TlN2aXBTaW9INVJXL3lhOXZpNnBzaDU4ZEI1OFdCRTF5d3BiWmdMd3BvN1Zma0VWMHIxNXNvSFVvV0RFNFhkaWV6V29Vd3BXeUlpRW56bXVVYXFlRzNvbjY5ZThjZExHeTJsWnJ6WVd1Y3NxSW1mSHh1L3AzdjRubVBqTkRVWVg0WGFjaVJ4ZGxGSDNWVXJtajY1cmkzcTB3cm5jTHRIalM1MmplWHVlUHI0ZmQwakpHYTYwRm9wY2hRNWtvVjlsN2ZGTDIrTHJXMnNXVlVYWGhrUCtUVnVPaEtsSW9RMW0vZ0ZsMHJ0R3M5dkhVd2ZTR1MzRFdjeTZTS3BjL1BVV2NWTGpmOXJWeXovbjZ0YkdHUE9PYnkvWVYxa0RQdUxCeEs3ZTVPUEpqSlVORW53YXRHV0k0bXhkUzNSSzd2cTNydTY5ZUtXYU01MHptVzNUZFFudGc1bS9uYkhzWjBuSm1iblFaOHlsei9pdjZ3dHZyazFlbFY3N1JXdHNaQXV5ZzcyQlVGWTU0ek9tV0JzWDZyd2kyUGpEeDlQUGorWUprdVN4bWQvbkVncUZ0UnZ2MlRKaHplMDErakNPSWZyY3poakVWMjhPRkg0enhQSmZmM3BCd2RUVnM2WU5iZTZWbFZFR3hmRnIraXNlOGVTK212YjYyeWx6SE5ydzZEZ1ArMU4vdDF2amg0ZW1aejlwbE9LYkVsRVMxdWliMTNXK0s0bDlWZTJ4alhPREFkaEM4S2FFWUl4bjJBOW1kSXZqbzF2UFo3YzNqOUJsaVJOek9IaWNxbTRUM3hzYytjSE43YXZpQVZ6NTNaTm9jNVpTQk5ITXFYNytpYWU3VS85dWorVnk1VG1STFVMaUZKVHFXcHplL3lxcnZxM0xhNi9hbEd0VXVwY3VyMGlDZ2hlZHVUM3UwZis4Wm5lZExvNGR5M0dpSlFqaVdoMVMrektwZlUzTG0yOHNqVW1sVEpoTFFocldxK1JUL0MwWWYrb2UzaHJiL0xSL2pTVnJibFYxWm0xb2VEdlh0SDB3WTN0TjNUV0ZXMTVqbldDeGxsUThQNTgrYUgrOU03KzFBTjlFOGxrZ1FRbjRmSGhMVWVTSXluc3YzWlI3WmIyMlBVZHRaZTN4WlVpODV3VFNrUVhoekxGNys4Yit0cmVRWHRlRnVVeUltVkw0clN4TGI1bGNmMnRhOXBXeDRPR1JJVUlZYjNoWUxWdE1QT3RmWU1QSDB1Vzh3YnA4enNHcEJRcFd0b2MrY2ltemcrc2FnbG92T3ljNjJZM3daaGY4TEdTdVcwd3N6dVIyVEdTZlhZNFMwV0xOTTQ0Vng0U2wxUlQxZCtTNXNoYnUrcFhOMGN2YTQ2dWJ3alBpcW9ZVWRTblBUeVF1bXQzLy8ySHgrWjVMZTVKYlduOFRaMTE3MXZYZXZPS0Z1d2NnckJlQjcvZ09jdjV5cDZCKzN0R0R3eG5UeTVRV0tDZUdRajdQclN1N1NQbnQ2K01oeWROKzl4L3l5a1hGeXpuUUtxd081ay9OcDUvZERCemNEUkxwa09DTXpmZlozWEtVMDMxNFRlMXhqYTFSRGMyUlM1c2lqWUVkRk5LZXpheWlNNlp6dG0zZTBidmV1N0VrWkZKb29WWmdzc1VLZHRwclF0ZHRxeng3eTdvV2hFUGxtMUlDOEw2TFRoaklZMC9PcEMrYzAvL1k3MFRWc2tpalM5NEw5VTBmdldTaG85dTdueFhWMTNKbHJOeUdDWm5wSEd1TVpvbzJ5K21DM3RUaFo3aHlZY0dVMzFqZWJMbHliSDVseGE3THF5a3BDSXBpYkhtaHBxckY4VTN0MFpYeEVNcjRxRWwwUUJuekpScXRxcW1xRStjbUN4L2IvL1FYZnVIOHRueXd2LzRVaEdqeXpycTNydSs3WCt0YmpXVmdyVWdySmNOOUppMnZHTjMvd005bzkyamt5NWF2cVFVRWJYWDE5eTZ1Zk9XdGExQmpjOXNRZnlyT1ZybmpCR05GTTJlVFBGSXB0UTdrZDgzVVhnbW1aOU1GMCt1bU9kVC9wcVhuMVNxazR2RnBTTEJRckhnbG9hYWpRMDE1elhVTElzRmw4YUNuVFYrd1prdDFTd3VBTkE0QzNCK2I5L0VkL2NNUE40M1lacU9peVlsYktlbE5uVEI0dnAvdm1UcGtraWc3RWgwVlFpTC9JS2ZtQ3g5Wk52aG5RTXBvMlROZkhIZ1hINXZhMEsrM3oydjZhT2JPaTV1amhZc1ozYlBIUmVNYVp3UlVhcHNqUmJONFpJMVZqUUhNc1VYeG5JN3gzUER5UUlaOXVuWU5lVXZkZzVPVjZmRTlKS2VHS093YjBrc3VDSWE2SXdHV2tLK1JiSGdva2lnSmFnM2gzd05BWjB6WmlzMTZ3dVZhblNSS0JqZjJqdjA0NFBEUStraWtYTGRSSVJVeE5tRnJiSFBYTGIwSFVzYThwWURZVlcxc0VLNmVDcVIrZlBIZW5ZUFp4ZHEyT0lOdnJoQzQ0dnJ3emV2YWZ2b3VyYUdvRjZ3bkZrdkVqaGpuSkZnakloeWxwTXNtaU5sSzF1MjBrVXpVVENHQzlad3dSZ3FHRU1GYzdCbzBHUjVhck1lblQ1QWg1MCtSb2RlZHVUS1MybVJkRUYralh6YTBwQytQQlpjRmdzdGl3WGJvb0VhdnhiVFJkeW5SWHdpcElrYW45QVljNVJ5MUp5Y3M2NXhGaEQ4Vi8ycE8zZjFQVDJRTHBkZCthRjZDVWN1YlFoLzdLTEZ0MjdvbUpYUlRBakxrOFQ4Mm84UERYL3VOOGQ3eG5PdWZsL3BWUDlYS2h6UU55MkszN2E1NDUxZDlWS3B1WnRGbWpyTVN6Q2FHaTBxMlU3SmxpVmJGbTJuYU11YzR6aVdOR3hadEp5ODVSUXNwMmc3T2RQSlc3Sm9XbmxiU3FWaVBoSHo2YkdBSHZieHVFK0wrdlNvVHloT3hMbVBzNGpHSTdxbzhXa1JYWVIwd2Vqa01TeHpmYVRVMUFtSS9mbnluYy8zM1hOb2RIaXlURXA1WUlXSFZJMFIvODBiMnI5eStmS2NiVmZ0aW9jcUZkYlVidUhQUHQzNy9UMERpV3pKUzJzcGxTTEdHc1ArZHkxdi9NUkZpNWZIZ2tWN1BoWkhNMFpUUmVCVVhUaDErSmVqbEtPVUxaV2p5SkhLbG1xcWNKdnFUenBqR21lNjRJS1J6cm5HbWM2Wk92VlRLRHE1TzNnKzkvOEdOVjZ5NVBjT0RYOW4zOUJ3TWw5eTFZalZHM2owUWI5K3ljcW0rOTY4aWppcnppWHgxU2dzUmhUU3hQdTI5ZHgvY0RoWE1qMjVmbElxdnk3cWEwTzNuZC8rNFRWdFUydTFGckE5NlhRNXlNNnFDT25sWjNJdUZCcG5HbU5iQjlPZmYvYkV2dUZzcm15NWVnVGdOVksyeGkvcHF2MS9ONnlMK2JVcW5EcXNSbUZGZEhIZGd5OXU3eG0xUFgzM2pDSWlWZVBYMTdURjdyaHM2Uld0c2FsRFRRbThITUZZUU9OSHM2WFBQWDM4VjBlVHFiSjVjcGpmeTUvY0N4YkY3MzNYaG5oQXJ6Wm5WWjJ3WWo3dHBxM2RQOXVma0haRlRMZ29SWnpWQm4xdlhsei81eGQwYm1tS1FGdG5xc292ZUgrdS9NOTcrbjdXTXpaWk1FM0xxWkN0bEl3dTZLeDk1TjNuYTV4WDFSYWU2aEpXeks5OWVGdlB2KzBkTEZmWVBYUkthUnFQNk5yNTdmR1BiK3E4dHFOV2tqS2Q2dFhXMUpyKzNtejVDN3RPM0h0NHJHamFodVZVMmhrN25GMjB0T0h4ZDI2d3ErbmFpeW9TVml5Zy8rVnZqbjVuVjEvZXFOQ0pZYVc0NEdHTmR6UkhQN1dwODhibGphcjY5djNybkdtY0hVb1g3M2oyeEsrUGpwY3R4N1NkaWowT1RMQkx6MnQrNHUzclMwNjFmSjJxUlZoUm4vYWwzWDMvdExNM1ZUQXIvUEpSUmNSWldIQldGL3JDNW83M3JXN1ZHSnZ4ZldMZVNSdWtjVTZrZm5FMCtlMERReThNcE11T3RCMVYrUmZOYXZ6YTFTMlAzTEN1U3RablZZV3dBaHAvcUcvaWZ6L2MzWjh0VmRXUndYN0J0WkIrMDNuTjcxM1Zja2xyZEdyQlFZV0phK3JLb3Q3Sjh2Y09ESDYzZTFUbWpWbmNZK2lKNzFNb29IMTBTOWNYTDErV05TcmZXWlV2TE1IWXBHbS84eGN2N0Vsa3F2TmVCc0daeHBpSUJXNWQxWHp6aXBaVmRXRkxLcTlmbHNjWkU0eVVVdmNlbi9qSy9xSDkvYW1pZ3ZpbUFBQUxmMGxFUVZTcEpXQlYrSHhKcWE1NDZCdHZXWFY5VjMzWnJ2RDloaFV1TEVZVTFzVTFEK3pmZm1pVXF2NDhOTTRZNXl6WVZQUFoxUzN2V2RIY0hQVFo4N3R1YzFaS1A4NVl3WklQOTZkK2ZtenMxOGVUbG1GTDNEMmoxSlpGdGI5ODk0YVlYNi9zMnIvQ2hWV2ppeS9zN3YvU3p1UFpvb2tiUnMvMHVPSXMwbGp6M3M2NnQzVFVYOXdhRGV2Q3piMSs2bmExZ2NueWcvMFQvMzQwdVhjZzVlQzhsZDlxbzJ2V3RENTh3N3FpWGNrRDhKVXNMSi9nejR4TTN2TFFpejFUOS9TQlYvazRreVlhbXlQdjY2aDljMmY5cHFaSVVPT0tGbmkwZXFyTFNhV09aa283aHpOUEpySVBKYktGVEducW9Dandpczh4SHZKOTRyS2xmN21wczFDNWh6cFVyTEFFWXpuTGZzOS83OS9SbXlUTzhUNi9BVU1vVWtRK3NhSTFkbU5IN1hXZDlhdnJ3ejdPNlBSeERHd3VEcmFiMnUxODVua3plOGR6RC9kUGJFMWs5dzVQeXJMMXNuTWd3R3ZneURWTjBXOWV2L3JpMXBoWm9ZZG5WYXl3b2o3eCs0OGUrdmtMZytUZ216d1RoWkJTcEhGZkpMQXFGbHdaQ3l5TGhwWkdBMHRpd1dYeFlGQVRkTVl1YUNKaTdQUVd3cGVrZHZZdDd2VFN0c0tUdjcwdDFXalI3RWtWam1XTGh6T2xnNW5Td1V5cFBGbWF1Z2puNUtsYllKck91bnA1NDMrOGZYMUVGeFU1bUZXWndncG8vUDdlNUNlM0hUNldMSkRBU3o4YnlldE1rWVgwK21pd0thREZkUzJxaTdET0luNDlvb2thamRmNDlCcWRSM3lhenRta2FlY3RXYkRzdk8wVVRHZlNzbk9Xekp0MnpwWVp3MG1VekhLMlRNNnBWWjBuUFlja2RhNGZHOTJuM1haaDErY3ZXMWFSaGFGV2VUOFNaeXh2T3QvZm56aVd6SHZnbEN1M2Y5SE9sTWdwbDFoeUlwbWZvRE5PWUZEMHN1TVkxSm4vK2t0L3oxN2h0OVVFMm5oV254ZXpTdGJXWThuZldkSndZWFBVcUxqQ3NBTDdjMEN3N3g5TVBEV1lSa0V4cHgyREdEdDVxeEJuSkJnSmZ2b3Y3ZFJmWi81RGZzYi9ueUZKelYwSTRTOE1aNzUrWUVncVZYazlvTktFNWVQc1lLWjQ3K0d4N0dRWk00T2dXZ3REOXV5SjFNK1BqUWNxcnNLb3FKK0hFWEhHN3R5ZjJER1FScTBCcWhmQitwUDV1N3RIUm91bVZsbWY3WW9TbGwvanYrNmJlUHJZT0RrU0ZRZW84c0x3MGY3VXYvZU1DbFpSZFdIbENFc3dsaldjdTN0R0Q0OU1ZcXdkVkR1TWxmUEdMM3ZHbmsvbWZSWFVIU3JuSi9FTC9xc1R5VzE5RTdBVkFFVEVOUEhzWU9ydW8yT01LcWZlcUpDK0xSaExHZFpqZmFteGlRTEcyZ0VnSXNXSUhQbHNYK3Jac1Z6RmhLd0srVEg4Z2o4NmtIN2tSQkpqN1FDYzhTVVh6dzZsSCt5ZlVFcFZ4bWU4RW9URlQ4V3JFY1FyQUY1V0ZoSlo4c2tUcVgycFFtV0VyRXI0R2Z5Q1B6bVVlZUQ0T09JVkFHZWo4ZDhNcEI4ZlNNdUtDRm1lRnhabkxGVzJIdTFQalNUekRQRUtnTE5ERmlQVGZxZzMyWjBwNnQ0UFdaNy9BZnlDUHpNMmVlK3hjUkljSjdvQjhJb2hhOXVKMUZORG1RbzRtTlhid21LTWlwYnpUQ0k3TXA1aldNMEF3S3YxRThQYTNwOGV5QnRlWC9qdTdVNnVjMzR3WGRqYWx5S0dlQVhBYTRRczhVQnZjbDh5cjBOWUMvbmxJRHFZekQ4M21NWmlVUUJlczZPejRtVHB1VVFtWGJZOXJTd1A5M1BCMkdEQmVISXdUWWFObllNQXZHN0krcmVqNDN2VEJaK1hUd3ozOEIvZEoxaDNxdkRUbytPa1l6VURBSzlYamdnK09wbzdNSll6SE9uZDc3dFhoY1VaWlF6N21hRnNPVnZDWWxFQVhwZXBNL1VmNjB2MTV3M2gyUzdqVldGcG5CL09sbjU2YkF5alZ3Qzg4Vzd6d1BIazBYU1JNd2hyZnBGSzlhYUxoeE5aQ0F1QU4xd1dNaXFaTzRZeXFiTGxVV2Q1c3JkenhzYUs1dmJCREZYbzVXc0F6QldDMzk4M01aQTNQSHFabENlRnBURjJvbURjMDRlekdRQ1liby9uUFlsTUltZWdKSncvSEtXR3MrVXNMcUFIWU5wVklaRXRkd3lsVTk1Y2tPVTlZWEhHeGt2bVl3TXBRamtJd0l5cXdudFBUQXdYVFM4T1kzbFBXSUxSUU5IOFNXK1NOQXkzQXpBVFlSMUxaRWJ5bnF3S3ZkZm5IYVZHc3FWeUVtZjFBVEJUSkQwK2tFcVhMYy8xSVk4Sml6T1dMRmtQOWszZ2xRUGdYT3FVbi9VbVJ6MjR1SUY3cloxcHVHejk4RGl1eGdIZ25LckMva1IyTkdkS3J4MXk0ckZ1YjBrMW5DbXJDY3dQQW5DdWJPMmZ5QnEydHpLV2w0VEZHT1ZNNTZsRWhoaHNCY0E1ZG4zMitGQW1hOXJjVTBlZGNFLzlXVm5Pc25lTVpCR3ZBRGpuN3NUM0RHWnlKaExXWENhc2pHRS9NNWdtamdFc0FNNnhPeEdaOXBGMDBmRFUvall2OVh6VGtYMlpFcFZ4WEI4QXMxTVY3a2hrQ3Biam9aRGxHV0V4UmdWTFBqV01laENBV2FzS24waGs4NWJEdkJNQnZDTXNZbm5iZVRLUmdiQUFtQjBFTzVUSUZpekhRejNLUThLaW5HbnZUV1F3Z0FYQXJHRTdCNUo1RHcxamVhYnptMUllbmlpUTZXQUFDNEJackFxZkhFcVhiTStFTEc4SWl4RVZiZm5FRU9JVkFMTXJBTFp0S0Z1MHBWZkczVDBpTEVZbDIza2NBMWdBekxhd1RpU3lPZE5CU1RqTDVFem55QkNFQmNCc28yajNhTlowdkxHcjBCdkNNaDIxZHp5SEUvc0FtSXVROWZoUXB1eVJ5d285SUN4R1ZIYms0NE5weENzQTVrSllqdzVsREVkNllqckxDd21Ma2VISXh3WlJEd0l3SjhJYUhjMWx5alo1b1NqMGdyQVVaUTE3Y0hRU3dnSmdqdGlaeUhqaWNDd1BDTXVTYXRkSWxoUmVLZ0Rtc0NvMHBRZUdzZHd1TEVaa1N0U0RBTXl0c0xZTnBpMEhDV3MyTUIyMUZTdXdBSmpEWE1BeXljSkV5WFMvc2J4UkVpWW5DamhsRklBNXJXVU9UT1FkNVhabHVWMVlrbWlrWUpEbDRJMENZRTVEVmsrNjZQNWhkN2NMeTVGcS8zZ2VXd2dCbUd0aGRhZUxTRmpubkxDVTZra1hjRUlEQUhOZEV1NUtGV3dKWVoxandsSjBNRjNFQUJZQWM1MndCaWFLUkc3UEJ1NFhsbm9tWFVUQ0FtQ3VFeGFWckd6WmNubkU0aTV2UTZWb01vVXBRZ0RtQWVYK2NYZFhDMHNSalJRTk1qQkZDTUI4VklYZHFZSnk5N2k3cTRVbGxUbzRVY0NTVVFEbVNWanBnc3ZQY0hLNXNLZzdoU2xDQU9hSnZhbVNSTUthdWJCSWRhY3dSUWpBUENXc0F4TjVETHFmVThMYWlZUUZ3RHdKaTFUQmNQbFp5VzZmSlJ4TDVwR3dBSmkzb3FZblZYQ3pzVnd0ck5HQ1FTYW1DQUdZdjR6dzRrVGV6YU5ZN2hXV1V0U0RKYU1Bekt1dzJNRk1VYm40dEV3WEM0dFVkNnBBTUJZQTg1bXdVa1VrckprSml3Nm1TL0FWQVBOcHJLZmNQVkhvNnBLd1AxZUdzQUNZejRTbHNtVTMvd0ZkbmJBR1NoWmVJUURtRlVmbUxSdkNtZ2tESlJOaldBRE1NeE5GRThLYUVTVUx2Z0pnbnN2Q01SZFhOdTRWbGkwVmxWRVNBakRQdnFMeG9udFB4WEt2c01aZG5Fc0JxR0RHU3lnSnA4OVlDY0lDQU1MeVRNS3lzSXNRZ1BrdkNVZkttQ1djSm9wb3JHamc1UUZnSVJJV0J0MW5VQktXVVJJQ3NBQWtpb1pyZHhPNnVDVEVxbEVBRnFJbVBGRTBNVXM0YlVhTFdJUUZ3UHo3aWpJb0NhZU5vbUVrTEFBV2hKSkZicTBKM1p1dytvdllsd1BBUW1ETHN1M1MyM1BjTzBzNGduMDVBQ3dRd3dXWHp0RzdWRmpzWkM0RkFDd0FycDN5Y3Ftd1RLbklnTEFBV0ppOE1GNkVzS2JEYU1IQU1uY0FGb3BrR2NLYURublR4a3NEd0lKMVFMZWU0ZWZXa2xBcHZEUUFMRmdIbEpnbG5BNkdXMmRWQWFnR3lnN1dZVTJ2dlNBc0FCWXVNVGhJV05OS3BJN0NJaXdBRml3eDJDNjljZDJ0SlNFU0ZnQW9DU0VzQU1EcndWQVNUbGZ3RUJZQVNBeGVTVmlZSlFRQUphRm5oQ1VoTEFBV1RsZzRyV0ZhbUNnSkFWaEFZV0hoYUdXVTBBQlVBeVdVaE5Nc0NiRTFCNEFGZ2xFSkplRTBTMmdIcncwQUMwVWVKZUgwaE9VZ1lRR3dZR1NRc0taWEVtSU1DNENGbzRTRU5jMkVKWEVEQlFBTGhjS2dPMHBDQUR3RE5qOVBUMWhZNlE3QUFvS0VOYjFFaWpjR2dBVUVZMWpUSXFoeHZETUFMQmpDclJjQVpuSTVQQjBBZ0NkQWtBRUFRRmdBQUFCaEFRQWdMQUFBZ0xBQUFBRENBZ0JBV0FBQUFHRUJBQUNFQlFDQXNBQUFBTUlDQUFBSUN3QUFZUUVBQUlRRkFBQVFGZ0FBd2dJQUFBZ0xBQUFnTEFBQWhBVUFBQkFXQUFCQVdBQUFDQXNBQUNBc0FBQ0FzQUFBRUJZQUFFQllBQUFBWVFFQUlDd0FBSUN3QUFBUUZwb0FBQUJoQVFBQWhBVUFnTEFBQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQThLcjhmOXJIc1V5WnlhMlZBQUFBQUVsRlRrU3VRbUNDJztcXG5leHBvcnRzLmRlZmF1bHRLZXlJbWcgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFaQUFBQUdRQ0FJQUFBQVAzYUdiQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRRb1JEUUFCekFicEdRQUFJQUJKUkVGVWVOcnR2ZGwzRzhtVnI1c1JPWStZUVFBa1JVbFdsVjIyKzV3K2E1My8vL0U4M0xQNjluWGJWYlpWVWtrY01BT0pSQ2FRYzBiY2g1QlVkbFc1U3dNSll2aDl5NnNmWkRjSjVzYitZc2dkTzBnUVJSSUFBQndDRkk4QUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBRUJZQUFBQVlRRUFBSVFGQUlDd0FBQUF3Z0lBUUZnQUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBRUJZQUFBQVlRRUFBSVFGQUlDd0FBQUF3Z0lBUUZnQUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUErRFVVUEFMd2hSQkNPT2ViS0FyWDZ5ekw4aXpMODV4enJxcXFwdXU2cnR1TzQ5VnFxcW95eHZDNHdCZDkyWUlvd2xNQW53ZG5MRW1TMlhUcUx4YWNjeXJMd2w4Ly9nODRGLytYVlpYcmVXZjl2dU82aW9KaEVrQllZRmNUS3M1WVdaYmJLSnFNeDFFVUtZcnlqNUw2bDNianZLb3FWZFA2L1g2OTBWQlVsVkxzU0FBSUN6ek11aytTcEtvczB5eUx0OXU3Mjl1eUtHUlovaGhWL1lTcXFpckdMaTR2YTdXYXB1dWFwbjJZaXdFQVlZRXZWUlVoSkVtU1BNdWlLTHE3dVZGa1dheit2Z1RHV0ZtV3pXYnpyTitYRmNXMmJXZ0xRRmpnODZHVWl0MzBxcW9tbzFFWWhwVFMrMTNIaVhXaXBtbVhWMWVLb3RpT0kvYm1ZUzRBWVlHUG5WSlJXYzZ6Ykx2WnBHazZtMHl5TktXZnRmcjdlRzB4eGhSRmFYYzZ0dXRhcG1uWmRsVlYwQmFBc01DLy9qWlFLbE9heEhFVVJWRVVoVUdRNXptbDlPRlU5Uk52TWNhb0xMdWVWNnZYYmR0MkhJZExFb29oQUlRRmZycjZJNFNJV3FwTkZHMmlxR0pNN0Y3dC9zTXd4aVJDYk10eVBjOXgzWHFqUVFpcHFncGhBaERXcVNQTHNrVElhcmxjQjhGbXM4blNsREcyRHdVSGpERkNpS1pwbG0zWDZ2VkdzNmtvQ3JhM0lDd0k2eVFEVHdpVjViSW9WcjYvbU0rTFBCZmw2ZnRXRzhVNTU1eHJtcVpxV3ExZWI3YmJ0bVdWWlFsdFFWamdWRlFsSzBxYXB0UEpKRnl0cXFySzgveXhWbitmTk9GU0ZFVlJWY00wenk4dUxOdm1qR0Y3QzhJQ3h4dHNTZ2toV1pyZS9QQkRtbVZsVmJHcTJuTlAvWHpDUlFoUlZaVlNlbmwxNWRWcTJONkNzTUF4TGdBcERWYXJ1OXZib2lqWVVXUTRwVlNXNVhhMzJ6OC9GMjhZRVdnSUN4eThxZ2doMDhsa1BCcnhZOXl4RnIwaVd1MzIrY1dGZ29ZUUVCWTQzRlN1eW5KOGR6ZWJ6K2xCcmZzK2U3Vm9PODdWczJlR1lXQkxIc0lDaDVPNmpKVmwrZWIxNisxMksvMXp2NWRUMEphcUtNOWV2TEJzKzlUK2RnZ0xITkxLU093OWI2TG85dm82VGRQZFZhai9zeTlrUlpFWUU2cW9HSk00bDNiK01hcXFVbFgxN095c094andxcElWQlhNdUNBdnNoYWNrU1NyTGtralNiRHBkekdacGx1MitRNTU0ZVNmTHNpekwvWXVMUnFPaEtNbzZDRWJEWVpva2pERlJCYnA3YlZGS204MW0vK0pDZkRheDRZV3ZEWVFGSGtGVm5QT3lMUE1zV3k0V2kvbGNWS2p2MkF1aTFsVDBoMmwzT28xbWs3MHZqeElLMjI0Mmk5bHNIWVpsVVlnNTRJNC9vZmc4eldhejFXNWJqcU1vQ3BWbGpyMTVDQXZzQmtvcFl5ekxzbml6V2ExV0s5K1h4QW1iM1hxS2N5N0xzbTRZcnVlMTJtM0hjZGd2VlhJS2JXVlp0cHpQd3pCTWsrUlI2bFRGWjNNY3A5VnVPNTZuRzRZaXkrS3Z3RGNLd2dJUE1xZWloRlJWRmNmeEpvcUMxU3A2Z0FaVkg2a3FWVlV0MjNZY3A5RnFXYlpkL2RwWkdhR3RzaXhYdmgrRm9UaTBLSEZPZHY3aHk3SzBMS3ZSYk5xTzQ3aXVxbWtjNXhNaExIQy9xejlLYVZFVXdXb1ZiN2ZoZXIzZGJqK3lrL3E5cTByVHRFYXphVnBXclY3WGRmMVR1MWJKc2t3a2FiVmF4WEVjQnNGbXM5bjlBVWJPZVZXV3FxYlZtMDNUTkJ2TnBxN3JtRzFCV09BZVZuK0VrQ3pMcHVOeFZWVys3MzkySi9VdlhFOXh6bDNQYTdaYXFxbzJtazFDeUpjMFRpQ1VLckljaHVGMnMwbVRaRDZiUGNvR1hGVlZFdWZOZGx2VHRGcWpVYXZWdUNReEhQU0JzTUJucUVxVzVlVmlzUTZDUE04RDN5ZVBzZm9UVnVvUEJvWnBXcmJ0dWk2N3Z5UEhIMmFPNjlXcUtNdlplSnhtbVV6cGp0ZUo0bSswSGNlMmJjTTB6L3A5OHY0ZjhUMkVzTUN2NWJBc1M1eVBSNk1ramtXVFlpSko1REVXVFpxdW4vWDdobUU0cnF1cTZzTXRtaWlsalBOdEZLVnB1bG91ZmQ5WEZPVlI5dVlVUlhFOVQ5ZjFzMTdQTUUzMHNZR3d3TDlVbGFLcVNaTE1KcE40czBtU3BDeExhZWRGQUdKYjJxdlZPdDJ1YVpxR2FZcXJLSGJ6QkRqbmVaNm5hYnJ5L2NWMEtoR3k0N2VmMHZ0Q0RjTXdUTXZxZEx1MWVyMG9DbWdMd2dJL29xanFkck1aM2QwbFNWTGsrYU9VV2JLcTRwdzNtczF1cjZjYmhxcXFqMUptK2U0Q3hLckswblFkQkpQeHVDekx4eXFGVlZWVk40eXpmcjllcjJPUkNHRUJpVkphRnNYdDlmVjZ2WDZzVGdQaTkvYjYvV2FycFJ2Ry9weS9FeXZUTUF4SHcySDJTSWVOaEVOTnkzcnk5S2xsV2VnR0FXR2Q5REp3SFFSdlhyOStyS0ZidFBIc0RRYnRUbWR2TDQ0WGs1MXd2WjVPSnVGNi9WamFZb3oxQjRQQnhRWG1XUkRXaWRwcWRIYzN2THZiL1hwSHJMa2MxejNyOVZydDlxRjA3S1NVcGtreUdnNTkzeWVQMFltQk1lYTQ3b3ZmL3BhaUNRU0VkV3EydW43elpqNmI3ZjVJRGFYVWRwd25UNThhcG5tSU5VZUVFSW1RbTdkdjE2dFZVUlM3ZnltaDZmbzNmL2pEM2s1SUlTeHcvem4zOXZYcjVXS3hTMXVKd3pGZXZYNTVkU1ZUZXVoN01jSVh5L2w4TkJ4V1ZiWFRQNGR6V1ZYLytELytCNXB0UVZnbk1iZGErZjdyNzcvZmhhMDRsOTUzZmVuMmV0MnpNNG1RWTZya0ZoWmVyOWVqMjlzc3o2dXkzTkVMVnM0Tnkvcm1EMy9BZmhhRWRlUzZLdlA4ejMvNjAwTW5sZGlvMW5SZFU5VnVyOWZxZEVReUgrc1lJTXR5SE1majRUQkpFbkVYN0E2ZThMUGYvS2JaYXVHOUlZUjF0TWl5L0YvLytaOUZVVHhjRm9tdUw1WmxhYnJlUHorM0xLdGk3QlRhUDRtRFBseVM3cTZ2NHpqTzBqVExzZ2Z0WTBNby9jTy8vWnM0QTREdk5vUjFoQmtWckZadmYvamhJYjdmblBPcXFpekxNa3pUdEt6K1lDREw4bW5XT29xMTluS3hXQzRXVlZWRllTaGM5aEMvcTFhdnYvajZhMXlNdURNVVBJSmRKdEx0OWZXOUcrUkRLd1ZOMDVxdGxsZXZLN0pjbHVYSlpwSDR3MXZ0ZHJQZGpyZmIrWFNhWmRsMnN5bkw4dDVydUxhYlRaN25DbnJHWTRaMWZOT3JKRWxlL2YzdjRvVGcvV1JtV2NxSzRyaXViZHVOUnNOeUhPbDkyVHI0Y1owb3kya2NyOWZyVFJSdG9paE4wM3ZzejBNSWFYVTZWMCtmWXBLRkdkWlJRU2tWUGEzdWEvV25hVnFqMi9VOHozWWMwN0x1c2V2TE1mRmoyNGxlcjlGc3hwdE5GRVhCYXBVa3liMnNFeGxqNFhxTjV3eGhIV0hxSkhIOGhXK3ZPR01WWTZacGlxV2ZZUmhpeHhmRCs4Y29YbEdVV3JQcGVGNmoyZHh1dC81aUVkNUhqMmxLU0ZXV0VtcXlJS3hqb3ZxeTZZOUlPZHR4enZwOXk3STBUVk5VbFdOVzlZblBrRmNWSVVUTVNWM1BLNHRpTWg2SDZ6Vmo3UFBLNGtUbjFUaU9iY2ZCTmhhRWRWVFpJa2tTK2J6L1I4NmRXdTNKa3ljU3BicW1pYTR2Nk9UN0plczRTWklNd3lDbXFlazZaMncybXkzZXQybitqSitXWlpuamVSd1JnYkNPQTBKSVdaWmNrajVqNFdDYTVsZS8rNTJvamVUdjVna1l5ZTlwd3NXNWFQdDFmbkhSSHd3bTQvRjBQUDVVWndsaFlVRUlZUjNYa3ZBVGI1ZjVRSlpsZi8zTFgyelhmZkgxMTZMRk9oN21mWTRsbE1xVXpxYlQ2V1RDcXVvelpsaGl0WTV6aFJEV3NRM29uejBSS010eXZWcjl2Ly8zLzVxbStmVDVjOU95cXZ1cmpUaFpSRTNXRDY5ZWlUMnNMNXEzWWhTQnNNQlBrNEt4ZUx2OTlyLyt5ekROOC9QelJxdUZsNE9maHpoNGVIZHpFNjdYbUJsQldPQWhsekNFWkduNit0VXI5ZnE2TnhpMDJtMmszQ2M5dlNnTTcyNXU0amgrMEdPR0FNSUMvNVI0WlZsZS8vREQ4UGEyMVc2ZjlmdXlMS09sM0w5NlZxeXFLc2FDMVdveUdxVnB1dnM3eEFDRUJTUlpVVGpuczhsa09wbTBXcTF1cjZmcHVpTExaRmNYYysyNXA4UjJlRm1XeS9sOE1admxSYUVveXFNMHBBWVFGbmdIbFdWSmtsYXIxV3c2YmJiYnpWYkxkaHhOMCtpcGFvdFN5aGpMOHp5SjQyQzFtazJub2lnRXFvS3d3QjVOS0RSZGo4SXc4SDNkTkh1OW5tbFpsbVVwRDNsajgzNnFhcnZaeEhIc0w1ZUI3OHVZVWtGWVlKKzFwYWhxV1JRMzE5ZVUwdTdabVdYYnR1TVlobkhFMmhMYjUyVlpyb01nUzlQWmRKcW1xVXlwcW1uNFNrQlk0QUFTV0p5TW00ekhsTkphdlc0N2p1dDVqdXRLbkIvVDhVUFJjU0ZOa3ZWNm5jU3g3L3RGbm1QMUIyR0JnMFJvSzFpdGZOLzNYTmQySE50eG1xMFdJZVRRYTdoRTJlY21pbGErbjZicE9nZzRZeFNxZ3JEQW9TUDZwMnkzMnlpS2RNTllyOWU2cm9zZXlwOTlZT2h4TFV3SW1VMm5teWhLa21RVFJXS2VSWFo3d3lPQXNNQ0RyeE9MUEYvTzU3SXNiNkxJTU0xT3QrczR6cTd2OWZ1Q3oxOVYxZDNOVFpxbW9qZnhoOFV2Z0xEQWNXcExGQ2lGNi9VbWlxTDEyclR0UnJQWjZYYkxvdGhQYllrM0Nac3duTS9uMnloS3M0eFZGWGwvbHlxQXNNQkpyQk1sU1VyVE5NdXlhTDJlanNmdFRxZlY2VkJLOStka3RXZ0h1bHF0NXJOWnN0Mlc3KzlKeFpFYUNBdWM2SVJMa3FTcXF1THQ5amFPeDhOaHU5UHA5SHFxcWo2dXRzUWRaZjVpTVpsTThpejdNUFdEcWlBc0FDUkprampuUlZHTVI2UHhhTlJxdDN1RGdhN3J1Ni9lb3BSV1ZUVWFEdWVUU1lsMkZBRENBci9LY3JHWVRhZjFlcjEvZnI2emJ1V0VrRHpQWjlQcFpEVENWanFBc01DbkxjcWlLRnAvOTUyaUtNOWZ2TEJzKytFMnVUbm5XWmJkM2R3RXE1V2lLSTlvSzAzVDhqeEg5Q0VzY0pDSTAza3YvL2EzcXFxZXYzaFJxOWNwcGJJczM4dWNTM1JUeU5MMDFjdVhvc3Z3bzVSOWl0b0lYZGRmL1BhM2xOTC81Ly84SDV6cGdiREFZV3VMVW5yOTVvMGtTWTFHNDhuVHArejk5UTJmWWE1M1YzSnc3aStYdzl0YlVhRys0eG9GOGJGVlZaVUk2WFM3L2NGQUVtMnowSHNhd2dKSG95MUprb0lnV1A3SGZ6aU9jLzdraWE3cnFxcCtaQjhiWWJjaXp4bm40N3U3bGU5emNjSm10d3RBenJub2JDSEw4dm5GUmExZWw5NWYvQ1UrSlFJTllZRjN1WElFZjRSWXVDVko4dks3N3d6VDdKeWRlWjZuNmJxaUtQL3FsYUpZVjZaSmtxYnBiRElKdy9EZFlacmRlb3B6THN1eVlSaUdaZlY2UGR0MTJjOXVvaVdTOUJsQndoVVVFTll4Y2tTak55RkVWcFE4ejIrdnIxVk42M1M3anV1YWhxRWJ4b2NiYUQ1MGZkbHVOdHZ0ZGpHYkpVbXkrOE0wSCs0Zk5DM0xkcHhPdHl2S05YNXg5Y2M1LzR3Z1lWWUdZV0dHZFNEYWt1V3FMSWUzdDZxcTFtbzFyMTYzYk50eEhFbVNraVNKdDlzb2lnTGZUOU5VbHVYZHE0cFZsV1hibG0yN3RWcTlYdGMwcmFvcTNEWUVZWUZUbmpnU3NSNWNMcGVyMWNweFhjZDFGVVdKd25BVFJmbGpOS2hpVlVVSXNSM0hyZFZjMTNWY1YxYVVxaXpMWDkxVC82eFpNSmFFRUJhV2hJZUhtRUJGWWJnT0FpckxFdWVVMGgycnFpeExSVkVhclZhOVh0ZE4wM1ZkempsakRLLy9JQ3dBZmdGUkE3RmpRUXNyS1lweWZubnBPSTVobW9aaE1NWStlZlgzV2N0MjdHRkJXQUI4Z3FwTTB6enI5eTNMMGcxRHJFOC9jNk1LWlEwUUZnQVBnU2hLcU5WcWc0c0xWVlhWOXplYkhWUFRlZ0JoZ1dOUWxTUko3VzYzUHhpSUxYOVJsWXJyWXlFc0FQWkxWWnl4NTE5OTVYcmVqNXRsNzQvYUFBZ0xnTDJncWlyTE5KODhmMjVaRnRyNFFWZ0E3SytxMnUxMnQ5KzNMQXN6S1FnTGdEMkZFTkx1ZEhxRGdhcXFIMDc4QUFnTGdQM3lsS2JyN1U2bjIrMVNXVDZJVzhnQWhBVk9DTkgxUlZFVTB6VGJuVTZyMjJWVjlUbVZud0RDQXVCQlZVVXBOVTNUdEt4MnU5MW90Zkk4TDRzQ1R3WkFXR0NQUENXNnZqaU9vK2w2Ly94YzAvV3FMTE1zdzhNQkVCYllHMVV4VmpIbXVLNWxXWlpsbmZYN2tpUXh4dlppVm9WOWZRZ0xnQitGSUVtMWVsMDNqSHF6NmJxdUpFbjd0VXVGOWpJUUZnQWZsb0dxcHAzMSs3VjZIZS8rd0dkQThRakFMbEVWUmR6dHZLZEZWV2d2QTJFQmNEQ3JKeHo2Z2JBQUFBRENBZ0JBV0FBQUFHRUJBQUNFQlFDQXNBQUFBTUlDQUFBSUN3QUFZUUVBQUlSMVFxQ0VHc0VGRU5aQklNc3lad3l0Uy9aY09ySXNmK1lKUjg0cHBiakxad2VnVzhPRHBnQ2hsQlpGNFMrWHdXcFZsaVdleVg2R1NaYmxMTXZXVVJTRm9heDhXbEp3emplYnpXd3lzVjFYMTNYcC9UMnZBTUk2TUZXbFNiSU9nczEyRzYzWGVaN0xzb3duczEvckMwb2xTY3J6ZkRJZWkyRGxlYTRvbjV3VTI4M203WGJyMVdxV2JkY2FEY2R4T09mUUZvUjFHRGxBQ05sdXQ0dlpMRTNUN1daVGxxVk1LV3kxaDJHS3d0QmZMTEk4WHdlQitNZlBzTlVIOFFWQkVBUkJ1RjdyaHRGc3RieGFqVkRLY0lrR2hMV2ZpQjJRbGU4djV2T3lMTGViamZncVExWDdwU3BabGpoZnpPZnJJTWpTTklsai90NDQ5ekpmMjI2M1VSUnR0MXRkMTEzWFBldjF4RTFsZVBJUTFoNnQvcmdrM1Z4Zng5dHRudWRabW9wL3hNUFpxemdwc2x3VXhlanVMbHl2OHl6TDg1d1FRaWdsOS8xOWtHVTVTOU0wU2VMTlpoMEVpcW8rZmY1Y1ZkWDliVnNJWVoySXFtUkZ5WkxrN2R1M1paNm5hY29ZSS9jMFhJUDdOVWllWlMrLy8xNTRxcXFxaHg1UkNDR0VrSXF4eldaRENQbjdkOS9KaXRJZkRKcXRWbG1XMk42Q3NIYWRBNXFteldlejJXU1NwbWxabHVJZVVMelkza05WcllQZzl1YW1Lc3VpS0NUT3BkMkdTZnl1TkVra1F0Nys4TVB3N3E3WmFnM096OUhTSHNMYXlRNElwWklrelNhVCtXeFdGTVdIN3h4VXRWK3FvbFNSNWVIZDNYS3h5TFBzeDRYWVk0V0pFRW1TeXJJc3kzS1VKTlBKcE5sdTkzbzlzVTVFdkNDc0IxRlZVUlRENGRDZno4dXloS0gyRTFtV2l6d2YzOTR1Rnd1eDlOdTNUOGc1TDR0aU5oNHZwdE5hclRhNHVOQk5FeThUSWF6N0pNdXk4WEM0OHYwUDJ4TjRKbnVuS2tvMzIrMTBQRDZVTURIR2ZOOWZMcGVlNS9YUHp4M1h4Wlk4aFBWRkk2RWtTVkVZVGllVHRlL0xtZ1pQN1cya3Rwdk44TzV1RTBXSGRVUkdXSFd6Mlh6M2w3ODRqbk0yR0RRYURld3dRRmlmT1BSeFhwWGxKb3B1YjI3eUxKTmxXZEUwUEpiOVhGdUZVVFFaRHVQdFZ0VzB3eTE1VTFVMXk3STNyMTY5bGFUTHAwKzlXazFUVlVLcFJBaU9vRUpZdnp6V1NaSlVGa1dXWlZFWTNsNWZVMHFwTEg5ZTZUTjQyRENWWlpabG16QWMzdDVXakNtS29oN0ZpQ0tFZTN0OXphcnFyTjl2dGxxNnJpdXFTZ2pCYWhIQytxY2NTSk1rTDRyNWRMcGFMaVZDRkZYRms5bkQxVk1jeDNtV3JZTmdQQm9waWtJcFZZNnU2bzFTU2ltZHoyYlR5Y1R6dk41Z29HbWFicG95cGFpRU9HbGhpVHZUdDV0TmxxYXoyVXpzZ01pN25WSnh6bEhEOWF1ZTRveUZZY2lxYWp3Y2JxS0l5cksyMnluVjdzTWt0TFhkYmwvKzlhK21aWFY3UGNNMGJkdFdGRVY4R0FqcmhISkExQ2lzZkQvTHN2bDBtb21OcXQycWlqSEdPVGRNMC9XOFBFMmpLT0tjbzByK0g4TWt5N0k0UUo1bDJXUTBLdktjeXZLT0o3K01NY2FZNDdxV1phVnB1b2tpYVllSEdRZ2hpcXJtZVg3ejVvMnNxdDF1MXpCTjEzVjF3NUJPc28vTmFRbExqRnBSRkcyaUtFbVN4V3dtSExGN1ZiR3FxamVicG1VNXJ0dG9OTklrV2ZsK0hNZmhlbDBXQlpYbFU1NXdpVGQ5OFhhNzNXeWlLQkt0eEhZLythMnFpbExxZVo1cFdmVm0wM1hkN1hZYitINmU1OHZGZ3Urd2FaODRCQ1p4UGg2TmlDUTFtazNIZFhYRGFEU2JwOWJIaGdSUmRBcC9weXpMRWlHcjVUS080ekFJdHRzdFkyekhMNVU0NTZ5cXFDeTMybTNETU9xTmhtR2F3bDlpclZFVVJiaGV4OXZ0eXZmVE5KVXBKY2MxNGVLY201WjE5ZlNwWmR1L3VLaWhzaXhKVWhRRVlSUnRvbWp6R0xOT3pubFZWWXFpTkpwTjI3YmRXczE4SHlieFNZcWlDRmFySkk2RElFampXRmFVSFk4dTRndWo2M3F0MFRBTm85RnVxNHB5SWllcmoxeFlZbWpLc3l4WXJhSXczRzQyYVpaSmo1RURaVm1hbGxXdjExM1BzeDFIMDNYTzJFKytZZTlPekZaVnZOMXVOcHRndFFyWGExbVdqMmFkK0srRTlhN2pCZWZMeGVKZG1OTDBzVlJsR0VhejFYSmMxN1p0VmROK1ljT0lFSm5Tb2loRW1OWkJFQWFCckNpNy83U2NjMVZWYmNjUjgzVGJjWXFpT0c1dEhhMnd4T0kvMlc0WDgza1loaisyRTluNVlNaXF5bmFjZHFmanVLNm02NnFxL3VxbUthVzBZaXpQc2lTTy9lVlNsRzRmUVYrdG53dUxFS0lvU3BxbS9uSVorSDZXNTBXZVN6dXZuQlFsWFY2OTNteTFYTS9UTk8xajlyWS9oQ25lYnBlTFJSZ0VmUGRoNHB4eHJpaUtydXUyNDNTNlhkdDEyZkdlckQ1Q1lWRktDYVhieldZNkhtODJtL0w5RWVWZHE2cXF1Q1RWYXJYTzJabGxXWXFxaWtuRUp6bFhrcVE4ejh1cW1rOG1LOTh2OHZ5ZzZ5MytVVmlTSkNtS3N0MXNwdE5wdEY1WFZWVVV4ZTdua2xWVlNZVFVQSzkvZnE1cG1xS3FzaXgvVXJhTE1CVkZrYVhwY3JGWUxoYTczMjBRejVZUW9tcWFhVm5kYnJkV3EzRkNqdStJNGxFSlMyeUNybGFyNldpVXBtbkZHR2RzOTd2WDR1dmVhclhPQmdOVlZXVlovc0xDUDBKSVdaYXNxdFpCTUJvT1JXSWY0cTY4RU5hejU4OHQyNDZpNk83NlduU25ZbzhScHFxcVpGbHVkVHBudlI2bFZGVlY2ZjE1ck0rTGtTUkpWVmt5emhmeitXdzZMZko4OTJFUzJwSmxXZFcwczE2djJXb1JRbzVwdG5Va3doSkc4SmZMdTV1YmQ4cmdYSG9NVmNtSzB1bDBCaGNYSC9abzczM2JJdDV1YjY2dmt5U2hoMWE5eFRtM2JkdHgzWFVRL0dOem5rY0owL25GUmFQUklKVGViNWpFTGlRaFpCMEV3OXZiTE1zZWF3dFN6T2dIRnhldGRsdFIxZU9ZYlIyOHNFUlY0WHcydTd1OS9kUTExLzJtb3F3b1Q1ODk4Mm8xTWNvOTlHL01zK3oyK25xOVhoOWMwZWtqSGpSaGpCbW1lWGwxNVhuZUxxWjFuRmVNL2YydmY4M1RsRC9Ta1dhUklMVkc0K256NTQrWUlCRFd1Mmk4ZnZreUNzUEhuVFVZaHZIMU45ODh5cVk0SWVUMjdkdmxjb216WnI4YUpzdTJmL1BWVitLbHg2N0RKRWszMTlmejJleHhYL2dxaXZMTjczOHZIL0kyNktFS0s4L3pWMy8vZTVabGp6VzVJSVJVWmRudDl3Zm41NTkvWS9BOWZSSkprdnpGNHZiMmxuUE8wWGozSncrSGtHYXplZlgwS2YrQ0xhcjdtbGNHUVhEOXd3L1M0MzBTc1JTNGZQS2sxVzd2WjRQRG94SVc1enhMMCtzM2J6YWJ6V050UEl2ZmUzNXgwV3EzSlVyM1JCQmlZWmdreVEvZmZ5K0tjUjVsSjN0L0VCUGV5NnVyZXJNcFU3b25uWWhGbU1MMWVuaDNseWFKSkVtY3NVZlpiTlUwYlhCKzN1cDBEdXQ3Y2tqQ3FxcHFkSGMzbTA0ZjdlV0xvaGlHY2RicjFSc05hUzlQY29rM1JFa2NqOGZqOVdyRkphazZwVzdPb3RhVVVxb2J4c1hscGV0NTdHZlZ1WHNTSmtwcEhNZmlMRGVycW1ybjFoQkRtbTNiNTVlWHJ1Y2RTZ2ViZ3hIV2RyTzV1N25aYkRhN1BrL0RtS3dvaXFwYWx0WHI5KzFEdUlYOHcrbnV4WHkrWEN6S29pakxVanJlUHBZaTAyUkZrU210TlJxZFRzZDJuUDAvcXZMaC9ySHBkQ3BlbTVaRnNlTXdNY1lVUlRtL3ZHeTEyd2Zock1NUTFpYUticSt2NHpqZW1hMUVBWUdtcXJwaHVMVmFxOVd5SEtjOHRITVBvZ1pTRkpISFNaSm4yWkZwUzRSRFZWWGRNR3ExV3J2YjFUVHQ0RTdWS2FwYTVQbHF0Vm90bDFtYVpyc05rL2lxbjE5Y25QWDcrKytzZlJjV0lTU0pZN0ZwdFJ0YmlTVzlwbW1PNjdxdTIyeTFsQU8vczFlOEV3alg2M1VRYkRhYkpJNGZva1pzOTdzd0VpR0dZVGlPNDNwZW85bFVGRVZNSkE4M1RJUlNmN0dJd2xCMEU5bGxtQmhqVDY2dTJ0MHVabGhmUkZtVzF6LzhFQVRCRG16RnFvcFFhanVPNjdxVzQ3UmFMWEVhOWpnbUk1UlNXWmJETUJSZEVNTDFXdlJzT2JnSmw2aFF0eXpMcTlkdDJ4YjdpY2NVSmlyTFVSaEc2L1YydXcyRG9Lb3E4dkJoNHB6THN2enN4UXZYZFNHc3ozK0lOMi9menFaVDlTRXJSOFNlbEN6TDRyeTc3YnJPSVd4VWZmNitpYUtrU1JLdTEzbWV6eWFUUXpub0l5SkNLVzExT3JadFc3YnRlVjVaVmZ4SXcwUXBMZkk4V0szRXlYQlJNZitnWVdLTVdaYjFtNisvVnZlNFVHdXZoWlVreVhkLy92UER6YTNFQkVyWDlYYW5ZMXFXNjdxYXJ1L25lNlY3endkQ3FjVDV5dmZMc2x3dUZ1RjZUZS83a01yOWhrblQ5WDYvTHl0S3JkSFFWUFVVd2lUNjJGUlZGWVZobHFhTHhVSjA4WDY0TUpWbDJUOC9QNys0Z0xBK2g3OSsrMjJhSkE4eHFvaSt0N1p0OXdZRFZkTnMyeFliUGFkV0x5NisrbkVjaXpuWGJEb1ZyNjcyNU9NeHhzcXliRFNiclhaYjB6VHg5djBFK3dLTEl6WHhkcHZudWI5Y3JwYkxCKzFqODgwZi82anJPb1QxeWRPcnYvenBUL2MrTzJWVnhUaHZ0bHJkYmxmUk5ORk04c1RQdFh4b2tKSW15U2FLcHBOSmtlZTdiNlQ1ajFSVnhTV3AwK2swbWszZE1BekRRSmhFMFdtV1pWbVdiYUxvN3VibUlVWVh4dGo1NWVWWnJ3ZGhmUm8zYjk4dUY0dDd6Qm54cHUvaTZzcHpYWEhkRzNMZzV5bkJxaXJQOHppT2g3ZTNhWnJLTys4dVg1YWxvaWk5ZnI5V3IydTZMdHJ0STB3L0dWNnFxc3F5TEluam03ZHZ5N0s4OXpEOXIvLzl2L2Z6bWUvcEpSU0Uwc1Y4Zmk5cjlROTlieStmUG5WZFYzbmZ5aFk1OEl2UGlsQ3FHNGFtNjE2dGxzVHhhRGdVYlpwMzhKWktuQmQ1K3Z5NWJkdmk5bENFNlplZmxDUlJTazNUTkF6RHE5ZTNtODFzTXZHWFMwM1Q3aVZNVlZsdU54dlJaQkV6ckk4aVM5TS8vK2xQWDM2WlRWRVU5VWJqck5kelBVODYzbEx2QnlWTmt2bHNOcHRPSDI3VHBLb3FyMWJyRFFhdTYrNm1PYy94U1N4TDArbDR2Rmd1djd4TEd1Zjg4dXFxM2VsQVdCL0xhclY2OCtyVkY4NndXRlgxejg4SDUrY1NidnIrd25tNHFxNTgvL1hMbHcrVWJMMSsvL0xxNmtUdWZYbTRsU0loeEY4dTM3NTVJMzNaWStTY04xdXRxMmZQc0NUODZJMk1QUC95WVpiSzhtUTBtazRtdmNHZzAra29pb0pzK05Ra2tEZ1AxK3ViNitzOFRlbkR6TEFJSWRQeGVEb2Vuejk1MG1nMkg2VmYxUkhNc0lMVmFqSWNicmJiZTdsa2MyL1BET3pwREdzeUdvMUhvL3RhR25ET2k2SVF6VFFNdzhDSzQyT2VXRm1Xd1dvMXZMbGh1N3B1UzlRcnRMdmRzMTd2dnJaampqNU1WVm1HWVhqejlxMjQ4dksrZnJKbFdWOS84dzFtV0IrOXFYR3Z0VGJpYk9COE5wdU1ScmJyWGoxOXFtcWEySDNIWVA3VEoxOVZaVkhNWnJQNWRDcU9hOUJkaVVOb2NUbWJ6Y2JqZXFNeHVMelVORTFjeTRndy9kTzNXWkxLc2l5S0l2RDkyNXNiOFlqdWQvNjd0MGVkbEQwT3l2My9URVZWMHlUNTY3ZmZ5ckw4OVBsend6UlZWWDIzVkR6aGxCQm45UE1zeTdKc05wMzZ5K1VqM3Q1S0tGVW9qYUxvMnovOXlYYWN3Y1dGWVpxNnJrTmJvbWcyenpMRzJOdlhyN2ZiN1lmTGZrNEg1UVNqTHQ1MnZmN1g1c051QUFBWU1VbEVRVlQrZTFtV08yZG5qVVpEMVRSZDEwK3QwbDFzMHpMR05sRlVGTVh3N2k3ZWJoVkYyWWNjRUZmc1pWbjIrdVZMUXVtVHAwOE4welFNUS92RnE1aFBJRXhGVVlqQ3E5SGRYWlpsc2l6ZnkxNFZoSFV3Q0cySjdkNUdzOWxzdFhSZE55M3JGQTUvaUxPMWFab21jWnhsMmUzMU5XZU15dksrRGRmaXFMWWtTZGR2M2tpUzFPbDJhL1c2NlB4ektrYytDY215TEUyU01Bd1hzNWxvc0hHYXFqcDFZZjNqdnNuSzkvM2wwbkhkWnF0bEdJWlhxeEZLK1RHbWhEanhIMFZSbnFhcjFTcFlyYXFxVWhSRjJ1LzJXR0owV2N6bmkvbmNzdTN1MlptcXFsNnRKaTZMbDQ0M1RHa2NoK3UxNy90aVAzRi9qbmxDV0krdnJlMW1zNGtpWGRlYjdiWnBtbDZ0cHV2NjBSUUhLWXBTVlZXNFhzZHh2UEw5N1dZamNVNFBhbVVod3BURThadlhydzNEYURTYnR1TTRybnMwWVJJelg4NzV5dmZUSkZtdFZzbDJ5emlIcHlDc2Y1a1BSVkdNaDBOTjAyekhjVDNQOVR6WGRjdXlQTkI4RUh0Mm9yOTdGSVpSRklrR0dJZmJjZlJkSy9ROEg0OUdtcTQ3anVPNmJxMWVOMHp6Y0x1WUVVSVVXVTZ6TEF5Q0tJcWlNRXpUVklRSnJvS3dmajBmcXFwYStYNFVob1pwMnJiZGJMWEU0WjRENm13cHZ1NVpsazBua3pBSWtqUXQ4dnlnVmZYek1KVkZzZkw5Y0wwV0svcEdzK200N21GcFMxUWt4TnZ0WkxrVWE4QXN6MFY3V0NRamhQVnAreWFpQ1ZHODNVWmhxQmxHdTkxdU5CcFVsdmU4ZDdoSTVrMFV6ZWZ6VFJRVmVWNlc1ZEdvNmlkL3FhakpFTDNxZ3lBd0RhTjlkbGF2MS9kL2RQbXdFVEdielpJNHp0SlUzR3dLVlVGWVg1UVNraVNsYVpxbWFiTGRqb2ZEWnJ2ZFBUdWpzcnlIdS9KVWxpWE9OMUYwZDN0YkZrVlJGRlZWN1cwcjBmdE5maTVKV1pwbWFSb255UjBoWjROQnM5bVVGYVhhdjlGRjdLbjd5K1ZzT3MyelRGeDhlNVFqeXYzbjQzNGV6UmtOaDlQeGVBOFBaNGlYTllTUVJxUFJPejhYTFpYMzRTMlYyS3hkekdiajhWaVNwQ0xQcFJQdVRzRTVWeFNGRU9MVmFsZlBudEc5dWZuNXh6Q05ScUx4MFg1MnA5QjEvWnMvL2hFenJHT1ljSWtLb09WeTZmdStydXZQWDd6UURlTVJxeG5GY1AzRDk5K0hZU2h5Z0h4eGc1RWpDSk13bE5qaFVsWDFOMTk5cFQxcWJUQ2x0Q3pMbTdkdlY3NHZQcDZJRVk1TVFsaTd5QWZ4MVUrUzVMdS8vSVVROHV6RmkxcXR0dU44RUxmU3YzM3pKb25qRDc4WENmQ1RxVlpabG1WWmZ2dm5QMnVhMXIrNGFMVmFPeTQ2SllTVVJmSFh2Lzg5enpMeGU5SHpDOEo2ekpUZ25MOSsrWkpTMnU1MG5qeDl1b010ZVVwcHNGcmQzZDZLeTV6Qng0UXB5N0szcjEvZnZIblRHd3pPZXIwZE9FdVc1ZVZpY1hkemM5QTN2RUpZeHdsamJEcVpUQ2VUV3IxKzllelpRN3pyRWZNM2Y3RVkzZDJKVXhxUE5jRWtoRFJiTFVWUlJuZDM5S0RlYWpIRzdtNXVSbmQzclhaN2NINHV5N0owNzVNZHpnbWx3OXZiNVdJaHJuMThSRTFmUFh0MmQzTnpOS2ZOSUt4N3ptUkprdFpCOFAvOXgzOTR0VnAvTUxBZDUxNldhZUt5bi9GdzZDOFdaVlU5VmpjRktzc3lwYjErdjlsdXE2bzZ1cnM3eEhwYThlam1zOWw4Tm5OZDk4blRwNnFtZmFneS8wSkI1SGsrR1kyV3k2WEUrU084bitWY2pDZWFycC8xZXVLRTdQRDJWdnc3aEFWK1dWdWlET3J2MzMxbjJuYXYzM2M5VHh3RSs2UjhFQnY4VlZVVmVUNGFEb1BWNmwzcDgyNW5OSnh6OFVzMXcrajMrL1ZHZzBzU3E2cER2eDFlcUdTejJmelhmLzZuVjZ0MWV6M1g4OFJmK25saFN1SjRPcG1zMTJzaWZ2aHVCU0hDUkJYRnNxeGV2Ky9XYWhMbmpERjJYQWN0SWF5SDFKYWlaR242K3Z2dlRkTnN0ZHYxUnVOajdxMGloRWlFc0xMTXl6S0tvdVZzRmdTQnFxcTc5NVFvRGxBVXhmVzhWcWRUcTlmTG9qaDBULzM4YWF1YUZzZnhxNWN2TGROc2RidjFlbDMwZDVSKzdjNGU4ZUt2eVBQTlpqT2ZUcU1va21WWjN2bk1WNVRhcUpybXVtNm4yM1U4cnlwTGRseGhnckIybUErcVdoYkY4TzV1TWg2M094MnZWck5zVzdRQS9zbk9nbGc1Vm1XWkpNbDJzNWxOcCtKbVFFM1RkcHdBa2lRcGltSmFsdTA0b21HeG1PZ2RkNWp5b2hqZTNvNkh3ODdabWV1Nklrdy8xOWFIQmxWUkZHM0MwRjh1NHpqZWZSOHg4YWxVVmJWczIzR2NWcnR0V0ZaWkZFY2NKZ2hyZHdraFJ1elpkRG9lRHJ1OW51MDR0bTNiamlPMDlhN3pVWnBHVWJUZGJKYUxSVldXdTIrbElHWlZobWs2anVNNFRxdlRvYkxNcXVwRVhuSjlPQll6SFk5bjQzRzkyZlJxTmR0eHJQZGQwc1FxTWt2VDlYcWRKc2wwT2hVYlZUdFdGYXNxUXFscG1vN3JXcGJWT1R1VEpJa3hkdHlxZ3JBZUFiR1Q1UytYaS9sY25LbldkTDNlYUtSSnNnNkM3WFlickZidk9oL3RWbFZDbXJiamVKNW51MjZ0WGhmWEMxY24rVDVlYUN0WXJmemwwdlU4cjFhemJkdXIxOFAxZXJ2ZGJqZWI1WHd1SzhxT1YzK2NjOUZuc2QzcGFJYmhlWjVYcngvQlppS0V0ZStJbDBkcG10N2QzcXFxdW9taU5Fblc2L1dqdkZTcUdDT0VkTHBkeTdJc3gzRmRsekhHVGlrSC92c3d4ZHR0dEY2YnRsMWJyOE13VE9KWWJIdnRXRlZWVlptbTJXZzJkY01RQlNXTXNiSW9UaTBvRU5ZakwwQVlZL1Baakx4Zk0rNDRCMVJOdTNyeVJGWVVyMWJUTkkweGhoTEhuNGRKVWRVOHkyYlQ2ZTViS1RER09HT081NGxldUs3bmlVVjZkYW9qQ29TMUZ5UDVqbk9nTE10M2Jld053M1hkRHkvbUVZdi9SbHM3UGt3and0RnN0UnJOcG1FWXBtV0pZZWJFSjc4UTFna2hlZ09jOVhwZXJXWlpscWlXUExWTGFQWWNvU1F1U1pkWFY3WnRpNXZvcEY4cnNJQ3d3RkZSRklXbTY0Tit2MUd2cTdvdU91UkFWZnVtcXJJc1RkUHNYMTA1bnZlaDhnNHhnckJPS0FmRVp1MlRwMCs5V2sxNDZzTi9oZWV6VjZwcU5CcmRYczl4SEVLcE9DU0VHRUZZSjVRRG5IUEg4L3I5dmxlcmlhb0ZQSlo5Z3pFbUVkSm9OQVlYRjdxbVNSaE9JS3pUcE41b25GOWVHb1loZWovQlZudW9LbGxSZW1kbnZYNWZWaFFZQ3NJNnlYQXFTcjNSdUhyMlROd2NjL1JYV0I4aW9vU2wyK3VKbmx4WStrRllKNGZvK25KK2VkbnVkS29UTHRMWmM4U3gwUDVnME81Mmk2TEFjQUpoblJDaW5Zam9wdkRzeFF2VE5GSDJ1YmRoVWxWVjFiVG5MMTZJUzZyekV6ajBCMkdCZHdrZ2xuNmk2MHYvL0Z6a0FHWlYreFltenJtbWFiS2l1SjczNU9wS1hEeUJFUVhDT2lWVmNhNFpocVpwOVhxOTIrdFJTakdyMmpmRWl6L1ROQ21sWjcxZW85bmNuMHZHSUN5d3F4eVFKTWQxTlUxcnRkdTFSdU5kS3dXa3dWNkZxYXFvTE51T294dEc5K3pNZFYzeDZnTmhnckJPU0ZXeW90UTh6elNNVnJkcm1hWm9UNHduczIrVFgxbVdYYzl6SEtmUmJKcVdKVXAyOFdRZ3JOTktBOGQxMjUyTzUzbUdaVlZsV2VHOTBsNWkyZlpacitkNm51aDRBVlZCV0NjNnZhbzNHcDF1OXpRN0h4MEtoQkRIZGM5NnZTelBvU29JNjlSQkRoekVaTGlzS2duMW53OFB4U01BNEI3bVdYZ0VFQllBQUVCWUFBQUlDd0FBSUN3QUFJQ3dBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBUHdDeDlWV2tPSXBnOC84NmxCS0tFV2M5aHhabGlWSk9wb3c3V3VMWklJT2p2c0xJWVFRNHZ2K1lqNFgrWERxazVoOUhWRWtTWnFPeDV4ejhva0pSZlkxQWZkVVdBclNZSThuVm1FWTN0M2NKSEVzeklWbnNtK1BRTVFsQ0lMYjYrc2l6ejluWHFic3F4bjJkQjZyNEhhTWZaeFlKVW55NXZYck5FbWdxbjFHakNocEhCUDZPWHMrbkhNVnd2b2tUTXVxcWtxQnR2Wmt5Y041V1piZi8rMXZhWnBTU3FHcXZRMVRITWQzTnplYktKSmwrZk5zOVNFQklheFBlVjZtaWUvZlBzeXBXRmxLaFB6dDIyK0ZxaWpGYStWOWhER1daZG5OOWZVbURHVkt2M0Jqa1RGbTJUYUU5UWxRU2gzWEZic2srRG8reXVxdkxBb3VTVDk4LzMwVVJWRFYzb2FwS0lxcUxOKytlYk9KSXZyRnF2b0FoUFhKazl0K3YvL3ErKy94RW1ySENTQkpVbG1XUlo2UGhzT1Y3OTlqRG9CN2pCTWxKRXRUeHRpOXE0cHozbXkxRkVYaGUxbGF0TCtiUkxiaklGVjJyNm9rU1pieitXSStKNFRnK1g5c2t1OHdUSlRTTkVuS3FocmUzS3pYNjNzZlVhcXE2cDZkOFgwdGhOeGZZU21xT3JpNHVIbnpSbEZWcE1TRDVvQllXV3czbTlWcTVTOFdqREdvNnRPZTRhNVVsYVZwbXFiejZkVDNmZm9BSXdybjNIWGR2VjBQN3JXd0pFbHFOcHVMMlN6TE11eGtQUkNVMHJJc296QU1WcXNnQ0lvOFZ4UUZ0dHE3RVlYU0lzOUZtRmErenpsL3VCZzllZlpzbjlOdHI0V2xxT3JGa3lldlhyNkVzTzRkV1piTHNsd3VGdXYxT2x5djh5eFRGQVYxSkh1b3FySW8xc3Rsc0ZxRjYzVlpscklzUDFBNkZFVnhmbkZoR01aZU8ySFBZK2E2Ym44d0dBMkhHUGJ2VVZXTXNmbHNGZ1pCRkVWNW5zdVVRbFg3T2FJRWk0WHYrL0YybTJlWi9KQ1QzN0lzTzkxdWJ6RFk4OG5Cdm45TnFTejNCZ1BPK1dnNFJGSjkrUUtRRURLZlR0ZEJzTmx1aXp6SHp2cCtob2x6dnBqTkZvdEZscVpabHNteS9LQm5QOHF5YkxmYkYwK2V5TExNOTd2dndMNHJnSE5PS1IxY1hFaVNOQjZOVUdiOTJUa2d5L0owUFBaOVA0bmpzaXpKKzhPeFlPOUdsTmxzTVovbldaYm4rUTdLU3NxeWJIYzZGNWVYcXFyeXZlK1NjZ0J6Rm5IV3ZIOStybW5hYURnc2k0SmlVdkFwK3lDS29pd1dpK2xvbEdWWldaYTdPUWJJR0lNUVAyMUVVWlRKYUxTWXovTThMNHRDdkJaODZNemluUGZQendmbjU0UVFmZ2c5blE1amtTV2MxZXAwNnMzbTdjM05hcm5FNGR1UFVaVXN5K3YxK3VidDI3SW9kcWFxcXFvMFRldDB1K1BoVUZhVVV3Z1QvN0l3aVpGNE1adGxlVjd0S2t4bFdUcU9jL1g4dVdFWVloRjZFSTlhT2F3TVZCVGw2Yk5uZy9QenR6LzhzTjFzTUliL0syUlozbTYzUDd4NlZlUzUrQzd1UmxXcXF2N202Njl0MnlhUzFHeTM3NjZ2MTBGdzlKVjBuLzFrTlUyYlRhZVQwU2pMc3AyRmlUR21LTXJ2ZnY5N3k3WkZCdkhENlpkNWVOdlloQkJkMTMvMys5L0hjU3hhblVCYlAxbGNwRW55NXZYcmVJY25NYXVxMG5YOTJZc1h0VnJ0d3orYXB2blY3MzYzM1c1SHQ3ZnI5UnJ2VFA0cDhXUjVIUVIvdTdsSjAzVEhLNVd2ZnZ0YjEvTU85YmtkNmlTY2M5TTAvKzEvL3M5MUVOeGVYNmRwaWhVaUlTUk5rdHVibTNVUVBGeTF6cytIYThNdytoY1h6V2J6RjhkcTI3YS8vdWFiS0lxR3Q3ZWk3UW5DbE1UeHpaczNtKzEyWjJPdFVOWFQ1ODliN1RaajdJQkZmOUN4cjZyS2NkMC8vdnUvcjViTDRkMmRhQ3gzbW1tUUpvazRyaXpMOHM2a29HbGFiekJvdGR1RWtQOG1EY1NCajIvKzhJZjFlbjEzYzVQdGNFNnhJeDE4ZkpqU2RIaDc2eStYcXFydXpGYXlMUGZQejN2OWZsVlZCMjJyZ3hmV08yMlZaYTFlYjdaYWkvbDhNaDVuYWNwUDVnNEx6bm1hcHJQSlpER2Y3Nnl6QWlGRVZkWHUyVm4zN0V3aWhESDJxdzljdkpEeVBPL2YvdjNmRjdQWlpEek9zK3pRaytmSEIvS3JZV0lzemJMWmVEeWRUbFZWVlhleXFTZjJmRnZ0OXZubHBXakJlQXhMNmFQSjI3SXNtNjFXczlWYXp1ZXoyU3hMMDZxcWpuWENSUWlwcWlwTFUxR3pJNzIvSE9XaEh6S2xWRGVNZXFNaFhvUlhWZlZKOXh0eHpzdWlhRFNiM2JPejBYRG9MNWRwa2h4OW1KSWs4UmVMOFdpa3FxcW1hYnNKazZicklreVUwcXFxanVhUkh0VStxQml4VzkxdXE5Tlp6R2JMeFNKSlUvR2UrSGh5Z05LcUxOTWs4WmZMMlhUNm9PZGdmNUlEdHVOWXR2M2s2a29zeHIva3ArVjUzajA3RzV5ZjMxNWZiemFiN1daelZOb2loRWhTV1pacEhQdStQeG1QWlZuZW1hcE0wL1RxOWJOZVQ5TzBzaXlQeVZiSEpxeDMycW9xU1pJNloyZnRzN1BwZUJ5RjRTYUt5ckk4OUplSllxZ01nMkFUUmRQUmlPMUVWYUwrMDZ2VkRNTzR2THA2TjZ1NnA1K2M1M24vL0Z5VzVkdWJteVNPb3pBOGpqQVZlUjdIOFhxMW1zMW1raVR0WUFISUdTT1VPbzdqdUc3bjdNd3dqTElzajJNTmVQekNFb2k4NnZYN1o3M2VaRFJLa21UbCt3ZGFmaTNxK3BhTFJaYW00K0ZRcU9xaFhjVVlJNFRVR3czRE5BY1hGL0xEckN3WVk0eXg4NHNMenZsa1BONXVObEVZRmtWeGlDOFRaVm5POHp3TWd2VjZ2WnpQcTUyMEZST3JpbHE5YmxwV3A5czFUYk9xcXFOVTFaRUw2eCsxMVQ4L1o0eVpscFdsNldJKzU0d2R5dUVlMFV4OU1admxXVFllajBWcnZaMnB5cmJ0ZHJlcmFWcFZWUSs2c25nWHBzR2dMRXQvdVl6Q01GeXZEMGhiVkpZNTU0djVQQXJEbGU5WFpVa2YvbDJ0Y0gycjFUSXNxOTNwR0liQkdEdGlWYjFiYlFkUkpKMEdzaXhYWmJsY0xPSTRucy9uZk8vN2FuTE82NDJHcXFyTHhVSTBRdHJGYXBxUVdyMHUvaU55WU1ldlhLbm9BTFZlcjRNZ1dLMnFxdHJ6TUJGQ2JOczJUSE81V0ZSVnRZTXBQR2VzS010T3QydFpWcXZkMWd5RDd6eE1FTmJ1QnNNaXo4UDFPZ3pEL1c4SFRBalprYW9ZRTM1c3RGcXU2K3E2TGdvUkh1dXZGbDJiTjFFVXJGYkx4V0kzN3hhKzhBSHVRbFdjbDBYUmJMZTlXcTNlYUR4dW1DQ3NuUTdqZVo3SGNld3ZGcXZsa3UxOVBqem9jRjB4Vm04MFdwMk82emlxcGtuN2NiaU1FQ0lSVWhaRnZObjR5K1Y4UGovbDI4WVlZMVZWMWV2MWRyZHJPNDZ1NjlKQm5RR0VzTzRqSDhROU1YRThuODFXdmkrZFdJc29VYnhXcTlmUCtuM2JzaFJWM2NNZUkrL0NWQlJabGszSDQ4VmlvWnhHQjRoL0RCT3JLdHR4ZW9PQnMwOGpDb1QxT1BuQU9XZU1wVWt5R1kxV3E5V0o5QWdzeTlKMm5Nc25UMHpURkUxZzlqa0hSRVNLc3F6Szh1YnQyMTBlbG54a1ZURm1tdWJnNHNLcjFjUTM4MlJWQldIOXd2Y2p6N0xydDIrak1EemlGV0pWVmJwaFBQdk5iMHpET01SV2lGVlZzYXA2L2VwVnZOMVNRcVFqMVJaalROZjF3Zmw1bzlVU0ZhRW5yaW9JNjEvUFBvcmk1ZC8rZG56WGl6SEdWRVY1OXRWWGxtVWQrdUtYYzE3aythdFhyN0k0SnNlMWtPZWNLNHB5Zm5rcE9pdWdEUW1FOVhFamVWbCs5NWUvSE1mSkJ2R1c3ZXJaczNxamNVd0ROU0ZrdTkyK2ZmTW1PNXBHSFlSY1BYMTY2RTFnSUt4SHk0Yzh6Ly8yN2Jmc2tPdGNaRmtlbko5M2VqM0dtSFNNeXdwS2FSQUV3OXZidzIxY0l6YW5uajUvM21nMnNmU0RzTDQwSHphYnpadlhyNnV5UEtCeFQzUVg2WFM3b3REL3VOTkFYTm5nTDVlajRiREk4ME1KazVqNWNzNmZQSG5TYUxleHB3NWgzVnMrRUVvRDN4OE5oM3ZleUVua2dLd296V2J6L1BMeUhvOHJIOFRRUWdoWkxoYmo0VkNjL3QzYmRhSUlFNkcwMSs5M3VsMUNLY2NhRU1LNjkzeVFKR201V014bnN5eE54Ym10L1VrSmNibUFxcXFOWnJNM0dNaXlmRHFxK3Fjd3lUTG5mT1g3NDd1N3FxckU3WDU3cFNvcXk2cXFObHV0WHI5UFpabWRaSmdnckIwaHJucGZMaGIrY3BuRWNWRVVqLzV5WGFoSzE3UjZzOWs1T3hPTmtCQW0wZUppUHAzbWVTN3VUMzU4VlZGcW1LWlhxMzNvVjRXRWdyQjJnYUlvUlZtdWxzdGd0ZHB1Tm5tZVAwbytpTE9RcG1YVmE3Vld0NnZyZWxWVjJBZjVpYmJtODNuZysvRjJXK1E1ZmFRd1VVcHQyL1pxdFdhblk1bG1VUlNJRG9UMUNOb3FpMkxwKzVzd0RGYXIzUnhVL3BBRGhCRFg4N3hhcmRscTZick9UdWJJL21jc0VobGp5L2s4Q3NOMUVPeW1wOEkvaHNseDNYcTlYbXMwYk5zdXl4SmhnckFlZFJoWGxLb28vT1V5VHBMNWRQclFIU0RFbHIvbmViVkdvOTVvUEVvVG1BT2RiUlZGc1E0QzBiam1vZnNyZkdpdFY2dlhYYzl6SEFlcWdyRDJiQml2cXBYdkozRThHWTM0QTF3TUlRNlh1WjdYN25Sc3g3RXNDNnI2REcxbFdiYmRidjNsTXZCOXNhOTA3NnJpbkRlYXpWcTk3cnF1aVRCQldQdXJMVXFycW9yQ01BckR5WGdzNm9QdVIxVlZaVG5PK2NXRnB1dVdaWjFhSTZUNy9OSVRRaWxOMDFSY08zU1BqVHBFQTR4V3U5MW9ObTNITVF3RFlZS3dEa05iUlZHa1NTSnFJTDVFVzJKV3BSdkdzK2ZQWlVXQnF1NVJXNFNRTE12eVBKOU5Kc3ZGNGt2NmJRbFYxUnVOYnE5bldaWjIyazFnSUt4RFRZbXlMUE1zbTR6SC9uSkpDZm1rWTdxYzg2cXFUTXU2ZXZaTTA3U1Q3ZG4yNEVHU3BLSW84alNkeldiejZWVDBCZnVFTUVsU1ZaYU82MTVjWGhxR29XZ2FRWmdncklOR1hHazF2TDBOUHJyZlZsRVU0aEpBMDdLVXZlOVhkVFJoU3BOa09wbk1wMU5WMDM0MVRHS2RMbnIxR0taNXNrMXJJYXdqaGZNMFRjZmo4V0kyKzlCLzdrTldDQitKbFlYbmVmMkxDOC96MEZya01hTEUwelNkanNlTCtmekRXdjdIUUx5UFUxbFZydXVlUDNuaXVDNkNCR0VkZVVxRTYzVVN4MG1TNUhuT0dSTUhsWFhETUMzTDh6eE4xekdmMm9jSlZ4aUc4WGFiSmtsUkZLeXFLS1d5b3BpV1pSaUdWNnRwbW9Zd1FWZ0FBUERMVUR3Q0FBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUJ3Ti96OXRySGkwcVlad3NnQUFBQUJKUlU1RXJrSmdnZz09JztcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1EYXRhLmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI3MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5mdW5jdGlvbiBmb3JtYXRJdGVtc09wdGlvbnMoaXRlbXMpIHtcXG4gICAgcmV0dXJuIGl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGl0ZW0uaWQsIGxhYmVsOiBpdGVtLmlkICsgXFxcIiAoXFxcIiArIGl0ZW0ucHJpY2UgKyBcXFwiIFxcXCIgKyBpdGVtLmN1cnJlbmN5ICsgXFxcIilcXFwiIH07XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmZvcm1hdEl0ZW1zT3B0aW9ucyA9IGZvcm1hdEl0ZW1zT3B0aW9ucztcXG5mdW5jdGlvbiBnZXRJdGVtc0Zyb21MaW5lKGxpbmVzLCBpbmRleCkge1xcbiAgICByZXR1cm4gbGluZXMuZmluZChmdW5jdGlvbiAobGluZSkge1xcbiAgICAgICAgcmV0dXJuIGxpbmUuaWQgPT09IGluZGV4O1xcbiAgICB9KS5pdGVtcztcXG59XFxuZXhwb3J0cy5nZXRJdGVtc0Zyb21MaW5lID0gZ2V0SXRlbXNGcm9tTGluZTtcXG5mdW5jdGlvbiBjYWxjdWxJdGVtQW1vdW50KGxpbmUsIGl0ZW0pIHtcXG4gICAgdmFyIGRpc2NvdW50ID0gbGluZS5kaXNjb3VudDtcXG4gICAgcmV0dXJuIHJvdW5kRGVjaW1hbChsaW5lLnF1YW50aXR5ICogaXRlbS5wcmljZSAqICgxIC0gKGRpc2NvdW50ID8gZGlzY291bnQgOiAwKSAvIDEwMCksIDIpO1xcbn1cXG5mdW5jdGlvbiBkaXNwbGF5SXRlbUFtb3VudChsaW5lKSB7XFxuICAgIGlmICghbGluZS5pdGVtKSByZXR1cm4gXFxcIjAgXFxcIiArIGxpbmUuaXRlbXNbMF0uY3VycmVuY3k7XFxuICAgIHZhciBpdGVtID0gbGluZS5pdGVtcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gbGluZS5pdGVtO1xcbiAgICB9KTtcXG4gICAgcmV0dXJuIGNhbGN1bEl0ZW1BbW91bnQobGluZSwgaXRlbSkgKyBcXFwiIFxcXCIgKyBpdGVtLmN1cnJlbmN5ICsgXFxcIiBcXFwiO1xcbn1cXG5leHBvcnRzLmRpc3BsYXlJdGVtQW1vdW50ID0gZGlzcGxheUl0ZW1BbW91bnQ7XFxuZnVuY3Rpb24gZGlzcGxheVRvdGFsQW1vdW50KGxpbmVzKSB7XFxuICAgIHZhciB0b3RhbCA9IGxpbmVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBsaW5lKSB7XFxuICAgICAgICBpZiAoIWxpbmUuaXRlbSkgcmV0dXJuIGFjYztcXG4gICAgICAgIHZhciBpdGVtID0gbGluZS5pdGVtcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT09IGxpbmUuaXRlbTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIGNhbGN1bEl0ZW1BbW91bnQobGluZSwgaXRlbSkgKyBhY2M7XFxuICAgIH0sIDApO1xcbiAgICByZXR1cm4gdG90YWwgKyBcXFwiIFxcXCIgKyBsaW5lc1swXS5pdGVtc1swXS5jdXJyZW5jeTtcXG59XFxuZXhwb3J0cy5kaXNwbGF5VG90YWxBbW91bnQgPSBkaXNwbGF5VG90YWxBbW91bnQ7XFxuZnVuY3Rpb24gcm91bmREZWNpbWFsKG51bWJlciwgcHJlY2lzaW9uKSB7XFxuICAgIHZhciB0bXAgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDIpO1xcbiAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIgKiB0bXApIC8gdG1wO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5kZWZhdWx0ID0ge1xcbiAgICBhbW91bnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbW91bnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vbnRhbnQnXFxuICAgIH0sXFxuICAgIGRlc2NyaXB0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVzY3JpcHRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlc2NyaXB0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNjb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2NvdW50ICglKScsXFxuICAgICAgICAnZnItRlInOiAnUmFiYWlzICglKSdcXG4gICAgfSxcXG4gICAgaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSRlEgSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lkZW50aWZpYW50IFJGUSdcXG4gICAgfSxcXG4gICAgaXNzdWVfZGF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lzc3VlIERhdGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RhdGUgZGUgY3LDqWF0aW9uJ1xcbiAgICB9LFxcbiAgICBpc3N1ZV90aW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXNzdWUgVGltZScsXFxuICAgICAgICAnZnItRlInOiAnSGV1cmUgZGUgY3LDqWF0aW9uJ1xcbiAgICB9LFxcbiAgICBsaW5lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGluZScsXFxuICAgICAgICAnZnItRlInOiAnTGlnbmUnXFxuICAgIH0sXFxuICAgIGxpc3RfaXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMaXN0IG9mIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdMaXN0ZSBkZXMgYXJ0aWNsZXMnXFxuICAgIH0sXFxuICAgIG5vdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb3RlJyxcXG4gICAgICAgICdmci1GUic6ICdOb3RlJ1xcbiAgICB9LFxcbiAgICBxdWFudGl0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1YW50aXR5JyxcXG4gICAgICAgICdmci1GUic6ICdRdWFudGl0w6knXFxuICAgIH0sXFxuICAgIHJmcV9pbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUkZRIGluZm8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm8gZHUgUkZRJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RfaXRlbToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhbiBpdGVtJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmV6IHVuIGFydGljbGUnXFxuICAgIH0sXFxuICAgIHRvdGFsX2Ftb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RvdGFsIGFtb3VudCcsXFxuICAgICAgICAnZnItRlInOiAnTW9udGFudCB0b3RhbCdcXG4gICAgfSxcXG4gICAgdmFsaWRhdGlvbl9jb2RlX2xhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIHZlcmlmeSB5b3VyIHZhbGlkYXRpb24gY29kZScsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgdsOpcmlmaWVyIGxlIGNvZGUgZGUgdmFsaWRhdGlvbidcXG4gICAgfVxcbn07XFxuXFxuLyoqKi8gfSlcXG4vKioqKioqLyBdKTtcIixcImJ5dGVDb250ZW50XCI6bnVsbH1dfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM4OTg5NX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUE8tQnVpbGRFbWFpbCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUE8tQnVpbGRFbWFpbFwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJCdWlsZCB0aGUgZW1haWwgbm90aWZpY2F0aW9uIHNlbnQgYnkgdGhlIEhhbmRsZVB1cmNoYXNlT3JkZXIgV29ya2Zsb3cgU3RlcFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM4OTk2OSxcInJldmlzaW9uSWRcIjpcIjE0MzIzM2Y2Zjg4NGM1Y2RjNmYyOWU4NDg3ZjhlNTFjXCIsXCJtYWluU2NyaXB0XCI6XCJpbXBvcnQgamF2YS5uZXQuVVJMRW5jb2RlclxcblxcbnA2LnBpcGVsaW5lLnB1dCAnU3ViamVjdCcsICdQbGF0Zm9ybSA2IERlbW8gQXBwIC0gUHVyY2hhc2UgT3JkZXIgdG8gcmV2aWV3J1xcblxcbnA2LnBpcGVsaW5lLnB1dCAnRnJvbScsICduby1yZXBseUBwbGF0Zm9ybTYuaW8nXFxuXFxuZGVmIGluc3RhbmNlSWQgPSBwNi5jb25maWd1cmF0aW9uLmdldChcXFwiaW5zdGFuY2UuaWRcXFwiKVxcblxcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIGl0ZW1JZHMgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG5kZWYgaXRlbVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgaXRlbUlkcylcXG5cXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmV4aXN0cyhpdGVtUGspXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoKVxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBzbHVycGVyLnBhcnNlVGV4dCh0cmFuc2FjdGlvbkluZm9Db250ZW50KVxcblxcbmRlZiB0cmFuc2FjdGlvbklkID0gdHJhbnNhY3Rpb25JbmZvLklkLnRleHQoKVxcblxcbmRlZiBwb3J0YWxCYXNlVVJMID0gJ3BvcnRhbC5wbGF0Zm9ybTYuaW8nXFxuaWYgKCdkZXYnLmVxdWFscyhpbnN0YW5jZUlkKSkge1xcbiAgICBwb3J0YWxCYXNlVVJMID0gJ2Rldi5wb3J0YWwuYW1hbHRvLmNvbSdcXG59XFxuXFxuZGVmIGh0bWxMaW5rID0gXFxcImh0dHBzOi8vJHBvcnRhbEJhc2VVUkwvIy9lZGl0LXRyYW5zYWN0aW9uLyRpbnN0YW5jZUlkL3A2X2RlbW8uVHJhbnNhY3Rpb25zL1xcXCIrVVJMRW5jb2Rlci5lbmNvZGUoJ1tcXFwiJyt0cmFuc2FjdGlvbklkKydcXFwiXScsICd1dGYtOCcpXFxucDYucGlwZWxpbmUucHV0ICdocmVmJywgaHRtbExpbmssICd0ZXh0L3BsYWluJ1xcblxcbmRlZiBkb2NOdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uQnVzaW5lc3NEb2NOdW1iZXIudGV4dCgpXFxuZGVmIHRvdGFsQW1vdW50ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09ICdUb3RhbCBBbW91bnQnfS5WYWx1ZS50ZXh0KClcXG5cXG5pZiAoZG9jTnVtYmVyID09IG51bGwpIHtcXG4gICAgZG9jTnVtYmVyID0gJydcXG59XFxuXFxuaWYgKHRvdGFsQW1vdW50ID09IG51bGwpIHtcXG4gICAgdG90YWxBbW91bnQgPSAnJ1xcbn1cXG5cXG5cXG5wNi5waXBlbGluZS5wdXQgJ2RvY051bWJlcicsIGRvY051bWJlciwgJ3RleHQvcGxhaW4nXFxucDYucGlwZWxpbmUucHV0ICd0b3RhbEFtb3VudCcsIHRvdGFsQW1vdW50LCAndGV4dC9wbGFpbidcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1Mzg5OTY5fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVQTy1IYW5kbGVBY3Rpb25SZWplY3RPcmRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uUmVqZWN0T3JkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFBPIFRyYW5zYWN0aW9uSW5mbyB1cGRhdGVzIGZvciBhIFJlamVjdGVkIE9yZGVyIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgSGFuZGxlUHVyY2hhc2VPcmRlciBXb3JrZmxvdyBTdGVwXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1MzkwMDM4LFwicmV2aXNpb25JZFwiOlwiNzM0Zjg2MDcyNzNjMzUwM2ViNzAyYzE2MTliMGUwYTVcIixcIm1haW5TY3JpcHRcIjpcImltcG9ydCBncm9vdnkuanNvbi4qXFxuaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0XFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaXRlbUlkcyA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuaWRzJ1xcblxcbmRlZiBpdGVtUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCBpdGVtSWRzKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZXhpc3RzKGl0ZW1QaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuZGVmIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxcblNpbXBsZURhdGVGb3JtYXQgdHJhbnNhY3Rpb25fc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKVxcblxcbmRlZiBmb3JtYXRlZERhdGUgPSB0cmFuc2FjdGlvbl9zZGYuZm9ybWF0KGN1cnJlbnREYXRlKVxcblxcbmRlZiByZWFzb24gPSBwNi5waXBlbGluZS5nZXQgJ3JlYXNvbidcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSAnUmVqZWN0ZWQnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlID0gcmVhc29uXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNEYXRlID0gZm9ybWF0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5cXG5kZWYgaXBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSygncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCB0cmFuc2FjdGlvbklkKVxcblxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIGlwaywgJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzOTAwMzh9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJIYW5kbGVRdW90ZVRyYW5zYWN0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiSGFuZGxlUXVvdGVUcmFuc2FjdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJIYW5kbGUgdGhlIHJlY2VwdGlvbiBvZiBhIFF1b3RlIChmbGlwIHRvIGEgUHVyY2hhc2VPcmRlciBVQkwgRG9jdW1lbnQsIGNyZWF0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nIFRyYW5zYWN0aW9uSW5mbywgc3RvcmFnZSB0byBmaWxlIHN5c3RlbSkgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBCbG9ja2NoYWluRXZlbnRIYW5kbGVyIHNjcmlwdFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDE2MSxcInJldmlzaW9uSWRcIjpcImYxNWQ3OTFkYjBkYTg4YzZkYzAwZWNmMjhlOWQwZjg4XCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGphdmEudXRpbC5VVUlEXFxuaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5pby5GaWxlVXRpbHNcXG5pbXBvcnQgamF2YS50aW1lLmZvcm1hdC5EYXRlVGltZUZvcm1hdHRlclxcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiBxdW90ZUNvbnRlbnQgPSBwNi5waXBlbGluZS5nZXQgJ3VibCdcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcihmYWxzZSwgdHJ1ZSlcXG5kZWYgcXVvdGUgPSBzbHVycGVyLnBhcnNlVGV4dChxdW90ZUNvbnRlbnQpXFxuXFxuZGVmIGluc3RhbmNlSWQgPSBwNi5jb25maWd1cmF0aW9uLmdldChcXFwiaW5zdGFuY2UuaWRcXFwiKVxcblxcbi8vIENhbGN1bGF0ZSBpc3N1ZSBkYXRlIGFuZCB0aW1lXFxuZGVmIG5vdyA9IGhlbHBlci5ub3coKVxcbmRlZiBmb3JtYXR0ZWREYXRlID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJ5eXl5TU1kZCdUJ0hIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5kZWYgaXNzdWVEYXRlID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJ5eXl5LU1NLWRkXFxcIikuZm9ybWF0KG5vdylcXG5kZWYgaXNzdWVUaW1lID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxuZGVmIHNlbGxlck5hbWUgPSBxdW90ZS5TZWxsZXJTdXBwbGllclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiBidXllck5hbWUgPSBxdW90ZS5PcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eS5QYXJ0eS5QYXJ0eU5hbWUuTmFtZS50ZXh0KClcXG5kZWYgdG90YWxBbW91bnQgPSBxdW90ZS5RdW90ZWRNb25ldGFyeVRvdGFsLlBheWFibGVBbW91bnQudGV4dCgpXFxuZGVmIHRvdGFsQ3VycmVuY3kgPSBxdW90ZS5RdW90ZWRNb25ldGFyeVRvdGFsLlBheWFibGVBbW91bnQuJ0BjdXJyZW5jeUlEJy50ZXh0KClcXG5cXG5kZWYgcXVvdGVJZCA9IHF1b3RlLklELnRleHQoKVxcbmRlZiBjb21tZW50cyA9IHF1b3RlLk5vdGUudGV4dCgpXFxuXFxuaW50IG5iTGluZXMgPSBxdW90ZS5RdW90YXRpb25MaW5lLnNpemUoKVxcblxcbmRlZiB0cmFuc2FjdGlvblR5cGUgPSAnUHVyY2hhc2VPcmRlcidcXG5kZWYgcHVyY2hhc2VPcmRlcklkID0gVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKVxcbmRlZiBzdGF0dXMgPSAnUmVjZWl2ZWQnXFxuZGVmIHN0YXR1c01lc3NhZ2UgPSAnUmVjZWl2ZWQgYnkgRGVtbyBBcHAnXFxuXFxuZGVmIHNvdXJjZVVSSSA9IFxcXCJmaWxlOi8vJFA2X0RBVEEvcmVzb3VyY2VzL2RvY3VtZW50cy9RdW90ZS9cXFwiICsgcXVvdGVJZCArIFxcXCIueG1sXFxcIlxcbmRlZiB0YXJnZXRVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUHVyY2hhc2VPcmRlci9cXFwiICsgcHVyY2hhc2VPcmRlcklkICsgXFxcIi54bWxcXFwiXFxuXFxuZGVmIG9yZGVyTGluZXMgPSAnJ1xcblxcbnF1b3RlLlF1b3RhdGlvbkxpbmUuZWFjaCB7IG15TGluZSAtPlxcblxcbiAgICBvcmRlckxpbmVzICs9IFxcXCJcXFwiXFxcIjxjYWM6T3JkZXJMaW5lPlxcbiAgICA8Y2JjOk5vdGU+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLk5vdGUudGV4dCgpKX08L2NiYzpOb3RlPlxcbiAgICA8Y2FjOkxpbmVJdGVtPlxcbiAgICAgIDxjYmM6SUQ+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLklELnRleHQoKSl9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpRdWFudGl0eSB1bml0Q29kZT1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LidAdW5pdENvZGUnLnRleHQoKSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUXVhbnRpdHkudGV4dCgpKX08L2NiYzpRdWFudGl0eT5cXG4gICAgICA8Y2JjOkxpbmVFeHRlbnNpb25BbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLkxpbmVFeHRlbnNpb25BbW91bnQuJ0BjdXJyZW5jeUlEJy50ZXh0KCkpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLkxpbmVFeHRlbnNpb25BbW91bnQudGV4dCgpKX08L2NiYzpMaW5lRXh0ZW5zaW9uQW1vdW50PlxcbiAgICAgIDxjYWM6UHJpY2U+XFxuICAgICAgICA8Y2JjOlByaWNlQW1vdW50IGN1cnJlbmN5SUQ9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5QcmljZUFtb3VudC4nQGN1cnJlbmN5SUQnLnRleHQoKSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUHJpY2UuUHJpY2VBbW91bnQudGV4dCgpKX08L2NiYzpQcmljZUFtb3VudD5cXG4gICAgICAgIDxjYmM6QmFzZVF1YW50aXR5IHVuaXRDb2RlPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUHJpY2UuQmFzZVF1YW50aXR5LidAdW5pdENvZGUnLnRleHQoKSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUHJpY2UuQmFzZVF1YW50aXR5LnRleHQoKSl9PC9jYmM6QmFzZVF1YW50aXR5PlxcbiAgICAgIDwvY2FjOlByaWNlPlxcbiAgICAgIDxjYWM6SXRlbT5cXG4gICAgICAgIDxjYmM6RGVzY3JpcHRpb24+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLkl0ZW0uRGVzY3JpcHRpb24udGV4dCgpKX08L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgIDxjYmM6TmFtZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uSXRlbS5OYW1lLnRleHQoKSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpJdGVtPlxcbiAgICA8L2NhYzpMaW5lSXRlbT5cXG4gIDwvY2FjOk9yZGVyTGluZT5cXG4gICAgXFxcIlxcXCJcXFwiXFxufVxcblxcblxcbmRlZiBvcmRlckNvbnRlbnQgPSBcXFwiXFxcIlxcXCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiIGVuY29kaW5nPVxcXCJVVEYtOFxcXCI/PlxcbjxPcmRlciB4bWxucz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6T3JkZXItMlxcXCJcXG4gIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIlxcbiAgeG1sbnM6Y2JjPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25CYXNpY0NvbXBvbmVudHMtMlxcXCI+XFxuICA8Y2JjOlVCTFZlcnNpb25JRD4yLjE8L2NiYzpVQkxWZXJzaW9uSUQ+XFxuICA8Y2JjOkN1c3RvbWl6YXRpb25JRD51cm46d3d3LmNlbmJpaS5ldTp0cmFuc2FjdGlvbjpiaWljb3JldHJkbTAwMTp2ZXIxLjA8L2NiYzpDdXN0b21pemF0aW9uSUQ+XFxuICA8Y2JjOlByb2ZpbGVJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiQklJXFxcIiBzY2hlbWVJRD1cXFwiUHJvZmlsZVxcXCJcXG4gICAgPnVybjp3d3cuY2VuYmlpLmV1OnByb2ZpbGU6QklJMDE6dmVyMS4wPC9jYmM6UHJvZmlsZUlEPlxcbiAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChwdXJjaGFzZU9yZGVySWQpfTwvY2JjOklEPlxcbiAgPGNiYzpJc3N1ZURhdGU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVEYXRlKX08L2NiYzpJc3N1ZURhdGU+XFxuICAgPGNiYzpJc3N1ZVRpbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICA8Y2JjOk5vdGU+SW5mb3JtYXRpb24gdGV4dCBmb3IgdGhlIHdob2xlIG9yZGVyPC9jYmM6Tm90ZT5cXG4gIDxjYmM6RG9jdW1lbnRDdXJyZW5jeUNvZGU+U0VLPC9jYmM6RG9jdW1lbnRDdXJyZW5jeUNvZGU+XFxuICA8Y2JjOkFjY291bnRpbmdDb3N0Q29kZT5Qcm9qZWN0MTIzPC9jYmM6QWNjb3VudGluZ0Nvc3RDb2RlPlxcbiAgPGNhYzpRdW90YXRpb25Eb2N1bWVudFJlZmVyZW5jZT5cXG4gICAgPGNiYzpJRD5RdW90ZUlEMTIzPC9jYmM6SUQ+XFxuICA8L2NhYzpRdW90YXRpb25Eb2N1bWVudFJlZmVyZW5jZT5cXG4gIDxjYWM6T3JkZXJEb2N1bWVudFJlZmVyZW5jZT5cXG4gICAgPGNiYzpJRD5SamVjdGVkT3JkZXJJRDEyMzwvY2JjOklEPlxcbiAgPC9jYWM6T3JkZXJEb2N1bWVudFJlZmVyZW5jZT5cXG4gIDxjYWM6T3JpZ2luYXRvckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPk1BRk88L2NiYzpJRD5cXG4gIDwvY2FjOk9yaWdpbmF0b3JEb2N1bWVudFJlZmVyZW5jZT5cXG4gIDxjYWM6Q29udHJhY3Q+XFxuICAgIDxjYmM6SUQ+MzQzMjI8L2NiYzpJRD5cXG4gICAgPGNiYzpDb250cmFjdFR5cGU+RnJhbWV3b3JrQWdyZWVtZW50SUQxMjM8L2NiYzpDb250cmFjdFR5cGU+XFxuICA8L2NhYzpDb250cmFjdD5cXG4gIDxjYWM6QnV5ZXJDdXN0b21lclBhcnR5PlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYmM6RW5kcG9pbnRJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+NzMwMDA3MjMxMTExNTwvY2JjOkVuZHBvaW50SUQ+XFxuICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+NzMwMDA3MDAxMTExNTwvY2JjOklEPlxcbiAgICAgIDwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgPGNiYzpJRD5QYXJ0eUlEMTIzPC9jYmM6SUQ+XFxuICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICA8Y2FjOlBhcnR5TmFtZT5cXG4gICAgICAgIDxjYmM6TmFtZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChidXllck5hbWUpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjEyMzQ1Njc4OTAxMjM8L2NiYzpJRD5cXG4gICAgICAgIDxjYmM6UG9zdGJveD5Qb0JveDEyMzwvY2JjOlBvc3Rib3g+XFxuICAgICAgICA8Y2JjOlN0cmVldE5hbWU+UsOlZGh1c2dhdGFuPC9jYmM6U3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QWRkaXRpb25hbFN0cmVldE5hbWU+Mm5kIGZsb29yPC9jYmM6QWRkaXRpb25hbFN0cmVldE5hbWU+XFxuICAgICAgICA8Y2JjOkJ1aWxkaW5nTnVtYmVyPjU8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6RGVwYXJ0bWVudD5QdXJjaGFzaW5nIGRlcGFydG1lbnQ8L2NiYzpEZXBhcnRtZW50PlxcbiAgICAgICAgPGNiYzpDaXR5TmFtZT5TdG9ja2hvbG08L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgIDxjYmM6UG9zdGFsWm9uZT4xMTAwMDwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+UmVnaW9uWDwvY2JjOkNvdW50cnlTdWJlbnRpdHk+XFxuICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPlNFPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDxjYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgICAgIDxjYmM6UmVnaXN0cmF0aW9uTmFtZT5Kb2huc3NvbnMgQnlnZ3Zhcm9yIEFCPC9jYmM6UmVnaXN0cmF0aW9uTmFtZT5cXG4gICAgICAgIDxjYmM6Q29tcGFueUlEIHNjaGVtZUlEPVxcXCJTRTpPUkdOUlxcXCI+NTUzMjMzMTE4MzwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICAgIDxjYWM6UmVnaXN0cmF0aW9uQWRkcmVzcz5cXG4gICAgICAgICAgPGNiYzpDaXR5TmFtZT5TdG9ja2hvbG08L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PlJlZ2lvblg8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgIDwvY2FjOkNvdW50cnk+XFxuICAgICAgICA8L2NhYzpSZWdpc3RyYXRpb25BZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5TGVnYWxFbnRpdHk+XFxuICAgIDwvY2FjOlBhcnR5PlxcbiAgPC9jYWM6QnV5ZXJDdXN0b21lclBhcnR5PlxcbiAgPGNhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYmM6RW5kcG9pbnRJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+NzMwMjM0NzIzMTExMTwvY2JjOkVuZHBvaW50SUQ+XFxuICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgPGNiYzpJRD5TZWxsZXJQYXJ0eUlEMTIzPC9jYmM6SUQ+XFxuICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICA8Y2FjOlBhcnR5TmFtZT5cXG4gICAgICAgIDxjYmM6TmFtZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChzZWxsZXJOYW1lKX08L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOlBhcnR5TmFtZT5cXG4gICAgICA8Y2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj4wOTg3NjU0MzIxMTIzPC9jYmM6SUQ+XFxuICAgICAgICA8Y2JjOlBvc3Rib3g+MzIxPC9jYmM6UG9zdGJveD5cXG4gICAgICAgIDxjYmM6U3RyZWV0TmFtZT5LdW5nc2dhdGFuPC9jYmM6U3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QWRkaXRpb25hbFN0cmVldE5hbWU+c3VpdGUxMjwvY2JjOkFkZGl0aW9uYWxTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj4yMjwvY2JjOkJ1aWxkaW5nTnVtYmVyPlxcbiAgICAgICAgPGNiYzpEZXBhcnRtZW50PlNhbGVzIGRlcGFydG1lbnQ8L2NiYzpEZXBhcnRtZW50PlxcbiAgICAgICAgPGNiYzpDaXR5TmFtZT5TdG9ja2hvbG08L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgIDxjYmM6UG9zdGFsWm9uZT4xMTAwMDwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+UmVnaW9uWDwvY2JjOkNvdW50cnlTdWJlbnRpdHk+XFxuICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPlNFPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDxjYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgICAgIDxjYmM6UmVnaXN0cmF0aW9uTmFtZT5Nb2Rlcm5hIFByb2R1a3RlciBBQjwvY2JjOlJlZ2lzdHJhdGlvbk5hbWU+XFxuICAgICAgICA8Y2JjOkNvbXBhbnlJRCBzY2hlbWVJRD1cXFwiU0U6T1JHTlJcXFwiPjU1MzIzMzIyODM8L2NiYzpDb21wYW55SUQ+XFxuICAgICAgICA8Y2FjOlJlZ2lzdHJhdGlvbkFkZHJlc3M+XFxuICAgICAgICAgIDxjYmM6Q2l0eU5hbWU+U3RvY2tob2xtPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5SZWdpb25YPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgICAgPGNhYzpDb3VudHJ5PlxcbiAgICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPlNFPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgICAgPC9jYWM6UmVnaXN0cmF0aW9uQWRkcmVzcz5cXG4gICAgICA8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICA8L2NhYzpQYXJ0eT5cXG4gIDwvY2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICA8Y2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjA5ODc2NzgzMjExMjM8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPk1vZGVybmEgUHJvZHVrdGVyIEFCPC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgIDwvY2FjOlBhcnR5PlxcbiAgPC9jYWM6T3JpZ2luYXRvckN1c3RvbWVyUGFydHk+XFxuICA8Y2FjOkFudGljaXBhdGVkTW9uZXRhcnlUb3RhbD5cXG4gICAgPGNiYzpQYXlhYmxlQW1vdW50IGN1cnJlbmN5SUQgPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKHRvdGFsQW1vdW50KX08L2NiYzpQYXlhYmxlQW1vdW50PlxcbiAgPC9jYWM6QW50aWNpcGF0ZWRNb25ldGFyeVRvdGFsPlxcbiAgJHtvcmRlckxpbmVzfVxcbjwvT3JkZXI+XFxuXFxuXFxcIlxcXCJcXFwiXFxuXFxuXFxuZGVmIHRhcmdldEZpbGUgPSBwNi51cmkuZmlsZUZyb21VcmwodGFyZ2V0VVJJKVxcblxcbkZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZSh0YXJnZXRGaWxlLCBvcmRlckNvbnRlbnQsJ1VURi04JylcXG5cXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gXFxcIlxcXCJcXFwiPFRyYW5zYWN0aW9uSW5mbz5cXG4gICAgPElkPiR7cHVyY2hhc2VPcmRlcklkfTwvSWQ+XFxuICAgIDxDcmVhdGlvbkRhdGU+JHtmb3JtYXR0ZWREYXRlfTwvQ3JlYXRpb25EYXRlPlxcbiAgICA8VHJhbnNhY3Rpb25UeXBlPlB1cmNoYXNlIE9yZGVyPC9UcmFuc2FjdGlvblR5cGU+XFxuICAgIDxUcmFuc2FjdGlvbk51bWJlcj4ke3B1cmNoYXNlT3JkZXJJZH08L1RyYW5zYWN0aW9uTnVtYmVyPlxcbiAgICA8U291cmNlU3lzdGVtPkRlbW8gQXBwPC9Tb3VyY2VTeXN0ZW0+XFxuICAgIDxUYXJnZXRTeXN0ZW0vPlxcbiAgICA8U2VuZGVyLz5cXG4gICAgPEZpbmFsUmVjaXBpZW50PlN1cHBsaWVyPC9GaW5hbFJlY2lwaWVudD5cXG4gICAgPFRyYW5zZmVyUHJvdG9jb2w+QmxvY2tjaGFpbjwvVHJhbnNmZXJQcm90b2NvbD5cXG4gICAgPERlbGl2ZXJlZFZpYT5BbWFsdG88L0RlbGl2ZXJlZFZpYT5cXG4gICAgPFNvdXJjZURvY3VtZW50Rm9ybWF0PlVCTDwvU291cmNlRG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxTb3VyY2VEb2N1bWVudFVSST4ke3NvdXJjZVVSSX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1Bpdm90RG9jdW1lbnRVUkk+XFxuICAgIDxQaXZvdERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1Bpdm90RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRhcmdldERvY3VtZW50Rm9ybWF0PlVCTDwvVGFyZ2V0RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxUYXJnZXREb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1RhcmdldERvY3VtZW50VVJJPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRlY2huaWNhbFN0YXR1c0NvZGU+JHtzdGF0dXN9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3N0YXR1c01lc3NhZ2V9PC9UZWNobmljYWxTdGF0dXNNZXNzYWdlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9UZWNobmljYWxTdGF0dXNEYXRlPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0NvZGUvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0RhdGUvPlxcbiAgICA8RmxhZ3M+e1xcXCJhYXZpc2libGVcXFwiOiB0cnVlfTwvRmxhZ3M+XFxuICAgIDxPcmdQYXRoPi8ke2luc3RhbmNlSWR9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkJ1eWVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoYnV5ZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwodG90YWxBbW91bnQpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoJ3A2X2RlbW8uVHJhbnNhY3Rpb25JbmZvJywgcHVyY2hhc2VPcmRlcklkKVxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZSh0cmFuc2FjdGlvbkluZm8sICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIGlwaywgJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzOTAxNjF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25EZWNsaW5lIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uRGVjbGluZVwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJIYW5kbGUgUkZRIFRyYW5zYWN0aW9uSW5mbyB1cGRhdGUgZm9yIERlY2xpbmVkIFJGUSAtIFNjcmlwdCBjYWxsZWQgYnkgdGhlIEhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb24gV29ya2Zsb3cgU3RlcFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDE3MyxcInJldmlzaW9uSWRcIjpcIjE4YzFkZDRlYjE0YjU2NTg3M2VjNzg1ZDhmMGIzYmRkXCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5pbXBvcnQgamF2YS51dGlsLlVVSURcXG5cXG5cXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiByZnFJZCA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuaWRzJ1xcbmRlZiByZWFzb24gPSBwNi5waXBlbGluZS5nZXQgJ3JlYXNvbidcXG5cXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuXFxuLy8gRmV0Y2ggdGhlIFJGUSB0cmFuc2FjdGlvbiBpbmZvXFxuZGVmIHJmcVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgcmZxSWQpXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5nZXQocmZxUGspXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoKVxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBzbHVycGVyLnBhcnNlVGV4dCh0cmFuc2FjdGlvbkluZm9Db250ZW50KVxcblxcbi8vIERlY2xpbmUgUkZRIGxvY2FsbHlcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gJ0RlY2xpbmVkJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZSA9IHJlYXNvblxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZSA9ICdIYW5kbGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG5wNi50cmFuc2FjdGlvbi5zYXZlKGdyb292eS54bWwuWG1sVXRpbC5zZXJpYWxpemUodHJhbnNhY3Rpb25JbmZvKSwgJ3A2X2RlbW8uVHJhbnNhY3Rpb25JbmZvJywgcmZxUGspXFxuXFxuLy8gRGVjbGluZSBSRlEgb24gdGhlIGJsb2NrY2hhaW5cXG5kZWYgZGVjbGluZUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5oZWxwZXIuZGVjbGluZVJGUShkZWNsaW5lSWQsIFVVSUQuZnJvbVN0cmluZyhyZnFJZCksIG5vdylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1MzkwMTczfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVQTy1IYW5kbGVBY3Rpb25BY2NlcHRPcmRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFBPIFRyYW5zYWN0aW9uSW5mbyB1cGRhdGVzIGZvciBhbiBBY2NlcHRlZCBPcmRlciAtIFNjcmlwdCBjYWxsZWQgYnkgdGhlIEhhbmRsZVB1cmNoYXNlT3JkZXIgV29ya2Zsb3cgU3RlcFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDE4NSxcInJldmlzaW9uSWRcIjpcIjMyNDRkMTg5NTk4NTU0YzI0ZDViYTQ3YzUyMGQyNjdlXCIsXCJtYWluU2NyaXB0XCI6XCJpbXBvcnQgZ3Jvb3Z5Lmpzb24uKlxcbmltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdFxcblxcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIGl0ZW1JZHMgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG5kZWYgaXRlbVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgaXRlbUlkcylcXG5cXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmV4aXN0cyhpdGVtUGspXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoKVxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBzbHVycGVyLnBhcnNlVGV4dCh0cmFuc2FjdGlvbkluZm9Db250ZW50KVxcblxcbmRlZiBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKClcXG5TaW1wbGVEYXRlRm9ybWF0IHRyYW5zYWN0aW9uX3NkZiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KFxcXCJ5eXl5TU1kZCdUJ0hIOm1tOnNzXFxcIilcXG5cXG5kZWYgZm9ybWF0ZWREYXRlID0gdHJhbnNhY3Rpb25fc2RmLmZvcm1hdChjdXJyZW50RGF0ZSlcXG5cXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSAnQWNjZXB0ZWQnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZSA9ICdIYW5kbGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IGZvcm1hdGVkRGF0ZVxcblxcblxcbmRlZiBzYWxlc29yZGVybnVtYmVyID0gcDYucGlwZWxpbmUuZ2V0ICdzYWxlc29yZGVybnVtYmVyJ1xcblxcbmlmIChzYWxlc29yZGVybnVtYmVyIT1udWxsICYmICEnJy5lcXVhbHMoc2FsZXNvcmRlcm51bWJlcikpIHtcXG4gICAgXFxuICAgIGludCBuYktleVZhbHVlcyA9IHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5zaXplKClcXG4gICAgdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlW25iS2V5VmFsdWVzLTFdICsge1xcbiAgICAgICAgICAgICBLZXlWYWx1ZSB7XFxuICAgICAgICAgICAgS2V5KFxcXCJTYWxlcyBPcmRlciBOdW1iZXJcXFwiKVxcbiAgICAgICAgICAgIFZhbHVlKHNhbGVzb3JkZXJudW1iZXIpXFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXFxuZGVmIHRyYW5zYWN0aW9uSWQgPSB0cmFuc2FjdGlvbkluZm8uSWQudGV4dCgpXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoJ3A2X2RlbW8uVHJhbnNhY3Rpb25JbmZvJywgdHJhbnNhY3Rpb25JZClcXG5cXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1MzkwMTg1fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiQmxvY2tjaGFpbkV2ZW50SGFuZGxlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkJsb2NrY2hhaW5FdmVudEhhbmRsZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIGV2ZW50cyByZWNlaXZlZCBmcm9tIHRoZSBibG9ja2NoYWluXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1MzkwMTk2LFwicmV2aXNpb25JZFwiOlwiNmFlYmVkNWIzZjdhMzFmMTc2MmI4M2Q4ZjMyZGVlMTJcIixcIm1haW5TY3JpcHRcIjpcIi8qKlxcbiAqIFlvdSBjYW4gY2FsbCBhbm90aGVyIHNjcmlwdCBieSB1c2luZyAnSW5jbHVkZScgdGFnc1xcbiAqIFxcbiAqIEBpbmNsdWRlIFJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcXG4gKi9cXG5cXG5pbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLkRlc2VyaWFsaXphdGlvbkZlYXR1cmVcXG5pbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlclxcbmltcG9ydCBvcmcud2ViM2oucHJvdG9jb2wuY29yZS5tZXRob2RzLnJlc3BvbnNlLkxvZ1xcblxcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiBtYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7XFxubWFwcGVyLmNvbmZpZ3VyZShEZXNlcmlhbGl6YXRpb25GZWF0dXJlLkZBSUxfT05fVU5LTk9XTl9QUk9QRVJUSUVTLCBmYWxzZSk7XFxuXFxuZGVmIGV0aExvZyA9IG1hcHBlci5yZWFkZXJGb3IoTG9nLmNsYXNzKS5yZWFkVmFsdWUocDYucGlwZWxpbmUuZ2V0KCdib2R5JykpXFxuZGVmIHRvcGljcyA9IGV0aExvZy5nZXRUb3BpY3MoKVxcbmRlZiBldmVudEhhc2ggPSB0b3BpY3NbMF1cXG5kZWYgZGF0YSA9IGV0aExvZy5nZXREYXRhKClcXG5cXG5pZiAoZXZlbnRIYXNoID09IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIuUkZRUmVjZWl2ZWRFdmVudEhhc2gpIHtcXG4gICAgZGVmIChyZnFJZCwgaXNzdWVkQXQsIHVibCkgPSBoZWxwZXIucmVhZFJGUVJlY2VpdmVkRXZlbnQodG9waWNzLCBkYXRhKVxcblxcbiAgICBwNi5waXBlbGluZS5wdXQoXFxcInVibFxcXCIsIHVibClcXG4gICAgcDYuc2NyaXB0LmNhbGwgJ3A2X2RlbW8uUmVjZWl2ZVJGUVRyYW5zYWN0aW9uJ1xcbn1cXG5lbHNlIGlmIChldmVudEhhc2ggPT0gUkZRU21hcnRDb250cmFjdEhlbHBlci5SRlFEZWNsaW5lZEV2ZW50SGFzaCkge1xcbiAgICBkZWYgKHN1cHBsaWVyLCByZnFJZCwgcXVvdGVJZCwgaXNzdWVkQXQpID0gaGVscGVyLnJlYWRSRlFEZWNsaW5lZEV2ZW50KHRvcGljcywgZGF0YSlcXG5cXG4gICAgbG9nLmluZm8gXFxcIlJGUSBcXFwiICsgcmZxSWQgKyBcXFwiIHdhcyBkZWNsaW5lZC5cXFwiXFxufVxcbmVsc2UgaWYgKGV2ZW50SGFzaCA9PSBSRlFTbWFydENvbnRyYWN0SGVscGVyLlF1b3RlUmVjZWl2ZWRFdmVudEhhc2gpIHtcXG4gICAgZGVmIChzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0LCB1YmwpID0gaGVscGVyLnJlYWRRdW90ZVJlY2VpdmVkRXZlbnQodG9waWNzLCBkYXRhKVxcblxcbiAgICBwNi5waXBlbGluZS5wdXQoXFxcInVibFxcXCIsIHVibClcXG4gICAgcDYuc2NyaXB0LmNhbGwgJ3A2X2RlbW8uSGFuZGxlUXVvdGVUcmFuc2FjdGlvbidcXG59XFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM5MDE5Nn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvblByb3ZpZGVRdW90ZSIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvblByb3ZpZGVRdW90ZVwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJIYW5kbGUgUkZRIFRyYW5zYWN0aW9uSW5mbyB1cGRhdGUgYW5kIFF1b3RlIGNyZWF0aW9uIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgSGFuZGxlUmVxdWVzdEZvclF1b3RhdGlvbiBXb3JrZmxvdyBTdGVwXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1MzkwMjA3LFwicmV2aXNpb25JZFwiOlwiYWUxYzIwMTQxZTllMTk3OTVmNTY0MjI2YTIxOWU0NjFcIixcIm1haW5TY3JpcHRcIjpcIi8qKlxcbiAqIFlvdSBjYW4gY2FsbCBhbm90aGVyIHNjcmlwdCBieSB1c2luZyAnSW5jbHVkZScgdGFnc1xcbiAqIFxcbiAqIEBpbmNsdWRlIFJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcXG4gKi9cXG5cXG5pbXBvcnQgZ3Jvb3Z5Lmpzb24uKlxcbmltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzXFxuXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWxcXG5pbXBvcnQgamF2YS50ZXh0LkRlY2ltYWxGb3JtYXRcXG5cXG5cXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG5kZWYgeG1sID0gcDYucGlwZWxpbmUuZ2V0WG1sICd4bWwnXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgcmZxSWQgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG4vLyBGZXRjaCBSRlEgZnJvbSBkYXRhYmFzZVxcbmRlZiByZnFQayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIHJmcUlkKVxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZ2V0KHJmcVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG4vLyBDYWxjdWxhdGUgaXNzdWUgZGF0ZSBhbmQgdGltZVxcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuZGVmIGlzc3VlRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eS1NTS1kZFxcXCIpLmZvcm1hdChub3cpXFxuZGVmIGlzc3VlVGltZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwiSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcblxcbi8vIFVwZGF0ZSB0aGUgUkZRXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gJ1F1b3RlIHByb3ZpZGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNEYXRlID0gZm9ybWF0dGVkRGF0ZVxcblxcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNDb2RlID0gJ0hhbmRsZWQnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c01lc3NhZ2UgPSAnJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNEYXRlID0gZm9ybWF0dGVkRGF0ZVxcblxcbmRlZiBzcmNGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKCB0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpKVxcblxcblN0cmluZyByZnFDb250ZW50ID0gRmlsZVV0aWxzLnJlYWRGaWxlVG9TdHJpbmcoc3JjRmlsZSlcXG5kZWYgcmZxID0gc2x1cnBlci5wYXJzZVRleHQocmZxQ29udGVudClcXG5cXG5kZWYgc2VsbGVyTmFtZSA9IHJmcS5TZWxsZXJTdXBwbGllclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiBidXllck5hbWUgPSByZnEuT3JpZ2luYXRvckN1c3RvbWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuZGVmIHJmcUlzc3VlRGF0ZSA9IHJmcS5Jc3N1ZURhdGUudGV4dCgpXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHJmcVBrKVxcblxcbmRlZiBsaW5lc0NvbnRlbnQgPSBwNi5waXBlbGluZS5nZXQgJ2xpbmVzJ1xcblxcbi8vIENyZWF0ZSBRdW90ZSBkb2N1bWVudFxcblxcbkpzb25TbHVycGVyIGpTbHVycGVyID0gbmV3IEpzb25TbHVycGVyKClcXG5kZWYgbXlMaW5lcyA9IGpTbHVycGVyLnBhcnNlVGV4dChsaW5lc0NvbnRlbnQpXFxuXFxuRGVjaW1hbEZvcm1hdCB1YmxfZGYgPSBuZXcgRGVjaW1hbEZvcm1hdChcXFwiIzAuMDBcXFwiKVxcblxcbmRlZiBxdW90YXRpb25MaW5lcyA9ICcnXFxuXFxuZGVmIHRvdGFsQW1vdW50ID0gbmV3IEJpZ0RlY2ltYWwoMClcXG5kZWYgdG90YWxDdXJyZW5jeSA9ICcnXFxuXFxuZGVmIHF1b3RlSWQgPSBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpXFxuXFxucmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLmVhY2ggeyBteUxpbmUgLT4gXFxuXFxuICAgIGRlZiBpbnB1dExpbmUgPSBteUxpbmVzLmZpbmQgeyBpdC5pZCA9PSBteUxpbmUuSUQudGV4dCgpIH1cXG4gICAgZGVmIGl0ZW1EZXRhaWwgPSBpbnB1dExpbmUuaXRlbXMuZmluZCB7IGl0LmlkID09IGlucHV0TGluZS5pdGVtIH1cXG4gICAgXFxuICAgIEJpZ0RlY2ltYWwgdW5pdFByaWNlID0gbmV3IEJpZ0RlY2ltYWwoaXRlbURldGFpbC5wcmljZSlcXG4gICAgXFxuICAgIGlmIChpbnB1dExpbmUuZGlzY291bnQhPW51bGwgJiYgIScnLmVxdWFscyhpbnB1dExpbmUuZGlzY291bnQpICYmICEnMCcuZXF1YWxzKGlucHV0TGluZS5kaXNjb3VudCkpIHtcXG4gICAgICAgIEJpZ0RlY2ltYWwgZGlzY291bnQgPSAgbmV3IEJpZ0RlY2ltYWwoMTAwKS5cXHRzdWJ0cmFjdChuZXcgQmlnRGVjaW1hbChpbnB1dExpbmUuZGlzY291bnQpKVxcbiAgICAgICAgdW5pdFByaWNlID0gdW5pdFByaWNlLm11bHRpcGx5KGRpc2NvdW50KS5kaXZpZGUobmV3IEJpZ0RlY2ltYWwoMTAwKSlcXG4gICAgfVxcbiAgICBcXG4gICAgZGVmIGxpbmVRdHkgPSBuZXcgQmlnRGVjaW1hbChteUxpbmUuTGluZUl0ZW0uUXVhbnRpdHkudGV4dCgpKVxcbiAgICBcXG4gICAgZGVmIGxpbmVBbW1vdW50ID0gbGluZVF0eS5tdWx0aXBseSh1bml0UHJpY2UpXFxuICAgIFxcbiAgICB0b3RhbEFtb3VudCA9IHRvdGFsQW1vdW50LmFkZChsaW5lQW1tb3VudClcXG4gICAgdG90YWxDdXJyZW5jeSA9IGl0ZW1EZXRhaWwuY3VycmVuY3lcXG4gICAgXFxuICAgIHF1b3RhdGlvbkxpbmVzICs9ICBcXFwiXFxcIlxcXCI8Y2FjOlF1b3RhdGlvbkxpbmU+XFxuICAgICAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuSUQudGV4dCgpKX08L2NiYzpJRD5cXG4gICAgICA8Y2JjOk5vdGU+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLk5vdGUudGV4dCgpKX08L2NiYzpOb3RlPlxcbiAgICAgIDxjYWM6TGluZUl0ZW0+XFxuICAgICAgICA8Y2JjOklEPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5JRC50ZXh0KCkpfTwvY2JjOklEPlxcbiAgICAgICAgPGNiYzpRdWFudGl0eSB1bml0Q29kZT1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LidAdW5pdENvZGUnLnRleHQoKSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUXVhbnRpdHkudGV4dCgpKX08L2NiYzpRdWFudGl0eT5cXG4gICAgICAgIDxjYmM6TGluZUV4dGVuc2lvbkFtb3VudCBjdXJyZW5jeUlEPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChpdGVtRGV0YWlsLmN1cnJlbmN5KX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKHVibF9kZi5mb3JtYXQobGluZUFtbW91bnQpKX08L2NiYzpMaW5lRXh0ZW5zaW9uQW1vdW50PlxcbiAgICAgICAgPGNhYzpQcmljZT5cXG4gICAgICAgICAgPGNiYzpQcmljZUFtb3VudCBjdXJyZW5jeUlEPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChpdGVtRGV0YWlsLmN1cnJlbmN5KX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKHVibF9kZi5mb3JtYXQodW5pdFByaWNlKSl9PC9jYmM6UHJpY2VBbW91bnQ+XFxuICAgICAgICAgIDxjYmM6QmFzZVF1YW50aXR5IHVuaXRDb2RlPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChpdGVtRGV0YWlsLnVvbSl9XFxcIj4xPC9jYmM6QmFzZVF1YW50aXR5PlxcbiAgICAgICAgPC9jYWM6UHJpY2U+XFxuICAgICAgICA8Y2FjOkl0ZW0+XFxuICAgICAgICAgIDxjYmM6RGVzY3JpcHRpb24+JHtwNi51dGlscy5lc2NhcGVYbWwoaW5wdXRMaW5lLml0ZW0pfTwvY2JjOkRlc2NyaXB0aW9uPlxcbiAgICAgICAgICA8Y2JjOk5hbWU+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLkl0ZW0uTmFtZS50ZXh0KCkpfTwvY2JjOk5hbWU+XFxuICAgICAgICA8L2NhYzpJdGVtPlxcbiAgICAgIDwvY2FjOkxpbmVJdGVtPlxcbiAgICA8L2NhYzpRdW90YXRpb25MaW5lPlxcbiAgICBcXFwiXFxcIlxcXCJcXG59XFxuXFxuZGVmIHF1b3RlVUJMID0gXFxcIlxcXCJcXFwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIiBlbmNvZGluZz1cXFwiVVRGLThcXFwiPz5cXG48UXVvdGF0aW9uIHhtbG5zPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpRdW90YXRpb24tMlxcXCIgeG1sbnM6Y2FjPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25BZ2dyZWdhdGVDb21wb25lbnRzLTJcXFwiIHhtbG5zOmNiYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQmFzaWNDb21wb25lbnRzLTJcXFwiPlxcbiAgPGNiYzpVQkxWZXJzaW9uSUQ+Mi4wPC9jYmM6VUJMVmVyc2lvbklEPlxcbiAgPGNiYzpDdXN0b21pemF0aW9uSUQ+T0lPVUJMLTIuMTwvY2JjOkN1c3RvbWl6YXRpb25JRD5cXG4gIDxjYmM6UHJvZmlsZUlEIHNjaGVtZUFnZW5jeUlEPVxcXCIzMjBcXFwiIHNjaGVtZUlEPVxcXCJ1cm46b2lvdWJsOmlkOnByb2ZpbGVpZC0xLjJcXFwiPlByb2N1cmVtZW50LVF1b1NpbS0xLjA8L2NiYzpQcm9maWxlSUQ+XFxuICA8Y2JjOklEPiR7cDYudXRpbHMuZXNjYXBlWG1sKHF1b3RlSWQpfTwvY2JjOklEPlxcbiAgPGNiYzpDb3B5SW5kaWNhdG9yPmZhbHNlPC9jYmM6Q29weUluZGljYXRvcj5cXG4gIDxjYmM6VVVJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChxdW90ZUlkKX08L2NiYzpVVUlEPlxcbiAgPGNiYzpJc3N1ZURhdGU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVEYXRlKX08L2NiYzpJc3N1ZURhdGU+XFxuICA8Y2JjOklzc3VlVGltZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZVRpbWUpfTwvY2JjOklzc3VlVGltZT5cXG4gIDxjYmM6Tm90ZSBsYW5ndWFnZUlEPVxcXCJkYS1ka1xcXCI+QmVzdGlsbGluZyBhZiBjb21wdXRlcmU8L2NiYzpOb3RlPlxcbiAgPGNhYzpSZXF1ZXN0Rm9yUXVvdGF0aW9uRG9jdW1lbnRSZWZlcmVuY2U+XFxuICAgIDxjYmM6SUQ+Rzg2N0I8L2NiYzpJRD5cXG5cXHQ8Y2JjOlVVSUQ+JHtwNi51dGlscy5lc2NhcGVYbWwocmZxSWQpfTwvY2JjOlVVSUQ+XFxuXFx0PGNiYzpJc3N1ZURhdGU+JHtwNi51dGlscy5lc2NhcGVYbWwocmZxSXNzdWVEYXRlKX08L2NiYzpJc3N1ZURhdGU+XFxuICA8L2NhYzpSZXF1ZXN0Rm9yUXVvdGF0aW9uRG9jdW1lbnRSZWZlcmVuY2U+XFxuICA8Y2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgIDxjYmM6Q3VzdG9tZXJBc3NpZ25lZEFjY291bnRJRD5MRVYwMDEyMzwvY2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNiYzpFbmRwb2ludElEIHNjaGVtZUlEPVxcXCJESzpDVlJcXFwiPkRLMTgyOTY3OTk8L2NiYzpFbmRwb2ludElEPlxcbiAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+REsxODI5Njc5OTwvY2JjOklEPlxcbiAgICAgIDwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICA8Y2JjOk5hbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgPGNiYzpBZGRyZXNzRm9ybWF0Q29kZSBsaXN0QWdlbmN5SUQ9XFxcIjMyMFxcXCIgbGlzdElEPVxcXCJ1cm46b2lvdWJsOmNvZGVsaXN0OmFkZHJlc3Nmb3JtYXRjb2RlLTEuMVxcXCI+U3RydWN0dXJlZERLPC9jYmM6QWRkcmVzc0Zvcm1hdENvZGU+XFxuICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QXJuZSBKYWNvYnNlbnMgQWxsw6k8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj4xNTwvY2JjOkJ1aWxkaW5nTnVtYmVyPlxcbiAgICAgICAgPGNiYzpDaXR5TmFtZT5Lw7hiZW5oYXZuIFM8L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgIDxjYmM6UG9zdGFsWm9uZT4yMzAwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+REs8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPkRlbGNvbXB1dGVyIEEvUzwvY2JjOlJlZ2lzdHJhdGlvbk5hbWU+XFxuICAgICAgICA8Y2JjOkNvbXBhbnlJRCBzY2hlbWVJRD1cXFwiREs6Q1ZSXFxcIj4xODI5Njc5OTwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICA8L2NhYzpQYXJ0eT5cXG4gIDwvY2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICA8Y2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYmM6RW5kcG9pbnRJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+NTc5ODAwMDQxNjYwNDwvY2JjOkVuZHBvaW50SUQ+XFxuICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+NTc5ODAwMDQxNjYwNDwvY2JjOklEPlxcbiAgICAgIDwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICA8Y2JjOk5hbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoYnV5ZXJOYW1lKX08L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOlBhcnR5TmFtZT5cXG4gICAgICA8Y2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgICA8Y2JjOkFkZHJlc3NGb3JtYXRDb2RlIGxpc3RBZ2VuY3lJRD1cXFwiMzIwXFxcIiBsaXN0SUQ9XFxcInVybjpvaW91Ymw6Y29kZWxpc3Q6YWRkcmVzc2Zvcm1hdGNvZGUtMS4xXFxcIj5TdHJ1Y3R1cmVkREs8L2NiYzpBZGRyZXNzRm9ybWF0Q29kZT5cXG4gICAgICAgIDxjYmM6U3RyZWV0TmFtZT5CZXJuc3RvcmZmc3ZlajwvY2JjOlN0cmVldE5hbWU+XFxuICAgICAgICA8Y2JjOkJ1aWxkaW5nTnVtYmVyPjE2MTwvY2JjOkJ1aWxkaW5nTnVtYmVyPlxcbiAgICAgICAgPGNiYzpDaXR5TmFtZT5DaGFybG90dGVubHVuZDwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgPGNiYzpQb3N0YWxab25lPjI5MjA8L2NiYzpQb3N0YWxab25lPlxcbiAgICAgICAgPGNhYzpDb3VudHJ5PlxcbiAgICAgICAgICA8Y2JjOklkZW50aWZpY2F0aW9uQ29kZT5ESzwvY2JjOklkZW50aWZpY2F0aW9uQ29kZT5cXG4gICAgICAgIDwvY2FjOkNvdW50cnk+XFxuICAgICAgPC9jYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICA8Y2FjOlBhcnR5TGVnYWxFbnRpdHk+XFxuICAgICAgICA8Y2JjOlJlZ2lzdHJhdGlvbk5hbWU+R2VudG9mdGUgS29tbXVuZTwvY2JjOlJlZ2lzdHJhdGlvbk5hbWU+XFxuICAgICAgICA8Y2JjOkNvbXBhbnlJRCBzY2hlbWVJRD1cXFwiREs6Q1ZSXFxcIj5ESzEyMzQ1Njc4PC9jYmM6Q29tcGFueUlEPlxcbiAgICAgIDwvY2FjOlBhcnR5TGVnYWxFbnRpdHk+XFxuICAgIDwvY2FjOlBhcnR5PlxcbiAgPC9jYWM6T3JpZ2luYXRvckN1c3RvbWVyUGFydHk+XFxuXFx0PGNhYzpRdW90ZWRNb25ldGFyeVRvdGFsPlxcbiAgICA8Y2JjOlBheWFibGVBbW91bnQgY3VycmVuY3lJRCA9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKHRvdGFsQ3VycmVuY3kpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwodWJsX2RmLmZvcm1hdCh0b3RhbEFtb3VudCkpfTwvY2JjOlBheWFibGVBbW91bnQ+XFxuICA8L2NhYzpRdW90ZWRNb25ldGFyeVRvdGFsPlxcbiAgJHtxdW90YXRpb25MaW5lc31cXG48L1F1b3RhdGlvbj5cXG5cXFwiXFxcIlxcXCJcXG5cXG5kZWYgdHJhbnNhY3Rpb25UeXBlID0gJ1F1b3RlJ1xcbmRlZiBjb21tZW50cyA9ICcnXFxuaW50IG5iTGluZXMgPSByZnEuUmVxdWVzdEZvclF1b3RhdGlvbkxpbmUuc2l6ZSgpXFxuXFxuZGVmIHN0YXR1cyA9ICdDcmVhdGVkJ1xcbmRlZiBzdGF0dXNNZXNzYWdlID0gJ0NyZWF0ZWQgYnkgRGVtbyBBcHAnXFxuXFxuZGVmIHNvdXJjZVVSSSA9IFxcXCJmaWxlOi8vJFA2X0RBVEEvcmVzb3VyY2VzL2RvY3VtZW50cy9cXFwiICsgdHJhbnNhY3Rpb25UeXBlICsgXFxcIi9cXFwiICsgcXVvdGVJZCArIFxcXCIueG1sXFxcIlxcblxcbmRlZiAgc291cmNlRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybChzb3VyY2VVUkkpXFxuRmlsZVV0aWxzLndyaXRlU3RyaW5nVG9GaWxlKHNvdXJjZUZpbGUsIHF1b3RlVUJMLCdVVEYtOCcpXFxuXFxuZGVmIGluc3RhbmNlSWQgPSBwNi5jb25maWd1cmF0aW9uLmdldChcXFwiaW5zdGFuY2UuaWRcXFwiKVxcblxcbmRlZiBuZXdUcmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9JZD5cXG4gICAgPENyZWF0aW9uRGF0ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChmb3JtYXR0ZWREYXRlKX08L0NyZWF0aW9uRGF0ZT5cXG4gICAgPFRyYW5zYWN0aW9uVHlwZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0cmFuc2FjdGlvblR5cGUpfTwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9UcmFuc2FjdGlvbk51bWJlcj5cXG4gICAgPFNvdXJjZVN5c3RlbT5EZW1vIEFwcDwvU291cmNlU3lzdGVtPlxcbiAgICA8VGFyZ2V0U3lzdGVtLz5cXG4gICAgPFNlbmRlci8+XFxuICAgIDxGaW5hbFJlY2lwaWVudD5TdXBwbGllcjwvRmluYWxSZWNpcGllbnQ+XFxuICAgIDxUcmFuc2ZlclByb3RvY29sPkJsb2NrY2hhaW48L1RyYW5zZmVyUHJvdG9jb2w+XFxuICAgIDxEZWxpdmVyZWRWaWE+QW1hbHRvPC9EZWxpdmVyZWRWaWE+XFxuICAgIDxTb3VyY2VEb2N1bWVudEZvcm1hdD5VQkw8L1NvdXJjZURvY3VtZW50Rm9ybWF0PlxcbiAgICA8U291cmNlRG9jdW1lbnRVUkk+JHtwNi51dGlscy5lc2NhcGVYbWwoc291cmNlVVJJKX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3A2LnV0aWxzLmVzY2FwZVhtbChzb3VyY2VVUkkpfTwvUGl2b3REb2N1bWVudFVSST5cXG4gICAgPFBpdm90RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvUGl2b3REb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRGb3JtYXQ+VUJMPC9UYXJnZXREb2N1bWVudEZvcm1hdD5cXG4gICAgPFRhcmdldERvY3VtZW50VVJJPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNvdXJjZVVSSSl9PC9UYXJnZXREb2N1bWVudFVSST5cXG4gICAgPFRhcmdldERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1RhcmdldERvY3VtZW50Q29udGVudFR5cGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNDb2RlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHN0YXR1cyl9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChzdGF0dXNNZXNzYWdlKX08L1RlY2huaWNhbFN0YXR1c01lc3NhZ2U+XFxuICAgIDxUZWNobmljYWxTdGF0dXNEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGZvcm1hdHRlZERhdGUpfTwvVGVjaG5pY2FsU3RhdHVzRGF0ZT5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNDb2RlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNEYXRlLz5cXG4gICAgPEZsYWdzPntcXFwiYWF2aXNpYmxlXFxcIjogdHJ1ZX08L0ZsYWdzPlxcbiAgICA8T3JnUGF0aD4vJHtwNi51dGlscy5lc2NhcGVYbWwoaW5zdGFuY2VJZCl9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QnV5ZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChidXllck5hbWUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwodWJsX2RmLmZvcm1hdCh0b3RhbEFtb3VudCkpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIHF1b3RlUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlSWQpXFxucDYudHJhbnNhY3Rpb24uc2F2ZUFuZFJvdXRlKG5ld1RyYW5zYWN0aW9uSW5mbywgJ3A2X2RlbW8uVHJhbnNhY3Rpb25JbmZvJywgcXVvdGVQaywgJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzOTAyMDd9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRldvcmtmbG93VGFza0VuaGFuY2VyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJBZGQgQXR0cmlidXRlcyB0byBXb3JrZmxvdyBUYXNrc1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDI1NSxcInJldmlzaW9uSWRcIjpcIjg3OWE2MmI4NDM3NGI2ZjA4ZGUxYzY5ZDhhMjBlNWI0XCIsXCJtYWluU2NyaXB0XCI6XCJkZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpZHMgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG5kZWYgaXBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgaWRzKVxcbmRlZiBpdGVtID0gcDYudHJhbnNhY3Rpb24uZ2V0KGlwaylcXG5cXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gbmV3IFhtbFNsdXJwZXIoKS5wYXJzZVRleHQoaXRlbSlcXG5cXG5kZWYgdHJhbnNhY3Rpb25OdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uVHJhbnNhY3Rpb25OdW1iZXIudGV4dCgpXFxucDYucGlwZWxpbmUucHV0ICdUcmFuc2FjdGlvbk51bWJlcicsIHRyYW5zYWN0aW9uTnVtYmVyLCAndGV4dC9wbGFpbidcXG5cXG5kZWYgdHJhbnNhY3Rpb25UeXBlID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uVHlwZS50ZXh0KClcXG5wNi5waXBlbGluZS5wdXQgJ1RyYW5zYWN0aW9uVHlwZScsIHRyYW5zYWN0aW9uVHlwZSwgJ3RleHQvcGxhaW4nXFxuXFxuZGVmIGVuZHBvaW50ID0gdHJhbnNhY3Rpb25JbmZvLkVuZHBvaW50LnRleHQoKVxcbnA2LnBpcGVsaW5lLnB1dCAnRW5kcG9pbnQnLCBlbmRwb2ludCwgJ3RleHQvcGxhaW4nXFxuXFxuLy8gQWRkIGNvbW1vbiB3b3JrIGl0ZW0gYXR0cmlidXRlcyByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQgYjJib3ggJ1dvcmsgSXRlbXMnIHZpZXdcXG5kZWYgc3RlcFhtbCA9IHA2LnBpcGVsaW5lLmdldCAnX3dmX3N0ZXBYbWwnXFxuZGVmIHN0YXR1c01hcCA9IHA2LndvcmtmbG93LmxvY2FsZVRleHQgc3RlcFhtbCwgXFxcIlN0YXR1c0xhYmVscy9MYWJlbFtAbmFtZT0nXFxcIiArIHA2LnBpcGVsaW5lLmdldCgnX3dmX3N0YXR1c0lkJykgKyBcXFwiJ11cXFwiXFxucDYucGlwZWxpbmUucHV0ICdTdGF0dXMnLCBzdGF0dXNNYXAsICdhcHBsaWNhdGlvbi9iMmJveC5pMThuJ1xcblxcbmRlZiBhc3NpZ25lZU1hcCA9IHA2LndvcmtmbG93LmxvY2FsZVRleHQgc3RlcFhtbCwgJ0Fzc2lnbmVlL0xhYmVsJ1xcbnA2LnBpcGVsaW5lLnB1dCAnQXNzaWduZWRUbycsIGFzc2lnbmVlTWFwLCAnYXBwbGljYXRpb24vYjJib3guaTE4bidcXG5wNi5waXBlbGluZS5wdXQgJ19BU1NJR05FRFRPTkFNRScsIHA2LnBpcGVsaW5lLmdldCgnX3dmX2Fzc2lnbmVkVG9JZCcpLCAndGV4dC9wbGFpbidcXG5wNi5waXBlbGluZS5wdXQgJ1N0YXJ0RGF0ZScsIHA2LnBpcGVsaW5lLmdldCgnX3dmX2luc3RhbmNlU3RhcnREYXRlJyksICd0ZXh0L3BsYWluJ1xcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzOTAyNTV9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJQb3N0SW5zdGFsbEFwcGxpY2F0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUG9zdEluc3RhbGxBcHBsaWNhdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJTY3JpcHQgdG8gZGVwbG95IHRoZSBkZW1vIHNtYXJ0IGNvbnRyYWN0IGFuZCBpbml0aWFsaXplIHRhYmxlc1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDA4MyxcInJldmlzaW9uSWRcIjpcIjE4ZmU0NjlhZGYzOGU3YmRhMmUyMjZhZTliNTY5MDJiXCIsXCJtYWluU2NyaXB0XCI6XCIvLyBUaGlzIHNjcmlwdCBpcyBsYXVuY2hlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb24gdGhlIGluc3RhbmNlXFxuaW1wb3J0IGlvLnBsYXRmb3JtNi5kZW1vLnNjLlJlcXVlc3RGb3JRdW90YXRpb25zXFxuXFxuaW1wb3J0IG9yZy53ZWIzai50eC4qXFxuXFxuLy8gUG9wdWxhdGUgdGhlIEl0ZW1zIHRhYmxlIGZyb20gdGhlIHByb3ZpZGVkIENTViBmaWxlXFxuZGVmIGNzdkZpbGUgPSBbIHNraXBMaW5lczogMCwgc2VwYXJhdG9yOiAnLCcsIHVzZUZpcnN0TGluZUhlYWRlcnM6IHRydWUsIHVyaTogJ2ZpbGU6Ly8ke1RNUH0vcDZfZGVtb19pdGVtcy5jc3YnIF1cXG5cXG5wNi5jc3YucGFyc2UoY3N2RmlsZSkgeyByb3cgLT5cXG4gICAgZGVmIHJlY29yZHMgPSBuZXcgQXJyYXlMaXN0KClcXG4gICAgcmVjb3Jkc1swXSA9IHJvd1xcbiAgICBwNi50YWJsZS51cHNlcnQoJ3A2X2RlbW8uSXRlbXMnLCByZWNvcmRzKVxcbiAgICB0cnVlXFxufVxcbmxvZy5kZWJ1ZyAnUG9wdWxhdGVkIHRoZSBJdGVtcyB0YWJsZSBmcm9tIHRoZSBDU1YgZmlsZSdcXG5cXG4vLyBEZXBsb3kgdGhlIHNtYXJ0IGNvbnRyYWN0XFxuZGVmIHdlYjNqID0gcDYuZXRoZXJldW1ycGMuYnVpbGQocDYuYXBwY29uZmlnLmdldChcXFwiZXRoQ2xpZW50VVJMXFxcIikpXFxuZGVmIGNyZWRlbnRpYWxzID0gcDYuZXRoZXJldW1ycGMuZ2V0Q3JlZGVudGlhbHMocDYuYXBwY29uZmlnLmdldChcXFwiZGVtb1dhbGxldFxcXCIpLCBcXFwiQUR1bW15UGFzc3dvcmRcXFwiKVxcblxcbi8vIERlZmluZSBhIGN1c3RvbSB0cmFuc2FjdGlvbiBtYW5hZ2VyIHdpdGggYSBwb2xsaW5nIGZyZXF1ZW5jeSBvZiAyIHNlY29uZHNcXG5kZWYgdG0gPSBwNi5ldGhlcmV1bXJwYy5wb2xsaW5nVHJhbnNhY3Rpb25NYW5hZ2VyKHdlYjNqLCBjcmVkZW50aWFscywgMjAwMEwpXFxuZGVmIGNvbnRyYWN0ID0gUmVxdWVzdEZvclF1b3RhdGlvbnMuZGVwbG95KHdlYjNqLCB0bSwgcDYuZXRoZXJldW1ycGMuREVGQVVMVF9HQVNfUFJPVklERVIpLnNlbmQoKVxcblxcbi8vIFNhdmUgdGhlIGNvbnRyYWN0IGFkZHJlc3MgYW5kIEV0aGVyZXVtIGNsaWVudCBVUkwgaW4gY29uZmlnIHRhYmxlXFxucDYuYXBwY29uZmlnLm92ZXJyaWRlKFxcXCJjb250cmFjdEFkZHJlc3NcXFwiLCBjb250cmFjdC5nZXRDb250cmFjdEFkZHJlc3MoKSlcXG5cXG4vLyBOb3RpZnkgUDYgdGhhdCBpbnN0YWxsYXRpb24gd2FzIHN1Y2Nlc3NmdWxcXG5sb2cuZGVidWcgJ0RlbW8gYXBwIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSEnXFxucDYucGlwZWxpbmUucHV0KFxcXCJpbnN0YWxsU2NyaXB0UmVzdWx0XFxcIiwgXFxcInRydWVcXFwiKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzOTAwODN9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJQcmVJbnN0YWxsQXBwbGljYXRpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJQcmVJbnN0YWxsQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJlIGluc3RhbGwgYXBwbGljYXRpb24gc2NyaXB0IHdoZXJlIGJ1bmRsZWQgcmVzb3VyY2VzIGdldCBkZXBsb3llZFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDA2MixcInJldmlzaW9uSWRcIjpcIjU2OTVhN2IzOTYyMjZkMjJjMTMzMmNmOGFjOTAxYjBmXCIsXCJtYWluU2NyaXB0XCI6XCIvLyBEZXBsb3kgKGNvcHkgdG8gbG9jYWwgZmlsZSBzeXN0ZW0gYW5kIGxvYWQgSkFSIGNsYXNzZXMgaW50byBjbGFzc3BhdGgpIGJ1bmRsZWQgcmVzb3VyY2VzXFxucDYuYnVuZGxlZC5kZXBsb3koJ3A2X2RlbW8uRGVtb1NtYXJ0Q29udHJhY3QnKVxcbnA2LmJ1bmRsZWQuZGVwbG95KCdwNl9kZW1vLlBPUmV2aWV3JylcXG5wNi5idW5kbGVkLmRlcGxveSgncDZfZGVtby5UYWJsZUl0ZW1zRGF0YScpXFxubG9nLmRlYnVnICdEZXBsb3llZCBidW5kbGVkIHJlc291cmNlcydcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1MzkwMDYyfV0sInBsYXRmb3JtNi5hcHBjb25maWciOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmFwcGNvbmZpZyIsIm5hbWUiOiJkZW1vV2FsbGV0IiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiZGVtb1dhbGxldFwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEZW1vIFdhbGxldFwifSxcImNvbnRlbnRNb2RlXCI6XCJSRUFEXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM4OTM0OCxcInJldmlzaW9uSWRcIjpcIjFhMTZkYjE4YzIxMWIyYmQxNjZhY2E1YWYxMDc2MGY3XCIsXCJ2YWx1ZVwiOlwie1xcXCJhZGRyZXNzXFxcIjpcXFwiNjI3MzA2MDkwYWJhYjNhNmUxNDAwZTkzNDViYzYwYzc4YThiZWY1N1xcXCIsXFxcImlkXFxcIjpcXFwiYzkxMzg2N2YtZTVlNC00YmU2LWE3ZGEtNjU0Y2U4MzNiZmI0XFxcIixcXFwidmVyc2lvblxcXCI6MyxcXFwiY3J5cHRvXFxcIjp7XFxcImNpcGhlclxcXCI6XFxcImFlcy0xMjgtY3RyXFxcIixcXFwiY2lwaGVydGV4dFxcXCI6XFxcIjRjMDYwNGNjYTMzMTQ4MzhkNjM4NDdiNGVkMDJlN2EyZDE3ZTUxMWVmZDQ0ZjYwNTBlMDljMjM4YTVkNTAwOTVcXFwiLFxcXCJjaXBoZXJwYXJhbXNcXFwiOntcXFwiaXZcXFwiOlxcXCJiNDhkODE3MzIwZWQ1YjQ1OWJiZGRmMTQwZTVmMDQ1M1xcXCJ9LFxcXCJrZGZcXFwiOlxcXCJzY3J5cHRcXFwiLFxcXCJrZGZwYXJhbXNcXFwiOntcXFwiZGtsZW5cXFwiOjMyLFxcXCJuXFxcIjoyNjIxNDQsXFxcInBcXFwiOjEsXFxcInJcXFwiOjgsXFxcInNhbHRcXFwiOlxcXCIzNWQ1MzM5YWNmNmE4ZjE1NDYyZmZjMGJiOTgxY2YzMTk3OTRhZTIzOWM1MTM0MWZiODU0YzE4ZWU0NThkNWM3XFxcIn0sXFxcIm1hY1xcXCI6XFxcIjc2YzFhNDdmNzEyNGNkNjM0NjBhZDI1ZmJiMGI5YzZlM2VhYjhlZDUwZDM2ZjY2ZTJkYzQwYzAzODg4MTEyM2VcXFwifX1cIixcInR5cGVcIjpcIlN0cmluZ1wifSIsImNvbnRlbnRNb2RlIjoiUkVBRCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM4OTM0OH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5hcHBjb25maWciLCJuYW1lIjoiY29udHJhY3RBZGRyZXNzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiY29udHJhY3RBZGRyZXNzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkNvbnRyYWN0IEFkZHJlc3NcIn0sXCJjb250ZW50TW9kZVwiOlwiUkVBRFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzODkzMzAsXCJyZXZpc2lvbklkXCI6XCIwODk0ZjZlODQzZjMxNzA5NGNjYTYxYzJjNjk2N2I4NVwiLFwidmFsdWVcIjpcIlwiLFwidHlwZVwiOlwiU3RyaW5nXCJ9IiwiY29udGVudE1vZGUiOiJSRUFEIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1Mzg5MzMwfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmFwcGNvbmZpZyIsIm5hbWUiOiJldGhDbGllbnRVUkwiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJldGhDbGllbnRVUkxcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRXRoZXJldW0gQ2xpZW50IFVSTFwifSxcImNvbnRlbnRNb2RlXCI6XCJSRUFEXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM4OTM2MSxcInJldmlzaW9uSWRcIjpcImQyYWM1NjQxYjdhMDdlMjg1NmM3NTVkZWYwN2E5NjJmXCIsXCJ2YWx1ZVwiOlwiaHR0cDovL2RlbW9iYzo4NTQ1XCIsXCJ0eXBlXCI6XCJTdHJpbmdcIn0iLCJjb250ZW50TW9kZSI6IlJFQUQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzODkzNjF9XSwicGxhdGZvcm02LmRhdGFtb2RlbHMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmRhdGFtb2RlbHMiLCJuYW1lIjoiVHJhbnNhY3Rpb25JbmZvIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVHJhbnNhY3Rpb25JbmZvXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlRyYW5zYWN0aW9uSW5mbyBkYXRhbW9kZWxcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzODk2MzUsXCJyZXZpc2lvbklkXCI6XCIyYzUwMGNjZjY1ZTk1ODgzODNiZWNjODc4NzcwYTYzNlwiLFwic2NoZW1hXCI6XCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiIGVuY29kaW5nPVxcXCJVVEYtOFxcXCI/Plxcbjx4c2Q6c2NoZW1hIHhtbG5zOnhzZD1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWFcXFwiIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PVxcXCJ1bnF1YWxpZmllZFxcXCJcXG4gICAgICAgICAgICBibG9ja0RlZmF1bHQ9XFxcIlxcXCJcXG4gICAgICAgICAgICBlbGVtZW50Rm9ybURlZmF1bHQ9XFxcInF1YWxpZmllZFxcXCJcXG4gICAgICAgICAgICBmaW5hbERlZmF1bHQ9XFxcIlxcXCI+XFxuICAgPHhzZDplbGVtZW50IGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiVHJhbnNhY3Rpb25JbmZvXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiPlxcbiAgICAgIDx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIklkXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkNyZWF0aW9uRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUcmFuc2FjdGlvblR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHJhbnNhY3Rpb25OdW1iZXJcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiU291cmNlU3lzdGVtXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRhcmdldFN5c3RlbVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJTZW5kZXJcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiRmluYWxSZWNpcGllbnRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHJhbnNmZXJQcm90b2NvbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJEZWxpdmVyZWRWaWFcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiU291cmNlRG9jdW1lbnRGb3JtYXRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiU291cmNlRG9jdW1lbnRVUklcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiU291cmNlRG9jdW1lbnRDb250ZW50VHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJQaXZvdERvY3VtZW50Rm9ybWF0XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlBpdm90RG9jdW1lbnRVUklcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiUGl2b3REb2N1bWVudENvbnRlbnRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRhcmdldERvY3VtZW50Rm9ybWF0XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRhcmdldERvY3VtZW50VVJJXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRhcmdldERvY3VtZW50Q29udGVudFR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiQXR0YWNobWVudHNcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiQXR0YWNobWVudHNcXFwiLz5cXG5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlRlY2huaWNhbFN0YXR1c0NvZGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiVGVjaG5pY2FsU3RhdHVzTWVzc2FnZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJUZWNobmljYWxTdGF0dXNEYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZ1bmN0aW9uYWxTdGF0dXNDb2RlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZ1bmN0aW9uYWxTdGF0dXNEYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZsYWdzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiT3JnUGF0aFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIktleVZhbHVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIktleVZhbHVlXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJJc3N1ZXNcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwiSXNzdWVzXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJBdWRpdFRyYWlsXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiPlxcbiAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiUmVjb3JkXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiQ29kZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJEYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIk1lc3NhZ2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+XFxuICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiV29ya2Zsb3dcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwiV0ZJbnN0YW5jZXNcXFwiLz5cXG4gICAgICAgICAgICBcXG4gICAgICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICAgICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICAgICA8eHNkOnVuaXF1ZSBuYW1lPVxcXCJUcmFuc2FjdGlvbkluZm9cXFwiPlxcbiAgICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9XFxcIi5cXFwiLz5cXG4gICAgICAgICA8eHNkOmZpZWxkIHhwYXRoPVxcXCJJZFxcXCIvPlxcbiAgICAgIDwveHNkOnVuaXF1ZT5cXG4gICA8L3hzZDplbGVtZW50PlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIlRocmVhZFxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUcmFuc2FjdGlvbkluZm9JZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJCdXNpbmVzc0RvY05hbWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiTWVzc2FnZUNvbnRlbnRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiS2V5VmFsdWVcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiS2V5XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlZhbHVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJBdHRhY2htZW50c1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkF0dGFjaG1lbnRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiQXR0YWNobWVudFxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIkF0dGFjaG1lbnRcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVVJJXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkNvbnRlbnRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJJc3N1ZXNcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJJc3N1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJJc3N1ZVxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIklzc3VlXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkxldmVsXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiTWVzc2FnZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGaWVsZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGaWVsZFR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiVmFsdWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiUGF0aFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJMaXN0T2ZWYWx1ZXNcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiTGlzdE9mVmFsdWVzXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiTGlzdE9mVmFsdWVzXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiVmFsdWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIldGSW5zdGFuY2VzXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRmxvd05hbWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiQWN0aXZlSW5zdGFuY2VJZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkluc3RhbmNlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIldGSW5zdGFuY2VcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkluc3RhbmNlXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcImlkXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInN0YXJ0RGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJlbmREYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImxhc3RVc2VyRW1haWxcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwic3RhdHVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImZsaW5rXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIkZMSU5LXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcInN0ZXBcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwiV0ZTdGVwXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiV0ZTdGVwXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInN0ZXBJZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGF0dXNcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiYWN0aW9uZWRCeUVtYWlsXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInN0YXJ0RGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJlbmREYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImFzc2lnbmVkVG9OYW1lXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcImFzc2lnbmVlc1xcXCIgbmlsbGFibGU9XFxcInRydWVcXFwiIHR5cGU9XFxcIldGQXNzaWduZWVzXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJkZXNjcmlwdGlvblxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJXRkRlc2NyaXB0aW9uTWFwXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcInBhcmFtZXRlclxcXCIgbmlsbGFibGU9XFxcInRydWVcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIktleVZhbHVlXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiRkxJTktcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwidmlld1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcImlkXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcInR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIldGQXNzaWduZWVzXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiYXNzaWduZWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIldGRGVzY3JpcHRpb25NYXBcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCI+XFxuICAgICAgICAgPHhzZDphbnkgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWVzcGFjZT1cXFwiIyNhbnlcXFwiIHByb2Nlc3NDb250ZW50cz1cXFwibGF4XFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuPC94c2Q6c2NoZW1hPlwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM4OTYzNX1dLCJwbGF0Zm9ybTYud29ya2Zsb3dzdGVwcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYud29ya2Zsb3dzdGVwcyIsIm5hbWUiOiJIYW5kbGVSZXF1ZXN0Rm9yUXVvdGF0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiSGFuZGxlUmVxdWVzdEZvclF1b3RhdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIFF1b3RlIG9yIERlY2xpbmUgUkZRXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1MzkwNTAxLFwicmV2aXNpb25JZFwiOlwiNzE4NjNkYzQ5NDUxZDVkNmJmMDNjM2QxOGJjNjA2ODdcIixcInhtbFN0ZXBcIjpcIjxXb3JrZmxvd1N0ZXAgZW5hYmxlZD1cXFwidHJ1ZVxcXCI+XFxuICAgIFxcbiAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICA8RU4+UmVxdWVzdEZvclF1b3RhdGlvbiAtIEFuc3dlciBvciBkZWNsaW5lPC9FTj5cXG4gICAgICAgIDxGUj5EZXZpcyAtIFLDqXBvbmRyZSBvdSBkw6ljbGluZXI8L0ZSPlxcbiAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICBcXG4gICAgPEFsbG93VHJhbnNhY3Rpb25FZGl0PkFTU0lHTkVFPC9BbGxvd1RyYW5zYWN0aW9uRWRpdD5cXG4gICAgPFRyYW5zYWN0aW9uRGF0YU1vZGVsPnA2X2RlbW8uVHJhbnNhY3Rpb25JbmZvPC9UcmFuc2FjdGlvbkRhdGFNb2RlbD5cXG4gICAgPFZpZXdOYW1lcz5cXG4gICAgICAgIDxJdGVtPnA2X2RlbW8uVHJhbnNhY3Rpb25zPC9JdGVtPlxcbiAgICAgICAgPFdvcmtJdGVtPnA2X2RlbW8uV29ya2Zsb3cgVGFza3M8L1dvcmtJdGVtPlxcbiAgICA8L1ZpZXdOYW1lcz5cXG5cXG4gICAgPEFsbG93UmVjYWxsPmZhbHNlPC9BbGxvd1JlY2FsbD5cXG4gICAgPEFsbG93QXBwcm92ZXJEZWxlZ2F0aW9uPmZhbHNlPC9BbGxvd0FwcHJvdmVyRGVsZWdhdGlvbj5cXG4gICAgXFxuICAgIDxTZW5kRW1haWxzPmZhbHNlPC9TZW5kRW1haWxzPlxcblxcbiAgICA8VHRsIGlkPVxcXCJleHBpcmVcXFwiPjEyMDwvVHRsPlxcbiAgICBcXG5cXHQ8V29ya0l0ZW0gc2NyaXB0PVxcXCJwNl9kZW1vLldGV29ya2Zsb3dUYXNrRW5oYW5jZXJcXFwiLz5cXG4gICAgXFxuICAgIDxBc3NpZ25lZSBuYW1lPVxcXCJEZW1vQXBwXFxcIiBwYXRoPVxcXCIvJHtJTlNUQU5DRV9JRH1cXFwiIHR5cGU9XFxcIlVOSVRcXFwiIHNjb3BlPVxcXCIqPSpcXFwiPlxcbiAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgIDxFTj5TdXBwbGllcjwvRU4+XFxuICAgICAgICAgICAgPEZSPkZvdXJuaXNzZXVyPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvQXNzaWduZWU+XFxuICAgIFxcblxcdDxTdGF0dXNMYWJlbHM+XFxuXFx0ICAgIDxMYWJlbCBuYW1lPVxcXCJSZWNlaXZlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5SZWNlaXZlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlJlw6d1ZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIkNyZWF0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+Q3JlYXRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPkNyw6nDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJEZXByZWNhdGVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPkRlcHJlY2F0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Bbm51bMOpZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIlByb3ZpZGVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPlF1b3RlIHByb3ZpZGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+UXVvdGF0aW9uIGZvdXJuaWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJEZWNsaW5lZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5EZWNsaW5lZDwvRU4+XFxuICAgICAgICAgICAgPEZSPkTDqWNsaW7DqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgPC9TdGF0dXNMYWJlbHM+XFxuICAgIFxcbiAgICA8QWN0aW9ucz5cXG4gICAgICAgIDxBY3Rpb24gaWQ9XFxcInNlbmRcXFwiIHN0YXR1cz1cXFwiUHJvdmlkZWRcXFwiIHR5cGU9XFxcIkZPUk1cXFwiIHN0b3A9XFxcInRydWVcXFwiIHNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGVcXFwiPlxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLWNoZWNrLGJ0bjpidG4tc3VjY2VzczwvU3R5bGU+XFxuXFxuICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICA8RU4+UHJvdmlkZSBRdW90ZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Gb3VybmlyIFF1b3RhdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9MYWJlbD5cXG5cXG4gICAgICAgICAgICA8Rm9ybUdlbmVyYXRvcj5wNl9kZW1vLldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvbjwvRm9ybUdlbmVyYXRvcj5cXG4gICAgICAgICAgIFxcbiAgICAgICAgICAgPFBhcmFtZXRlcj5cXG4gICAgICAgICAgICAgICAgPE5hbWU+cmZxPC9OYW1lPlxcbiAgICAgICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICA8RU4+cmZxPC9FTj5cXG4gICAgICAgICAgICAgICAgICAgIDxGUj5yZnE8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVDwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIDxQYXJhbWV0ZXI+XFxuICAgICAgICAgICAgICAgIDxOYW1lPmxpbmVzPC9OYW1lPlxcbiAgICAgICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICA8RU4+bGluZXM8L0VOPlxcbiAgICAgICAgICAgICAgICAgICAgPEZSPmxpbmVzPC9GUj5cXG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgPE1hbmRhdG9yeT5mYWxzZTwvTWFuZGF0b3J5PlxcbiAgICAgICAgICAgICAgICA8SW5wdXRUeXBlPlRFWFQ8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgIDwvQWN0aW9uPlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgIDxBY3Rpb24gaWQ9XFxcImRlcHJlY2F0ZVxcXCIgc3RhdHVzPVxcXCJEZWNsaW5lZFxcXCIgdHlwZT1cXFwiQUNUSU9OXFxcIiBzdG9wPVxcXCJ0cnVlXFxcIiBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uRGVjbGluZVxcXCI+XFxuICAgICAgICAgICAgPFN0eWxlPmljb246ZmEtdGltZXMsYnRuOmJ0bi1kYW5nZXIsY29sb3I6ZGFuZ2VyPC9TdHlsZT4gXFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICA8RU4+RGVjbGluZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Ew6ljbGluZXIgcXVvdC48L0ZSPlxcbiAgICAgICAgICAgIDwvTGFiZWw+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgPFBhcmFtZXRlcj5cXG5cXHQgICAgICAgICAgICA8TmFtZT5yZWFzb248L05hbWU+XFxuICAgICAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgIDxFTj5SZWFzb248L0VOPlxcbiAgICAgICAgICAgICAgICAgICAgPEZSPk1vdGlmPC9GUj5cXG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgPE1hbmRhdG9yeT5mYWxzZTwvTWFuZGF0b3J5PlxcbiAgICAgICAgICAgICAgICA8SW5wdXRUeXBlPlRFWFRBUkVBPC9JbnB1dFR5cGU+XFxuICAgICAgICAgICAgPC9QYXJhbWV0ZXI+XFxuICAgICAgICA8L0FjdGlvbj5cXG4gICAgICAgIFxcbiAgICAgICAgPEFjdGlvbiBpZD1cXFwiZXhwaXJlXFxcIiBzdGF0dXM9XFxcIkVYUElSRURcXFwiIHR5cGU9XFxcIkVYUElSRVxcXCIgZGlzcGxheT1cXFwiZmFsc2VcXFwiPlxcblxcdFxcdFxcdDxFeHBpcnkgZXJyb3I9XFxcImZhbHNlXFxcIi8+XFxuICAgICAgICA8L0FjdGlvbj5cXG4gICAgPC9BY3Rpb25zPlxcbiAgICBcXG48L1dvcmtmbG93U3RlcD5cXG5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzOTA1MDF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYud29ya2Zsb3dzdGVwcyIsIm5hbWUiOiJIYW5kbGVQdXJjaGFzZU9yZGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiSGFuZGxlUHVyY2hhc2VPcmRlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJBY2NlcHQgb3IgUmVqZWN0IHRoZSBPcmRlclwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDQ4NixcInJldmlzaW9uSWRcIjpcIjdjODFkMjU3ODdiOWMxMWQ2ZWE0MmY1YTY2NDFiNmQ5XCIsXCJ4bWxTdGVwXCI6XCI8V29ya2Zsb3dTdGVwIGVuYWJsZWQ9XFxcInRydWVcXFwiPlxcbiAgICBcXG4gICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgPEVOPlB1cmNoYXNlT3JkZXIgLSBBY2NlcHQgb3IgcmVqZWN0PC9FTj5cXG4gICAgICAgIDxGUj5Db21tYW5kZSAtIEFjY2VwdGVyIG91IHJlZnVzZXI8L0ZSPlxcbiAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICBcXG4gICAgPEFsbG93VHJhbnNhY3Rpb25FZGl0PkFTU0lHTkVFPC9BbGxvd1RyYW5zYWN0aW9uRWRpdD5cXG4gICAgPFRyYW5zYWN0aW9uRGF0YU1vZGVsPnA2X2RlbW8uVHJhbnNhY3Rpb25JbmZvPC9UcmFuc2FjdGlvbkRhdGFNb2RlbD5cXG4gICAgPFZpZXdOYW1lcz5cXG4gICAgICAgIDxJdGVtPnA2X2RlbW8uVHJhbnNhY3Rpb25zPC9JdGVtPlxcbiAgICAgICAgPFdvcmtJdGVtPnA2X2RlbW8uV29ya2Zsb3cgVGFza3M8L1dvcmtJdGVtPlxcbiAgICA8L1ZpZXdOYW1lcz5cXG5cXG4gICAgPEFsbG93UmVjYWxsPmZhbHNlPC9BbGxvd1JlY2FsbD5cXG4gICAgPEFsbG93QXBwcm92ZXJEZWxlZ2F0aW9uPmZhbHNlPC9BbGxvd0FwcHJvdmVyRGVsZWdhdGlvbj5cXG4gICAgXFxuICAgIDxTZW5kRW1haWxzPmZhbHNlPC9TZW5kRW1haWxzPlxcbiAgICA8RW1haWxUZW1wbGF0ZSBtb2RlbFNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUJ1aWxkRW1haWxcXFwiPmZpbGU6Ly8ke1A2X0RBVEF9L3Jlc291cmNlcy90ZW1wbGF0ZXMvcDZkZW1vX1BPUmV2aWV3LmZ0bDwvRW1haWxUZW1wbGF0ZT5cXG4gICAgXFxuICAgIDxUdGwgaWQ9XFxcImV4cGlyZVxcXCI+MTIwPC9UdGw+XFxuICAgIFxcblxcdDxXb3JrSXRlbSBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlclxcXCIvPlxcbiAgICBcXG4gICAgPEFzc2lnbmVlIG5hbWU9XFxcIkRlbW9BcHBcXFwiIHBhdGg9XFxcIi8ke0lOU1RBTkNFX0lEfVxcXCIgdHlwZT1cXFwiVU5JVFxcXCIgc2NvcGU9XFxcIio9KlxcXCI+XFxuICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgPEVOPlN1cHBsaWVyPC9FTj5cXG4gICAgICAgICAgICA8RlI+Rm91cm5pc3NldXI8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgPC9Bc3NpZ25lZT5cXG4gICAgXFxuXFx0PFN0YXR1c0xhYmVscz5cXG5cXHQgICAgPExhYmVsIG5hbWU9XFxcIlJlY2VpdmVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPlJlY2VpdmVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+UmXDp3VlPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQ3JlYXRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5DcmVhdGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+Q3LDqcOpZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIkRlcHJlY2F0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+RGVwcmVjYXRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPkFubnVsw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQWNjZXB0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+T3JkZXIgYWNjZXB0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Db21tYW5kZSBhY2NlcHTDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJSZWplY3RlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5SZWplY3RlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlJlZnVzw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvU3RhdHVzTGFiZWxzPlxcbiAgICBcXG4gICAgPEFjdGlvbnM+XFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJhY2NlcHRcXFwiIHN0YXR1cz1cXFwiQWNjZXB0ZWRcXFwiIHR5cGU9XFxcIkFDVElPTlxcXCIgc3RvcD1cXFwidHJ1ZVxcXCIgc2NyaXB0PVxcXCJwNl9kZW1vLldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXJcXFwiPlxcblxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLWNoZWNrLGJ0bjpidG4tc3VjY2VzczwvU3R5bGU+XFxuXFxuICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICA8RU4+QWNjZXB0IE9yZGVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjY2VwdGVyIGNvbW1hbmRlPC9GUj5cXG4gICAgICAgICAgICA8L0xhYmVsPlxcblxcbiAgICAgICAgICAgPFBhcmFtZXRlcj5cXG4gICAgICAgICAgICAgICAgPE5hbWU+c2FsZXNvcmRlcm51bWJlcjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlNhbGVzIE9yZGVyIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TnVtw6lybyBkZSBjb21tYW5kZSBjbGllbnQ8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVDwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcblxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgPEFjdGlvbiBpZD1cXFwicmVqZWN0XFxcIiBzdGF0dXM9XFxcIlJlamVjdGVkXFxcIiB0eXBlPVxcXCJBQ1RJT05cXFwiIHN0b3A9XFxcInRydWVcXFwiIHNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUhhbmRsZUFjdGlvblJlamVjdE9yZGVyXFxcIj5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8U3R5bGU+aWNvbjpmYS10aW1lcyxidG46YnRuLWRhbmdlcixjb2xvcjpkYW5nZXI8L1N0eWxlPiBcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgIDxFTj5SZWplY3Q8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+UmVmdXNlcjwvRlI+XFxuICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8UGFyYW1ldGVyPlxcblxcdCAgICAgICAgICAgIDxOYW1lPnJlYXNvbjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlJlYXNvbjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TW90aWY8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVEFSRUE8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvQWN0aW9uPlxcbiAgICAgICAgXFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJleHBpcmVcXFwiIHN0YXR1cz1cXFwiRVhQSVJFRFxcXCIgdHlwZT1cXFwiRVhQSVJFXFxcIiBkaXNwbGF5PVxcXCJmYWxzZVxcXCI+XFxuXFx0XFx0XFx0PEV4cGlyeSBlcnJvcj1cXFwiZmFsc2VcXFwiLz5cXG5cXHRcXHQ8L0FjdGlvbj5cXG4gICAgICAgIFxcbiAgICA8L0FjdGlvbnM+XFxuICAgIFxcbjwvV29ya2Zsb3dTdGVwPlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM5MDQ4Nn1dLCJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyIsIm5hbWUiOiJEZW1vU21hcnRDb250cmFjdCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkRlbW9TbWFydENvbnRyYWN0XCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkRlbW8gU21hcnQgQ29udHJhY3QgSkFSIGdlbmVyYXRlZCBieSBodHRwczovL2dpdGh1Yi5jb20vYW1hbHRvL3NvbGlkaXR5LWphci1idWlsZGVyXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5NDYyLFwicmV2aXNpb25JZFwiOlwiYjdkMWU5NzQyOTRkYTlhZjU4NTJiZTAzOTA1MWIzYzJcIixcIml0ZW1CeXRlc1wiOlwiVUVzREJCUUFBQWdJQUlTUWFFOVFzUjE5b1FBQUFCTUJBQUFVQUFBQVRVVlVRUzFKVGtZdlRVRk9TVVpGVTFRdVRVYU56NzBLd2pBUUIvQTlrSGZJQzF4SnFvUE5xQzRXQ29MRndTMGtWd2ttYVVoVHdiYzMzU3hkaEp2dTQ4Zi9PaFhzZ0ZPR082Ykpqa0V5VVhGS0xqNDY5Qml5eXFVSnZjME9KVFBvUjFBeHd1UlZ5cURIa0pQU2ViUCtZOVdVM0NKcU8xajlIM1djclRQUW1oY3Nkd3R4MlBobmxRdFJjOUdBRU1DYm5uUEo5NlVlbEp3U2xxbUI0MGV5VHIweHNGWWxkblh6MHdhMnErcmx1M1dpZFZwS3ZsQkxBd1FLQUFBSUFBQ0VrR2hQQUFBQUFBQUFBQUFBQUFBQUNRQUFBRTFGVkVFdFNVNUdMMUJMQXdRS0FBQUlBQUNFa0doUEFBQUFBQUFBQUFBQUFBQUFBd0FBQUdsdkwxQkxBd1FLQUFBSUFBQ0VrR2hQQUFBQUFBQUFBQUFBQUFBQURRQUFBR2x2TDNCc1lYUm1iM0p0Tmk5UVN3TUVDZ0FBQ0FBQWhKQm9Ud0FBQUFBQUFBQUFBQUFBQUJJQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OVFTd01FQ2dBQUNBQUFoSkJvVHdBQUFBQUFBQUFBQUFBQUFCVUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5UVN3TUVDZ0FBQ0FBQWhKQm9Ud0FBQUFBQUFBQUFBQUFBQUE4QUFBQk5SVlJCTFVsT1JpOXRZWFpsYmk5UVN3TUVDZ0FBQ0FBQWhKQm9Ud0FBQUFBQUFBQUFBQUFBQUNRQUFBQk5SVlJCTFVsT1JpOXRZWFpsYmk5amIyMHVZVzFoYkhSdkxuQnNZWFJtYjNKdE5pOVFTd01FQ2dBQUNBQUFoSkJvVHdBQUFBQUFBQUFBQUFBQUFEd0FBQUJOUlZSQkxVbE9SaTl0WVhabGJpOWpiMjB1WVcxaGJIUnZMbkJzWVhSbWIzSnROaTlrWlcxdkxXRndjQzF6YldGeWRDMWpiMjUwY21GamRDOVFTd01FRkFBQUNBZ0FoSkJvVDlqenA4Q2lBUUFBNkFJQUFESUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXlOQzVqYkdGemM1VlNYVThUUVJROVU1YXVMYXRVVkJSUjR3TXhMWmdPUWVRRjBwZEdFazNWQ05qMzJkM2JNbVE3VTJkbk1md2pYbjB3SkR6NEEvaFJ4THNMRDhZWUE1bk0zSTg1OTg0NWszdHhlZjRMd0NaZU5EQ0R4U1lDUEE3eEpNU1NRTjBmNm54bFhXQnRvSzJjWnNxUHJKdHN5WlFtVnVhSjNLTnZCZVYrMTdvdmhmWEthMnZ5YlM3YjBVYjdua0MzZll1NnpsQWc2TnVVQk9ZSDJ0Q25ZaEtUTzFCeHhwbUZnVTFVTmxST2wvRjFNaWpwQ1VUdmpTSFh6MVNlRTRmZG03KzVzckhKZEJ2N2VteVVMeHkzL0RDd2JpeS9VL3ptU0twWXk0T1RLZTNSaUJ5WmhIYit1a3dWOTJGQUxzZkVESlNuVkg3VnhtKzgzZHJ1Y2VQbXZpMWNRcnU2Skx2MEx3TGRJM1dzV084N2syUTIxMmI4a2Z5aFRVTThqYkNNWnhGbVVZOFE0cm5BNjl1b0VsaitqdzZCem8yYkNjeVoySDBlbFpueWQxKzFPMy84d3RSWmJ4T2J5Y1E2NHZvSmcvb3F5MWo4VExzenhFc2VxWUNuUzdSYXBaVFM0eDNpRHRzR2V6M1VlQUhOMWJXZkVLdG5xUDNncUlZbW4vVUtlNG81UGhldlVJaHdENmk4MmVvK3dIeUZiK0YrWlJmd2dHMkFoM2lFdXhXT2lWUVYrQTFRU3dNRUZBQUFDQWdBaEpCb1Q4L0NvRTJnQVFBQTVRSUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4T1M1amJHRnpjNVZTWFU4VU1SUTlYWVlkZGgxbFJVRVJOVDd3c0F0bWk0RVFDR1FmM0VnMFdVM2tZMTk4NnM1Y2hwTFpkdWwwTVB3c0g0eUpEL3dBZmhUaHp1aURNY1pBbXZiZTI1NXplMDdUcSt1Zmx3QTI4TEtCS1N3MEVlQkppS2NoRmdYcS9rVG55MnNDcXdOdDVTUlQvdGk2OGFaTWFHeGxIc3Q5T2lzbzkzdldmUzZzVjE1YmsrOHdiVmNiN1hzQzNmWWRlSjJoUU5DM0NRbk1EclNoVDhWNFJPNVFqVExlbVJ2WVdHVkQ1WFJaLzk0TVNua0MwUWRqeVBVemxlZkVaZmYyZHk2LzJXYTVqUU9kR3VVTHh5M2ZENnhMNVZjYXJaOUtOZEx5OEdKQyszUk1qa3hNdTM4ZEpvcjdNQ0NYS2JFQzVTbVJSOXI0clowZXQyMGUyTUxGdEtkTHFZdi91cjU3cXM0VnUzMW40c3ptMnFRZnlaL1lKTVN6Q0V0NEhtRWE5UWdoWGdpOHZvc25nYVgvdUJEbzNMcVp3RXhLdnF5WjFtNS9lZHY1NHdrbXpub2IyMHpHMWhIVHg0enFxeXhqNzFQdHpoQ3YrRDhGL0xWRXExVTZLVE9lSVdZNE5qanJvY1lEYUs2c2ZvZFkrWUhhTjY1cWFQSmFyN0FXOTNoZCtJVkNoQWRBbFUxWDV3Rm1LM3dMRDZzNGgwY2NBenpHUE81WE9CWlNNWEFEVUVzREJCUUFBQWdJQUlTUWFFL0tNUE8rQmdRQUFNQUpBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpZdVkyeGhjM090VnZ0ekUxVVUvbTZhZEVtNlFLRXRVa1R3VVNGTkg3Y0Mxa2RydFkrTlJyZkJQaXdpSW01MkwrbDJ0bnZqN2swcC80OHovb3FPQlpFWmhuSEdGLzVQanVkdVlpTnRHSnFSSkhzZjU5ejduZk9kZSs3WlBQNzc1NGNBTHNITG9oK1RPUXpnclN4TjM4NVI4NDZCZDNQSWFFa0dVem1jeDNRUDNzT01nZmQ3a01NSEJtYTFaczdBdk80WERGaTZMeHI0TUVkb0h4a29HZmpZd0NjTTNXcmRqNGNtR0Vac1gvSmE0S2liTXRxYzVKN1lsRHgyK2JMNHBpNWlWWlRSVWwwcVIva3lqS2RvMjdRZittcUdZVHpmd2I3aE5ZYjB2UFFFdzFIYkQwVzV2bGtSMGFwVENVaHkzSmF1RTZ3NWthL25UV0ZhdThkZ2xzSlFSUE9CRThlQ3B1TUh0emwwWVpMY3pUaTFXbkNiNGVSeWNXbFp1TUxmRXA2MUpVSzFMT0lhclNKTEttL0xxTXB2aWNyRkRWNkxwSkt1RExnckk4RTNoVnFYWHN5ajVtSnV5K3JVY0FjK1BNMHFlZFlWeUtvbTFKRnRoaDZoY2RhY2dJd1pXS1RvV1MzQkZWK3QyeHEyOEI5WXRjM25aYWdpeDFWRCs5Y1M1R0YxdXlhOFZrQVduZy9CYzNsN3c5bHllT0NFVlg2NXNpRmNSYkhiSjJMSVdkdXVxQ1Y0QnNvTTJSVy9HanFxSHBFdjMrM2ZvTDJMQkxFaG85djhaajEwazYyODJCeE5keGJTNTBGMlJyTllrZlhJRlVWZlorOWd1LzNqbWdwZEFDdDBBeG43WVhVeDhjZkFaUk9mWXNuRUN6aHBZaERMSmxhd2F1SXowSzJaKy8vdW1SakM2eWF1NEhNRFYwMThnV3NNcDFzeGNpbys5eHdDb1N5SStTcTFKcjdFZFliVXRUa1RYMkdXb1Q4NWhFMUhyZk01djFvS2xhaUt5TVFOZk0zUTJ6cWdGUlVSS3hNT0tneWpuWnlDaVZmd0d1M3A1SFkvWWJxUkd3eG5uNUVjQmx5Ry9FRXZCME5meThSdWxqSU1IOWhQcWp6Um5tTXBCdkpXbzhiWkI2azhDU2EzMURwbGxoSlJvL3kwS1A2THBpdEtYcGZaWXpvTnJIbXJ0R1l0M0xEV3JQSXFSY1YrMm5Fbkh1bnNkVnhYeEJUV0NYb2pmTnRKYVg4R2RLZTF0WU82MVZjVnFpekRVdWlKYmVFMXRGUVA4ODBpVTFkK3dHMC8xdlNPUENtaFdORmVob0Y4cVcxRk9rVGFCSTlTUDk5MlJjcjNhSmtmeDNYaHpSTFNDYnZkRmRHSFVxOEUraFczOTVhUWFxQXRWN3hNTCtvQkVDUlliNit1Q2ZSdm9JdWVRWndpNllzMG1rR0t2a0N1TUxJRFZyaUgxUGMwUytFMHRkMjBCdmdGTDFGN29yRUtad2dUeVVpak1mclNiV3RpL1VuWWFlcjl3bzlnUDZCcjVDZWtGeDhnYy9VZXVzdGpoRytNamQ3Rm9hNzd5S2J3Q0xuNzZHSFVtL1Rid2VGRWw5NmpPN0tEbzRraXMwZlJ1NE5qWTNkMlhUMERnOXBmWWVJM292dzdFZndEYjVKRFpUeEdGWDhsRkFvTjUzWXArTHFXa2VzbXJ1TWNoZ21wbitwa0FTUG82cDBsV3FNazBiUXVOa09VTFl3OHd2Rzc2THZUTmtKbU1zNDI0Y2ZvU1pOa25GcWVySi9BRzBsL2dRQzE3aEk1ZUpaR3B5aHEvV2g4TWlSOWxURE93MFllMlg4QVVFc0RCQlFBQUFnSUFJU1FhRStBdk5oYU1RNEFBSjB6QUFBb0FBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VTJsdGNHeGxVM1J2Y21GblpTNWpiR0Z6YzgxYUNXQWNWM24rM21xbGtkWmp4Wlp0MlhLY0tMRmxSNGZsbmQzWlM0N2lva2l5WTVDVlZGSnNGR2lUMGN5c3RQRnFWK3lPWkR1a3BiUUVRaURoUGhLTzBGS2dMYVVOUnlRYkpaQkNTd3U5QzcwTHZVL29BVzFwRzlyUS81K1pQYlRhdFVhV0VrZTIzcnp6LzcvL2UvLzczNXMzK3Nwem4vMGNnSWpvQzhDSEp5UjhzaEdmQ3VBMmZKcVR6M0R5SkNlTEVwWWFrWlp3TVlCTCtLeUVaUWxQQmJBVlR3ZlFpTTlKK0R5UGY2WVJPUW0vRk1BT2ZDR0FMK0tYdWZKWEdyRWc0VXNCN01IVFRWVCtWYTc4TlFsZjNvS3Y0TmNEMklmZjROeHZic0Z2NGJjNStSMEp2eXZoOXdJNGdLOEdzQjlmYTZMYzczUHVEN2pqSDI1QkFIL0VkWC9NeVord2hEOWx3WCsyQlYvSE55VDhlUUJCeHZVWCtFc0pmOFhhL2pxQU1QNG1nTC9GMzNIdTc3bnVIemo1UjA3K2laTnZjdkt0QVA0Wi84SzVmK1hrM3pqNU5pZmZrZkR2amZnUENmOFp3Q0MrSytHL0Foakdkd01Zd0g5TCtCK0I2OGV0Yk00MGhqUkxHNXpSTXRPbU1ieGdacXd4TXorWHplUk5BZmxrSm1QbUJ0TmFQbS9tQlJwdVBUazZNRFlwMERKeXI3YWdCZE0wSmpodTVWS1o2WnNGdGc3U0lFdkxXS2UxOUR3TnZ1YjRuYU9EZDQ5UDNENDJQRFEwTURFZzBPalVERThVc2ljNHU3dlVaZkMyZ2RFVHcwTjNENThlSHFXVzlwRnNianA0enB4Uzd3MXFVNm1nUVVDdEMzTm1QbWpqSkowTi9hbE15am9tY0tGek5hU3kwWE81ckpYVnMrbmdHUzZXdCtpNUMzTldOamhJUEpESWxKYk8zK3hJbXRXc21lQ3RxZW1UR2N1Y05uTTFhcnRPQy9nSHN3YmJPNUxLbUtQenMxTm1ia0tiU3B0TVUxYlgwcWUxWElyTGJxWGZta2tSbHgwanFXeHdMcTFaeVd4dU5oWTB6TmxzTUs4SHgxT3pjMm1UNTBXYk5zbkFhL1JzeHNwcHVqVmdHRGt6VHdQcmJkd0NlMnViSjdCRkw5bEQ4M3g1ZTJrMnByWDhIYm1VVHZCYXE5dnA5QmxKemFZc2djQ1FPWmN6ZGMweURZRzJzWG1TTTJ1ZVR1VlRaT0JBSnBPbFdVcVJMeFNGMlpOU0drUEM4cHM1WGFWVzYzeVFVQVlIWGM1T3NGWFpoWlRoVHRRT2ZYV0R3Q0Z2QWdUdXYxTFFKSFVpcDJYeUpKRjRPYVZsdE5vT1Zkdk5XcXhWTWdSdVhGT053TUltNC9iTWR5QmZqQzlFYzJkWE5hVTY5UWlPa2ZkYjVxQ1dUck9qSmVjenRrS0IvVFVEd0hHM0QvVnZHazlOWnpSclBrZmVlOHlUa3Y3cUpCOGpZWFY1a3h5OHY3UEdOSGkwSUdPZWM0UGdxemNncWI5bW4xblRtc2thK1dET2pkVGwwelJtNm1acXpuS3NtV1pyOWxKYVBkTFRFcjI5YzBOYXVoeno1cTFVT2ppU3luTk0zc296WkpRMmtVRVBrYTdqOGpzUlJ6U1RLMnhXQ1hYTGNLbDBKbVhOakdTbkJicFhlbWJCS3p0Vzk3MTU1V3B5alJHNFpVTmNrQ3N1c0JibVFXRGJhbWFhQ3FQSmdsMWx6UU81bkhiQjdkTzZjczhnS3QxOW83OUNYcjkzYTlrVjdxcW1yMzhUcG9hRmJ4MjNOUDNzS1czT3hpcmhXVG9vU2ZpZXdEczMxN3MyQysvMSthcDlqcWV6NXh5eVI3emdmaFZSYkFXSHJabmpxYlJscjJsQ2x6UFpoQVh6ZkxBZ2pZOHBTYnVIZ0hvRllnWGV0b2xvTm92Q2M3VXhEWmxKYlQ1dDNack82bWZ2MEhJYVlWeTViWGpwWHB0TTJsVzBuTk5kSUxoT3NSU2N6WXpoRG43cTZ0aXdXVlBnVDJjMU9vQzkvMm9kZmIyZFlCKy9pcWNtYndqZi9jSWZScjBCZS9TcUhOeThZV3N3ekxsMDlvTEFZMVVYMGVaeHRhR1RtTXl2aHluZVQrM1RXSXVaMGVsZHpiRGZWSFB6T2xrajhNeUwxZ0F2Z2NLT0JCL3dac0pHM0dKRDAvREZGek0renl4LzZNb2RaUjFCYTBORWYrbEZEdEV6MXgvZWtNZThVSFIvK2NXUDBqUGpBVTNYelh5K1ExRVVPNkI0R0xiRzlaejNveisvcEhTdEpPenliMisrOHdvbklVN0NBa2ZXcDRvT2dmMTYycjA1ck91MHJ5ckdzL001M2FTek0yOFRLOHc4d3R6TCtGLzhuOEQrdFZrUnZseE1TU2d4SmFKRXcyb2tvWVNpc1pDaWhKUm9QRWJjSnBTa0VaMktPdTBoYWdtcGZXcENvZjlPUHFIU2J5aEJlVWRDVEFrcmlWRElsYUtxSzZXUUJDcEZvekVsNlVoUUlqR3VVZnM0VGFwSmN4VVdxcTVFb2tSVUdocFRWTjFwVWFtWHFZUjBHcW1HdFpDVzFJMitVSVNraEtKeHJpTnRaaVErRmVLNmFKOWJaMFIwTTZicVhCZVBSdVBScVpJT0drbHk0MVBSbUoybjJtaW9MNVFJUjhQMEpPdjZTQ1hicVZBdXFYS2Z1TXFvRWx5dGxqR2d4SXlWMkJscElzUnlpUVZYejFUQzBVTTFFYWZOR1VHbE1PbU1Pc3ozS1lSQWRYN2pTYzJNUjJKcVhBbUhURlhSaU1KSU9ONm5ScFJRS0JGTmh2Vkl4TkNUOUU0YVMranhVS2d2a2RDMWhLTEZrNm9lRHlmRDhUakowbFNhRGFXa3VZL3lTVk1MeDZLeGNGeWpmMkZWaVNiQ2loWUphUWFCTVVLSzBSZU5rV2dsb3VzNlVhRkZUTVV3b3BHb0VUTUpaVmd6WW9vUmpwaEdyQzgwcFU1RlEwU1FHb2xGaUp0a1RJK3BFWlVWS1JyVmhtV000emxPdms4SkhYc29FUUkzckhWN0pyQ3ZWaGUrZVpDRVR4WjF3aTl3N2NwdTNEaG1KczBjbmFkb3ZYUjRlSjlSR1ZNOUp3MENPNnVGTTFsSW9sR2dxeGFpYVROajV2aitPSGhuS21PRm96RVcxaVNKZ0N5MkNGa1dXMFd6TnlnUkdUK0lNVnJSNGhxQkhWV3VSU1E4SzR0dFlqc3JhSkhGRHJGVHd2ZGtzVXUweW1LMzJDUFE2VFZVQ1F4cytGMlBwL1VUc21nVGUyVnhMVDR1aTMxa0xSYkVkYks0WHV5UlJUdnVrV0ZSSW00UU44cDRCVjRwaWYyeU9JQ0h2ZEVSbFVTSExBNktRd0toZFY4enlPSW0wY2s4ZFVtaVd4WTk0ckFzZXNVUkdXL0d3d3g4Z3BNWlRtdzd6a29pS0F0RmhHUVJGaW9uRVU2aW5NUUVycnZzaGlLd2ZSVlQza3dNTWNLNHQ3Njhsa1JDWUZmVk9SWm9YbmtsUmJ0RnFlS2t4UjdLTHhYWG1lZnQvamJ3NG8xQXlTMHVkRjY5emZOTjFWNHJyOXJYc3dlZVh6U2VQMVk4c25rNE51ZDd6NFBQT3lEUDNHeXJDSkw4TFppL0JyTDdIK3g4UlJtcTI2ZnVOZldxbndWdThuU2taRzNSbW9hWDVGV1dlZHgrODd5cHoxdG02ZkE3VGtQVHB1My9ZNlkxbjZNTlQ2dTk4SXJmbE1yVTI5KysxenhvRjBhNnJ3VnR0VDc2RU1oZEplQ0QyWFRhMU4xUHBVM203Sngxd1kwb25WWDQyN2ZLdXJJcEZiakRnMTNyTkNPemVUSEsyNWNqZno1MW4ybWZ5RTlTb2ZNazg5V1lLc2JVMWhXMEZHSXRqWk5tdFB3b0JWeDc2RjAwTkdNWGRoYjZsM3NtZWU2MGFka3hXTG5NeDhJYTd3MTFhUjY0alNTY3pCZzBJVWJoZzlRdVFsdE5XU04xZFMrZkdyTnB3ODNXYVliQlk2b3NISUsvcDlhU3BzM0h0SU40NlVQRnJxbzN6S1JoVnBzVE9OcTU4Z2E2OEdWMWhVL1V1bWR2SWVpRGxYOTlzSkxUNHQ5KzVKL25tL1RWT3RrMzlxNTBUOXNwaCswYlB2S1dCdWV1VDBCZHk0MnJXdFJNVStTRWo0bnNYRW9YR0tvU2xiejRqM05nS243THFUamlGT2FoQ0h1N0EzdkZEV1ZINTZwd1Z3M3lOdWRLdGhRZ0JDNTFyb3BsTDhSbDUrVzNMSStYSzA5ZElmYU4zeUp1Q3Z6UGJ5TDE2NzRwMmhRTHZyQzVFM0IxalBCMzNzV2g0cUNITTBYWGFkd0lIMjREVUkrOWVCbEdJSENLU2o3VW9RMmpaZVVtS3Q5ZVZtNmg4aDFsNWQxVXBuZE15dStFbjErRFNNS2RWTXBBUWdNOW03dGI2bm9POTdiNTIrcVg0UCtrUGVZMHBmeG5lNENLcllqZ0RPV09PYjN4Y2t3Q2R1NHVXd3ZuNkVYUDd0Mk1IOElQazN6TzNZMTdTQi9uTk1yVlk4b2VwZE52QTQweTZNbG9UTW96bWltcXJhZW5YRUN6aFBwS0xIRnNRY0xHRW5INkZySElSU3h5RVl0Y3hDSWppV25TeHZwbUxtZDlRNlhHZnJMK2xuVlluOEs5NjdMK2JHM3JwVW9zTHlIckI5WmhmUUZMd1hxQk5HYXBqZldkZFdYMkxLTnhzcVdwN21rRUxtS0wvMm5JazNYTDJEclp2WVRtY2FwWndqVWozVDB0MnhheC9Za2luQmJic0NId1gzRHV3M0Vjd0FrYlZxc2owb1YxQUkxRWNwYlV6dGtqWDBXNUhQSXVnQ3k1TFlNN2FBTm9JYzBCMXJ4anNtY0pPMW56UmV3aTVhZTZEeStpdFZMMXk3Q0xmSHNQcllKMjhueFdmWU1qck1qSVFiNkVJSVh0eEN1RDhMa2c1cWx1b1FZTHV5dFkyTU1zdEszQndqaUptQ0FXN2lSN1QzdGs0UnpPT3dERUxRUmJvdnFIdWorRnZUMkx1UGJVTXZaTkhyNkU2d1NXY1AwbzVkcnA1T1J2ODEvQ0RRS1BZb3B6TndvOGcvMUg2NWR4WUhJSkhVY2IyaHJhNmhkeDhFa2NjbkkzMVYxQ3A0ODZCUzZoaXp0dmV4TGRicE4vZFZOUGIxdkRJZzZmK2RqM0grdDl3blpNdHErYkxBTTVWaE81MUc1eXFpZ3RwMk8wb0c0ajE5YUozQjhseDM2QUhQZEJLaFVXeURIeWhBdTRqM0pSQ2tHdnhvL1lqdnBRY1ZvZW9sR3ZJUWFhOEZyOEdQMXljTXJqeC9FVHhNUHJYTzZjdGdlS2JhK250amRRMjNiNG5rTzdoQWNsdkZIQ1E4L1NTbllvZlJNSmZETWVkdWYwcFFTZko2QzErelBvN2JtRUl6NHNJOGhUcVN3aVZKcStCbnU5VEpkTldXc1JaaXNld1Z1S1UvWldXLzdiaW81YmIwOTgrekxDa3oySHV4ZWhMaUV5MmtzVGVCSFJSY1RPZFBjdUlsNVMxR3k3NWp3OUZ5Z1FuN01WZGpzaWlncmI4WGE4d3diVWpuZFN6a2U5dDlzZzZsd1E3eUplM28zM3VNSHJIdklhWnJaNUdiN0piamRnSkNxTnU3OHNXRGpoQ3NWd0pZckIybGNNVjNYRmNPV3ZFcTVZLzNzdnA3K3ZVdjlyMTlUUElXbzkraDkxdytVRTFUS0Rja0gvRW81V2FuK2dqR201cUYwdWFwZUwxanNCc3M3VzhGaHREVGRYYW5qam1ob0s5cFUwdkEvdmR4M3BQamZrZDVSaVgyOHg5dlVmOWJmNFNHMUxYWnYvSW00cGFYWUMxc08wTmg0cFk3ZkQxZ2s3eDFZSk84YzZmWGJ1QXphN3Uya3oreUNoOUxzKzliaU41MFByeDNPc0VzL2JTZlk3YXVCaERyemgrVWtiejA5Um1mRzgzdDJnRDVYd3NKY1ZBZFhiZ0hvSlVmMUYvRUFsb3ZmUzl2Qm8yY1o5cUlqb1VKR2hRN2JYK2V5YzV2cmZJUnVibjBZMzI5Z0tHN2VEOE1NVkh2aysvUFNWb0gxSkpkb1BrcjdIYTZBdDhMZCt0QjhwUjd1dEVSL0Z4MXp2SHFiUlBGNGlUSXNRbFk3ZFViYW5TdmdaTjBoSitGazZSUW83OTNQNE9JMW94TS9qRTY3SWx4SWQvTk85aklISmxsdnIzVTEwY0pKWUdCcWY5QzlqbUxQSG5mMzB4S2V4bDg4M29peEU5cExHSStpaXB3Ky9ZQ1A2UlpJS0hDVjlCNmgwa2pRRTRmenNjWjliM2Vld25UWmkwSDN1cDIzcWZqVDlQMUJMQXdRVUFBQUlDQUNFa0doUHNsOGJkVmNEQUFBWUNBQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl5TG1Oc1lYTnp4VlZwVHhOQkdINm1GQmJLU3VzQjNoZFc3WUVzb3VMUmV0QktCYTBuaHNRUVk2YmJzU3paN3BiZFdSUi9rcDgwRWZGSWpKLzk2djh4dnJNMEFxVXFSaFBUZG1mbW1mZDRubmZlMlg3NTl1RVRnTE80MVlNK0RLdUhFVU1jSXpFTTRiU0cwVjZjd1ZrTjUzcWhZVXpEZVEwWE5GeU1vUk9YWW1TYzA1RFhjRm5ERlFaOWtkdkpwNEZqU3N0MUdBYkxybGN6bm9uS21YbURWeXlqeWlXWFN3M2hHNldtVFk2aFM4NVpmbktFSVZ1MlhLTmhjL25VOWVwalJsWFVYY00zalFkaUlSQytMTG5lL2NBbGYvTHlsVnZlY2l4Sk9lK2wvc0R2OTRUU013elJvbHNWRFBHeTVZZzdRYjBpdkllOFloT3lvK3lhM0o3aG5xWFdUVENxQkpEMktjY1JYdEhtdmk5b09ieDFWc25SVVJJVXBjZzJ3L0ZVZWgxSkdUUnNZbGNURkpwTFVUVWVLdUFjbVd1ZThBTmJVcVpFZVo0dmNpT1FsbTJVTFYvUzVzQkducVN3eVhXa3hUYi8wNElvcDl3VmloV2JlRzZLUmtoVXcxV0dubW1yNW5BWmVCUnVhU3RrODZzNTYxek9HUVdyTnVWSVVSTmViaFcxdVZNenBxVm5PYlZjZTd2WndtWkx4V3NYNVY3YnVGdVpGNmFTL25JenVFNno2VHBtNEhuQ2tVYVJ5cTJLa3Y5UENzTGFUcnVCWjRxU3BjNW1iN3ZlR0ZhZTFJb1RqbW03UG5uZUZuTE9yV3E0cG1NY0JSMDdzVXZIZHV6UTBZK2lqdXVZWURqNlcwVWFTanB1WUpMaHdLOGFRTWNVVGxLcDI4bWl4bXRWeFJDWkxTZ2lOM1VjeENHR29UKzVBeHNDcmg0ZHc4RmZuaDNEempXWEgzM0trTjV5WG9idW1wQnFUY0ZTcWRuQytvWnVlSzUwVFZlbDlnUzUxOGxLcGFhVDYwaXBGMFdNbTZidy9lVHBFWHAvUGZuSEw2TE4xN3B2STBJc2lEdERmMnFxN1ZWUXltYTRIWkN5eDZtZlhZdS9SOUl6T0VML0EzSFFBU0tTU0todUJHaWsxcVEvbGc3NjlXT0FkbmZUckloSWlNUXoyV1d3ek5BeUlwa1ZkTHdtS0lJOTlPd2lRMkFCZStrNVFCaVpZaDhPQU9GTWhXVDBvZTZpTUNyZ1YzU0hWZ3VaTnhUdkRTTHZFQzEvUk9lamJNZDdkRVh3R2RwN2RETWFlN0xSRmlTVzdkeGswOVdDOU5JM3E3VTZya0IvRldwVGxBZUpBaUNoSXlEbGkwamlHY2J3SEpOWXdtTzhRSVB3TlRrTFRUazZCQTVUNWVpNmhpdldSQVpwZG95UUtJMUpIQThMY3lJeFRwSlAwa3hKTnNJU0FKMlp0OWoycW0zbDlGV0RacXExY05GbXdCVFM0WmhCTnR3YndpbnNwMW1NclByQ1d1TTdVRXNEQkJRQUFBZ0lBSVNRYUUrV0FBRmh2eEFBQUJNdEFBQWZBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlZHVnpkQzVqYkdGemM4VmFoM3NjeDNWL1M1UUZUa2Vib2dSSklHVTEyakpJRWJ6dEJWUmxpNkNBcEVUU1ZDZ3BzYmFDSngvdTRMc0RKVHFPN1NST2NYcHpFaXZWY2hJbGNtekxTa0pDVnV3NFBYR2EwM3V2ZjBPK0wzRitiMmIzNmg0T292eDlBWGw3czdOdlh2M05temQ3ODRYLy9jem5pTWlpL3lwUmhjSVNSUlNYS0tHVVc2c2x1a2pWRWoxRDd5cFJqZFptcVU2TkVxM1R1L20yeVE5YVROZG11ZzIrWE9MTHMvemd1Um02WEtMMzBOZnk1YjA4Nk90SzlENTYvd3g5b0VSZlQ5OHdTOTlJSHl6Uk45RTN6OUMzcVBTdEpkcExIN3FPdm8yK2ZZYStZNGErczBUZlJkL05sKzlSNlh0TGRCZnI5bjMwL1NYNkFmb3d0Mzd3T3ZvaCttRytmRVNsNTduN1Ivam1SMVg2c1JJZHBCOVg2U2RVK2ttRnB1K3QxcXZ0K3hXYVdOaC9YcUhKbzQwNFVlak5LOVY2Y21wakxVeWE1NEt3aHA3ZEs0MG9xSjBQbWxXK3p6b24yeGVyTFlYMnJsUWJsZlZhMEU0YnpUV25FaWRyalVvcnFweExXdTNESUZvTHFuV0ZibHA0Y3VXWjRGSlFxUVgxMWNyWmRyTmFYejBzUkFiTlZUQzVvZUN4UWpNMUZudXE4YXhDOC9KNXU3cVdWSVF5eDRKMmNnNTNJRk9xRUNDZnJ3WHRpNVVqMWRYbGVqdFpUWnA0T0ZFZkhQNUVvNTdFUGNOM1ZERytuTFF2SHExVmszcjdIV2RXMk9BQ2RhYWVUVUx6R1lYMnJEU2FxeFZ4VTFsdk50cU5xRkdyUE02M0lMb3VhaVl4MkZTREd1eTZyWWMwYWw1ZWJ6Y3FSN3ZQUVQ1OVpQblVRMmN1c0FMUHRadEIxRDUrQ1E4VmVucWhaMlFRVml0eDBBN2FsOWVUVmtWUUhCNVdzTURCQXp6RXlQTkJiU05oMFZPWHVOV3ZZNytrYzdpeWY1ZEJuRWk5YmgramxrS3p0Y2JxdWNaNk5ZTDVLdHJ3ZEFBNzIxblhYRktQZ0xKWWtKK3RydGFEOWtZVFd1eXMxdVBrdVNTVzZpbTBTNXF6MGE3V0tpdFZnYVZkOVVaOXVaL3ErbXpVbzBFeldFdmFTYlBGVU9nREs1VExBS3NOc0x4M2E4UHZoOGpUWTRZdzRaa2tUWnF3S2huTGp6bnVQTnNPb25lZEROYUZVaW90cWZSUmxWNVE2V01LbGM0Mk5wcFJjcUxLMnM3eUREckU0c3Vra2E3U1Q1WHBBZnBwbFg2bVRDL1N6NWJwNStnbGxUNWVwcCtuVDZqMHlUSjlpbDVXNmRObGVvVitRYVZmTE5NdjBSV1ZycFpwazE0dDAyZm81VEs5UnI5Y3BzL1M1NWpScjVUcDg4emxzL1NyZlBzSlNMK012OFdUSnhmaldLVmZLOU92MDIrVTZUZnB0NWpEYjZ2ME8yWDZYZnFDUWdmUG5IanNUQklsMVV0SnZCQmViaWN0M1RtNFVhMGZxaURZZCtDdmJkak93WlpBNEg2VmZxOU12MDkvb05JZmx1bVA2TFJLWHl6VEg5T2ZLSFR6eFhaN2ZhbFMwVjNqa0c0ZTBnNFoycEpuVzdaQyt3cG1GeE5YSHNibGJOSzhWSTBTZGdsMCt0TXkvUm45dVhMcmc0N21hWTVtYWJaaFdwNm0yNDZ1YWJwbXU0Nm00VWthMjZHTjV4cWUyUmErZFVjTCtON0FsNm43dW1PYXV1dHJObytMa3dTOE1ONDBlTFRwOHpVMTA2UXJnem1aSUdFcXo3VmRONEt3YS93VE1tek5ja3pOU3l6SVNUMWR0d1RueUhZaDBkVHR4RXlnb3VqVjRTTFJhMFpwYXNWMkpIb054NUM5bnVlNVZtZ1lzamNNWkc4WU9aRWRScEt2NlNXeU45WXRQZkpOVC9TQ3EreE5YZFAzbzBDVHZXNUdtd1phcE51NjFNSHlUVkNIWGQ5MmZlNTdBejVIWDVSNTNuVDR2NkhCdm93NlNQdXBUVnZHeHV1TERVdU1MTnRoaWZDKzdtbWU1ZWtjQlFQVVRDdStUUjREM3Jya0hjUDJOT0V4YWFvN1BmU2dnUThNMjJBdTZOZTd6M3pkaG14Yjl6T2VQdTQ4VTNEVzdCQ3RYSE5kWjI5aHBNYmp3VTNyOEdEWmFjcmEycHI4NTRzUDB6SmZuYlhKdUZnaWxoaHRzbFFuc3dKY0dGeU1xTXdEL1JveVo5L0t1ZHRhN2hVZmR2bEFhazg4d0hNb0hycm5qWWlIN3JyYmpJY2RwWDN4Y0FyaUljWjI0cUVIeG9oNFdFNDY3azlJM1JaVkQxOXphSjQ3d3oyRnVIQ3VHUmVHWVc2QkMwTUx0NFVMQTArdkZSZE9GeGRqc0dFNHlSQTJqTURweFliVHhZYmgyVVBaZEFBWm5tN2FvSGVnbUVDVmhuc2ZrdEVqOU9CN2NISmhYNFlkNFZQZ1E3Zlo3K3hmRHgrSlN2Wkt2NzZSTTA1ZnIwZmZPTzZsTHREV3lMUTFoclRWaFc2RzZORzdFZkpFUzNoRlBIT3NidGJ2NEJ5Y2UrVXlwWXdkdDNJYUkreWowVmh5SGtmUGt2R0d4eTBlMFNmRlJJY3JlVmg5OXZrU2t3SkhtdlEveDl6U2N2UUpIUGlaQmJ5RzRibnBHOUsrM2xtRGY5RFZzMHpCM1RkWUovWUw0b003M3haKzk4MjROd054UER0eE12M2dkZURLRFBYeGNSckFsSjVIeE9uWXMxVkVFbU44UkZMckRVZkUwcDMveDRpRS91aUlvTFlZaW9qbFJGenJhRW4vWE56R1BMUzg0ZmhtM0hTclg2NmZEbE1HbnFBTWV1VU81bVZZWnlDN2pkU2xBQ1h3a01qdkhkOUpuM01MTW5TMExPYkttUEhoUzI1MXhodHkzc3ZhSnZYSDROR1NjbGl2cnB4Y3FzWGNvYjhoVmdpdTFuZ2srNVZYUnR2eUhGZ2s4bzVjRmNGSVZKa3dUT1FpMWhIZUJHWVlGOUNUWjQzRjJaZnZtQXp4NXNyRnNnM085VUFDeHJBa0lNVEkvRzc3c2FqYWVFMWhuOXN1endBaGpiV3lMVVlodmcwNXF4aFAyU2hIemc5ZnpDNU5reGprbHNHclZRZ2JSZVVsbm1aelVLNzVQQStZaDhjcmx5SGpKVlkwd1MxZjg0YTlDWHVjSW45bXZwVFNoUjk5eTBjV1lMUXpuelRGU0ZONFRNL3h2aTFVbUZ1akFyRVRueTRmRVJFalF3ZTZ4NkJqMEJvaEw3K0RSVHA3UjFpbGl4VStSNGdoWXBnanhCeUpFSjRiWmc5Q2JJRVFXNVBqN1I2RVlQYWdHdGNFcHZRQmhEaEIwb2NReHpPM2dSQWU5VVlSZ2hodWhaQkNqR0JuNXJ0RmZ1WE1rQ1BGMTQyc21oSWU1YmlLTmxEalFWdFhva2FzK0k2MFZGQllmWG5BenVYMzFvalk3V2hqVUdadUwvZjBZRXJ2WU1vMWpUR1lBdWlLck8vT0VidlBpZ3c1cnAzMDg4MXpiU1M4eFBnb3dpOTdTR0JBMWtVYVp4M1BaYm1vQUhXWjFiRG5OU1RuckY3MnRHenRrQnpCMCtQYW42UGpoWjZJSFdoOXJvWk5rNzNMYmZuY3Q3TnhKdmdiSEd0SWRVVDFiUTE0ek9KYzRYT1ZadXN1cU5FUzJaVHpvdWhGajhrNjhrcm1DOThtUHZ0ZDVrODVFd1Ftc1FJWmdhekY4M3BPckVKbW5xZkZMc1dYT3dhdTd6dlZCQlNTK3hqNFdid3hzR1ZsT01UQjFjYnRWK1Mwa2xqc3N4VHpPMXNKRExuU1orOG00TGNNMVhvWDRVS1dPWFp6MUx1VEtseHQreVZwUmZYOUlBcEhaR3E1dyt2YmpYdUJMcjJtVy9JK2xwamY1dHJhUDh1bG5ONG9kVFVYODhmSTMvSndyTm1hM2lwallHYTVzczZRR0pVMUlWZGlJb3Eyd0dkQmZjTHozZGRkRkkybWxyZ09VT1JxdWhIck9sUkV0Z2xDYktTeDE3Tk5DelM2RzZXYWtTU2FiUm9SOGtoc3hWRnNtYUh2YW41UGRlT0lGSTlkc216eE81YWVXcTVRZCtzTlpCM2ZHYmMvMG9yWHNqRlp4L2Y5YThnNmJtSFc4VVRXd1lxWXR5VXVNZGJ0eVM1T2xsMjhudXpTeVQ2K2xlc3VLeWF1TjhEZkhwRmZlS2ZCWGtQUVFHOW5lMi9vTXBSWkFybHovREptbHNBMGl6T0xwM2Q0bUo2ZWMrblBGM21sc0wyczA2bWRlT2E3WWk4aHM0c3BiTTJ6UzJlV0RlUUxpelBCNjhrNVdYMmQ1NWJCNlBzYy9XRWtkMnRxeGdPdjdyNHo1RU91ZnZYY0JpL0R2S1puOXhiaUplc1l3NHQ1cGd2NytJNzlHTWk4SW5lUjhwMmlCd2pBUGtQTVFIN0xabmllNkhGNTVYRlRPd3gwenpkTkN6QUlrelFCcEJ6VERlekF0S3dFUHNYUzZMZ09OajVhWUNkV0V2bW00L3FHRzZFRVNaSXdkYkZhUmZnaytNVHk0M091NTZvend4R2ozUmZvNWVxZlAzMXZtRUx4L25mVUc2YlFqTGIxaG9ucnRHdDl3MlNQZnIvVXlWNzI0RjZVRVNXUXBQa0ZGWllwM3l1SG9mdTZLeUY5R3prcFRNeHhlN29jZ1NOM2RVQVY1eVdCTDFObUhEa2V1WWF6aFFtMDVXdUc3ZkVyQzEyTGpDeEhpSWphdy9saDFQcTM5VHdvV3YrRXpBejdRaGRkN0NJWXZ6Sm51RG5XZlpIUE9LdHc1U2JtUjU3QkRGbmp1V21FNmtXendzUnpYTTFCL1J0SGtlWVlUaHBhWG9KbEk3VE5NSXFqTkk2UW04TlljOUxZQ3JIQytZRVhRMlFZWTc3NDNZL0FkN1lTOWFOY3JuNkZPSThpYnd1Y1I2RzJMWnhIcWYzbGY4T09Xa2FpSExPMkQrR2EyUHZJdHRIVHRncCtjOElUWDVPN3FUekhla0svM24xZjlzNmFkMHRXMFg2cisyNUo3QUxaZnV6eE9ydTZHSldKSyszTzNvN0RDL3piQmRmTy9Cd2xYYWFCcHN0NmlaOWd6NXcvZGVXYkMwR1RyMU9pSCtzNHIrVjJkMy9ZcytNRGpSdG5HRWM3c09RdVhiUTkyUzl0RjdQQjViSDh6ZzF5TXdsQi9qWk9sK3VGaUhuTXU4ODB3Y0pyTzRZYjRKOWhhanpwTkRNMElqUGcxeTZXWXhrR3Y4VHhJaWMwN2RnMjBpUUNHT3hVUzFJN05UVmtYOE95MGpCeUF5dTI0QndOU1FVT1ZrZzVxTkpIeS9RWDlKZGwraXY2YTRWdTZQN3krMUN6R1Z6bW4zOVZlcUZNZjBOL3E5TGZsZW52NlIvSzlJOTg4N0V5L1JQOWM1bitoZjVWb2IxYi9FSmNwbitqZnkvVGZ6RC8rWkcvemZPUG0vOEpncEhuS2hUYTFmMnQvM1Q0VEJMMWQ4bWYveFY2eTVhLzFTdjBwdjRmdHhXNmVjUWhDMWkxc0grTEV4aTcrazlYTE1jSzdXeGRicldUdFdOSkdtelV3UHJHUGdhU2lzOC9CRzF1SzdTNE1QeDRjRVR2cVkyYlJ6eFNhTGJkV0s2MzJnRmJPTmNuTmV2RzZPdUhPaFVxdHh2SDF4dlJ4WlBWV3EwcWpzUThBcldManBVb3BJcXpFNmRUUkduaGtmMmp6cDcwaGtSNEExd2JHNnlXSElFQVA0cEl0Ukd2SkZnN25HT3V2eHZDMXZtdVZtZHpWZ1lETDA3UnpOWWE5ZFh6OGpoSHVaSDJtbkZUUjc4QkY4dzIwbzdwRHk0VWtHd2RqMEVJN0IyS2IyKzAxTlVraS9NMWlCcGtkbGYzRWMrTm9GM0pINTRRdDIyT0VNeDdWRFRoTm0raDZHek1lQzZNVC9sTUliOVhiNFJ5dmRFTWFwaU5zdkZRRkNXdFZxT1pzKzAvT0RSWEpCOWh1NjF3aHA4NThkaFpUTlNORnFSZnlzNjU3RnZZLzJUeE9hc09OY3NaT216MGNOQzZxRkNwZFRFdzg2Unc5MmhuOUd1OXYxaGU4bTVvMUlhUEh0dG9RSEMxVWVkek9Id281UGpSNDh2bmp4OTc1L0h6eDArZFUyaFBRWUk3TGc3L0lEelQ4aGlRUXVhNGcwNkZ1dDB5NmdTV1FsUGhScldHQkhUZndzaGpXdGtoa3I3elVVTUh1YVphNjdVcUF2LzJJbjhWSGxlYmhtdkVxYS9DYWZvRWNoWm13YW5PR2FiZU0wdTc4OW5UZTk1cFg3OWpUbXpVSTNiM21hUzkwYXdmUzNKUHhvbjBwRldnNkNEVEFpazNRcWtDalNaYjFmY2tJZ3N1NHdvYU5tdDUvN0JoVUY1cTBIczBTNkhUUmRwc3NUUU9IVlliT29ZMkVjUXh6NFJCRTRac1BFOTMwaUdxRVA5TmtNS25wM0ExY0ZmQnQ0THZxUU5YU2ZrMEdqdkl4SFZhZE41S0ZxNWxTVUEyT2ZpZUpaYzhPVmhaQTdOWjlIMXFrM2FzM0xOSkUxZG84Z3BOWGFIcFRWSlB2a0l6OTF5aFdYd2R2RUtsVGJvT0JKdFVSdGNtN1R5MTJDRmNtZ1RKb3FTY241U2t1SDNUSnIxWmRtN1NMdG5ZZmYwbTdjYWpHNjdRamFKL2JzTEludHkwU1RmTDNsZm9sazJhUjN2M25xV3AxMmp2aGZtcHEzVHJKcjFsYVZwWlVuZmZ0alRUTmZNUjJvM3JiVFJKdDlNYzNRR0Q3NFJIOXVIWlcra0JlaHVkb0x2cFNWcWdtQTVRaXc3UysvRDBRL0RlaDBIeEVUam5SVGpsSmJqbGszQUt1K29wNlE3eWFRbmZrL1J4T2t6M3dsbHo5RHpkUi9jTHFlOEY1d2ZodUFkb25SNUMzeVE0M1VSSDZDaGMvQ0xOMERFNkR2ZS9oTHNUOUJXa2dyZENEK1BwREhndlEyUHArdmRqWEFreU51N1pmZnNWdXVQVUFkaThOTGs0WWJBSDczeWVwcFNYWDZPN0xseWxmVXRUQnc5Y29iZHUwdHVXcHRHNGUwbWRjR2JtWnViVlYrbnRDcjFBQnhiblppYWZOdWJWdVpsWGFXRUhmWjcyYjlLQnBkbjVxZm5aVittZUhmVDRCMmVVRjcvMHhkZm9JRnc1UDMyVkZsOFd4ckVERGFDRFlLd0tRM2ZDeEZ0ZzBCNll0UThHTGNJVUU4WWNnU0VYWUVxRWRoVUdzS05TS0g4Qm42K2tGWmpsZ080K09na1RZUkNkb3RNQ3FCdjBLTXhXUk9zeHRIWkFTcDNPUU5vRVpGMmtzK2liaEtRemRJN2VBWGN0d2szbjBab0d0eVAwT0ZvcWZSVkczd0Y2U1hXaFEzV2hRL1VFcUo0RTFTR2ErQi9hbzlKVEtuMzFsMmd2emFyME5XaUsvMCtKNnp2bGZ5ajAzN0Jib2FjRmpJTC9BMUJMQXdRVUFBQUlDQUNFa0doUEhQN08zS0FCQUFEbkFnQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl3TG1Oc1lYTnpsVkpCVHhReEZQNjZERHZzT3NxS2lDSnFQSERZQmJORk5Gd2dlMkFqaVdZMUVjaGVPSFZuSGtQSmJMdTJIUTAvaXdNeDhlQVA4RWNaMzR3ZWpERUcwclR2dmZiN1hyK3Y2ZmNmWDc4QmVJV25MY3hocFkwSUQySThqTEVxMEF4bjJxOXZDV3lPdEpXelFvVlQ2Nlk3TXFPcGxUNlZoL1N4SkI4T3JQdFEycUNDdHNidk1tMVBHeDBHQXYzdURYaTlzVUEwdEJrSkxJNjBvZmZsZEVMdVdFMEszbGthMlZRVlkrVjBWZi9lakNwNUFza2JZOGdOQytVOWNkbS8vcDNyMjFzc3QzV2tjNk5DNmJqbDI1RjF1ZnhNazVmblVrMjBQTDZZMFNHZGtpT1QwdDVmaDVuaVBnendNaWRXb0FKbGN2OGlrSCt4c3p2Z3h1MGpXN3FVRG5RbGR2VmZBdnJuNnBOaXY2OU5XbGl2VGY2T3dwbk5ZanhLc0liSENlYlJUQkRqaWNEem03Z1NXUHVQRDRIZXRac0pMT1FVcXBwcDNlN0pmdStQUjVnNUcyeHFDNWxhUjB5Zk1tcW9pb0s5ejNWN1l6empIeFh4NXhLZFR1V2t5bmpHV09EWTRteUFCZytndmJGNUJiSHhCWTFMcmhwbzg5cXNzUmEzZUYzNWhVS0NPMENkemRmbkVSWnJmQWQzNjdpRWV4d2pMT00rYnRjNEZsSXo4Qk5RU3dNRUZBQUFDQWdBaEpCb1QyakJqNXVRQVFBQW5BSUFBRWdBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVJTUmxGRVpXTnNhVzVsWkVWMlpXNTBVbVZ6Y0c5dWMyVXVZMnhoYzNPbFVrMXJGRUVRZmIxSmRqYnJhcjQwSm40Y0JBOG1oL1Fod1lzaXVJa0xDNE9TamVRaUNMMHpsZGxlZXJwbnUzdmk3L0lVOE9BUDhFZUpOWk1GTHdxQ2wzcGRINi9xVmRFL2ZuNzdEdUFFVC90WXdWNkNSd2tlQzZ3WVZ3Z2NwYzRYOGd0TmorZXk4aTY2ekJtWk9VK3lwRGh6ZVpDZVF1VnNJSm02NHBWQUw5UlZaVFI1Z2UxMHJxNlZOTW9XOGlKNmJadjhtcjlhakhPQnpxZWhRTEtvWGFURzdla1Fhc3JmUm9IZFcxcXA0a3dPZFRHMmtRcnlUTzIrMWxiSE55enR4Y0dsd09xcHkwbGdJOVdXM3RmbGxQeEhOVFhVekhXWk1wZks2OFpmQmxmalRBZUJ2Y25vL0l3eXc1ejgzVFhaT0ZuS0Z4aU1yU1YvYWxRSXhKVm5xWGF5TWlwZU9WKytsRG1WVG9aTVRtaFJVNGdqNTg5WnU0cWF5Yy8vMXBSRjl5OWM3VE1hNlViRS9wL1lSODI2QTl6RnZRUlBCSWIvUDFaZzgvZmxQMHpubFBGWkQvNjVMNTZod3o4QldBUGZqUzBZdTBoYTdHRzl4ZjRTNzJEUW9tZ1dZTHZCbm14OTVoL2VRSHpsUndlYmJMdE5VSHpHRnI4SHR3WFl4b00ydjl2YWg3alAyT2RjQi92WXdmb3ZVRXNEQkJRQUFBZ0lBSVNRYUUvZDNiTlJVUUVBQUN3Q0FBQXhBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtPUzVqYkdGemM1VlJ5VW9EUVJCOUhXTVNZOXcxS3JsNk1JcE9RQkZjQ0Vvd0lFVEJSRHprMXBtcHhBNlQ3dGc5NC9KWm5nUVBmb0FmSlZaR1R5S2lEVld2bHRldnEraTM5NWRYQUx0WXlXTU1pMWtzWlZFVXlCd3ByYUtxUUhxOVhiNW1xSm1BQkdZYVN0TkZQT2lRdlpLZGtDdnpEZVBMOEZwYU5jcS9pdW5vUmptQndwbldaR3VoZEk0NDNXb280dzFER1hXTkhleDVBUTJNNTN5dlNiY3h1YWh1N0dWc0loa3BvOTNhL3FGQTZxRWlJTm9DRXkzVjB6S0tMVXNmTjR6dGVmZlUyZWw3c3FPOHE4Y2hOYWxMbHJSUFI5K2FnV1E5SmpqdkpBZ3NPWGRZWmQxOHk4VFdwN29hamJyNjAvUGJmWGtuZWR0VDdZZkdLZDA3cCtqR0JGa3NGNURHdU1EbVB6WVJLUDB5c2tENXoxcW9JTVdmTkRxQ2pTZGh6SEIwd1BVVVkyYWo5QXp4eEZFSzJWR2U4T3JJc1M5K01qQ0J5VVFoZ3dLbXVKL0dkTUtmd1d5Q2M1aFB0QmZZNXhNVHlVMGc5d0ZRU3dNRUZBQUFDQWdBaEpCb1Q1WlNMQmxPQkFBQVZBb0FBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5Tnk1amJHRnpjNjFXVzNQYlJCVCtOckdqMkZGYjAxeGFRaUJjUW5DY2kwSUNEWkFTeUVVT0JzVWhsN3FVUW9zc2Iyd0ZXWEtrZFpvKzg4WWp6MHlmZU9HdE1LU2xNTVAwbVQvQ0RIZjRBUXhuWlJQVHhKM0dNN0dzMWU3NXpuNTd6dEhacy9yeG4rOStBUEFTeWpHY3c2dHhuTWRyTWN4Z05rN05SUVd2eHhHVmtpam00a2poalM2OGlYa0ZDMTJJWTFIQmtrUjBpYVFWTE12Qlc3TEpLSGhiUHQrUmphRmdKVTdrV1FXckN0NVZzTWJRSVVwMk1EVEpNR3JZbmxaeFRMSGwrZVVMV29HWFBTMnd0SFcrVStXQlNIditXdFVUcHJBOU41aWxhUmR0MXhaekRCUEpGdWFONUJnaWkxNkJNNXd4YkpkbnErVTg5emZOdkVPU3M0Wm5tVTdPOUcwNXJnc2owandHTmVPNjNGOTB6Q0RnTkp3NC9wcERVek5rYnRTc1ZKeWJEUDBTNE92YzR2WXVMK2k3M0JYclBLaVFIcTIxbXpROHY2amQ0UG5wYmEzaWU4S3pQRWV6UEo5clpTNUtYaUhRL0xxeVpuakYyWkVXckhqNHVtUmR1K01WcFZNdHJjN1F4U1ZQem5Sb09RVWJGRUc5SWJoc2k1SWhhVlAvb3hWNzJxTG5DdCsweE5CUlhhSThKVzVXZUtFUmt2Ukp1VGljTkxiTlhWTnpUTGVvcmVhM3VTVW9ma2RFREhGOXorS1ZrRkhCSmtOc3d5NjZwcWo2Wk0yWFJ5ZEkrM3hPL3RDaWU5cFcxYlhDcVZxNjNydllXbEJQeHQwNTZjZUdWL1V0bnJabEZqL2VqR0ZDT2tNYlFYY3R4d3RzdDdnU1dxVGdrb29jTHF2b3h4TXFCdkNlaWl0NFg4VlZmTUN3ZEJJR3FuZ0JTUlVmNHBxQzZ5bytBcGt4MElpVG1iZTFna2swbEF1QnRrbXRpandzaGtRai9CdkNKNHRWRkVEZ0ZxNHh0RjFkVUZIRXNvb1NsaGw2UXQyeUtVcmFnbDNNdUlJWHVhL0N4cmFLajBFeEdXdmx4YWdZd2pETmFXWGJQMkJ2TFYwWUJoK1JMd29jaHVSeGR3eERkMk9KZzhSbEdEbTJuVlNTZG82OHA3VGozYWlWUCtNNEpTbGsxWFJSb21RVDNLL1ZwWWFULzdISlFwT1VGYmg3N2RMcXByNnVMK3Fabkw1MFhjL3BXZHBvZzhiRE1pQzBTYWEwYVZrOENJYW1KK200K0tLVnV2OEk2bGJMYmdzRkxWSGtJdU1XK0I0djFDQ3Frc2w2NGFrSzI5RU1PNUMrblg1UVFxR2lpUXk5eVV6VEt0VkphTWhIaVo1c3JoRlU2Y2l4dVM4UHRzUDdodkJ1WXNoNjdpSGJvdjdXVHFiQW9JUkpJWHVkZGhCVWVXR2VqT2t6bXUwcCtWcXJlY3JhM3FaaHdkTjA0SjhIMVNDd1JFTFdGUHJJYUtkN0FFK1M5Q25xemFHTkxpQ2VHdDBIUzkxRjIxYzBhc01ndFIya0EveEVMRUJmVFF2UDREa2c3RWsyUmhkdHpob1g2eUR1Q0dHM1V0K0FmWTMyMFc4Uldma2UwU3QzMFpFZEozNWxmT3dPT3R2dklkYUcrNGpmUXhlanA3cVBVeEk0ZlJnNFEvOTlKRUlzMGhSN0xNU2loN0N6KytnT2dZNmpLL1dNM3o3d2J4Z3hhbitHaWwvUWcxOHBTcjloQ3I4aml6K3dqVC94Q2Y3QzUvZzc5RDlWOCt6QS8xdXlqSkxmS2o3RENNYUlzUWVmWWh3VGFFL01VMHcwa3NqNFR0ZmpHMHVOM2tmdkhmVGRiaHBlTmV6SDZ2U1RkRWRJOGlLMVU2SCtOSDBieXVmTHVCQmlNM2dGejFLdm4wSitEclZmbEtUUEUwY0s2eGhGN0Y5UVN3TUVGQUFBQ0FnQWhKQm9UN0Rna1BHYkFRQUE0QUlBQURJQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE9DNWpiR0Z6YzVWU1VXc1RRUkQrTnIzbW1uaWFXTFZhcTlLSFBpU3RaQlZGQ2kxNU1GZ1FvbUJUODlLbnpXV1Nicm5zeEwwOXhaL2xnd2crK0FQOFVlTGM2WU9JU011eU96TTczemN6SDh6M0gxKy9BWGlLQncyc1lLT0pDTGRqM0lteHFWQVBaemJmZWFTd043U3NsNWtKTS9hTFozcEtDOVo1cW8vcFhVRjVPR0wvcHVCZ2dtV1hId2p0MERvYitncTl6aVY0M2JGQ05PQXBLYlNHMXRIcllqRWhmMkltbWZ5c0R6azEyZGg0VzhhL1A2TnlQSVhrcFhQa0I1bkpjNUt3ZC9HZU80LzNaZHpHeU02ZENZV1hrb01oKzduK1FKTW41OXBNckQ3NXVLUmptcEVubDlMaFg4bXBrVG9DeVBYYk1Oc2ZCVy9kL0tBdkZac2pMbnhLUjdhY2N2TmZuWHZuNXIwUm9TOWNtbkV1dkZjVXpuZ2E0MjZDTGR4THNJcDZnaGozRlI1ZVJvN0MxbjhFS0hRdlhFeGhiVTZoaklYVzZadys3LzZoZnVrNWNNcVpUdG1UMEJlQ0dwZ3NFKzBybmU0WTI3SktrV3lWYXJkTEphVW5OOGFhMklaNGZkVGtBTTNkdmM5UXUxOVEreVJSRFUxNTZ4V1djVVhlalY4b0pMZ0dWTjVxbFkvUXF2QnRYSy9zT202SWpYQVR0M0Mxd3NrZ0ZRTS9BVkJMQXdRVUFBQUlDQUNFa0doUGVLK2lsNXdCQUFEaUFnQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREkxTG1Oc1lYTnpsVkxSVGhReEZEMWRoaDEySFdWRlFSRTFQaEN6QzJackJIMkJiTlNOSkNhcmlVRDJ2VHR6V1VwbTI2WHRRUGdxd2dNeDhjRVA4S09NZDBZZWpERUcwclQzM3ZiYzAzT2Evdmo1N1R1QVRUeHRZQVpMVFVSNEVPTmhqR1dCZWpqVWZ2V2x3UHBBV3puTlZUaXdidkpHWmpTeDBxZHlsNDRMOG1ISHVpK0ZEU3BvYS93V3QyMXJvME5Qb051K1FWOW5LQkQxYlVZQzh3TnQ2SE14R1pIYlY2T2NkeFlHTmxYNVVEbGQxbGViVVNsUElQbG9ETGwrcnJ3bkxydlh2M1AxMVd1VzI5alRZNk5DNFpqeTdjQzZzVHlsMGNhUlZDTXQ5OCttdEVzSDVNaWt0UDNYWWFhWWh3RmV2c3N5Ujk1djlaaXV1V2NMbDlLT0xpVXUvK3ZhN3BFNlVlenlnMGx6NjdVWmY2SndhTE1ZanhLczRIR0NXZFFUeEhnaThPSW1YZ1JXL3FOZW9ITnRNaFkzcHZDK09DTjNaVTNnZWJ2emgvK3BzOEdtTnBlcGRjUWNFeHVvci9LY0gyQ20zUm5pR1grbWlQK1ZhTFZLTzJYR004WWN4d1puUGRSNEFNMjE5VXVJdGErb1hYQlZRNVBYZW9VOXh5MWVsMzZqa09BT1VHV3oxWG1FK1FyZnd0MHFMdUFleHdqM3NZamJGWTZGVkIzNEJWQkxBd1FVQUFBSUNBQ0VrR2hQVHRleTNaVUJBQUN3QWdBQVNnQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpGRjFiM1JsVW1WalpXbDJaV1JGZG1WdWRGSmxjM0J2Ym5ObExtTnNZWE56clZMTGJoTXhGRDFPbWs0YUFpMEZDaTBQcVJJTHlxSmVnTmlBS3RGQ3BFZ2pIaW5xaHBWbjVuYml5R05QYkUvNExsWklYZlFEK0NoVWV6b1NHNUJZc0xubkh0LzN2Zjc1NitJU3dFczhHYUdQM1FRUEV6eGk2Q3RUTWh5bXhwYjhHMlV2RnJ5MnhwdmNLSjRiUzd3aVB6ZUY0NVpjYmJRam5wcnlOY1BRTlhXdEpGbUc3WFFoVm9Jcm9VdCs2cTNVMFQ2dzU4dHB3ZEQ3ZXN5UUxCdmpLZEtoZEs2aDRxMW4yTGtPcTRTZjgyTlpUcldua213STdUZVpZbGgvSTdYMFI0RStPemhqV0RzeEJURnNwbExUaDZiS3lINFJtYUpZM2VSQ25Ra3JJKzhlMS94Y09vYTl6N0h1akhLU0t5cmVyMGo3V1RjR3czaXFOZGtUSlp5ajREdEpwZUcxRXY3YzJPb1ZMNmd5M09WOFJzdUduSjhZRzNNSkwwUHcwNytuRGUyUFRrMWpjNXJJMk1qdW4rSVA0K0JqM01KbWdzY003LzVIWVlhdDMxZjRtQzBvRHlzKytPZk0yRWN2L0FwZ0hXRjdHQVF0bkFCSmkwTnN0RGpxOEFiR0xkN3M3Q3lPRXVSV1lMemx3T0Q1RDdEdlFlbmhkcGNXN0JPMmd6Nitkc0FkN0xUMis2MThnSHNCUjhIV3d4N3VZdU1LVUVzREJCUUFBQWdJQUlTUWFFOFQ5SnZHWVFFQUFGWUNBQUJIQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVMmx0Y0d4bFUzUnZjbUZuWlNSVGRHOXlaV1JFWVhSaFEyaGhibWRsWkVWMlpXNTBVbVZ6Y0c5dWMyVXVZMnhoYzNPbFVibE9BekVRZlE1SFFnajMzU0NCS0lBQ0Z5QWFFQklFa0pCV0lCR1UzdGtkTm82OGR1UjF3di93QjFSSUZId0FINFdZWGRMUVFFSGhONGVmWjk2TVB6N2YzZ0VjWWFPT01TeFhzVnJGbXNDWWNhbkFRZVI4S3Arb2M5aVRmZStDaTUyUnNmTWtNd3BkbCtUU1U5NTNOaWNadWZSRW9PWk0wbFptUUFLclVVOE5sY3hVNk1vTG5kN1lRQ241Z21QcGFjU1pQTlZXaHpOdXQ3dlhGaGh2dW9TemM1RzJkRHZJT3VRZlZNZHdaakZ5c1RKdDVYVVJqNUxqb2F0emdjMVdZRUhKcFFxcTJWVTJwZVJxU0RiY2o0UUpORzZzSmQ4MEtzK0orYzFJTzlrM0tqdzZueDNMaERJbjgxaTJkTlkzVk5SU0tlMzhYcE9IcUxmY3dNZDByVXQ1UHg0ZkZITTNNSVY2RmVzQzUvOXVKekJmcnRMd2xienI5Q2dPQXR0L2w4VVdLdnluNE1QYndnUjd2SEpVUzFzYldWRUlaWnptU0pZeE1MSC9DdkhDVGdVTnhza3krWXdaeHNZM0FiTllLTzhYUzF6Q1BOdWlUQVVybU1QVUYxQkxBd1FVQUFBSUNBQ0VrR2hQeElMbjRFSUJBQUFhQWdBQU1RQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpEZ3VZMnhoYzNPVlVVdEx3MEFRbnUwcmJZMVc2d1BFcXdlcjZBcUtGRnA2c0ZnUW9tQmJlOThrMDNaTHVsczNHOFdmNVVudzRBL3dSNG1UNkVsRWRHQmUzOHg4TzhPK3ZiKzhBc0FwYkZVaEQzVUgxaDNZWUZCcVN5VnRoMEYrcnpGaVVPanFFQm5VUEtud09wbjdhSWJDandpcGV6b1EwVWdZbWVaZllNRk9aY3pBdlZRS1RUY1NjWXlVSG5wUzgwVWs3RmliK1JrUGNhNTVIUEErM2lVWTI1NDJONG0yd2txdDR0MW1pMEZsSUNkSzJNUVFZOWZUWnNJZjBEK1pjZUZMUG54Y1lCL0hhRkFGMlA1V0RBWFJVRVBNYisyNE9iQkdxa21yUTR6VmdVNU1nRDJaTHJuOTA4TkhNM0V2Nk00TEZVUTZwcmtydEZNZE9yRHBRZ0dLREE3K2NRT0RuVisyWnRENE14Y2NRNDUrSnhWR1NwdVFMMUhFeWFkSWNmOFoyQk1GT1hESWxqTHdITXBrM2M4R3FNQlNOdXBtWGN1d2t2a2FyR2JvR3RscXBvelFWTW9mVUVzREJCUUFBQWdJQUlTUWFFK2FTNDNKbVFFQUFOMENBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpFdVkyeGhjM09WVXRGT0UwRVVQVk9XTHEyclZGUVFVY01ERHkyWWpncnhCZEtvalNRbWxVUWdmZUZwdW5zcFE3WXpkV1pXdzJmeFFFaDg4QVA4S01QZDFRZGppSUZNWnU2OWM4KzVjMDR5UDM5OS93RmdDODhibU1GaUV4R1dZanlPc1N4UUR5ZmFyNzBVMkJob0s2ZTVDc2ZXVGQ3SWpDWlcrbFR1MDVlQ2ZOaTE3bk5oZ3dyYUdyL050QjF0ZE9nSmROdTM0SFdHQWxIZlppUXdQOUNHOW9ySmlOeWhHdVY4c3pDd3FjcUh5dW15L25NWmxmSUVrby9Ha092bnludmlzbnZ6TjlkZXYySzVqUU05TmlvVWprZStIVmczbHQ5b3RIa3ExVWpMdzdNcDdkTXhPVElwN2Z6VHpCVFBZWUNYNzdMTWtmZmJQUjdYUExDRlMybFhseEtYcjN1MmU2cStLbmI1d2FTNTlkcU1QMUU0c1ZtTUp3bFc4RFRCTE9vSllqd1RlSEViTHdJci8xRXYwTG54TUlHNU1ZV3labHE3ZmZTKzg1ZjFxYlBCcGphWHFYWEU5QW1qK2lyUDJmdE11elBFS3YramlMK1VhTFZLSjJYR084WWN4d1puUGRSNEFjMzFqUXVJOVV2VXpybXFvY2xudmNKYTNPRno4VGNLQ2U0QlZUWmI5U1BNVi9nVzdsZHhBUTg0Um5pSVI3aGI0VmhJeGNBVlVFc0RCQlFBQUFnSUFJU1FhRS9Ga3M0NW93RUFBT1lDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qTXVZMnhoYzNPVlVsMVBFMEVVUFZPV3JxMnJGRkFVVWVNRElTMllqZ0hsQmRLWHhpYWFxcUZnMzJkM2I4dVE3VXlabmRYNGMvd0pQaGdTSHZ3Qi9pamozZFVIWTR5QlRPWit6Sng3NTV5YitmN2o4aHVBNTNqY3dBTFdtZ2h3TDhUOUVPc0NkWCtxODgxbkFqdERiZVU4VTM1aTNXeGZwalN6TWsva2lNNEx5djNBdXFQQ2V1VzFOZmtCbHgxcW8zMVBvTnUrUmwxbkxCRDBiVW9DUzBOdDZHMHhpOG1kcURqams1V2hUVlEyVms2WCtlL0RvS1FuRUwweWhsdy9VM2xPbkhhdi91Ym03aDdUYlJ6cnFWRytjTnp5OWRDNnFmeEk4ZDZaVkxHV0o1L21OS0lKT1RJSkhmNTFtU3J1dzRCY1Rva1pLRStwZksrTjMzMnhmOURqeHMxalc3aUVCcm9rdS80dkF0MHo5VUd4M3BjbXlXeXV6ZlFOK1ZPYmhuZ1FZUU1QSXl5aUhpSEVJNEduMTFFbHNQRWZIUUtkS3pmajhaall2WnVNQmtjY2I3VTdmOHhnN3F5M2ljMWtZaDF4OWN4NjZxc3NZK2tMN2M0WVQvaERCZnkzUkt0VkNpa2ozaUZ1c0c5dzFFT05GOURjM3ZrS3NYMkIyaGZPYW1peXJWZll6N2pKZHUwWENoRnVBMVcwV04wSFdLcndMU3hYZmdXcjdBUGN3VjNjcW5CTXBLckFUMUJMQXdRVUFBQUlDQUNFa0doUFkxSTdsVkVCQUFBYUFnQUFLZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTWk1amJHRnpjNDFSeXk0RVFSUTlOY2IwR01ONGs5aUpDQlpLeG1PQjJBZ0pHUllHQzd2cTdqdXRwTHRxVWwzajhWbFdFZ3NmNEtQRW5XYkRBcFhjT3ZkeDZ0eDdVMi92TDY4QU5qRlh3d0NtQWt3SG1CR283R21qL2I1QWVmbDY1WXJod01ZazBHaHBRMmU5TENSM29jS1VNeE10RzZuMFNqbmRqNytTWlgramM0SDZzVEhrRGxLVjU4VGhVa3RiMlUyVjcxaVhiY3VZTWl2elNMWjExazJwN2ExVENTMDJkd1ZLRCtzQzRscGdxSzBUbzN6UHNlWkp5N3BFM2xPNGNTdFZxT1hGWTVmT3FVT09URVI3UDRxeDhzb3pJWmNKOFFqS1V5d3Z0ZkhOcmUzZGZlNVFhOXVlaStoSUZ5dDhtMkR0VnQwcDN2VFFSS25OdFVsT3lkL1lPTUJzSFdVTUNpeitad3VCK1YvR0ZWajRXd1RyS1BHWDlJOWc0OTZNRmZaMk9GOWlyS3pPUDBNOHNWZEMwSThMM2hxcWZNOThNakNFNFVLaGdqcEd1RjdHYU1GdllLekFjVXdVMnBOODF3b1R4VXVnK2dGUVN3TUVGQUFBQ0FnQWhKQm9UMmd5SWFkSUFRQUFJd0lBQURJQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE1pNWpiR0Z6YzVWUlMwOENNUkNleW1NQlYxRjhKTWFyQnpHR0tpb1hDQmNpaVdZMUVaQjcyUjJnWkdteDI5WDRzenlaZVBBSCtLT01zNnNuWTR4T01xOXZwbCsrU2QvZVgxNEI0QlMyUzVDQmlnTWJEbXd5eUxla2tyYk5JTE5mSFRMSWRuU0FETXFlVkhnZHowZG9CbUlVRWxMeHRDL0NvVEF5NmIvQXJKM0tpSUY3b1JTYVRpaWlDS210ZVZMelJTanNXSnQ1Z3djNDF6enllUS92WW94c1Y1dWJXRnRocFZiUjNuRzl5YURZbHhNbGJHeUk4dExUWnNJZmNIUXk0MklrK2VCeGdUMGNvMEhsWSt2Yk1CREVRd3NSbnlBcEVCWURmaXVWclo4MW1tMGlMdlYxYkh6c3lrVHN6azhDYWpOeEwramVjK1dIT3BKcWNvVjJxZ01IdGx6SVFvN0I0WDl1WWJEN2kzb0cxVCtUd1JFczBUY2x4c2hKQ3VVOFZaeHlndVFPbm9FOVViRUVEc1Y4Q25haFFOSDlYSUFpTEtkUDNYUnJCVmJUWElhMUZGMm5XRXFkRVpwWTRRTlFTd01FRkFBQUNBZ0FoSkJvVCtkOEJseEdBUUFBSVFJQUFERUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTJMbU5zWVhOemxWRkxUd0l4RUo3eUJsRVVING54NmtFMFdvMkdDNFFEUkJMTmFpSVE3bVYzZ0pLbHhiYXI0V2Q1TXZIZ0QvQkhHV2RYVDhZWW5XUmVYNmRmdjBuZjNsOWVBZUFDZGtxUWhtb2VOdk93eFNEWGxFcTZGb1AwUVczSUlOUFJBVEtvZUZMaGJUUWZvUm1JVVVoSTFkTytDSWZDeUxqL0FqTnVLaTJEOHBWU2FEcWhzQmFwUGZhazVvdFF1TEUyOHpvUGNLNjU5WGtQN3lPMHJxdk5YYVNkY0ZJcnUxOXZNQ2oyNVVRSkZ4bGl2UGEwbWZCSEhKM1B1QmhKUGxndXNJZGpOS2g4Ykg0N0RBVFIwSURsRXlRQndtSEEyMHVIOXF6ZWFCRnhxYThqNDJOWHhscDNmM3IvWkNZZUJLMTdxZnhRVzZrbU4raW1Pc2pEZGhreWtHVnc5STlWR096OUlwNUI3YzljY0FvcCtxVFlHRGtwb1p5amlsT09rZXpoTTdBbktsS1FwNWhMd0RZVUtKWS9CNkFJSzhuVmNqSzFDbXRKcnNCNmdtNVFMQ1hPQ0kydDhBRlFTd01FRkFBQUNBZ0FoSkJvVDNJdHpmMUhBUUFBSXdJQUFESUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhNQzVqYkdGemM1VlJTMHRDUVJRK2syKzdaZGtEb20yTGpIQ1V3bzNpSWtrb0xFakYvWGp2VVVldU16WXp0L0JudFFwYTlBUDZVZEc1dDFZUlVRZk82enRuUHI3RHZMMi92QUxBT2V3WElRWGxIT3prWUpkQnRpV1ZkRzBHcWVQS2lFRzZvd05rVU9wSmhiZlJZb3htS01ZaEllV2U5a1U0RWtiRy9SZVlkak5wR1hoWFNxSHBoTUphcExiYWs1b3ZRK0VtMml3YVBNQ0Y1dGJuZmJ5UDBMcXVObmVSZHNKSnJleFJ2ZFprVUJqSXFSSXVNa1I1M2RObXloOXhmRGJuWWl6NWNMWEVQazdRb1BLeDlXMFlDT0toQmN1blNBcUV3NEJmckJ6YWVxUFpKdUxpUUVmR3g2Nk14Ujc4SktBNkZ3K0M3cjFVZnFpdFZOTWJkRE1kNUdEUGd6UmtHSnorNXhZR2g3K29aMUQ1TXhuVVlJMitLVFpHVGxJb1o2bmlsR01rYy9JTTdJbUtOY2hSekNaZ0YvSVV2YzhGS01CNjh0Ukx0alpnTThrbDJFclFiWXJGeEJtaHNlVS9BRkJMQXdRVUFBQUlDQUNFa0doUEVKL016MUVCQUFBc0FnQUFNUUFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKRFF1WTJ4aGMzT1ZVY2xLQTBFUWZSMWpOcVBScUZISjFZTUxPZ0dEQnhPQ0doU0VLTGpnd1Z0bnBvd2RKdDJ4ZThibHN6d0pIdndBUDBxc2pKNUVSQnVxWGkydlgxZlJiKzh2cndEcVdDeGdESE5aekdkUkVjZzBsVlpSU3lDOWNyVjZ5ZEEyQVFtVU9rclRTVHpva3IyUTNaQXI1WTd4WlhncHJScmxYOFYwZEtPY1FQRklhN0x0VURwSG5HNTBsUEdHb1l5dWpSMXNld0VOak9kODc0eHVZM0xSb2JHbnNZbGtwSXgyeS9XR1FPcWhKaUN1QlBMbnFxZGxGRnVXM3UwWTIvUHVxYnZWOTJSWGVSZVBRenFqYTdLa2ZXcCthd2FTOVpqZ3ZMMGdzT1JjbzhXNmhYTVRXNThPMVdqVXBaK2UzK3pMTzhuYkhtZy9ORTdwM2pGRk55YklZcUdJTk1ZRjF2K3hpVUQxbDVFRlZ2K3NoUnBTL0Vtakk5aDRFc1lNUnp0Y1R6Rm0xcXJQRUU4Y3BaQWQ1UWx2SHpuMmxVOEc4cGhJRkRJb1lwTDdhVXdsL0JLbUU1eEJPZEdlWlY5SVRDUTNnZHdIVUVzREJCUUFBQWdJQUlTUWFFOXFiRXVyTkFJQUFCb0VBQUFrQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVa1pSVTNSaGRIVnpMbU5zWVhOempWTHZUOU5RRkQxdjY5YXVsTUVxb2lBaXY1UnRJQVdjZnRsQ0lBZ0p5UUpDY2NsaS9OQjFqMW5TdGFZLzluZkpTTVJvTkh6Mmp6TGVWeGNEa1lDdnliMDU3NTU3N25tdjcrZXZyejhBVkZESlFjS2lpaUpLTXNaa2xGWGtzU1RDc29JUmxZckxndkZjUVVIa0ZRVzZ5SWFNVlFibGlOdmM2ZkUydzB6ZDhZMlByaFdkK0VIM2xkSG1YZDhJYmVObzk5Q01yQ2dPcThSK3pXM1g4UVI3K0REMkkvNG04SHRPVzJCNW9iRlZmN3RqTXN5K3Uxc28yN1BjbUljTTg4WFNmOUNsYmIvTkdVYnFOSHMvN3JaNGNHeTFYTnFSRTUyREU0WktzWDVxOVN6RHRieU9ZVWFCNDNXcXBidVY5YnB2VzI3RENod2hPRkNWUEt2TFJlMGZSWEplY3p3bjJtQVl2MkhnWHFsQjNkRUhoMDZXTTUyT1IxTUNVa29YUlVHcGljdExtdGV2OU81NGNiZDJsOU1OR3EyYWZoellmTmNSSG5QSFBJeFdoSXFHZStLM2oybFl3enJEOU8xS0dpYndRc00wbm1nWXdhaUdnZ2c2UmhueTF6MHhaR3pYOTJqV1dMRjB4ZTlCNjVUYkVmbDVlZlVHdGwwckRLczMvWVBycXRYTlZYcDhlWHE1MHVhRWNBQlFMZ3l5THZMb3BEaVJZQ0NIK3hnSHd3TkNjNVRGVXZ0Z241RzZSUG9USVlhSEZMTkpiWi80RTVnYzhDdElKYnVxTHBXL0lITUpTZkJUMS9pUEtHcC9XSmpDNDZST1YwTlJLS3doVFI4Z2w1ZW1McEE5dTZWZHhveXdqdG1FTXdjRjg0bGhJZk9lRGlMVzFqZElUVjFPWDBBNVJ5NEJxcFNBb1FSb21RUU1aNzhUU3ZmcEJUV2xQb2JNWnFhUFlmTWM3T3p2ZVZVYUFoeGdrVXlrQmtNWDhEVEp6MzREVUVzREJCUUFBQWdJQUlTUWFFKzZva1Fla3dFQUFMUUNBQUFxQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVMmx0Y0d4bFUzUnZjbUZuWlNRMExtTnNZWE56alZKTGJ4TXhFUDZjYkxOTldHZ29VQjRGVkZWUlNWb0pJL3E0dE1vbEFna1VPRFJ0N3M3dWRPdktzU092QStyUDZxR3F4S0UvZ0I5VmRiTDBBQndnc2p3dmZ6UHpqVFUvYjM1Y0E5akI2enFxV0drZ3d0TVl6Mkk4RjZpRlUxMjAzZ20wK3RySmlWSGh4UG54bnN4bzdHU1J5b0VlVHd3Tmd2TXFwMzNHSDJpclExZmdUWHVlaE01UUlPcTVqQVNXK3RyUzErbDRSUDVJalF4SGx2c3VWV2Fvdko3NWQ4Rm9Sa2dnK1dRdCtaNVJSVUhzYnN6UnJMWEQvT29EblZzVnBwNUxmZTQ3bjh2dk5ObytrMnFrNWRINWhBN3BoRHpabEE3K2VzeFVVSUVCaGN5Sk82dEFtVHpXTnJ6ZjNkdnZjdUhHd0UxOVNoOTF5ZnlQeG0vUDFEZkZBMzZ3cVhHRnR2a1hDcWN1aS9FaXdTcGVKbGhBTFVHTVYvekw4NHdoc1BvUDRnTHIveThpVU0wcDhMKzFPNy9OT2ZFdXVOUVptVHBQOHBBVEEvV1VNVHhldGQwWllvM1hJK0pORWMzbWpQUE00aHRqa1hXZHJTNHFmSURHNXRZbHhPWVZLaGZzVmRCZ1dTdXh4N2pIY3VVWENna2VBS1cxVUw1SFdDcnhUVHdzOVRJZXNZN3dHRTl3djhReGtUSUR0MUJMQXdRVUFBQUlDQUNFa0doUDJJYjcwSUVCQUFDQ0FnQUFTQUFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKRkpHVVZKbFkyVnBkbVZrUlhabGJuUlNaWE53YjI1elpTNWpiR0Z6YzZWUlRVOFVRUkI5dmJ1d3NLN3lvU0tvRnhNUDRvRStTTHhvVEZ4a0U1S0poc1Z3OGRRelU4ejJacVpyN2U1WmY1Y25FZzc4QUg2VXNXWWc4UUtKQ1pmM3FybysrdlhycXo4WGx3RDI4WEtBTHA3MXNkUEhjNFZ1eVlYQ1hzSyswTDhvZlRmVGM4K1JNeTUxeHA1MFJYSEtlZENld3B4ZElKMXc4VUdoWTNPQkh5T0ZGUnRDVGZubnFMQ1Z6TXpDNk1yRXFSN1o0c2hGS3NoTGQ3ZE9TNFhONjNKcFhLRlBvcmV1V2JUODBUb2JQMG5QbTkxVGhkNEI1NlN3bGxoSFgrc3FKZi9kcENVMXc1eVo4dFI0MitRM2g3MDR0VUZoZXpJK25sQkdka0g1NFlKY25OeUlWUmdlT1VmK29EUWhrSFIrU1N6cmVXbmlHZnZxdmM2cFloMHlQYUdmTllVNFpuOWNjelRSeXZEcnU1YUs2TUVKMXo2anNXMUU3TncydmRjOGRZZ2hIdmJ4UW1GMC8yc1Yxdi9aOXkyZFVTYU83LzczWHJ4Q1IvNGQ2RUY4dzVKRVlqNzZMYTlndGVVQkhyU3NHdUdDanlUVGJRNHN2VDJIK2kxQkIydUN5ODJoR21OZDR1RjFBemJ3cEswL2JYRUxqNFVIVXV0Z0c1dFkvUXRRU3dNRUZBQUFDQWdBaEpCb1R5RmN6aUtlQVFBQTNnSUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TkM1amJHRnpjNVZTWFU4VFFSUTlVNVl1cmFzVVVCQlI0d01QTFpBT0JrSk1JSDJ3c1lsSk5hSEZ2cENZVExlM1pjaDJwc3pPU3Z4WlBoZ1NIL3dCL0NqQzNkVUhZNHlCVEdidXg1eHo3ejJadWI3NThSUEFQbDVXTUlmVktnS3NoWGdhWWwyZzdNOTB1cmtyc04zVlZzNFM1Y2ZXVFEva2lLWldwckhzMFVWR3FlOVlkNXhacjd5MkpqMWsycEUyMnJjRW12Vjc4Qm9EZ2FCdFJ5U3cyTldHUG1iVElia1ROVXc0czl5MXNVb0d5dWs4L3AwTTh2RUVvdmZHa0dzbktrMkp3K2JkZTI2KzN1ZHhLMzA5TWNwbmprdTJ1OVpONUNVTjk4NmxHbXA1OG5WR1BScVRJeFBUMFYrWEk4VjFHSkRLVDM3OHB1K2ROcFBERmxlczltM21ZdXJvZk1yMWYzVnVucXN2aW9XK00zRmlVK1o5SUg5bVJ5R2VSZGpBOHdqektFY0k4VUpnNXo1eUJEYitJMENnY2VkaS9Jd1Q4cjNPc1VDOWZ2cTI4WWYybWJQZXhqYVJzWFhFNUtuMTFGWkp3c3JuNm8wQlh2RkhDdmhQaVZvdDE1Rjd2RU1zc0sydzEwS0pGMURkMnY0T3NYV0YwamVPU3FqeVdTNnduL0dBejlWZktFUjRCQlRlZkhFZllMSEExN0JVMkdXc3NBM3dHRS93c01EeElBVUR0MUJMQXdRVUFBQUlDQUNFa0doUDVIMWU4RWNCQUFBaEFnQUFNUUFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl1WTJ4aGMzT1ZVVXRQQWpFUW52SmF3RlVVSDRueDZrRTBXb1BLQmNLRlNLSkJFd0c1ZDNjSEtGbGE3SFkxL2l4UEpoNzhBZjRvNCt6cXlSaWprOHpyNi9Uck4rbmIrOHNyQUp6Q1ZobXlVSFZnM1lFTkJvV1dWTksyR1dUM2FpTUd1WTRPa0VHbEp4VmV4M01QelZCNElTSFZudlpGT0JKR0p2MFhtTE5UR1RGd0w1UkMwd2xGRkNHMWh6MnArU0lVZHF6TnZNRURuR3NlK2J5UGR6Rkd0cXZOVGF5dHNGS3JhTGZlWkZBYXlJa1NOamJFZU5uVFpzSWYwRHVaY2VGSlBueGNZQi9IYUZENTJQcDJHQWlpb1lHSVQ1QUVDSXNCdjVYSzFzOGF6VFlSbHdjNk5qNTJaYUoxKzZmM2oyYmlYdEM2NThvUGRTVFY1QXJ0VkFjT2JMcVFnenlEZzMrc3dtRG5GL0VNYW4vbWdtUEkwQ2NseHNoSkNlVUNWWnh5Z3VUM240RTlVWkVCaDJJaEJkdFFwT2grRGtBSmx0S3JianExREN0cHJzQnFpcTVSTEtmT0NFMnMrQUZRU3dNRUZBQUFDQWdBaEpCb1Q4b2pLbVkrQXdBQWt3Y0FBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4Tmk1amJHRnpjNzFWNjA0VFFSVCtwaFJXeW9wVkVlOEtpTm9Mc2lpS2wxWlVLdFdTZXNXUUdIL29kRHNzUzdZN2RYY1c5VVY4QWg5QUUrOG14dDgrbFBITTBzakZDcGdZMDNSbjVwdHp2dk9kTTJkbnYvLzQvQlhBV1ZTNnNSMm45R00waFY1WUtlUXhadUIwRDg1ZzNNRFpIaGc0WjJEQ3dQa1VPbkVoUlpZWERWd3lVREJRWkRDWHVEYzhIL20yY3FYUE1GU1ZnV005RTdYeFJZdlhYS3ZPRlZjdm1pSzB5aTJiQWtPWFduREQ0VEdHZk5XVlZ0UGphbDRHalFtckxoclNDbTNydm5nYWlWQ1ZaWEF2a3VSUFhxRjJLN3ErcXlZWjdtYit3bTl6UWRrNWhtUkoxZ1hEanFycmk5dFJveWFDQjd6bUViS3JLbTN1emZIQTFlc1dtTlFKVU80VjN4ZEJ5ZU5oS0dnNXVuVlZ3NmNuS0tFa01Yc014elBaVlNKVjFQUkluU09JbWl0UnR4NW9ZSnpNalVDRWthY29VcnE2eUplNEZTblhzNnB1cUdpemY2MU95ckNsZFd5ZGJmR1BCZEZPaFVuaVNrMC90MFV6Rm1yZ01rUDNyT3Y0WEVVQjBZbXRpQzB1eDJ4d3RXQk51VTdGVjhJUlFXRVo5Ymp2V0xNcWNIMm4wTjVPYStpak9Ddm1kMnFMd3RacHZ2d2RYSldmTFgwN0NnTGhLNnRFcGRVRktQNEh0WEhOWm1VVTJLTHM2cHJ2YjNmbW85cWJXbXphdHowWkV0OHRvUlprM2NDa2lTdTRhbUlYZHB0SVk2ZUpQbHd6TVlVU3crQ202ZzFjTnpHTk1zT2hqUTdXeEEyY29MSzJTNEVhYW4ydVdzTk5FNGR3bUdIa2I5cDZEZGZ5Q1RFYzN2Q0lHSGF2dVB4cVBZYnNsdVBTM2VBSWRiOThqeUdUZVRTMXVrT2JnVlRTbGpwd0lNaTVJWlhRZ2VuSU9qTDZ6VTl4MnhZaFhVZGpkQ0U5L3NjM3krL3ZhZTlhaEZTUWNvWTltVXJiZnQ5R3UzUGNpNmhJRnpOLzZ2Mk5rZXdjQnVqUzdnWDFIaExwdEc0eGdFYnFOL29FZE5DL0QzdG90NTltSlNSaVpFY3UvdzRzTi9JT2lkd0hkTHdoS0lHOTlPd2lRK0FKOXRHem56QXl4WDRjQk9LWnBtVDBvNzRoR2szNGlqeTAxVXp1TGZHOVJlSWprdFV2Nkh5WTcvaUVyZ1Mrd2ZpRWJZekc3bnh5SFpMS2Q2NjMrWUNlMTdGb3JlVUFjUU0yVE5RcHNzQXc1akVCQnhWYXIraWJhZWt6TVlrak9FcnFCdUlWYXlHRE5Cc2lKRW5qTWVMUW1SNVBYNk1jVHRCTTUyREZPUUdkdWZjd1g3Y3RoYmxzMEFxMVFwZHNFWjVFSmg2enlNVjdlWXlRZkNCRlZ0dmo0dUVuVUVzREJCUUFBQWdJQUlTUWFFL25BdDdZUmdFQUFDRUNBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTlM1amJHRnpjNVZSUzA4Q01SQ2U4Z1pSRkIrSjhlcEJORnFOeWdYQ0FTS0paalVSQ1BleU8wTEowbUxiMWZDelBKbDQ4QWY0bzR5enF5ZGpqRTR5cjYvVHI5K2tiKzh2cndCd0Jsc2xTRU0xRCt0NTJHQ1FhMG9sWFl0QmVxODJaSkRwNkFBWlZEeXA4Q2FhamRBTXhDZ2twT3BwWDRSRFlXVGNmNEVaTjVHV1FmbFNLVFNkVUZpTDFCNTZVdk41S055ZE5yTTZEM0NtdWZWNUQrOGp0SzZyelcya25YQlNLN3Q3M21CUTdNdXhFaTR5eEhqbGFUUG1qemc2blhJeGtueXdtR01QNzlDZzhySDU3VEFRUkVNRGxvK1JCQWlIQVc4dkhOcVRlcU5GeEtXK2pveVBYUmxyM2Y3cC9hT3BlQkMwN29YeVEyMmxHbCtqbStnZ0Q1dGx5RUNXd2NFL1ZtR3c4NHQ0QnJVL2M4RXhwT2lUWW1Qa3BJUnlqaXBPT1VheSs4L0FucWhJUVo1aUxnSGJVS0JZL2h5QUlpd2xWOHZKMURLc0pMa0Nxd202UnJHVU9DTTB0c0lIVUVzREJCUUFBQWdJQUlTUWFFL2lOenMrUndFQUFDTUNBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTVRFdVkyeGhjM09WVVV0TFFrRVVQdVBycWxtV1BTRGF0c2dJSnluY0tDNlNoTUtDVk55UDl4NTE1RHBqTTNNTGYxYXJvRVUvb0I4Vm5YdHJGUkYxNEx5K2MrYmpPOHpiKzhzckFKekRYaEhTVVBGZzI0TWRCcm1XVk5LMUdhU1BxaU1HbVk0T2tFRzVKeFhlUm9zeG1xRVloNFJVZXRvWDRVZ1lHZmRmWU1iTnBHVlF1bElLVFNjVTFpSzF0WjdVZkJrS045Rm0wZUFCTGpTM1B1L2pmWVRXZGJXNWk3UVRUbXBsRCt2MUpvUENRRTZWY0pFaHl1dWVObFAraU9Pek9SZGp5WWVySmZaeGdnYVZqNjF2dzBBUUR5MVlQa1ZTSUJ3Ry9HTGwwTllielRZUkZ3YzZNajUyWlN4Mi95Y0J0Ymw0RUhUdnBmSkRiYVdhM3FDYjZjQ0QzUkprSU12ZzVEKzNNRGo0UlQyRDZwL0o0QlJTOUUyeE1YS1NRamxIRmFjY0k5bmpaMkJQVktUQW81aEx3QzdrS1pZK0Y2QUFhOG5UVXJLMURodEpMc05tZ201UkxDYk9DSTB0L3dGUVN3TUVGQUFBQ0FnQWhKQm9UeStNdk9CUkFRQUFHZ0lBQUNvQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlUYVcxd2JHVlRkRzl5WVdkbEpERXVZMnhoYzNPTlVjdE9RakVRUFVVRVFSU2ZhT0xPR0tNdXFPK0ZHalpFRXcyNkVIWGhydHc3WEVvdUxla3RQajdMbFlrTFA4Q1BNZzVYTjdwUW0welBQRTdQektSdjd5K3ZBSGF4V01RSTV2S1l6Nk1pa0R2U1J2dWFRSGJ0ZHYyR29XNURFaWczdEtHTFFhOUY3a3ExWXM3TU5HeWc0aHZsOUREK1NtWjlSeWNDcFZOanlOVmpsU1RFNFdwRFc5bVBsVzliMTl1WElmV3NUQUxaMUwxK1RFMXZuWXBvWmV0UUlQT3dLU0J1QlFwTkhSbmxCNDQxenhyV1JmS2VXanRkcVZwYVhqMzI2WkxhNU1nRWRQU2pHQ3F2UEJNU0dSR1BvRHlGOGxvYnY3MjNmMWpqRHNXbUhiaUFUblM2d3JjSnFsMTFwM2pUWXhQRU50RW1PaWZmc1dFZUN5VmtNU3F3OHA4dEJKWitHVmRnK1c4UmJDTERYekk4Z28xN00rYllPK0I4aGpHM3NmUU04Y1JlQnZsaG5QS3FHT083OHNsQUFlT3BRZzRsVEhBOWk4bVVYOFpVaXRPWVNiVm4rUzZtSnRLWHdOZ0hVRXNEQkJRQUFBZ0lBSVNRYUU4Qk5QVzZsd0VBQUxzQ0FBQXFBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1F6TG1Oc1lYTnpqVkpCVDFOQkVQNjJQUHBzZlVwRlFBVXh4alRhWXVJYVVDNlFYaW9ra01xQll1L2I5NGJIa3UxdXMyOEw4V2R4SUNZZStBSCtLT1AweVVFOGFMUFpuWm5kYjJhK2J6TS9mbjYvQWZBQkwycVl3MG9kRVo3RWVCcmptVUExbk9taStWNmcyZE5Pam8wS3A4NlB0bVZHSXllTFZQYjFhR3lvSDV4WE9lMHdmbGRiSFRvQ2IxcXpKTFFIQWxIWFpTU3cwTk9Xamlhaklma1ROVFI4czloenFUSUQ1ZlUwdnIyTXBvUUVrZ05yeVhlTktncmk4UFVNelpwYnpLL1cxN2xWWWVLNTFHSFArVnhlMG5EclhLcWhsaWRmeDNSTXArVEpwclQ3MTJPbWdnb01LR1JPM0ZrRnl1UVhiY1BteCsyZERoZXU5OTNFcDdTdlMrWjNHcjg3VnhlS0JlN1oxTGhDMi93emhUT1h4VmhOc0libkNlWlJUUkJqblg5NUZoa0NhLzhnTHZEcS8wV1liOEVlWlo5WUZuOWZxLzJIM0xGM3dhWE95SlFSOHBqekEzV1ZNYXh5cnRVZTRDVlBTY1FESXhxTktmV3B4enZHUGJZMTlqcW84QUxxRzIrdklUYStvWExGVVFWMVBxc2xkaC8zK1Z6NWpVS0NoMERwelpmdkVSWktmQU9QU3J1SXgyd2pMR0VaRDBvY0V5a3o4QXRRU3dNRUZBQUFDQWdBaEpCb1Q2SXkxK2RJQVFBQUlRSUFBREVBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVEzTG1Oc1lYTnpsVkZMVHdJeEVKN0tZd0ZSRkIrSjhlcEJORnJqQXc4UURoSkpOS3VKZ056TDdyQ1VMQzEydXhwL2xpY1RELzRBZjVSeGR2VmtqTkZKNXZWMSt2V2I5TzM5NVJVQWptRzlCQm1vT3JEaXdDcURmRk1xYVZzTU10dTFBWU5zVy92SW9PSktoZGZ4ZElpbUw0WWhJVlZYZXlJY0NDT1QvZ3ZNMnJHTUdKUXZsRUxURGtVVUliVjdydFI4RmdvNzBtWmE1ejVPTlk4ODNzVzdHQ1BiMGVZbTFsWllxVlcwZGRwZ1VPekpRQWtiRzJLOGRMVUorQU1PanlaY0RDWHZQODZ3aXlNMHFEeHNmanYwQmRIUVFNUURKQUhDb3M5dnBiS0hKL1ZHaTRoTFBSMGJEenN5MGJyeDAvdjdFM0V2YU4xejVZVTZraXE0UWp2V3ZnTnJaY2hDanNIdVAxWmhzUG1MZUFhMVAzUEJBY3pSSnlYR3lFa0o1VHhWbkhLQzVIYWVnVDFSTVFjT3hYd0tua0dCWXZsekFJb3duMTR0cDFNTHNKam1DaXlsNkRMRlV1cU0wTVFLSDFCTEF3UVVBQUFJQ0FDRWtHaFBmWUtxKzZRQkFBRGxBZ0FBTWdBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFekxtTnNZWE56bFZKTmJ4TXhFSDFPdDFrU0Zob0tMWlFDNHRCRDBxSVk2TWVsVlE1RVJBSUZwS1lsRnlRa1ozZTZkYld4ZzljTDRtZjFVRlhpd0Evb2o2cVlYVGdnaEZBcnk1NForODM0UFhzdUxyLy9BTENGSnczTVlibUpBUGREUEFpeElsRDN4enBmZXk2d01kUld6akxsajZ5YjdzaUVwbGJtc1J6UjU0SnlQN0J1djdCZWVXMU52c3RwZTlwbzN4UG90cStSMXhrTEJIMmJrTURDVUJ0Nlgwd241QTdWSk9PZHhhR05WVFpXVHBmeDc4MmdwQ2NRdlRHR1hEOVRlVTRjZHE5KzU5cUxUYWJiT05DcFViNXdYUEx0MExwVWZxWEo1b2xVRXkwUHY4MW9SRWZreU1TMDk5ZGhvcmdPQTNLWkVqTlFuaEw1UVJ2L2NudG50OGVGbXdlMmNERU5kRWwyNVY4RXVpZnFpMks5cjAyYzJWeWI5QjM1WTV1RWVCaGhGWThpektNZUljUmpnV2ZYVVNXdytoOGRBcDByRitQZlRNbVBCdnNDN2ZiSFY1MC9ubURtckxleHpXUnNIWEh5MUhycXF5eGo1WFB0emhoUHVaOENiaTNSYXBVNlNvOW5pQnRzRyt6MVVPTUJOTmMzemlEV3oxRTc1YWlHSnEvMUN2c0pOM2xkL29WQ2hOdEE1YzFYNXdFV0tud0xkeXE3aUx0c0E5ekRFbTVWT0NaU1plQW5VRXNEQkJRQUFBZ0lBSVNRYUUvSHJ4VkRvZ0VBQU9jQ0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNVGN1WTJ4aGMzT1ZVbDFQRkRFVVBWMkdIWFlkWlFWRUVUVTg4TEFMWml1bytBRFpCemVTUUZZVCtkZ1hucm96bDZGa3RsMDdIWWcveXdkajRvTS93QjlsdkRQNlFJZ3hrS2E5OTdibjNKN1Q5T2V2N3o4QXZNS3pCcWF3MkVTQWh5RWVoVmdTcVBzem5hKytFRmdmYUNzbm1mS24xbzIzWkVKaksvTllIdENuZ25LL2E5M0h3bnJsdFRYNU50TjJ0TkcrSjlCdDM0TFhHUW9FZlp1UXdPeEFHL3BRakVma2p0UW80NTI1Z1kxVk5sUk9sL1hmemFDVUp4RHRHVU91bjZrOEp5NjdONzl6ZGVNTnkyMGM2dFFvWHpodXVUK3dMcFdYTkhwNUx0Vkl5NlBQRXpxZ1UzSmtZdHE1ZHBnbzdzT0FYS2JFQ3BTblJCNXI0emRmYjIzM3VISHowQll1cGwxZGlsMzZsNER1dWJwUTdQZWRpVE9iYTVPK0ozOW1reENQSXl6alNZUnAxQ09FZUNydy9EYXVCSmIvNDBPZ2MrTm1Bak1wK2JKbVdydDk4clp6NVJFbXpub2IyMHpHMWhIVHg0enFxeXhqNzFQdHpoQXIvS01DL2x5aTFTcWRsQm5QRURNY0c1ejFVT01CTk5mV3YwS3NmVVB0QzFjMU5IbXRWMWlMTzd3dS9rRWh3ajJneXFhcjh3Q3pGYjZGKzFXY3d6ekhBQXQ0Z0xzVmpvVlVEUHdHVUVzREJCUUFBQWdJQUlTUWFFK2JWOGVZUWdFQUFCb0NBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTXk1amJHRnpjNVZSUzBzRE1SQ2U5TFZ0WGEzV0I0aFhEMWJSQ0JVUldub3BGb1JWc0syOXA3dlRtckpOYXBKVi9GbWVCQS8rQUgrVU9MdDZFaEVkbU5jM00xOW15TnY3eXlzQW5NQldGZkpROTJEZGd3MEdwYlpVMG5VWTVQY2FJd2FGcm82UVFTMlFDcStTK1JqTlVJeGpRdXFCRGtVOEVrYW0rUmRZY0xmU012QXZsRUxUallXMVNPbGhJRFZmeE1KTnRKbWY4Z2pubXR1UTkvRXVRZXQ2Mmx3bjJna250Yks3elJhRHlrQk9sWENKSWNadW9NMlVQK0M0T2VOaUxQbndjWUY5bktCQkZXTDdXekVTUkVNTmx0KzR5ZG5BR2FtbXJRNHhWZ2M2TVNIMlpMcms5azhQSDgzRXZhQTd6MVVZYTB0emwraHVkZVRCcGc4RktESTQrTWNOREhaKzJacEI0ODljY0F3NStwMVVHQ2x0UXI1RUVTZWZJc1g5WjJCUEZPVEFJMXZLd0E2VXlmcWZEVkNCcFd6VXo3cVdZU1h6TlZqTjBEV3kxVXdab2FtVVB3QlFTd01FRkFBQUNBZ0FoSkJvVDNHYlNaRFNBd0FBT3drQUFDb0FBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5VGFXMXdiR1ZUZEc5eVlXZGxKRFV1WTJ4aGMzT3RWZTl6MjBRUWZSZmJVZTJvclFsSkNxVzBwVFdwNC95NGxMU0ZraEJ3SGFjTlZSeUlqVXVBR1VhUnJyS0NMQm5wbktSL0RGK1o0VnRoYUV0aGh1bG4vaWlHUGRuRXRESEVHV3FOVDlMZTdydTNlM3RQZi96NTYrOEFydUdyTkY3QlFnYWp1SmJHVlZ6UDBIQkR3N3NacEpRbGhmY3l5T0htQ043SG9vYWxFV1R3Z1labE5mT2hHajdTVU13UXhDME5KUTByR3NvTXc3TGhScmw1aHB6aEJyemxtZkorRURadmNGczBBeDVadk9vMlc1Nm95aUEwSGJGSS9rdXU3OHBsaGl2NVFRS202Z3pKVW1BTGh0T0c2NHRLdTdrdHdwcTU3WkZsMUFnczA2dWJvYXZldThha0lzU2dyL20rQ0V1ZUdVV0NYaWNIV0N4M25maWx6RmJMZThCd1hobUZ2V0pLczlRd2ZVZlk1VjNoeTAwUnRRSS9vbldpdkJHRUR0OFQyd3M3dkJVR01yQUNqMXNVeEp0Q05nSTc0bUhYbVJ1QnN6ZzFDSVAvWHBUb0piekFZWmc3M3RJTUkwTGgxRTJ2TFNJTnQ2bDA1WjdobmlzYmhvSXQvQU5XN3ZOUzRNdlF0R1R1c0M5Qm5wUVBXc0x1MWFQMFV2S2J6QnM3NXE3SlBacmxHOXM3d3BKVXVVTW1oa3g1M3hJdDZWS2NoanNNNmFycitLWnNoMFRsKzhNQmlsd29LQmwzVit6eisyM2Zpa1A1YXZkcDZYZ1ZmUW01THFza3FrRTd0TVNxRzNmemMrRnpLZ1ZxK3JKdmVVSGsrczU2ekVQRG1vNlBjVmZIR01aMVRNRFFzWTZLamcxOHdsRDgzN1IwdklWTE9qN0Zwb2FxamhvK1l6alhLNDI1N1hLYlF0WGVSN3hHbzQ0NjdqR014UlZ2bXJMQmI3bk9taStGSTBJZG4yTkx4eGZZWXBnNVRuMTFuTWRGa3BSQnppeEQ5c1hkWnJod3hIWnIrSkloUDJpM003emFXK0tnN3hndUhjMlBoQ1RxVy9CVkw5anJDSll4aUpCOFMyd2tMOHNHOVlvVVlVZE5laG4ramFZVUlxODA4MHkxdHJGWlhsa3Axb3FsTzhYSzdmTEsxK1Y2dVZLajBoai90cDB4TDlXVnBtV0ppRVI5bm1UOXU0RmsrZ2pNNHlybE1XUW82d2k1NXR0aVg5aWRLVHBJK2E1aXRLWHJjY09OVkZLbm5yZFFuU2lRWVR5LzFsZGVUdEJzakVldG5lL3ZFWGgyMTJQQzZOZjl5c2NYZTEyZjhiNDU0U0o5VGtkQkRRYVd6YW96VFIvcUJQMG5jSWFzcjlIVE1vYm9BaktGNlVkZ2hTY1krcEhlaHZBNmpjUGtBemc0RzBmRVhuZ0Rid0x4azBKamRORlo2bUw5UU5oSnVxOFhmZ2I3Q1lucFg1QmMvdzJwclNjWXJzd1N2alk3OHhnbkVrK1JIc0l6Wko1aWhORmRmNFNUOFVUeThNU3AyWWNIZE00U0lXQUhPcjZoeFQyeU5mRU9mTnhGRUZNc2RCWS9vTGl1eElhbzZTamlNaVlKWlF3M2NRVjVKTEpGb2oxRkZrVjdvVnVDZEdINkdVNC9SdlpoM3dybzhYTzZDMStnZjVJczB6VE94UDZ6bUl2dkhQUHgzRlVpZHk2bW5hQmQ2UHhTWkwxQUdEbXM0bTJrL3dKUVN3TUVGQUFBQ0FnQWhKQm9UNE1FOW9hakFRQUE0d0lBQURJQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE5TNWpiR0Z6YzVWU3dXNFRNUkI5VHJmWkppdzBGRm9vQmNTaGg2UkZNUWhhVldxVkF4RVJTQUdwYWNrRkNjblpuVzVkYmV6VTZ3WHhXUndRVWcvOWdINVV4ZXpDQVNHRVdsbjJ6SGplak4remZYRjVkZzdnSlI0M01JZVZKZ0xjQzNFL3hLcEEzUi9yZlAyWndPWlFXem5MbEQreWJyb3RFNXBhbWNkeVJLY0Y1WDVnM1g1aHZmTGFtbnlYeS9hMDBiNG4wRzFmbzY0ekZnajZOaUdCeGFFMjlMNllUc2dkcWtuR08wdERHNnRzckp3dTQ5K2JRVWxQSUhwckRMbCtwdktjT094ZS9jejE1MXRNdDNHZ1U2Tjg0YmpsbTZGMXFmeENreGNuVWsyMFBQdzZveEVka1NNVDA5NWZ5VVJ4SHdia01pVm1vRHdsOG9NMmZtZTN4MjJiQjdad01RMTBTWFgxWDhkM1Q5Um54V3BmbXppenVUYnBPL0xITmdueElNSWFIa2FZUnoxQ2lFY0NUNitqU1dEdFB5b0VPbGR1eG0rWmtoOE45Z1hhN1krdk9uOWN3TXhaYjJPYnlkZzY0dUtwOWRSWFdjYks1OXFkTVo3d2J3cjRZNGxXcTlSUmVqeERMTEJ0c05kRGpRZlEzTmo4RHJIeEE3VnZITlhRNUxWZVlUL2hCcThydjFDSWNBdW92UGtxSDJDeHdyZHd1N0pMdU1NMndGMHM0MmFGWXlKVkJYNENVRXNEQkJRQUFBZ0lBSVNRYUUraFp4K3pSZ0VBQUNFQ0FBQXhBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNUzVqYkdGemM1VlJTMDhDTVJDZThnWlJGQitKOGVwQk5GcUpoZ3VFZzBRU3pXb2lFTzVsZDRDU3BjVzJxK0ZuZVRMeDRBL3dSeGxuVjAvR0dKMWtYbCtuWDc5SjM5NWZYZ0hnSEhaS2tJWnFIamJ6c01VZzE1Skt1amFEOUVGdHlDRFQwUUV5cUhoUzRXMDBINkVaaUZGSVNOWFR2Z2lId3NpNC93SXpiaW90Zy9LVlVtZzZvYkFXcVQzMnBPYUxVTGl4TnZNR0QzQ3V1ZlY1RCs4anRLNnJ6VjJrblhCU0s3dGZieklvOXVWRUNSY1pZcnoydEpud1J4eWR6YmdZU1Q1WUxyQ0hZelNvZkd4OU93d0UwZENBNVJNa0FjSmh3QytXRG0yOTBXd1RjYW12SStOalY4WmFkMzk2LzJRbUhnU3RlNm44VUZ1cEpqZm9wanJJdzNZWk1wQmxjUFNQVlJqcy9TS2VRZTNQWEhBS0tmcWsyQmc1S2FHY280cFRqcEhzNFRPd0p5cFNrS2VZUzhBMkZDaVdQd2VnQ0N2SjFYSXl0UXByU2E3QWVvSnVVQ3dsemdpTnJmQUJVRXNEQkJRQUFBZ0lBSVNRYUUrZDl1dUJMd1FBQUJrS0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNamd1WTJ4aGMzT3RWbTFURzFVVWZpNGtMQWxMRzk2bHJiWldyQ0c4TEZMRUtvanlrbWgwU2VWRmFtMjFibll2eVRMTDNyQjdRK0d6MDMvaWpGK3JJNjIxTTA0LyswLzhFNDduYmlLeGtFN0oyQ1I3WDg0NTk3blBPWHZ1dWZuejc5Ly9BRENEblFRR2NTT0pJWHlRd0N3K1RGSXpwMkUraWJpU3hQRlJFcU5ZNk1MSCtFVERZaGVTV05Ld3JEUXJTcFBWa0ZPVFQxWHptWWE4NmovWDhFV1NjRTBOcXhvS0dtNHlkTWl5RzQ1TU1ZeVpyakFxbmlXM1JiQTdhemg4VnhpaGJhenp2U29QWlU0RWExVWhMZWtLUDV5alpmT3U3OG9GaHNsMEMrdEd0eGhpeThMaERPZE4xK2VGNm02UkI1dFcwU05Kcnlsc3k5dXlBbGZONjhLWW9zZWc1MzJmQjh1ZUZZYWNwcE5uMzNOaytnYlJqVnVWaW5mSThOcDZibTJGMng3dDdXVDN1Uy9YZVZnaEs5cEpwazBSbEl6N3ZIaDl4NmdFUWdwYmVJWXRBbTdzY2xrV1RtZ0VkV1BERktXNTBSWTR2R2hYWXRidWlaSnlxS1c5R2JxNHd0bXlQTnBNd3hwRkw5c1EzSEpsMlZTd21mL0F5Z05qV2ZneXNHdzVjdHFXSUx2bFlZVTdqWUNzdkJvSHI2WE5IV3ZmTWp6TEx4azNpenZjbGhTN1V5S0daUGJBNXBVSVQ4TTZRMkxETGZtV3JBYkU1YWZUQ3hTN2dKTTM3ajQvTUxhcnZoMHROWEwxMFh4cklYMFZ6aTRvTHpaRU5iQjV6bFhaTzl4cy9hUnloUTVBMXJjOUVicCthVFhpbzJGRHh5YSswakdNQ3pvdVlrdkhMWHl0NHphK1lWajYvL1IwWE1NN091N2dyb1p2ZFh5SGV3eVhHakd5aXE3aFdBUkNXUkFhbTlUcStCNUVOTlVJL1lZTWlLK09JbXdkRHU0eXROMVowc0dSMDdHTkhFTi9aTHRyeWJLeDVKYnl2dVFsSHVnb29jd3czc3I3MFBFVzNxWTFyWnp6NTZqV3NvVGg4a3ZTUklQTGtEN3JNV0hvYTJ4eG5LOE1vMmZtU1RVb09QR0NjcDY0WDZ0MjVsbHFVSVJwWkdXWmNrenlvRmFJR2k3K2k2WnFTMW9WM0I2VkVObGxNMS9JcnR6TGJtVUxteFFWODBVdlBtS2s4dGl5YlI2R0l6TlRkRGY4MkVxUmZ3bDBxMVcyaFFxV0tuR1o5eDErd0oyYWlzcGl1bDVycXRMMUROTU5sVy9ubnBkUW9HZ2h3MEE2MzdRd2RaSTJ3cVA4VGplM0NLdDB2N2c4VUxmWXllTkMrajVDS0FqL0JMZDRzTDJYZHhpMFBRb2VWNk5PTnd5cjNGa2tNb05tczZORVdBTk5BNElyZEs4UGdiSUxMSlZTSllUK1JyVFRjeEdYU1BvNmpSYlFSbDhnbVJrN0FzczhSdHZQTkd2REc5UjJrQTFZTnk3VGVMQm1SWWhYZ1dpazBCaDk2VWpXc2Y0aTdCajFEeksvZ3YyQzlySGZFRnQ5aXZqdHgrZ29UQkMrTmpIK0NKM3RUNUJvd3pNa242Q0xVYThmb1ZzcHpwMVVuS2ZmRVZLUkx0WlUxeFBwNGlkMHZVZm9tM2g0N01aVmRKSWJLZWlzQi8yc0Y4T3NEOU9zSHdVMmdCMDJpQi9ZVU9SaXBrYisyTVVIcWpTU2F6b09rY1lZb2ZWakQrT1lRSHRxa2R5ZUpJbHkrM285aEluTTJEUDBQOExBdzZZUjFOVVlpVHE4UVUrTUpGUFV2aHZaVHhPUTZtZndYcVNieGZ0NGswWVhLS3FEcUgzaUpCMGhqRkY4U1hRVC93QlFTd01FRkFBQUNBZ0FoSkJvVDdndUFNTVZIQUFBV1drQUFDOEFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5NWpiR0Z6YzlWY0NZQWNSYm4rSzd2WjNwMU1RbGhJSUlBSlI4RE41dGkrcHpza2tleG1BeXNoZ1d3U1hCQ3dwNmRuTTJRenM4ek1oa1I5eXFtSWdDQWlJc29oQ0tqSW9aQVFBaUtvcU9DSm9uaUw5L1h1UzNudjZmdi82dXFlbm10M0pobGVlSVR0cXE3alA3LzY2Nitlbm5udXI0OS9EZ0IwOXFjWXRER1pMb3JFMUU2bXhlQldwdFBGb0l0Smw0VEVyRTc0aXNSc2lTMlBRWnlkSEdNcjJFcUpyWkxZRzJJd201MGlzZFV4NktheVB3YUhzMU5pME1VR0pMWkdZb014T0pLdGpjRVI3TlJPK0piRVRvdkJNVFJ1S0FienFYeGpESTZsOHZRWUhFL2x1aGdzcFBLTUdKekUxbmJDQ3hKYkg0TkZiRU9NbmNuT0lqazNkc0wzSlRZY2cyVnNVeWY4cUJOK0tySE5NVkJwMWhZYWNIWW52Q3l4TjhVZ3dVN3BoRjlJYkNRR3k2bjNuQzdzUFplR3ZGbGk1ODFnNTdNTFl2QUc5aGFxT1ROWWtybDBTVW5NazFnNkJtdlphQXdHMmRZdXJHV29kaUVOM0RZRFpyQXhDWjZuNXUxMHlkSWxSNVRHaWNGRk0xaWVGU1JXak1FbXRBU2JZRHNrZGpGeDNSbURzOW11R0hzcmV4dlYzazV0ZjBkVDNpR3hkOGJnZkRiYWhSZk82aEtxWFVxWHkraHlPVjJ5ZE1sSjdJb1lqSktKMjlpVk5QbGRFbnQzRExiUjVHMHNRNWRMNlhJWlhTNm5TMVppVjhVZzcwOTVEMTJ1cHN0NzZYSU5YYTd0Wk5kUitUNjZYRStYRytqeWZvbmQyTWsrSUxHYlluQUpHNVhZQjJOd0daVTN4K0FLc3MwNzJJYzYyUzBTKzNBTXJtSzNTdXdqTWJpYStqOGFnMnVvdkMwRzExRjVld3l1WjZPZDdBNkozUm1ERzJub3gySndFM1hkRllPYnFidzdCcmRRK1hFR1IyNWNlOVlhengzTFpMM1U0QTR2Vzl6b0ZjWnoyWUxISUQ2VXpYcjVnVEduVVBBS0RJNDZheUpYOURaNnJwZlpVVFdXeU5UcDZ1Z2ZXcjk2NHdpRDduVVhPanVjdmpFbk85bzNYTXhuc3FNbk01ZzVnS09LVHJhNHhSbWJ3TkV6MW01ZVAzREJxWU9ia0NEMkJuZG5iZDZ3YVpEQklmeCt6ZURBdXFIMWczekViTjR5dkxuL2pLRmcwS3hJRXgvak42enYzN2hoTGQ0UEI1TjRBNStEVFljSG5QbzNqd3h1WEwxbXpjYkJZV3crbFBRYUhCZ2Myaks0NW9MQkxZUHJOekZZc0M2WEgrMjcyRXRxRi9ZNXlVeGZ5aWs2eFYzalhxR1BhNDVLSGNhcFZzNGpXa0wwc0sxalJTYWJLYTVpc0t1bjJqb1JQdVA1WERIbjVzYjZ6cWJiYUkrYjN6VmV6UFVONUwwVU1zODRZNFdUZlVyYm5lTFd2djdNNkZDMjZJMTYrVHF0aTdZd2FCL0lwZEQwaDZ4REVLeWYySjcwOHB1YzVKaEhIc3U1enRnV0o1K2hlOUhZWHR5YVFUZ3NYcGZKOVkyUE9jVjBMci9kN0V0NTIzTjlCYmR2bzNmUmhGY29yczNsQ1M1T01ZUHVSWXNjNHVheXhiempGbGVuVW5tdmdQT25jL0VSVnZXMVJEUzRKYlVZeko5Y2JRYWRvMDdoekh6R1JTbm4xbGJYSDdNdXN6MVRaQkJiNDQzblBkY3BlaWtHOHpaT0lKM3QzcFpNSVlONnJzNW1BL0ZEWXR3M3BUbElyTkJLcjVWNml6djdVTXErQVdHelUwbXIzSTVNU3Zqck1MZTZnOEZKalJGZzhQYjlGUnFwYnNvNzJRSlNSTHVjNFdTZCtyaXFqN2J1WWhVTkJzZE55WWJCamhiTDNiQzlPMGE5SWc4a1BUM245aStxeGRMTjVUMkUvbllNa0FQTzJCZ0tPeTJEbUpwMmJqOENMajJSNVl3WkhGODNjcXdWWTNCbTEzQm1OT3NVSi9LSTRtc2JaTGdpcXN6RStCaFNIUFV3ZUJOTSt6WlJnN1ppTWorVm1iVG11Rlg0anhhUFYrVGJBSU03V3lhYWNZQ2luZHRmUGRJWE41YnlkemJ1dkZOUTRHQm9GUzRiYytyMGZQcWlJZlJyWjZaUW1QQlNxekdHdlBNQXFhNm9PMmE3Vjl5YVN4WDY4bUlualdLWWI3WGpSYTdrak1KRUVzT1pjTXZHU2VTcE5sT0RlcmROSk1jWTNOQnkwZ2V1ZkpldlBIZndtVDB0Vi94OUxTYlpBb1d6eWZ5R05PcUwyOUpKUFEycXNhcWhnWFdXSWNjWTU4b2hobndQd1NqUVA3SEx5NGViK2ZKbUdKU3ZVMHk5L1BCYWxqNGl6UTA5QjJTc1JUNnppV0ptckc5ZHBrQnAyVXlLdGFsU1pycW04UlJtWWIzOGxvempVUVBQWDFIczdzSFMzZG1aNHRaMXVWRUd2ZVdiVGJEUkxLd2VlM0w1QmltMFliRHlnSXlCdU5sQlhNZ1FtUDVXbTZZcm1JMGF6SWwwcjg3bm5WMWl6Tnp5YkJCdEtUTENGUlgwVmpTdUxmbi8zRnI4VnJUQ04wUjk1bkRSY2JlZDRZeHpZU1YyRHg1R0pYWXZnNXRhaTYrV0NYeGt2cUozN1ZqdVl0L1E2eG9SbWZQckd5eHVYWnNaSy9KZENBWExleVQ5RG05blgwQU5PWFdrK1FnRzJuNlFaZkQrRmtyVE11dGRYRitvTlY3YW1SZ3I5by9sM0cxbk9ua0hoU3hQQXhzWlh0K2FNVHpHNXYzaERQcWFKSXM1aFpkTmljbFBIaHdkV3VhRHVVR1dXQm5TMXpiQm9mN1RCdVJ3M29HR2pFbW9rd1kzSDd6WU1JVmtSMTFVMVYrS0R4ODRTQ3R5Q3BtZmV1M2plUW9OUklwUzlxQ3MwSFFDVWZNNVc0czJ3TnEwU2ZhRHU4L1ZsNHYydWJMZUVvNFA0czVTWDk3L0gxRzV2dnp0WXprSHo2NTNIYXdIalUwOUw3em5JRDZqYWtyUWovN2ZQd0ZzU3I0N0RzcERzNlpFN0VoNTQyTzVYUXl1cUxuQ1dtbTVoazdMRDc4R3hHaGkxZlBGL2U3R1pENHdwelprdlVkZUc1STBhOENyOTkvcFRjV1dobXk0NXpValRMTm12UGFBdk45NlN6NytXcEtuV1dQR0hOZjFDb1dGc2l3enVLQ25pZGxUZjg1UTQvSFl0SjB5WFJSa1BMalQ5Y1k1S1luZFZ4SkVJVUdDRzVWdTdtNkpWUDducG8ybnFmVGthRkc1K3laL3BEWnRwOHBnV1hNTVNwcHFVYlYxdXVsY1FWa1cvK0MyclljK0lvb041eWJ5cm9lcHFFY2ZKZGJRZmhuWk84NCt3VDRaWjU5aTl6TlkxTERoMkZIUG1ySWxtN0l1RzZxbVc3SmltT2dLUlRZU0ptTERrdE1wSTJsZ3Y0eDlobzZsNHY4NXNwS1VOY1ZXVEUxVEVyWnMwTHlVcGlBdG5LK3BORnV6NlpyVzBsNmpQRFRzb0Q3TDh2czB3NVE5V1hGeHRwWjBUZGRJdW9xaTBBaWNrU2hyMWJGVjAyMi9OYVhvaW10ckZtOUZ0bjVyT3FIWnRvdVM4MVlsTFZvZDJWVU1SZk5iMVFSeTlpVXdqU1QxeTVhbm93NXAzaTliS1grV1luaWFoOHJ6VmtXMy9GYk5UYWYxbE9IeVZsVkwrSzJXWlNYMHBLcjZyWlpxSkl4a1NYT2ltdFI5QzJzbS9hL0tscUlJS3psYXVaWElJb0VQck5BSEpMbWVKSW01bGRFTGxtNHBoa3EwWlBLSlh5SnQ1SThXOUdtN25wRkllelFIdFRNajQzR01yS0djS2xIQmRxWFVaeXNHOGpVVVc5QzA4YzdTT0dYMENkWUN5UldaUElRelpacVAxT1NRQnZGT2F5U3RJZnYvYlA1SFk0bXVRdElJS2hxM0xNN1dpS3NwdEVBcUd1ZUJCdkl0VUM0aFViYjFnTG9oQjFheFVTK2JlSlBWRlROZHgrcm8zQWF0YmhoYW1kWE5HbGJuYzBPcks1WmR4K3A2VFI0MTJpSnp0S29WYVZhMzFQU3N1ZitlVFZ1VGVGYng1SVk4cTZyR2ZudldMSG0ycm5kVjA0dDYxeXg1VjhVVldobDVLbXhzS1pxQjQwMWt6M0dCT0RSc3BJOHRuQnZkVTZoQzJZVDN1ZVhRdzRwQjFpVXJXdmpuNDRwMHJ5MlZGWkhLdHFKUzFaQkpGVEtwVlRJcFhBS1Z0eWdsYTF1OHhuWG5mYWJPN2NyL0MvR29wdlFvWHhycCs0RnF3UmpQTEJzakUrZkFKejV1TFEwamkwNHp5cmhvMkpEZ05EQ09SbW5ZUHI0NEptVGZ5dVEvWFE2UXhIMXFDdzFvNThCK3pWWjkvYUlyQVAraHJKYXVjZXEyU2pLUlhkQUxlR2NiQnUwb2xwMkt4Z1B1dGNrd29obnBxYjFSZ1E4bHNMc1pTajJKM1JHcFU5cGRjOVFEdDd1ckgwUzdPeW0zaHQxMU9ZVlhWN2ZLVjgra0t5ZVk0d1UwMURUZEczcVVSbVhzUTNsVWpDRDE2VmI3RlhYaU1UVFUxcmNTMVpDSGdqV2RxSktYYmRTZWFqVFhYNGwrRHBGSVRZRWQzZWRBRXBVNEJQeDBvb3VTcXp6K0loekp6eXBaaC9ZVVE3ZE0xSVZIQXJIUHlqTFB0bEFsSGgxSU9sa24vNUlQVVVKQ09QclhNdWlPaHFGdmFHZlhEWlVpS1hvTjV4QW45S1lxb3JPaEtqeDNvWWhOZnRUVEpzK0xLQVBDc1laT2lNRlM5VmNBK1Y3TU1uMHMyM3dseUxLUEY2cXB0QmNrVVVlZW1mQmVzVjc4M1pJd1N6Umt4S3VsK3A3aSt3V25GdXdvMWRaRWZjeGE5aFMyOUxsek85cTZqU3VXa0VsMDBtbWNxWEdMS1NFMkc4R0ROamtlMEhmOGoyajQzbENTQWhtRzVVeUJqRXBOT0svZ0RyVlJ5REpjSTRYdm5RRTZWTzYvQUIxYVhYVFFpdEFpNkRBNE9nelpuMjlFMElGckJuY2tYd09sQWgyWUZKZWh3NlFNZTBwMDBLd0RSWWVKNGJSWmRGaTFiRXF4SUVDSXJhZ2lSK0hXSkgveXVwMndiWnRiZ2REQzkxNmhKUitoaTVWdlJ2a0dPUmRGUGZKOUpPN1Z3cGJXV0t5aEdNMGpUSUFrMDVscWY4THR0cGJlcFZWaENQa0ZVc3hVUmY0UlJGU1hXNGJ3VUF1dlpCWHVjejhya1NuQ1dBbmlhQms4SXlia0pQaGM2dlV6VDBzVzBkNm5odlFzeXBESkkxYlNTcERjdEVkWlRtbFAwVFN5TGJYNDQyelQ1NG5abzBsSTliMkluTWlTdW0zajhjL3lJd042VWJZVFNnTGxRYlR6MkVsUjBPQklOMnlOcEtUZHh5YTdKa3dlMGYxbzZXT2ZveEIzR2xQMzg5b2duK0s3alJaRVpaN05pM3lkY3VWd255ZGI4SHhmVnYxenN1Rm5acXFmUDNNYVl1MXlYVlhGRGRjdEw0WEZyUkRQdEJEOEV6ZGFSR0JWS2VHMjFqbmQzd2VyVCs5K3U4Q1dvQ25YV0VWVldLb1RZZjB6VGRrcGswSUcxeCtQNVB4ZTgzT2FCdmZFOGxYcTg0bmF1eVE1WHdWcW9EMTVqYlNwekFzaTZ5UGhad1krM3Z5OGk3SWQ3bEdEWTZ4R1JrRXIxbFlTYWQzUVpDOWhJaDRTc3FLbUZBVkZSTVE1eVVUQ3dKT3ZvZWs0UmttNGFVeWU4VVNrcVM2aU9LV24zSlN1SmUyRWJFZnlFWk9IWjh6MS9KcU9tSlNuaUJ2NmZzWU55MDFPR1RkcTdrRjE0NGFWMXZjamJpUnF4ZzJMeHczY3c0SzZqMGFjbDRqRUJ6T01EM1pWZkxERCtHQUl6aHF1ZTVWaUFISXhSWFN3TURwUVZLQU0zdVJSSW9IWmtDRk9vU2hKVlZ3Z2o3VTJMdGowSkdtcXVHQ0o5VXlaeFpSeFFRdXlQNktITnZIamc4YjFDZUtEVmljKzZHS0ZWOGVIU0xTcDhxSk5YcXpHWVNtVEpiL1MzbXFiVmRhZ25GTUpKTFVFWW1WRjNPdG9lVCtEVUswVXJWT3VCZDJSUlJ3L0t2am5MUDlKbDRYT1JDMVV2bjdvMlk5cVdid0ZWemM5Y0RHU2ptTFpta1pCTnVtbFBkeEFUQzNoR0k2bTZ4NWFEamNwazRKL1duWU1UL2RjV3pNVHRwcHdMVnZ4dkdRNmdYaHk4Yy9EdjVUL2gzeFVPaGtGaUNEVTJoeDlsSFBUWDlsVEU4ZldKbmxxNGlTU0RUMDFjVng1djUrYUdQV2ZtWVN4eDZnNnJTRnVPRjVrdTBhV28vblBQNTIwMlhRMm9rd2FWWkxLVlBtTkhtQ3Y3aWtLOFVTUmhTTkxFekdEQW9TTHExMURqQVZ4M3JEb0tJODhUYkhHdVIrTjZ2VmRiOCthSFAyMTlpek9VeUNleTZMd3JKMVE2Ni81UklCd204Y2ppZ3FVT2ZGVkVVUWcxYyt4RW1sWFQ2Q1hrcDVsSm1RVGMveVU2OHFtYXFhVHV1VmhrRWthV3RKTnVla1VIcmpOWkVvMjB5azlpYnVTN1ZncFpKbE00U3F4UzM4YzFXTDNLTWUydjJQVlJMY3JxNU9nTytrNURhSGJWZE90ZjlycktBTGJXa1UyTHZPemhsOVhJM1c5eHVjYzJHT0wwMHNRUHkwK0luck9FazlmNlhTaTF6cmZsSjY1OEZNWDZZOW5xdkFVNVRyOGlTanA3ZU9FbnJBZ0I1NjVVbjlLRFNUd3BTUDhFbzZWb0RmaFB5WGdZNEo5aHJmalhrZzdzVkU2ajBWT1dEZ21tUkFZcC9HZWZ5S211cWY2N1hidzVBYjNJSnBMejZLUWI4QWhlRnF1K0xzRTk3bnJXWWFaOWh6Vk5FdzE0ZUEvRmM5L0tKNnRwL1cwSnFzSk9hR2tVZzRlUEhUYjBiMTB5bE13WlVnYW5wMUtZd0tmeEVtWWFKbHBoVExVdElyeDJFUVNadExVRTVxWk5sMVQwelV5TWJwSTF0UTRQTWcrVFpjSDZQSWdYUjVpY094VUgxWXlPS2JlRUhvTG5jR2lldDJsYnhyMTd5cDZCY1VrbGc5TDdETng5bG4yQ0lPanl5Y1N0WTI0NytTOUxIMkhjRW5qYjE0cEdsRit0TGs1ZW5QRERXS3htOEh4VTMvUzNCeGhicFU5ZEhtc3VZbUo1b1pielEyM214cXV5czBOVjVvYnJqYUVzczJaYkJGWEk1bHlyOFFlajdOOTdJazRlNUo5cnN4cjViTTNGOU9XLzJJV1RYdXFPYkUwQm9mWGVoOGh6ajdQbm02T1ZITm9WQTBHc3l2ZkxJdkRwK0IrK296N0dRYUgxWGluVldMM3hOa1gyQmRKMFMvRjJiUHN5eEs3Tjg2K3dyNGFaOCt4NXhuME5QcVpQb1ArQTM5Wm5jUllHbWRmWTErUHMyK3dSWEgyVGZMV3Q5aTM0K3dGOW53Y25nTzh2QWhQeE9FSGNHZWNmWWQ5Tnc1NzRER0p2UmhuMzROWG1yT1hLYkh2eDlsTDdBY01sS1pmYm8yekg3SWZrYmcvbHRoUDR1eW43R2R4OW5QMmNoeitBcS9FNGROd1A0TTFyWGpaT2M1K1FTYjRKYW9MMzBYdDJhL2crZWJVVE1TWlJESTlRREkxNTZNNlAwUFFESGNyem1ZUjl3ZmhJYm9RME9CcHVueVpBY1RacjlsdjZQSmJ1dnlPTHI5bjhMcEpYMHBoTUNPQ0hnYUxtNGhmVFkxV214ck5kNXMvTUpoWjVzcW1TT2hFNG85TlRUR2FHbTAyTlRyUjFHakw5MHVBbUtibU5yZXRLTTF0SzBwejI0cUNicDlUTStZeG1GWCtnaGFEN2xMRFVKRTJuRncrQ0xQSWNXaEQrTklXZ3RyYnlhbHdESWV2bUplQzU2NmVnL2N1MW54dnArZE8rSG5LR1JOanhjejRtTWZIYlBTS0Uza1VYcTh2M0dTdnI3MjMxcHZPQiswM05hNThkYVZwK0xjTHJtdWRISzM1K1llclhuV0JHcmJOZFBvSmd5MUJIbE5LVlFvTU91aEhRbWpSbmRoemJrUzZEY2tMUGJmbWQ0dVhOZk1pSkRFMTZ0cWhSTGJ5bnVhZDJlTDNRSkhrOFQwUlJtNHU2MDdrOFFSVTdLTVZ5ci9jU0lQbTlkVDM2WnpTOUlIYzJKam5pdDlONmZLMmp4ZDNpZWpWVThOcXg0aFlVRHE1UkJ6S2RXMGdFa3grSEFvR2loZUM1OVF3TzdkQmxTVEQyRlVSbVp3RzVJbVE1eitkMUt5QTJkYUY1c2ErRmQ5ZXlMelY0Kyt4RHVGTnp4Qlpvek1UYmpCenkvd1diRHc0VDlycUZOYmpQc09ubm9OVHMvem04R0I4ZE1INHY2SEN0eDU1a3A4S3FQTWVidHNZVFR3TUthelBaWWV5S1hSVkt2aTZmUnUya2xlSGFuS2wzeXNSUHl6VjVxUlNGZTRQVmpNS2YyUzllSVA3c01kM3J0SzMwK2JVL0o0V2N0anVqTk5QSVpSL2p5djQ5WmN5eU5iN0RuRTN5anRRK1V0SjVSWU5mem1yOENwL0g2MzJPam1xSEp3Y2tvTlpOOGQvZ3FqRDR6VUcybFFncnFuUkxIU1J2K28yNWNZekxwNXBhaTNXaHI4YUdINVJmVFphdFFJMm5ZV0o4Zkd4REFrdDhXL1Uwcys2elBhL2lCUjlqTEszcDJvOXY3cDdkaU9iWTRQZmZYaGlQMlUva0cyMWhlSS8xVUxUTjVHanRGQ0RaMXJyZ0lPanhJa041Q244UitSNnpsbTBCWTZETnJnVjhLd05SOEVkY0NjdytCamVUWU4ybUFkM1JlNWplSDkzNVA1b3ZQOTQ1TDRINysrSjNDL0YrM3NqOXpMZTN4ZTVWL0QrRTVGN0UrOC9HYm0zOGY1VGNEL1c1OUhqRWw0K3dNc1RVTFlINFNHVSsyRzh5NElFSFZqTzZ1MXVYN3hrNmJ6MmVkUDN3UFNIT1kzUDREV0dKY0RwTUJQV3dXZXh0c29mRFkvQW93Qzh0cHR6cGRvZWVJeVBuZ1Y3NFhHa1Q3Vjk4QVR5bzlxVFdKc09uK096bnNLL0RwejFlU3hKbXFleFRqeVQyRHFkckJsSXN3YzZLbVhaQURQZ1RDNkw3bzhOWlltSHNzUkRXZUtoTEhGNEJyNkEzSWpmRnlmVFhxcmt1QW0xMzl5RTlsK0NaNXZTL3N2MXRlK3NsT1ZOcVAxSUU5b0hzZ1RhTS9nS2ZCWDdpTzd0U0pQNk51K0RycEh1V1B1VE1HT2tiUi9FUnhidmdabkRqOEdzamlmaEVHcVpQZEs3Qnc0ZEhtbmZCOTFVUFd4NFpQbytPSnlxYzJqY0hwaDd4ajQ0WW1RZkhEblN1MlFQek5zRFJ6MFVDdDdOVGZCbW1BUG53VW80SDliQUJWeUJZMzNtb1FLYjZma2pDcmdHRG9XdndkZHg5amM0alc5aTI3ZENvUjhWUW0valFoOWRMWFNuRVBvWUV1OTFYT2o1VkYzQWhUNldxc2NOajNUc2crT3Blc0x3aUxRUEZsTDF4SEpWVHVLcXZMNkdLdHRSbFN3TVF3N09nZkdJS3R0Q1ZiWUpWYzZwVU9YYjJQWUNmRWVvY2l0MGNSK3U1S3IwZEpTclFvTEhSNWJ3S2dxK2FHVHBIdWdsRVI4RDdKKzd2TDEzWHZ0dVdGSXAzQ1d3R0M2RFpYQWxob1IzUllDeU1oUnVwUkNPYXQvRjJqUmVleEVCMm9aekpDNXd1eEQ0ZXpqdSsvQ1NFUGhoRkpnV3dCQVhlS25VaU1CazZXVWpoT1craVBEVGUrZE5yeUg4MVpDQWEyQTVYQS85Y0VOa3hRMkZ3ZytGd2crRndnOEo0YW4yQTF3RDdUamJWMk82VU9PSE9PTkg4T09hZHBkcjJIMFJxZEhMMVZoR2F2Uk5iZmViME80M285MC9qRGE4ZFVxN2s4QyszVW5nYXJ2L0JNZjlGSDRtQk40bUZ2OWlMckRTaGdLalBPMEM2Q3FCVnhQZ1hkZTd1RnZmRFVhbGVMVFc3NEJqa05rSnVFT1FlSE45a2tLOEU2Q1RDOENFQUQvSDJzdDFCREFyQkVpUUFOWVVBdHlESk81RkFlNURWcDlvVUlCZjFCSEFyaEJnT1Fsd2NrU0FGVFVFK0RTU2VBQUZlQkJaUGRTQUFML0UycS9nMTc0QTdBSjBrb1R0OS9WK0JsWXUzZzJyTUVxOFlXVEpYamlGWWJSZHZSNXIvWGdXYXAvWHZoY0dHTndDbDFCdERRWDV3ZVVJbzdVamUrRFU1UjN6T2dqM3B6MEtRMzd0alcxNzRmUnBPR2pHWGxoSGc4L0EveCtGOWFLM3ZhSlhmeFEyaUs3cEZWMHJIb1V6bDg3cjJBMW5uWDN2Mzk2KzlDRyt0NUQyeTNESEFOU3hDN1U4QXZjSUErVmRoZnZEYWJnenBuRnZ2QlIzcVk4Z0hPL0NQZW9lM0tHQ1ZiY0tQUGdOL0JackJrYTczOEVmT0p6dkMrRjhIL3dSL29RMjZrSnMvVDM4QTlycENGeXovd2ovaEpiNloyRmR2Kzlmd3I1L3hiNS93NzVEWWRwZllZRUUveTdCZjBqd242OWdwUEtOL21jaytCZDRSWGo5amFnQ3VXaHU3eU93Y2ZGZUdKNkdzbTRpWjIvZURWdEtEdTdncStxWmlGUG5obUxPaGYrQy93NmQraitjL2w4Ri9SeXFSTkJZc0EvT0hsbThwSGMzdkdrUGpLeGZpaTUrRE03WkRlZWUzYnQwTjd5NXhHZ1dqekxmeHZJRnpLZSt3eG4yK2lSQ2hndmdieWdOQ2JTQU1VWXpaNkcrSkVTYkx3U2JCb3kxaGNpNlF5RHJaVVRXZVkwZ2EyODVzczVIWkYwUVFkWmIvSnBUaVN3RVNISlMwTGwxUU9mM3B1cmdEaUhwaWE2T2FvN3BFSklERVVpYW1GQUI3aXRkdUxNY2dSSFF3QUM5Q2dQMGFSaWlYWXg5bDJMc3V4M1gvdU1ZQlY3RU1QUmpIZ2wrR1lIbWJmQWIxczZoZVc4SXpaZERGN3djUXZPbEVKclBWVUh6cFJDYTJNZW0xNFBtVThKckNETDZwRzh5YUk0U05MZldnT1p2cDRZbTYrVDBwNGJtZVJGb1ppcWgrV2NzLzRMUWZHVS9vZG1GUXNSQ2FGNHFvUGtzUXZQQ1JxQjVXemswdHlFMHh5TFEzRjRmbXRsSm9abWJGSnJqOWFGNVVZaS84eVA0VXpFZEJqUjFGL3dOamtBN0dHaU1WYmdzVDhObDZTS3VMa1UwM0k0T2Z4d2Q4alE2NW90b2x4TDJMa2ZzemVEWXV5YkUzck9oalo4TnNmZGtpTDBIcTdEM1pJZzk3R1B4ZXRpN1c3aGxKcnBsMXVUWXl4UDJDdFhZdzdsVFkrOFFUbjlxN0YwWXdWNnhBbnZzZFRDTHpZZDViTUYrWW04MmRMRkRXYmM0bXIwRmtVZVduYlVQMmtaNnhYRm9vbEs1aFpGTXl6K01BUVNITWY5WVJzYy8vMWkyVHlTSi9tR3N2Y1poalBnZk5obi9IWlg4RjAzSm53NWd6ZkEvWEJ3R04yRXJXVEFlOE44REYxZHlYeHF4ZER6a0hnKzV4MFB0L2VOZkcrY3dwejZIblpVY2xDazVCUHFWT014bFJ3Z2duWTVVU09PWjNXMUl2N3U5ZTlkajhOWktGa2JrQkRXVEV3WmVJOUVacnhGaGNZSmlSM0lHOHlaaDhMWktCbllkQmlSNU5ZT2pPSU9qVVdOaXNBVlJ3QS93bk1GU244UGJLem1zaWxocFZzaGhWcWlDNy90cG9lL2JoTzk5anNkVVlHQXVycVJKdVA5ZEpmZUJPdHdEL1NiblBqL0tmWFluVzhDT0ZjWmRqaVhONnVqRjBEK3Rja3ZyallTVkRuYWNXT1VkN0hoS29ka0pRTEdXc1lWSThjU1dVenlKdlY1Z2VCQzFJYjlLYUovZHdHcVQ5RjB2aFNRbEpIay83NWRZRHk3aGFVaXl0L1VrRjdlWUpIU3lKYmprZlpLL3drMkUvbnRrSDd4anBQdWR3Wk9hUzNESHZaUWZZUy9EMnVYOEJIc0YxcTcwRDBmditpd2RlbkhDdTRPbkpGZU5ZRmg3RDU5eE5ZNTdMNTl4RGRhdTVTZjM2N0QyUHY2STVIcXMzUkJTT1k5VGViOGtxTnhJVkQ3QXFkeUU0ejdJcWR5TXRROXhLcmRnN2NQaDNBdEpmc2IxbjgvVGk1WFFnOXVxQXF2eG5ORVBGNk81UGdscjBTYURDTTlsSEtSOThGR2NNZzF0dEEydDlCSFUvWHdzYjhOeUxaYTNZNWtILzc5UlVXNFM1WEpSSmtTcGl2SWtVUzRVNWZHaVBGYVU4MFY1akNpUEZPWGhvdXdXNVd4UjNzS3ZuWEN6S0c4UzVZMml2RjZVMTRueUdsRmVMY3FyUkhtRktDOFQ1U1dpSElSYjRmZlE5YjlRU3dNRUZBQUFDQWdBZzVCb1R6VWczZlhhQUFBQTBRRUFBQkVBQUFCVGFXMXdiR1ZUZEc5eVlXZGxMbk52YkcyUHpZN0NNQXlFNzNrS0gwRkNDQTU3UXB5V042akVFU2trM3E2bE5La1NoeCt0ZVBjMUtTMHRjTFRIbnZtbWpicHVOS1RneUJKZjRiQmFmaTNYRzZXVUNaNmpOZ3dWTmEzRGlvT2NJdndwZ0V5ZW9jMUhSd2FTN05IdU5HdDVBc0FUaWxZTnkrOWY3V3Uwcy9KQzN1SUZMUVJuOTlwbFhNQms3ZkZjMXZQaUpQbUpZelppMVg4VGszYmRTUjkveDRFUkJHd25keHVSYjNlM24rd05VL0NRa0R1N0lXMXFWYlFlVU56Ry9kNmllbzhDTE9VYit0VDlXWGZVOEpXckZxNEI1VVI0aG9pY28wL1E0Y29rci9NSFphZTl3SW5oVGYwRFVFc0RCQlFBQUFnSUFJT1FhRThTa3hyNG9nTUFBR29RQUFBWUFBQUFVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk11YzI5czdWZE5iOXN3REwzblZ3ZzlKVzJXdElmdFVtUkF0NkZBRDBYWERqME4yMkJiZENiTXNWeFp6aG9NL2UrakpNdVMvQkduV0xmVGZHbGpVUlQ1K0I0cEZ5SmFieUpTOG94UkpuZms2K25pOWVMc2ZES1pKRHlYSWtva3VZT0hDa3A1eWNWdHhXVWtHYzlMOG1zeUlmZ3NqOGtyL3lGM2w3ZmttbFBJV3UrUGwyWUQ1TlZHR1gxQ1J4VzZ1WU1FMkJib25IeUFKR081K2s4ZEF4OEYzeklLOU1uc0s2V28rbVBCVUVqOXhEc0o1ZGtid3VnNVdTN0pmUWxwbFpHVUMxSUlLQ0ZQZ0d4QnNKUWxlbWV6cjJLNUpLd3NLNkFYOHJ4NWpXZXlmRTJxT0hQdlhPaWwvbU5XNmlCaEMrZ0lUV3hXVXhmUlBEeGw3bm1mS2JoNzBkUklqT09welN5aU4ya0tvb0V6aE0vNCs2ZUErYkg1a1BuSGkvVGhpcnJYRWFWNE9wcFhSWkV4RUQwWWE2OE55bllEeXlrOEFtMDJ6c01UM004SHRmMXFwQ1pCUlMwN1grcXM0Wm9yQlNtOFlLRGkyazJCSWJLRTVMRzRTWEVEWW1xY0xjbDFWSlJFZmdlc0taRmMvNGNHZW5VVEZRV20xNUJ5OWJaUFR6T1ZRRGxDeVdjRnFMZnNEMUdETkJTazNqOHpOc09CS2R5U0tDYzh6M1lrQml4TXZHRlNZb25pSFlsSVhPMUFERVJzYTFvSXRsVjVhZHM2WG15RFJqeGNUR2MyTFU5QjJ1MktiTXIxQWdWRFcyeE5xenpSVFdvTjhwMHl2VEJIT1ZkYkJqK0pBRmtKN0txV1hUUHZCTE5tWS9KOGJ6aEZaZUxwS21QdGZCcnVlNmlZZ0ttTGpLeFd4czNNYWUxYjQzSVkxWXl2TWRCKzZQd0UwZFpyZUFNWjl2ZVFlYnVIYkdERHhVNHAwUzIxZTY5ZThGUFczUHFoU2kvQU1wL0FJeXRsMllGRmtmd3pvMThXU0VMRUJlT3RDNjRlR3hZVzF0bDEyaDBHNXhzRWJjOUU2Qy8zeklzR1BNUFZFTCtoNXVTUWFSQnVDT0JnampuUFJxRmhwYWNTclJ1T0xYOE1xdFBIVXgrcllGVk5rcDRWQjJjWFJSOC9OQWhRYklHSHl3MEhGcmI3ZTZFMDdmRGt4UGtBekMrWXlRcGFoMm85ZjEzT1dtMm9lQmhSaG1tRWgycERXLzlWZFhRSHJWc0xSOVBnb0IwWGxPN0JRNUl5RGZvUVVmbVdBN0x5VFBxRjVSbTA3eFU2emRDa2RjV3dHYmY4OUYwNFdpSnRGN0l6OXc5VzdmTzB1cStONlpNdDZQcUhqL3RBRVE4VWY2ZW9MZm1qOS9jQzFOUjBycU1jNzBVNE1QRVFPVWkybnFHcEhuY2VHaGl3TzRLZCsyUmYxQmZlR243cnZoWGpmVUZ0akFrWEdFakJjNm9LWXk5SE5XOGFNSHM2VHZCZDBtNDc1cExUYVR6aFJkVmRGdXRvbjkyTEFrWlNjeWx0ejQxOWhQelB2ajlqMzlGUlNMNzZ1K0JGNk1kU011MmpZTi9VOHl0MkFIWHQ1NHZMOU9rdy92cWZQbnZaTzBMY3A4bHZVRXNEQkJRQUFBZ0lBSDJRYUUrS2VlazZvd0lBQUV3SkFBQkRBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2WkdWdGJ5MWhjSEF0YzIxaGNuUXRZMjl1ZEhKaFkzUXZjRzl0TG5odGJLMVdXMC9iTUJSKzc2K29xajBoeFM2M0NTRVRYaGdTRW15VFlOTmVqWE1hM01VWDJVNExtdmJmNTlocG1yUkpLTkw2MW5PK2MvK09UOGoxcXlpbUt6Q1dLM2sxTzBiejJSUWtVeG1YK2RYc3g5TnRjakc3VGlkRUc3VUU1cVllTGUzVjdNVTVmWW14b0N1UWlHcktYZ0FwaytQdjN4N3dHWnA3TDVQcDVoZE1MbDh0Yjh6VzZ6VmFud2FEay9uOEdQOTZ1SC8wSGdSTnVMU09TZ1p0YzhzdmJkRGVLMFpkU1BQZDhOTWh4S3ZOb2pBSk9PVC96OUlRakFpVlFmRXpkaUlOV29JN3NrbkU1VWFWK2k1TG1SS0lDbG80aFhSQjNVSVo4Wm5nalRaaXFYRjhRWm56Z2d5RVNxaldpUlZlbWpBbG5mRWFnbHVZYUZSUEl6MUdKd1N2dXNIOUhEUjRBN0JwMHlJU3EvVDVhRjZBUVZhVmhvRTN2eUM0WHpWbzZxakp3ZldhMXFxWUJtN25FVVVaYUpDWjUwNDN0MGI4dGhWMjJ1aW5ndGJ3ZkxyYzZWMERiUFdIS1FQN0RXdVFxMlo0NStpODFib0dnSGV6YVVsYXBUeVh2R2o1SnJvb2M4L01uV2hSMmhYdVZWWlRML2F5OWpOUTZHNnhrYVpMYXBKb04xeDRwL2hUZEZJeGQ2LzRCdWladCtCNWFjSXU3ZXZyTk5nTFgwRy9OaUt5N0tGSzhBWXNNMXc3WlZKbnltbzYrNHBoTDRKS3ZnRHJoaUdiWURld29HWGg3b1F1UUlCMElmc3Zmb2VxdVRXUlIxR0h4bmpVd1BpQ3M5RVF2YURoUXZIN2xUYk5PQ3pmYm8zSkRYV1Fmdm9UaVJZSWpCd1gzaHNWK2kvQmZlZ0RzaDFOcFNMa0FFMElIbUdaZnoxNlZ1ZXdmUnA3S1FLNHRTTUJtOFExK3RBS25mMlBGZktMLzV2bThKVUtTSG5yUktEcUVDRExmQmRhaUg0ZjhibjJtK1M0akxHc1lYNDRYT0lsWFZGTThENWl5RlBCTSs3ZUhnUCsxci9vWTJ6TnVQSEhYcG0zYlR3RE1aUi92YmJhWVE5Y3NxTE0zaVZ4RFV1UGp2Q1JQMDRGd1J2SkNEbkhmVmM5T2FEV0R6SjBJN0didTFIZmlFazRoZFduVVRyNUIxQkxBd1FVQUFBSUNBQ0VrR2hQajBCSHNrZ0FBQUJNQUFBQVNnQUFBRTFGVkVFdFNVNUdMMjFoZG1WdUwyTnZiUzVoYldGc2RHOHVjR3hoZEdadmNtMDJMMlJsYlc4dFlYQndMWE50WVhKMExXTnZiblJ5WVdOMEwzQnZiUzV3Y205d1pYSjBhV1Z6RGNuQkRZQWdEQVhRTzd0QW9nZHZET0FZUHdVTUNhVk5xYzR2Ny9wZzNodkk3NUpMWllsUWpZdGhIa21tMjU3d21MeTZuNFFUR01NbDZZQTNNYjdDVjIxMW1mbElaL2dCVUVzQkFoUURGQUFBQ0FnQWhKQm9UMUN4SFgyaEFBQUFFd0VBQUJRQUFBQUFBQUFBQUFBQUFLU0JBQUFBQUUxRlZFRXRTVTVHTDAxQlRrbEdSVk5VTGsxR1VFc0JBaFFEQ2dBQUNBQUFoSkJvVHdBQUFBQUFBQUFBQUFBQUFBa0FBQUFBQUFBQUFBQVFBTzFCMHdBQUFFMUZWRUV0U1U1R0wxQkxBUUlVQXdvQUFBZ0FBSVNRYUU4QUFBQUFBQUFBQUFBQUFBQURBQUFBQUFBQUFBQUFFQUR0UWZvQUFBQnBieTlRU3dFQ0ZBTUtBQUFJQUFDRWtHaFBBQUFBQUFBQUFBQUFBQUFBRFFBQUFBQUFBQUFBQUJBQTdVRWJBUUFBYVc4dmNHeGhkR1p2Y20wMkwxQkxBUUlVQXdvQUFBZ0FBSVNRYUU4QUFBQUFBQUFBQUFBQUFBQVNBQUFBQUFBQUFBQUFFQUR0UVVZQkFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OVFTd0VDRkFNS0FBQUlBQUNFa0doUEFBQUFBQUFBQUFBQUFBQUFGUUFBQUFBQUFBQUFBQkFBN1VGMkFRQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VUVzQkFoUURDZ0FBQ0FBQWhKQm9Ud0FBQUFBQUFBQUFBQUFBQUE4QUFBQUFBQUFBQUFBUUFPMUJxUUVBQUUxRlZFRXRTVTVHTDIxaGRtVnVMMUJMQVFJVUF3b0FBQWdBQUlTUWFFOEFBQUFBQUFBQUFBQUFBQUFrQUFBQUFBQUFBQUFBRUFEdFFkWUJBQUJOUlZSQkxVbE9SaTl0WVhabGJpOWpiMjB1WVcxaGJIUnZMbkJzWVhSbWIzSnROaTlRU3dFQ0ZBTUtBQUFJQUFDRWtHaFBBQUFBQUFBQUFBQUFBQUFBUEFBQUFBQUFBQUFBQUJBQTdVRVlBZ0FBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2WkdWdGJ5MWhjSEF0YzIxaGNuUXRZMjl1ZEhKaFkzUXZVRXNCQWhRREZBQUFDQWdBaEpCb1Q5anpwOENpQVFBQTZBSUFBRElBQUFBQUFBQUFBQUFBQUtTQmNnSUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpESTBMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FoSkJvVDgvQ29FMmdBUUFBNVFJQUFESUFBQUFBQUFBQUFBQUFBS1NCWkFRQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFNUxtTnNZWE56VUVzQkFoUURGQUFBQ0FnQWhKQm9UOG93ODc0R0JBQUF3QWtBQURJQUFBQUFBQUFBQUFBQUFLU0JWQVlBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREkyTG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBaEpCb1Q0QzgyRm94RGdBQW5UTUFBQ2dBQUFBQUFBQUFBQUFBQUtTQnFnb0FBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVXVZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQ0VrR2hQc2w4YmRWY0RBQUFZQ0FBQU1nQUFBQUFBQUFBQUFBQUFwSUVoR1FBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpJdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FDRWtHaFBsZ0FCWWI4UUFBQVRMUUFBSHdBQUFBQUFBQUFBQUFBQXBJSElIQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlZHVnpkQzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUU4Yy9zN2NvQUVBQU9jQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ2NRdEFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU1DNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRTlvd1krYmtBRUFBSndDQUFCSUFBQUFBQUFBQUFBQUFBQ2tnYlF2QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVJTUmxGRVpXTnNhVzVsWkVWMlpXNTBVbVZ6Y0c5dWMyVXVZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQ0VrR2hQM2QyelVWRUJBQUFzQWdBQU1RQUFBQUFBQUFBQUFBQUFwSUdxTVFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rT1M1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUlTUWFFK1dVaXdaVGdRQUFGUUtBQUF5QUFBQUFBQUFBQUFBQUFDa2dVb3pBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXlOeTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUUrdzRKRHhtd0VBQU9BQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ2VnM0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE9DNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRTk0cjZLWG5BRUFBT0lDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnZE01QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUlTUWFFOU8xN0xkbFFFQUFMQUNBQUJLQUFBQUFBQUFBQUFBQUFDa2diODdBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UlJkVzkwWlZKbFkyVnBkbVZrUlhabGJuUlNaWE53YjI1elpTNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRThUOUp2R1lRRUFBRllDQUFCSEFBQUFBQUFBQUFBQUFBQ2tnYnc5QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVRhVzF3YkdWVGRHOXlZV2RsSkZOMGIzSmxaRVJoZEdGRGFHRnVaMlZrUlhabGJuUlNaWE53YjI1elpTNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRS9FZ3VmZ1FnRUFBQm9DQUFBeEFBQUFBQUFBQUFBQUFBQ2tnWUkvQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVE0TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBaEpCb1Q1cExqY21aQVFBQTNRSUFBRElBQUFBQUFBQUFBQUFBQUtTQkUwRUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpESXhMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FoSkJvVDhXU3pqbWpBUUFBNWdJQUFESUFBQUFBQUFBQUFBQUFBS1NCL0VJQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRJekxtTnNZWE56VUVzQkFoUURGQUFBQ0FnQWhKQm9UMk5TTzVWUkFRQUFHZ0lBQUNvQUFBQUFBQUFBQUFBQUFLU0I3MFFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTWk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUlTUWFFOW9NaUduU0FFQUFDTUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dZaEdBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhNaTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUUvbmZBWmNSZ0VBQUNFQ0FBQXhBQUFBQUFBQUFBQUFBQUNrZ1NCSUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRMkxtTnNZWE56VUVzQkFoUURGQUFBQ0FnQWhKQm9UM0l0emYxSEFRQUFJd0lBQURJQUFBQUFBQUFBQUFBQUFLU0J0VWtBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREV3TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBaEpCb1R4Q2Z6TTlSQVFBQUxBSUFBREVBQUFBQUFBQUFBQUFBQUtTQlRFc0FBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpEUXVZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQ0VrR2hQYW14THF6UUNBQUFhQkFBQUpBQUFBQUFBQUFBQUFBQUFwSUhzVEFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVa1pSVTNSaGRIVnpMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FoSkJvVDdxaVJCNlRBUUFBdEFJQUFDb0FBQUFBQUFBQUFBQUFBS1NCWWs4QUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVa05DNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRS9ZaHZ2UWdRRUFBSUlDQUFCSUFBQUFBQUFBQUFBQUFBQ2tnVDFSQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVJTUmxGU1pXTmxhWFpsWkVWMlpXNTBVbVZ6Y0c5dWMyVXVZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQ0VrR2hQSVZ6T0lwNEJBQURlQWdBQU1nQUFBQUFBQUFBQUFBQUFwSUVrVXdBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTVRRdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FDRWtHaFA1SDFlOEVjQkFBQWhBZ0FBTVFBQUFBQUFBQUFBQUFBQXBJRVNWUUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNaTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUUvS0l5cG1QZ01BQUpNSEFBQXlBQUFBQUFBQUFBQUFBQUNrZ2FoV0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE5pNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRS9uQXQ3WVJnRUFBQ0VDQUFBeEFBQUFBQUFBQUFBQUFBQ2tnVFphQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVExTG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBaEpCb1QrSTNPejVIQVFBQUl3SUFBRElBQUFBQUFBQUFBQUFBQUtTQnkxc0FBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERXhMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FoSkJvVHkrTXZPQlJBUUFBR2dJQUFDb0FBQUFBQUFBQUFBQUFBS1NCWWwwQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVa01TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRThCTlBXNmx3RUFBTHNDQUFBcUFBQUFBQUFBQUFBQUFBQ2tnZnRlQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVRhVzF3YkdWVGRHOXlZV2RsSkRNdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FDRWtHaFBvakxYNTBnQkFBQWhBZ0FBTVFBQUFBQUFBQUFBQUFBQXBJSGFZQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtOeTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUU5OWdxcjdwQUVBQU9VQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1hGaUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE15NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRS9IcnhWRG9nRUFBT2NDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnV1ZrQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4Tnk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUlTUWFFK2JWOGVZUWdFQUFCb0NBQUF4QUFBQUFBQUFBQUFBQUFDa2dWZG1BQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXpMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FoSkJvVDNHYlNaRFNBd0FBT3drQUFDb0FBQUFBQUFBQUFBQUFBS1NCNkdjQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVa05TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRStEQlBhR293RUFBT01DQUFBeUFBQUFBQUFBQUFBQUFBQ2tnUUpzQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUlTUWFFK2haeCt6UmdFQUFDRUNBQUF4QUFBQUFBQUFBQUFBQUFDa2dmVnRBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FoSkJvVDUzMjY0RXZCQUFBR1FvQUFESUFBQUFBQUFBQUFBQUFBS1NCaW04QUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRJNExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQWhKQm9UN2d1QU1NVkhBQUFXV2tBQUM4QUFBQUFBQUFBQUFBQUFLU0JDWFFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FnNUJvVHpVZzNmWGFBQUFBMFFFQUFCRUFBQUFBQUFBQUFBQUFBS1NCYTVBQUFGTnBiWEJzWlZOMGIzSmhaMlV1YzI5c1VFc0JBaFFERkFBQUNBZ0FnNUJvVHhLVEd2aWlBd0FBYWhBQUFCZ0FBQUFBQUFBQUFBQUFBS1NCZEpFQUFGSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpMbk52YkZCTEFRSVVBeFFBQUFnSUFIMlFhRStLZWVrNm93SUFBRXdKQUFCREFBQUFBQUFBQUFBQUFBQ2tnVXlWQUFCTlJWUkJMVWxPUmk5dFlYWmxiaTlqYjIwdVlXMWhiSFJ2TG5Cc1lYUm1iM0p0Tmk5a1pXMXZMV0Z3Y0MxemJXRnlkQzFqYjI1MGNtRmpkQzl3YjIwdWVHMXNVRXNCQWhRREZBQUFDQWdBaEpCb1Q0OUFSN0pJQUFBQVRBQUFBRW9BQUFBQUFBQUFBQUFBQUtTQlVKZ0FBRTFGVkVFdFNVNUdMMjFoZG1WdUwyTnZiUzVoYldGc2RHOHVjR3hoZEdadmNtMDJMMlJsYlc4dFlYQndMWE50WVhKMExXTnZiblJ5WVdOMEwzQnZiUzV3Y205d1pYSjBhV1Z6VUVzRkJnQUFBQUEyQURZQUtSTUFBQUNaQUFBQUFBPT1cIixcInRhcmdldFJvb3RcIjpcIiR7UDZfREFUQX1cIixcInRhcmdldFBhdGhcIjpcIi9saWIvZGVtby1hcHAtc21hcnQtY29udHJhY3QtMS4yLmphclwiLFwicHJvcHNcIjp7fSxcImRlcGxveWVkXCI6ZmFsc2UsXCJoYXNCeXRlc0F0dGFjaG1lbnRcIjp0cnVlLFwiYXR0YWNobWVudE5hbWVcIjpcImRlbW8tYXBwLXNtYXJ0LWNvbnRyYWN0LTEuMi5qYXJcIixcImF0dGFjaG1lbnRTaXplXCI6NDQwOTV9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1Mzg5NDYyfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmJ1bmRsZWRyZXNvdXJjZXMiLCJuYW1lIjoiUE9SZXZpZXciLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJQT1Jldmlld1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUZW1wbGF0ZSBmaWxlIGZvciBlbWFpbCBub3RpZmljYXRpb24gZnJvbSB0aGUgd29ya2Zsb3cgc2VydmljZSBmb3IgUHVyY2hhc2VPcmRlclwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM4OTQ3NixcInJldmlzaW9uSWRcIjpcImE2NDdmMmFjMTJiMDNlNGNiYmMxNzAzMWViMjNjZDM5XCIsXCJpdGVtQnl0ZXNcIjpcIlBDRmtiMk4wZVhCbElHaDBiV3crQ2p4b2RHMXNJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1TDNob2RHMXNJaUI0Yld4dWN6cDJQU0oxY200NmMyTm9aVzFoY3kxdGFXTnliM052Wm5RdFkyOXRPblp0YkNJZ2VHMXNibk02YnowaWRYSnVPbk5qYUdWdFlYTXRiV2xqY205emIyWjBMV052YlRwdlptWnBZMlU2YjJabWFXTmxJajRLQ1R4b1pXRmtQZ29KQ1R3aExTMGdUa0ZOUlRvZ01TQkRUMHhWVFU0Z0xTQkNRVTVFUlVRZ0xTMCtDZ2tKUENFdExWdHBaaUJuZEdVZ2JYTnZJREUxWFQ0S0NRazhlRzFzUGdvSkNRazhienBQWm1acFkyVkViMk4xYldWdWRGTmxkSFJwYm1kelBnb0pDUWs4YnpwQmJHeHZkMUJPUnk4K0Nna0pDVHh2T2xCcGVHVnNjMUJsY2tsdVkyZytPVFk4TDI4NlVHbDRaV3h6VUdWeVNXNWphRDRLQ1FrSlBDOXZPazltWm1salpVUnZZM1Z0Wlc1MFUyVjBkR2x1WjNNK0Nna0pQQzk0Yld3K0Nna0pQQ0ZiWlc1a2FXWmRMUzArQ2drSlBHMWxkR0VnWTJoaGNuTmxkRDBpVlZSR0xUZ2lQZ29KQ1R4dFpYUmhJR2gwZEhBdFpYRjFhWFk5SWxndFZVRXRRMjl0Y0dGMGFXSnNaU0lnWTI5dWRHVnVkRDBpU1VVOVpXUm5aU0krQ2drSlBHMWxkR0VnYm1GdFpUMGlkbWxsZDNCdmNuUWlJR052Ym5SbGJuUTlJbmRwWkhSb1BXUmxkbWxqWlMxM2FXUjBhQ3dnYVc1cGRHbGhiQzF6WTJGc1pUMHhJajRLQ1FrOGRHbDBiR1UrU1c1amIyMXBibWNnVUhWeVkyaGhjMlVnVDNKa1pYSWdkRzhnVW1WMmFXVjNQQzkwYVhSc1pUNEtDUWtLQ1FrOGMzUjViR1VnZEhsd1pUMGlkR1Y0ZEM5amMzTWlQZ29KQ1FrSmNIc0tDUWtKQ1FsdFlYSm5hVzQ2TVRCd2VDQXdPd29KQ1FrSkNYQmhaR1JwYm1jNk1Ec0tDUWtKQ1gwS0NRa0pDWFJoWW14bGV3b0pDUWtKQ1dKdmNtUmxjaTFqYjJ4c1lYQnpaVHBqYjJ4c1lYQnpaVHNLQ1FrSkNYMEtDUWtKQ1dneExHZ3lMR2d6TEdnMExHZzFMR2cyZXdvSkNRa0pDV1JwYzNCc1lYazZZbXh2WTJzN0Nna0pDUWtKYldGeVoybHVPakE3Q2drSkNRa0pjR0ZrWkdsdVp6b3dPd29KQ1FrSmZRb0pDUWtKYVcxbkxHRWdhVzFuZXdvSkNRa0pDV0p2Y21SbGNqb3dPd29KQ1FrSkNXaGxhV2RvZERwaGRYUnZPd29KQ1FrSkNXOTFkR3hwYm1VNmJtOXVaVHNLQ1FrSkNRbDBaWGgwTFdSbFkyOXlZWFJwYjI0NmJtOXVaVHNLQ1FrSkNYMEtDUWtKQ1dKdlpIa3NJMkp2WkhsVVlXSnNaU3dqWW05a2VVTmxiR3g3Q2drSkNRa0phR1ZwWjJoME9qRXdNQ1U3Q2drSkNRa0piV0Z5WjJsdU9qQTdDZ2tKQ1FrSmNHRmtaR2x1Wnpvd093b0pDUWtKQ1hkcFpIUm9PakV3TUNVN0Nna0pDUWw5Q2drSkNRa2piM1YwYkc5dmF5Qmhld29KQ1FrSkNYQmhaR1JwYm1jNk1Ec0tDUWtKQ1gwS0NRa0pDV2x0WjNzS0NRa0pDUWt0YlhNdGFXNTBaWEp3YjJ4aGRHbHZiaTF0YjJSbE9tSnBZM1ZpYVdNN0Nna0pDUWw5Q2drSkNRbDBZV0pzWlhzS0NRa0pDUWx0YzI4dGRHRmliR1V0YkhOd1lXTmxPakJ3ZERzS0NRa0pDUWx0YzI4dGRHRmliR1V0Y25Od1lXTmxPakJ3ZERzS0NRa0pDWDBLQ1FrSkNTNVNaV0ZrVFhOblFtOWtlWHNLQ1FrSkNRbDNhV1IwYURveE1EQWxPd29KQ1FrSmZRb0pDUWtKTGtWNGRHVnlibUZzUTJ4aGMzTjdDZ2tKQ1FrSmQybGtkR2c2TVRBd0pUc0tDUWtKQ1gwS0NRa0pDWEFzWVN4c2FTeDBaQ3hpYkc5amEzRjFiM1JsZXdvSkNRa0pDVzF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT21WNFlXTjBiSGs3Q2drSkNRbDlDZ2tKQ1FsaFcyaHlaV1plUFhSbGJGMHNZVnRvY21WbVhqMXpiWE5kZXdvSkNRa0pDV052Ykc5eU9tbHVhR1Z5YVhRN0Nna0pDUWtKWTNWeWMyOXlPbVJsWm1GMWJIUTdDZ2tKQ1FrSmRHVjRkQzFrWldOdmNtRjBhVzl1T201dmJtVTdDZ2tKQ1FsOUNna0pDUWx3TEdFc2JHa3NkR1FzWW05a2VTeDBZV0pzWlN4aWJHOWphM0YxYjNSbGV3b0pDUWtKQ1MxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9qRXdNQ1U3Q2drSkNRa0pMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9qRXdNQ1U3Q2drSkNRbDlDZ2tKQ1FrdVJYaDBaWEp1WVd4RGJHRnpjeXd1UlhoMFpYSnVZV3hEYkdGemN5QndMQzVGZUhSbGNtNWhiRU5zWVhOeklIUmtMQzVGZUhSbGNtNWhiRU5zWVhOeklHUnBkaXd1UlhoMFpYSnVZV3hEYkdGemN5QnpjR0Z1TEM1RmVIUmxjbTVoYkVOc1lYTnpJR1p2Ym5SN0Nna0pDUWtKYkdsdVpTMW9aV2xuYUhRNk1UQXdKVHNLQ1FrSkNYMEtDUWtKQ1dGYmVDMWhjSEJzWlMxa1lYUmhMV1JsZEdWamRHOXljMTE3Q2drSkNRa0pZMjlzYjNJNmFXNW9aWEpwZENBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hSbGVIUXRaR1ZqYjNKaGRHbHZianB1YjI1bElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSlptOXVkQzF6YVhwbE9tbHVhR1Z5YVhRZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1FsbWIyNTBMV1poYldsc2VUcHBibWhsY21sMElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSlptOXVkQzEzWldsbmFIUTZhVzVvWlhKcGRDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNXeHBibVV0YUdWcFoyaDBPbWx1YUdWeWFYUWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKQ1M1MFpXMXdiR0YwWlVOdmJuUmhhVzVsY25zS0NRa0pDUWx0WVhndGQybGtkR2c2TmpBd2NIZ2dJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKQ1dFdWJXTnVRblYwZEc5dWV3b0pDUWtKQ1dScGMzQnNZWGs2WW14dlkyczdDZ2tKQ1FsOUNna0pDUWt1YldOdVNXMWhaMlY3Q2drSkNRa0pkbVZ5ZEdsallXd3RZV3hwWjI0NlltOTBkRzl0T3dvSkNRa0pmUW9KQ1FrSkxtMWpibFJsZUhSRGIyNTBaVzUwZXdvSkNRa0pDWGR2Y21RdFluSmxZV3M2WW5KbFlXc3RkMjl5WkRzS0NRa0pDWDBLQ1FrSkNTNXRZMjVVWlhoMFEyOXVkR1Z1ZENCcGJXZDdDZ2tKQ1FrSmFHVnBaMmgwT21GMWRHOGdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKQ1M1dFkyNUVhWFpwWkdWeVFteHZZMnQ3Q2drSkNRa0pkR0ZpYkdVdGJHRjViM1YwT21acGVHVmtJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1VHRm5aUW9KQ1FsQWMyVmpkR2x2YmlCQ1lXTnJaM0p2ZFc1a0lGTjBlV3hsQ2drSkNVQjBhWEFnVTJWMElIUm9aU0JpWVdOclozSnZkVzVrSUdOdmJHOXlJR0Z1WkNCMGIzQWdZbTl5WkdWeUlHWnZjaUI1YjNWeUlHVnRZV2xzTGlCWmIzVWdiV0Y1SUhkaGJuUWdkRzhnWTJodmIzTmxJR052Ykc5eWN5QjBhR0YwSUcxaGRHTm9JSGx2ZFhJZ1kyOXRjR0Z1ZVNkeklHSnlZVzVrYVc1bkxnb0pDUWtxTHdvSkNRa0pZbTlrZVN3alltOWtlVlJoWW14bGV3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWlZV05yWjNKdmRXNWtMV052Ykc5eU9pTm1NbVl5WmpJN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQkNZV05yWjNKdmRXNWtJRk4wZVd4bENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUdGdVpDQjBiM0FnWW05eVpHVnlJR1p2Y2lCNWIzVnlJR1Z0WVdsc0xpQlpiM1VnYldGNUlIZGhiblFnZEc4Z1kyaHZiM05sSUdOdmJHOXljeUIwYUdGMElHMWhkR05vSUhsdmRYSWdZMjl0Y0dGdWVTZHpJR0p5WVc1a2FXNW5MZ29KQ1FrcUx3b0pDUWtKSTJKdlpIbERaV3hzZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5aWIzSmtaWEl0ZEc5d09qQTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUdGblpRb0pDUWxBYzJWamRHbHZiaUJJWldGa2FXNW5JREVLQ1FrSlFIUnBjQ0JUWlhRZ2RHaGxJSE4wZVd4cGJtY2dabTl5SUdGc2JDQm1hWEp6ZEMxc1pYWmxiQ0JvWldGa2FXNW5jeUJwYmlCNWIzVnlJR1Z0WVdsc2N5NGdWR2hsYzJVZ2MyaHZkV3hrSUdKbElIUm9aU0JzWVhKblpYTjBJRzltSUhsdmRYSWdhR1ZoWkdsdVozTXVDZ2tKQ1VCemRIbHNaU0JvWldGa2FXNW5JREVLQ1FrSktpOEtDUWtKQ1dneGV3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWpiMnh2Y2pvak5qQTJNRFl3T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMV1poYldsc2VUcEJjbWxoYkN3Z0owaGxiSFpsZEdsallTQk9aWFZsSnl3Z1NHVnNkbVYwYVdOaExDQnpZVzV6TFhObGNtbG1Pd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TXpCd2VEc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemRIbHNaVHB1YjNKdFlXdzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGQyVnBaMmgwT21KdmJHUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFeU5TVTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhsZEhSbGNpMXpjR0ZqYVc1bk9pMHhjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNSbGVIUXRZV3hwWjI0NmJHVm1kRHNLQ1FrSkNYMEtDUWtKTHlvS0NRa0pRSFJoWWlCUVlXZGxDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUnBibWNnTWdvSkNRbEFkR2x3SUZObGRDQjBhR1VnYzNSNWJHbHVaeUJtYjNJZ1lXeHNJSE5sWTI5dVpDMXNaWFpsYkNCb1pXRmthVzVuY3lCcGJpQjViM1Z5SUdWdFlXbHNjeTRLQ1FrSlFITjBlV3hsSUdobFlXUnBibWNnTWdvSkNRa3FMd29KQ1FrSmFESjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTTJNRFl3TmpBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0Wm1GdGFXeDVPa2hsYkhabGRHbGpZVHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMXphWHBsT2pJMGNIZzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMzUjViR1U2Ym05eWJXRnNPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYZGxhV2RvZERwaWIyeGtPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE1qVWxPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzWlhSMFpYSXRjM0JoWTJsdVp6b3RNWEI0T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5MFpYaDBMV0ZzYVdkdU9teGxablE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1VHRm5aUW9KQ1FsQWMyVmpkR2x2YmlCSVpXRmthVzVuSURNS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlHRnNiQ0IwYUdseVpDMXNaWFpsYkNCb1pXRmthVzVuY3lCcGJpQjViM1Z5SUdWdFlXbHNjeTRLQ1FrSlFITjBlV3hsSUdobFlXUnBibWNnTXdvSkNRa3FMd29KQ1FrSmFETjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTTJNRFl3TmpBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0Wm1GdGFXeDVPa2hsYkhabGRHbGpZVHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMXphWHBsT2pFNGNIZzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMzUjViR1U2Ym05eWJXRnNPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYZGxhV2RvZERwaWIyeGtPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE1qVWxPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzWlhSMFpYSXRjM0JoWTJsdVp6b3RNWEI0T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5MFpYaDBMV0ZzYVdkdU9teGxablE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1VHRm5aUW9KQ1FsQWMyVmpkR2x2YmlCSVpXRmthVzVuSURRS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlHRnNiQ0JtYjNWeWRHZ3RiR1YyWld3Z2FHVmhaR2x1WjNNZ2FXNGdlVzkxY2lCbGJXRnBiSE11SUZSb1pYTmxJSE5vYjNWc1pDQmlaU0IwYUdVZ2MyMWhiR3hsYzNRZ2IyWWdlVzkxY2lCb1pXRmthVzVuY3k0S0NRa0pRSE4wZVd4bElHaGxZV1JwYm1jZ05Bb0pDUWtxTHdvSkNRa0phRFI3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTURZd05qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2tobGJIWmxkR2xqWVRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qRTJjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjM1I1YkdVNmJtOXliV0ZzT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcGliMnhrT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c1pYUjBaWEl0YzNCaFkybHVaem90TVhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVSEpsYUdWaFpHVnlDZ2tKQ1VCelpXTjBhVzl1SUZCeVpXaGxZV1JsY2lCVGRIbHNaUW9KQ1FsQWRHbHdJRk5sZENCMGFHVWdZbUZqYTJkeWIzVnVaQ0JqYjJ4dmNpQmhibVFnWW05eVpHVnljeUJtYjNJZ2VXOTFjaUJsYldGcGJDZHpJSEJ5WldobFlXUmxjaUJoY21WaExnb0pDUWtxTHdvSkNRa0pJM1JsYlhCc1lYUmxVSEpsYUdWaFpHVnlld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpWVdOclozSnZkVzVrTFdOdmJHOXlPaU5tWm1abVptWTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMkp2Y21SbGNpMTBiM0E2TURzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlltOXlaR1Z5TFdKdmRIUnZiVG93T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5d1lXUmthVzVuTFhSdmNEb3ljSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNCaFpHUnBibWN0WW05MGRHOXRPakp3ZURzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQlFjbVZvWldGa1pYSUtDUWtKUUhObFkzUnBiMjRnVUhKbGFHVmhaR1Z5SUZSbGVIUUtDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJSGx2ZFhJZ1pXMWhhV3duY3lCd2NtVm9aV0ZrWlhJZ2RHVjRkQzRnUTJodmIzTmxJR0VnYzJsNlpTQmhibVFnWTI5c2IzSWdkR2hoZENCcGN5QmxZWE41SUhSdklISmxZV1F1Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWUWNtVm9aV0ZrWlhJZ0xtMWpibFJsZUhSRGIyNTBaVzUwTENOMFpXMXdiR0YwWlZCeVpXaGxZV1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFnY0hzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlkyOXNiM0k2SXpZMU5qVTJOVHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMW1ZVzFwYkhrNlZHRm9iMjFoTENCV1pYSmtZVzVoTENCVFpXZHZaU3dnYzJGdWN5MXpaWEpwWmpzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qRXdjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRTFNQ1U3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNSbGVIUXRZV3hwWjI0NmJHVm1kRHNLQ1FrSkNYMEtDUWtKTHlvS0NRa0pRSFJoWWlCUWNtVm9aV0ZrWlhJS0NRa0pRSE5sWTNScGIyNGdVSEpsYUdWaFpHVnlJRXhwYm1zS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlIbHZkWElnWlcxaGFXd25jeUJ3Y21Wb1pXRmtaWElnYkdsdWEzTXVJRU5vYjI5elpTQmhJR052Ykc5eUlIUm9ZWFFnYUdWc2NITWdkR2hsYlNCemRHRnVaQ0J2ZFhRZ1puSnZiU0I1YjNWeUlIUmxlSFF1Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWUWNtVm9aV0ZrWlhJZ0xtMWpibFJsZUhSRGIyNTBaVzUwSUdFc0kzUmxiWEJzWVhSbFVISmxhR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZENCd0lHRjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTTJOVFkxTmpVN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0ZDJWcFoyaDBPbTV2Y20xaGJEc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9uVnVaR1Z5YkdsdVpUc0tDUWtKQ1gwS0NRa0pMeW9LQ1FrSlFIUmhZaUJJWldGa1pYSUtDUWtKUUhObFkzUnBiMjRnU0dWaFpHVnlJRk4wZVd4bENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUdGdVpDQmliM0prWlhKeklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ2FHVmhaR1Z5SUdGeVpXRXVDZ2tKQ1NvdkNna0pDUWtqZEdWdGNHeGhkR1ZJWldGa1pYSjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMkpoWTJ0bmNtOTFibVF0WTI5c2IzSTZJMll5WmpKbU1qc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZbTl5WkdWeUxYUnZjRG93T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5aWIzSmtaWEl0WW05MGRHOXRPakE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNCaFpHUnBibWN0ZEc5d09qSXdjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNCaFpHUnBibWN0WW05MGRHOXRPakl3Y0hnN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdTR1ZoWkdWeUNna0pDVUJ6WldOMGFXOXVJRWhsWVdSbGNpQlVaWGgwQ2drSkNVQjBhWEFnVTJWMElIUm9aU0J6ZEhsc2FXNW5JR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdhR1ZoWkdWeUlIUmxlSFF1SUVOb2IyOXpaU0JoSUhOcGVtVWdZVzVrSUdOdmJHOXlJSFJvWVhRZ2FYTWdaV0Z6ZVNCMGJ5QnlaV0ZrTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFNHVmhaR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ3dqZEdWdGNHeGhkR1ZJWldGa1pYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MElIQjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTXpNek16TXpNN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0Wm1GdGFXeDVPbFJoYUc5dFlTd2dWbVZ5WkdGdVlTd2dVMlZuYjJVc0lITmhibk10YzJWeWFXWTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94Tm5CNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TlRBbE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdTR1ZoWkdWeUNna0pDVUJ6WldOMGFXOXVJRWhsWVdSbGNpQk1hVzVyQ2drSkNVQjBhWEFnVTJWMElIUm9aU0J6ZEhsc2FXNW5JR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdhR1ZoWkdWeUlHeHBibXR6TGlCRGFHOXZjMlVnWVNCamIyeHZjaUIwYUdGMElHaGxiSEJ6SUhSb1pXMGdjM1JoYm1RZ2IzVjBJR1p5YjIwZ2VXOTFjaUIwWlhoMExnb0pDUWtxTHdvSkNRa0pJM1JsYlhCc1lYUmxTR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZENCaExDTjBaVzF3YkdGMFpVaGxZV1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFnY0NCaGV3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWpiMnh2Y2pvak9EbGlZelUxT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcHViM0p0WVd3N0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzUmxlSFF0WkdWamIzSmhkR2x2YmpwMWJtUmxjbXhwYm1VN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdRbTlrZVFvSkNRbEFjMlZqZEdsdmJpQkNiMlI1SUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0JpYjNKa1pYSnpJR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdZbTlrZVNCaGNtVmhMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsUW05a2VYc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2pSa1pHUmtaR093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdGRHOXdPakE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKdmNtUmxjaTFpYjNSMGIyMDZNRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Y0dGa1pHbHVaeTEwYjNBNk9YQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTl3WVdSa2FXNW5MV0p2ZEhSdmJUb3hNbkI0T3dvSkNRa0pmUW9KQ1Frdktnb0pDUWxBZEdGaUlFSnZaSGtLQ1FrSlFITmxZM1JwYjI0Z1FtOWtlU0JVWlhoMENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWW05a2VTQjBaWGgwTGlCRGFHOXZjMlVnWVNCemFYcGxJR0Z1WkNCamIyeHZjaUIwYUdGMElHbHpJR1ZoYzNrZ2RHOGdjbVZoWkM0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpVSnZaSGtnTG0xamJsUmxlSFJEYjI1MFpXNTBMQ04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwSUhCN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNek16TXpNek03Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRabUZ0YVd4NU9sUmhhRzl0WVN3Z1ZtVnlaR0Z1WVN3Z1UyVm5iMlVzSUhOaGJuTXRjMlZ5YVdZN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzJsNlpUb3hOSEI0T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hOVEFsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5MFpYaDBMV0ZzYVdkdU9teGxablE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1FtOWtlUW9KQ1FsQWMyVmpkR2x2YmlCQ2IyUjVJRXhwYm1zS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlIbHZkWElnWlcxaGFXd25jeUJpYjJSNUlHeHBibXR6TGlCRGFHOXZjMlVnWVNCamIyeHZjaUIwYUdGMElHaGxiSEJ6SUhSb1pXMGdjM1JoYm1RZ2IzVjBJR1p5YjIwZ2VXOTFjaUIwWlhoMExnb0pDUWtxTHdvSkNRa0pJM1JsYlhCc1lYUmxRbTlrZVNBdWJXTnVWR1Y0ZEVOdmJuUmxiblFnWVN3amRHVnRjR3hoZEdWQ2IyUjVJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndJR0Y3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU00T1dKak5UVTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGQyVnBaMmgwT201dmNtMWhiRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292ZEdWNGRDMWtaV052Y21GMGFXOXVPblZ1WkdWeWJHbHVaVHNLQ1FrSkNYMEtDUWtKTHlvS0NRa0pRSFJoWWlCR2IyOTBaWElLQ1FrSlFITmxZM1JwYjI0Z1JtOXZkR1Z5SUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0JpYjNKa1pYSnpJR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdabTl2ZEdWeUlHRnlaV0V1Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWR2IyOTBaWEo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKaFkydG5jbTkxYm1RdFkyOXNiM0k2STJZeVpqSm1NanNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WW05eVpHVnlMWFJ2Y0Rvd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdFltOTBkRzl0T2pBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdGRHOXdPamx3ZURzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmNHRmtaR2x1WnkxaWIzUjBiMjA2T1hCNE93b0pDUWtKZlFvSkNRa3ZLZ29KQ1FsQWRHRmlJRVp2YjNSbGNnb0pDUWxBYzJWamRHbHZiaUJHYjI5MFpYSWdWR1Y0ZEFvSkNRbEFkR2x3SUZObGRDQjBhR1VnYzNSNWJHbHVaeUJtYjNJZ2VXOTFjaUJsYldGcGJDZHpJR1p2YjNSbGNpQjBaWGgwTGlCRGFHOXZjMlVnWVNCemFYcGxJR0Z1WkNCamIyeHZjaUIwYUdGMElHbHpJR1ZoYzNrZ2RHOGdjbVZoWkM0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpVWnZiM1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFzSTNSbGJYQnNZWFJsUm05dmRHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pOalUyTlRZMU93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFdaaGJXbHNlVHBVWVdodmJXRXNJRlpsY21SaGJtRXNJRk5sWjI5bExDQnpZVzV6TFhObGNtbG1Pd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRKd2VEc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZiR2x1WlMxb1pXbG5hSFE2TVRVd0pUc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZkR1Y0ZEMxaGJHbG5ianBqWlc1MFpYSTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnUm05dmRHVnlDZ2tKQ1VCelpXTjBhVzl1SUVadmIzUmxjaUJNYVc1ckNna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWm05dmRHVnlJR3hwYm10ekxpQkRhRzl2YzJVZ1lTQmpiMnh2Y2lCMGFHRjBJR2hsYkhCeklIUm9aVzBnYzNSaGJtUWdiM1YwSUdaeWIyMGdlVzkxY2lCMFpYaDBMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsUm05dmRHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQmhMQ04wWlcxd2JHRjBaVVp2YjNSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NDQmhld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pOalUyTlRZMU93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhkbGFXZG9kRHB1YjNKdFlXdzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM1JsZUhRdFpHVmpiM0poZEdsdmJqcDFibVJsY214cGJtVTdDZ2tKQ1FsOUNna0pDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMXBiaTEzYVdSMGFEbzNOamh3ZUNsN0Nna0pDUWt1ZEdWdGNHeGhkR1ZEYjI1MFlXbHVaWEo3Q2drSkNRa0pkMmxrZEdnNk5qQXdjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pDV0p2Wkhrc2RHRmliR1VzZEdRc2NDeGhMR3hwTEdKc2IyTnJjWFZ2ZEdWN0Nna0pDUWtKTFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPbTV2Ym1VZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1dKdlpIbDdDZ2tKQ1FrSmQybGtkR2c2TVRBd0pTQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNXMXBiaTEzYVdSMGFEb3hNREFsSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUWtqWW05a2VVTmxiR3g3Q2drSkNRa0pjR0ZrWkdsdVp5MTBiM0E2TVRCd2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSmZRb0pDUWw5Q1VCdFpXUnBZU0J2Ym14NUlITmpjbVZsYmlCaGJtUWdLRzFoZUMxM2FXUjBhRG9nTkRnd2NIZ3Bld29KQ1FrSkxtMWpia2x0WVdkbGV3b0pDUWtKQ1hkcFpIUm9PakV3TUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1M1dFkyNURZWEowUTI5dWRHRnBibVZ5TEM1dFkyNURZWEIwYVc5dVZHOXdRMjl1ZEdWdWRDd3ViV051VW1WalEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2l3dWJXTnVRMkZ3ZEdsdmJrSnZkSFJ2YlVOdmJuUmxiblFzTG0xamJsUmxlSFJEYjI1MFpXNTBRMjl1ZEdGcGJtVnlMQzV0WTI1Q2IzaGxaRlJsZUhSRGIyNTBaVzUwUTI5dWRHRnBibVZ5TEM1dFkyNUpiV0ZuWlVkeWIzVndRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051UTJGd2RHbHZia3hsWm5SVVpYaDBRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051UTJGd2RHbHZibEpwWjJoMFZHVjRkRU52Ym5SbGJuUkRiMjUwWVdsdVpYSXNMbTFqYmtOaGNIUnBiMjVNWldaMFNXMWhaMlZEYjI1MFpXNTBRMjl1ZEdGcGJtVnlMQzV0WTI1RFlYQjBhVzl1VW1sbmFIUkpiV0ZuWlVOdmJuUmxiblJEYjI1MFlXbHVaWElzTG0xamJrbHRZV2RsUTJGeVpFeGxablJVWlhoMFEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2l3dWJXTnVTVzFoWjJWRFlYSmtVbWxuYUhSVVpYaDBRMjl1ZEdWdWRFTnZiblJoYVc1bGNuc0tDUWtKQ1FsdFlYZ3RkMmxrZEdnNk1UQXdKU0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDWGRwWkhSb09qRXdNQ1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pDUzV0WTI1Q2IzaGxaRlJsZUhSRGIyNTBaVzUwUTI5dWRHRnBibVZ5ZXdvSkNRa0pDVzFwYmkxM2FXUjBhRG94TURBbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FrdWJXTnVTVzFoWjJWSGNtOTFjRU52Ym5SbGJuUjdDZ2tKQ1FrSmNHRmtaR2x1WnpvNWNIZ2dJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNTNXRZMjVEWVhCMGFXOXVUR1ZtZEVOdmJuUmxiblJQZFhSbGNpQXViV051VkdWNGRFTnZiblJsYm5Rc0xtMWpia05oY0hScGIyNVNhV2RvZEVOdmJuUmxiblJQZFhSbGNpQXViV051VkdWNGRFTnZiblJsYm5SN0Nna0pDUWtKY0dGa1pHbHVaeTEwYjNBNk9YQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNRa3ViV051U1cxaFoyVkRZWEprVkc5d1NXMWhaMlZEYjI1MFpXNTBMQzV0WTI1RFlYQjBhVzl1UW14dlkydEpibTVsY2lBdWJXTnVRMkZ3ZEdsdmJsUnZjRU52Ym5SbGJuUTZiR0Z6ZEMxamFHbHNaQ0F1YldOdVZHVjRkRU52Ym5SbGJuUjdDZ2tKQ1FrSmNHRmtaR2x1WnkxMGIzQTZNVGh3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSkNRbDlDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMWhlQzEzYVdSMGFEb2dORGd3Y0hncGV3b0pDUWtKTG0xamJrbHRZV2RsUTJGeVpFSnZkSFJ2YlVsdFlXZGxRMjl1ZEdWdWRIc0tDUWtKQ1Fsd1lXUmthVzVuTFdKdmRIUnZiVG81Y0hnZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1M1dFkyNUpiV0ZuWlVkeWIzVndRbXh2WTJ0SmJtNWxjbnNLQ1FrSkNRbHdZV1JrYVc1bkxYUnZjRG93SUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKY0dGa1pHbHVaeTFpYjNSMGIyMDZNQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pmUW9KQ1FsOUNVQnRaV1JwWVNCdmJteDVJSE5qY21WbGJpQmhibVFnS0cxaGVDMTNhV1IwYURvZ05EZ3djSGdwZXdvSkNRa0pMbTFqYmtsdFlXZGxSM0p2ZFhCQ2JHOWphMDkxZEdWeWV3b0pDUWtKQ1hCaFpHUnBibWN0ZEc5d09qbHdlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDWEJoWkdScGJtY3RZbTkwZEc5dE9qbHdlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pmUW9KQ1FsOUNVQnRaV1JwWVNCdmJteDVJSE5qY21WbGJpQmhibVFnS0cxaGVDMTNhV1IwYURvZ05EZ3djSGdwZXdvSkNRa0pMbTFqYmxSbGVIUkRiMjUwWlc1MExDNXRZMjVDYjNobFpGUmxlSFJEYjI1MFpXNTBRMjlzZFcxdWV3b0pDUWtKQ1hCaFpHUnBibWN0Y21sbmFIUTZNVGh3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hCaFpHUnBibWN0YkdWbWREb3hPSEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUWt1YldOdVNXMWhaMlZEWVhKa1RHVm1kRWx0WVdkbFEyOXVkR1Z1ZEN3dWJXTnVTVzFoWjJWRFlYSmtVbWxuYUhSSmJXRm5aVU52Ym5SbGJuUjdDZ2tKQ1FrSmNHRmtaR2x1WnkxeWFXZG9kRG94T0hCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSmNHRmtaR2x1WnkxaWIzUjBiMjA2TUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hCaFpHUnBibWN0YkdWbWREb3hPSEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUWt1YldOd2NtVjJhV1YzTFdsdFlXZGxMWFZ3Ykc5aFpHVnlld29KQ1FrSkNXUnBjM0JzWVhrNmJtOXVaU0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDWGRwWkhSb09qRXdNQ1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pMeW9LQ1FrSlFIUmhZaUJOYjJKcGJHVWdVM1I1YkdWekNna0pDVUJ6WldOMGFXOXVJRWhsWVdScGJtY2dNUW9KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJR1pwY25OMExXeGxkbVZzSUdobFlXUnBibWR6SUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNXZ3hld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRod2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE1qVWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklESUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQnpaV052Ym1RdGJHVjJaV3dnYUdWaFpHbHVaM01nYkdGeVoyVnlJR2x1SUhOcGVtVWdabTl5SUdKbGRIUmxjaUJ5WldGa1lXSnBiR2wwZVNCdmJpQnpiV0ZzYkNCelkzSmxaVzV6TGdvSkNRa3FMd29KQ1FrSmFESjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94Tm5CNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFeU5TVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkx5b0tDUWtKUUhSaFlpQk5iMkpwYkdVZ1UzUjViR1Z6Q2drSkNVQnpaV04wYVc5dUlFaGxZV1JwYm1jZ013b0pDUWxBZEdsd0lFMWhhMlVnZEdobElIUm9hWEprTFd4bGRtVnNJR2hsWVdScGJtZHpJR3hoY21kbGNpQnBiaUJ6YVhwbElHWnZjaUJpWlhSMFpYSWdjbVZoWkdGaWFXeHBkSGtnYjI0Z2MyMWhiR3dnYzJOeVpXVnVjeTRLQ1FrSktpOEtDUWtKQ1dnemV3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhOcGVtVTZNVFp3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TWpVbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1M4cUNna0pDVUIwWVdJZ1RXOWlhV3hsSUZOMGVXeGxjd29KQ1FsQWMyVmpkR2x2YmlCSVpXRmthVzVuSURRS0NRa0pRSFJwY0NCTllXdGxJSFJvWlNCbWIzVnlkR2d0YkdWMlpXd2dhR1ZoWkdsdVozTWdiR0Z5WjJWeUlHbHVJSE5wZW1VZ1ptOXlJR0psZEhSbGNpQnlaV0ZrWVdKcGJHbDBlU0J2YmlCemJXRnNiQ0J6WTNKbFpXNXpMZ29KQ1FrcUx3b0pDUWtKYURSN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzJsNlpUb3hObkI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUVKdmVHVmtJRlJsZUhRS0NRa0pRSFJwY0NCTllXdGxJSFJvWlNCaWIzaGxaQ0IwWlhoMElHeGhjbWRsY2lCcGJpQnphWHBsSUdadmNpQmlaWFIwWlhJZ2NtVmhaR0ZpYVd4cGRIa2diMjRnYzIxaGJHd2djMk55WldWdWN5NGdWMlVnY21WamIyMXRaVzVrSUdFZ1ptOXVkQ0J6YVhwbElHOW1JR0YwSUd4bFlYTjBJREUyY0hndUNna0pDU292Q2drSkNRa3ViV051UW05NFpXUlVaWGgwUTI5dWRHVnVkRU52Ym5SaGFXNWxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNMbTFqYmtKdmVHVmtWR1Y0ZEVOdmJuUmxiblJEYjI1MFlXbHVaWElnTG0xamJsUmxlSFJEYjI1MFpXNTBJSEI3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5IQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRTFNQ1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pMeW9LQ1FrSlFIUmhZaUJOYjJKcGJHVWdVM1I1YkdWekNna0pDVUJ6WldOMGFXOXVJRkJ5WldobFlXUmxjaUJXYVhOcFltbHNhWFI1Q2drSkNVQjBhWEFnVTJWMElIUm9aU0IyYVhOcFltbHNhWFI1SUc5bUlIUm9aU0JsYldGcGJDZHpJSEJ5WldobFlXUmxjaUJ2YmlCemJXRnNiQ0J6WTNKbFpXNXpMaUJaYjNVZ1kyRnVJR2hwWkdVZ2FYUWdkRzhnYzJGMlpTQnpjR0ZqWlM0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpWQnlaV2hsWVdSbGNuc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZaR2x6Y0d4aGVUcHViMjVsSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUzhxQ2drSkNVQjBZV0lnVFc5aWFXeGxJRk4wZVd4bGN3b0pDUWxBYzJWamRHbHZiaUJRY21Wb1pXRmtaWElnVkdWNGRBb0pDUWxBZEdsd0lFMWhhMlVnZEdobElIQnlaV2hsWVdSbGNpQjBaWGgwSUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpWQnlaV2hsWVdSbGNpQXViV051VkdWNGRFTnZiblJsYm5Rc0kzUmxiWEJzWVhSbFVISmxhR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZENCd2V3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhOcGVtVTZNVEp3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TlRBbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1M4cUNna0pDVUIwWVdJZ1RXOWlhV3hsSUZOMGVXeGxjd29KQ1FsQWMyVmpkR2x2YmlCSVpXRmtaWElnVkdWNGRBb0pDUWxBZEdsd0lFMWhhMlVnZEdobElHaGxZV1JsY2lCMFpYaDBJR3hoY21kbGNpQnBiaUJ6YVhwbElHWnZjaUJpWlhSMFpYSWdjbVZoWkdGaWFXeHBkSGtnYjI0Z2MyMWhiR3dnYzJOeVpXVnVjeTRLQ1FrSktpOEtDUWtKQ1NOMFpXMXdiR0YwWlVobFlXUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNJM1JsYlhCc1lYUmxTR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZENCd2V3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhOcGVtVTZNVFp3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TlRBbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1M4cUNna0pDVUIwWVdJZ1RXOWlhV3hsSUZOMGVXeGxjd29KQ1FsQWMyVmpkR2x2YmlCQ2IyUjVJRlJsZUhRS0NRa0pRSFJwY0NCTllXdGxJSFJvWlNCaWIyUjVJSFJsZUhRZ2JHRnlaMlZ5SUdsdUlITnBlbVVnWm05eUlHSmxkSFJsY2lCeVpXRmtZV0pwYkdsMGVTQnZiaUJ6YldGc2JDQnpZM0psWlc1ekxpQlhaU0J5WldOdmJXMWxibVFnWVNCbWIyNTBJSE5wZW1VZ2IyWWdZWFFnYkdWaGMzUWdNVFp3ZUM0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpVSnZaSGtnTG0xamJsUmxlSFJEYjI1MFpXNTBMQ04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwSUhCN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzJsNlpUb3hOSEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUVadmIzUmxjaUJVWlhoMENna0pDVUIwYVhBZ1RXRnJaU0IwYUdVZ1ptOXZkR1Z5SUdOdmJuUmxiblFnZEdWNGRDQnNZWEpuWlhJZ2FXNGdjMmw2WlNCbWIzSWdZbVYwZEdWeUlISmxZV1JoWW1sc2FYUjVJRzl1SUhOdFlXeHNJSE5qY21WbGJuTXVDZ2tKQ1NvdkNna0pDUWtqZEdWdGNHeGhkR1ZHYjI5MFpYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MExDTjBaVzF3YkdGMFpVWnZiM1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFnY0hzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qRXpjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmJHbHVaUzFvWldsbmFIUTZNVFV3SlNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSmZUd3ZjM1I1YkdVK1BDOW9aV0ZrUGdvSlBHSnZaSGtnYzNSNWJHVTlJbWhsYVdkb2REb2dNVEF3SlR0dFlYSm5hVzQ2SURBN2NHRmtaR2x1WnpvZ01EdDNhV1IwYURvZ01UQXdKVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ0kyWXlaakptTWpzaVBnb0pDVHhqWlc1MFpYSStDZ2tKUEhSaFlteGxJR0ZzYVdkdVBTSmpaVzUwWlhJaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCb1pXbG5hSFE5SWpFd01DVWlJSGRwWkhSb1BTSXhNREFsSWlCcFpEMGlZbTlrZVZSaFlteGxJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHRvWldsbmFIUTZJREV3TUNVN2JXRnlaMmx1T2lBd08zQmhaR1JwYm1jNklEQTdkMmxrZEdnNklERXdNQ1U3WW1GamEyZHliM1Z1WkMxamIyeHZjam9nSTJZeVpqSm1NanNpUGdvSkNRazhkSEkrQ2drSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSjBiM0FpSUdsa1BTSmliMlI1UTJWc2JDSWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0b1pXbG5hSFE2SURFd01DVTdiV0Z5WjJsdU9pQXdPM0JoWkdScGJtYzZJREE3ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFhSdmNEb2dNRHNpUGdvSkNRa0pDVHdoTFMwZ1FrVkhTVTRnVkVWTlVFeEJWRVVnTHk4Z0xTMCtDZ2tKQ1FrSlBIUmhZbXhsSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlNVEF3SlNJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGlkRzl3SWlCcFpEMGlkR1Z0Y0d4aGRHVklaV0ZrWlhJaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3WW1GamEyZHliM1Z1WkMxamIyeHZjam9nSTJZeVpqSm1NanRpYjNKa1pYSXRkRzl3T2lBd08ySnZjbVJsY2kxaWIzUjBiMjA2SURBN2NHRmtaR2x1WnkxMGIzQTZJREl3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURJd2NIZzdJajRLQ1FrSkNRa0pDUWs4SVMwdFcybG1JR2QwWlNCdGMyOGdPVjArQ2drSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSmpaVzUwWlhJaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCM2FXUjBhRDBpTmpBd0lpQnpkSGxzWlQwaWQybGtkR2c2TmpBd2NIZzdJajRLQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGlkRzl3SWlCM2FXUjBhRDBpTmpBd0lpQnpkSGxzWlQwaWQybGtkR2c2TmpBd2NIZzdJajRLQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUltTmxiblJsY2lJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWRHVnRjR3hoZEdWRGIyNTBZV2x1WlhJaUlITjBlV3hsUFNKaWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE8yMWhlQzEzYVdSMGFEb2dOakF3Y0hnZ0lXbHRjRzl5ZEdGdWREc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdkbUZzYVdkdVBTSjBiM0FpSUdOc1lYTnpQU0pvWldGa1pYSkRiMjUwWVdsdVpYSWlJSE4wZVd4bFBTSnRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNDhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVTVzFoWjJWQ2JHOWpheUlnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNUlHTnNZWE56UFNKdFkyNUpiV0ZuWlVKc2IyTnJUM1YwWlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKd1lXUmthVzVuT2lBd2NIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SWdZMnhoYzNNOUltMWpia2x0WVdkbFFteHZZMnRKYm01bGNpSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUIzYVdSMGFEMGlNVEF3SlNJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUdOc1lYTnpQU0p0WTI1SmJXRm5aVU52Ym5SbGJuUkRiMjUwWVdsdVpYSWlJSE4wZVd4bFBTSnRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR05zWVhOelBTSnRZMjVKYldGblpVTnZiblJsYm5RaUlIWmhiR2xuYmowaWRHOXdJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp5MXlhV2RvZERvZ01IQjRPM0JoWkdScGJtY3RiR1ZtZERvZ01IQjRPM0JoWkdScGJtY3RkRzl3T2lBd08zQmhaR1JwYm1jdFltOTBkRzl0T2lBd08zUmxlSFF0WVd4cFoyNDZJR05sYm5SbGNqdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThhVzFuSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0ZzZEQwaUlpQnpjbU05SW1oMGRIQnpPaTh2ZDNkM0xuQnNZWFJtYjNKdE5pNXBieTkzY0MxamIyNTBaVzUwTDNWd2JHOWhaSE12TWpBeE9DOHdPUzlzYjJkdkxYQnNZWFJtYjNKdE5pMW9aV0ZrWlhJdGNtVjBhVzVoTG5CdVp5SWdkMmxrZEdnOUlqSTJNQ0lnYzNSNWJHVTlJbTFoZUMxM2FXUjBhRG9nTWpZd2NIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEQTdaR2x6Y0d4aGVUb2dhVzVzYVc1bElDRnBiWEJ2Y25SaGJuUTdkbVZ5ZEdsallXd3RZV3hwWjI0NklHSnZkSFJ2YlR0aWIzSmtaWEk2SURBN2FHVnBaMmgwT2lCaGRYUnZPMjkxZEd4cGJtVTZJRzV2Ym1VN2RHVjRkQzFrWldOdmNtRjBhVzl1T2lCdWIyNWxPeTF0Y3kxcGJuUmxjbkJ2YkdGMGFXOXVMVzF2WkdVNklHSnBZM1ZpYVdNN0lpQmpiR0Z6Y3owaWJXTnVTVzFoWjJVaVBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK0Nna0pDUWtKQ1FrSkNRa0pDUWs4TDNSaFlteGxQand2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JR2QwWlNCdGMyOGdPVjArQ2drSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNUd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSjBiM0FpSUdsa1BTSjBaVzF3YkdGMFpVSnZaSGtpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMFpHUmtaR1JqdGliM0prWlhJdGRHOXdPaUF3TzJKdmNtUmxjaTFpYjNSMGIyMDZJREE3Y0dGa1pHbHVaeTEwYjNBNklEbHdlRHR3WVdSa2FXNW5MV0p2ZEhSdmJUb2dNVEp3ZURzaVBnb0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ1ozUmxJRzF6YnlBNVhUNEtDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnWW05eVpHVnlQU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJSGRwWkhSb1BTSTJNREFpSUhOMGVXeGxQU0ozYVdSMGFEbzJNREJ3ZURzaVBnb0pDUWtKQ1FrSkNRazhkSEkrQ2drSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKMGIzQWlJSGRwWkhSb1BTSTJNREFpSUhOMGVXeGxQU0ozYVdSMGFEbzJNREJ3ZURzaVBnb0pDUWtKQ1FrSkNRa0pDVHdoVzJWdVpHbG1YUzB0UGdvSkNRa0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpWTJWdWRHVnlJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0owWlcxd2JHRjBaVU52Ym5SaGFXNWxjaUlnYzNSNWJHVTlJbUp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3YldGNExYZHBaSFJvT2lBMk1EQndlQ0FoYVcxd2IzSjBZVzUwT3lJK0Nna0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCMllXeHBaMjQ5SW5SdmNDSWdZMnhoYzNNOUltSnZaSGxEYjI1MFlXbHVaWElpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajQ4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051VkdWNGRFSnNiMk5ySWlCemRIbHNaVDBpYldsdUxYZHBaSFJvT2lBeE1EQWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIa2dZMnhoYzNNOUltMWpibFJsZUhSQ2JHOWphMDkxZEdWeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVKc2IyTnJTVzV1WlhJaUlITjBlV3hsUFNKd1lXUmthVzVuTFhSdmNEb2dPWEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUIzYVdSMGFEMGlNVEF3SlNJZ2MzUjViR1U5SW5kcFpIUm9PakV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnZDJsa2RHZzlJall3TUNJZ2MzUjViR1U5SW5kcFpIUm9Pall3TUhCNE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdjM1I1YkdVOUltMWhlQzEzYVdSMGFEb2dNVEF3SlR0dGFXNHRkMmxrZEdnNklERXdNQ1U3WW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051VkdWNGRFTnZiblJsYm5SRGIyNTBZV2x1WlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdkbUZzYVdkdVBTSjBiM0FpSUdOc1lYTnpQU0p0WTI1VVpYaDBRMjl1ZEdWdWRDSWdjM1I1YkdVOUluQmhaR1JwYm1jNklEQndlQ0F4T0hCNElEbHdlRHRtYjI1MExXWmhiV2xzZVRvZ1ZHRm9iMjFoTENCV1pYSmtZVzVoTENCVFpXZHZaU3dnYzJGdWN5MXpaWEpwWmp0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3ZDI5eVpDMWljbVZoYXpvZ1luSmxZV3N0ZDI5eVpEdGpiMnh2Y2pvZ0l6TXpNek16TXp0bWIyNTBMWE5wZW1VNklERTBjSGc3YkdsdVpTMW9aV2xuYUhRNklERTFNQ1U3ZEdWNGRDMWhiR2xuYmpvZ2JHVm1kRHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeG9NeUJ6ZEhsc1pUMGlkR1Y0ZEMxaGJHbG5iam9nYkdWbWREdGthWE53YkdGNU9pQmliRzlqYXp0dFlYSm5hVzQ2SURBN2NHRmtaR2x1WnpvZ01EdGpiMnh2Y2pvZ0l6WXdOakEyTUR0bWIyNTBMV1poYldsc2VUb2dTR1ZzZG1WMGFXTmhPMlp2Ym5RdGMybDZaVG9nTVRod2VEdG1iMjUwTFhOMGVXeGxPaUJ1YjNKdFlXdzdabTl1ZEMxM1pXbG5hSFE2SUdKdmJHUTdiR2x1WlMxb1pXbG5hSFE2SURFeU5TVTdiR1YwZEdWeUxYTndZV05wYm1jNklDMHhjSGc3SWo1SmJtSnZkVzVrSUZCMWNtTm9ZWE5sSUU5eVpHVnlJSFJ2SUhKbGRtbGxkend2YURNK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEdScGRpQnpkSGxzWlQwaWRHVjRkQzFoYkdsbmJqb2diR1ZtZERzaVBqeGljajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ05wWmlCMWMyVnlMbVpwY25OMFRtRnRaVDgvSUNZbUlIVnpaWEl1Wm1seWMzUk9ZVzFsUDJoaGMxOWpiMjUwWlc1MFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQQ05wWmlCMWMyVnlMbXhoYzNST1lXMWxQejhnSmlZZ2RYTmxjaTVzWVhOMFRtRnRaVDlvWVhOZlkyOXVkR1Z1ZEQ0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JJWld4c2J5QWtlM1Z6WlhJdVptbHljM1JPWVcxbGZTd0tJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHdqWld4elpUNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCSVpXeHNieUFrZTNWelpYSXVabWx5YzNST1lXMWxmU3dLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR3dkkybG1QZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThJMlZzYzJVK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQklaV3hzYnlBa2UzVnpaWEl1WlcxaGFXeDlMQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThMeU5wWmo0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEdKeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOFluSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNWbHZkU0JvWVhabElHRWdibVYzSUdsdVltOTFibVFnVDNKa1pYSWdkRzhnY21WMmFXVjNMaUJRYkdWaGMyVWdQR0VnYUhKbFpqMGlKSHRvY21WbWZTSWdkR0Z5WjJWMFBTSmZZbXhoYm1zaVBteHZaeUJ2YmlCaGJtUWdZV05qWlhCMElHOXlJSEpsYW1WamRDNDhMMkUrUEdKeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1NadVluTndPend2WkdsMlBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDRLQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0ZpYkdVK1BIUmhZbXhsSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJrUnBkbWxrWlhKQ2JHOWpheUlnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPM1JoWW14bExXeGhlVzkxZERvZ1ptbDRaV1FnSVdsdGNHOXlkR0Z1ZERzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJ0UGRYUmxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1kyeGhjM005SW0xamJrUnBkbWxrWlhKQ2JHOWphMGx1Ym1WeUlpQnpkSGxzWlQwaWJXbHVMWGRwWkhSb09pQXhNREFsTzNCaFpHUnBibWM2SURWd2VDQXhPSEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRMjl1ZEdWdWRDSWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxMGIzQXRkMmxrZEdnNklESndlRHRpYjNKa1pYSXRkRzl3TFhOMGVXeGxPaUJ1YjI1bE8ySnZjbVJsY2kxMGIzQXRZMjlzYjNJNklDTkZRVVZCUlVFN1ltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhjM0JoYmo0OEwzTndZVzQrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMwS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmpiR0Z6Y3owaWJXTnVSR2wyYVdSbGNrSnNiMk5yU1c1dVpYSWlJSE4wZVd4bFBTSndZV1JrYVc1bk9pQXhPSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHaHlJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRMjl1ZEdWdWRDSWdjM1I1YkdVOUltSnZjbVJsY2kxaWIzUjBiMjB0WTI5c2IzSTZibTl1WlRzZ1ltOXlaR1Z5TFd4bFpuUXRZMjlzYjNJNmJtOXVaVHNnWW05eVpHVnlMWEpwWjJoMExXTnZiRzl5T201dmJtVTdJR0p2Y21SbGNpMWliM1IwYjIwdGQybGtkR2c2TURzZ1ltOXlaR1Z5TFd4bFpuUXRkMmxrZEdnNk1Ec2dZbTl5WkdWeUxYSnBaMmgwTFhkcFpIUm9PakE3SUcxaGNtZHBiaTEwYjNBNk1Ec2diV0Z5WjJsdUxYSnBaMmgwT2pBN0lHMWhjbWRwYmkxaWIzUjBiMjA2TURzZ2JXRnlaMmx1TFd4bFpuUTZNRHNpSUM4K0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkxTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrQ2drSkNRa0pDUWtKQ1FrSkNRazhMM1JoWW14bFBqd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSlBDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRazhJUzB0VzJsbUlHZDBaU0J0YzI4Z09WMCtDZ2tKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWs4ZEhJK0Nna0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKMGIzQWlJR2xrUFNKMFpXMXdiR0YwWlVadmIzUmxjaUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdGlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpaakptTW1ZeU8ySnZjbVJsY2kxMGIzQTZJREE3WW05eVpHVnlMV0p2ZEhSdmJUb2dNRHR3WVdSa2FXNW5MWFJ2Y0RvZ09YQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQTVjSGc3SWo0S0NRa0pDUWtKQ1FrOElTMHRXMmxtSUdkMFpTQnRjMjhnT1YwK0Nna0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQjNhV1IwYUQwaU5qQXdJaUJ6ZEhsc1pUMGlkMmxrZEdnNk5qQXdjSGc3SWo0S0NRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQjNhV1IwYUQwaU5qQXdJaUJ6ZEhsc1pUMGlkMmxrZEdnNk5qQXdjSGc3SWo0S0NRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbU5sYm5SbGNpSWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGlkR1Z0Y0d4aGRHVkRiMjUwWVdsdVpYSWlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPMjFoZUMxM2FXUjBhRG9nTmpBd2NIZ2dJV2x0Y0c5eWRHRnVkRHNpUGdvSkNRa0pDUWtKQ1FrSkNRazhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlHTnNZWE56UFNKbWIyOTBaWEpEYjI1MFlXbHVaWElpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajQ4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051Um05c2JHOTNRbXh2WTJzaUlITjBlV3hsUFNKdGFXNHRkMmxrZEdnNklERXdNQ1U3WW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlU0JqYkdGemN6MGliV051Um05c2JHOTNRbXh2WTJ0UGRYUmxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdjM1I1YkdVOUluQmhaR1JwYm1jNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUJqYkdGemN6MGliV051Um05c2JHOTNRbXh2WTJ0SmJtNWxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnWTJ4aGMzTTlJbTFqYmtadmJHeHZkME52Ym5SbGJuUkRiMjUwWVdsdVpYSWlJSE4wZVd4bFBTSnRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlITjBlV3hsUFNKd1lXUmthVzVuTFd4bFpuUTZJRGx3ZUR0d1lXUmthVzVuTFhKcFoyaDBPaUE1Y0hnN2JYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdjM1I1YkdVOUltMXBiaTEzYVdSMGFEb2dNVEF3SlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwTnZiblJsYm5RaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGlkRzl3SWlCemRIbHNaVDBpY0dGa1pHbHVaeTEwYjNBNklEbHdlRHR3WVdSa2FXNW5MWEpwWjJoME9pQTVjSGc3Y0dGa1pHbHVaeTFzWldaME9pQTVjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKalpXNTBaWElpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaVkyVnVkR1Z5SWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0krQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoVzJWdVpHbG1YUzB0UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJUzB0VzJsbUlHMXpiMTArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKMGIzQWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpYkdWbWRDSWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlITjBlV3hsUFNKa2FYTndiR0Y1T2lCcGJteHBibVU3WW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWNHRmtaR2x1WnkxeWFXZG9kRG9nTVRCd2VEdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ09YQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJR05zWVhOelBTSnRZMjVHYjJ4c2IzZERiMjUwWlc1MFNYUmxiVU52Ym5SaGFXNWxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwTnZiblJsYm5SSmRHVnRJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKc1pXWjBJaUIyWVd4cFoyNDlJbTFwWkdSc1pTSWdjM1I1YkdVOUluQmhaR1JwYm1jdGRHOXdPaUExY0hnN2NHRmtaR2x1WnkxeWFXZG9kRG9nTVRCd2VEdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ05YQjRPM0JoWkdScGJtY3RiR1ZtZERvZ09YQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaWJHVm1kQ0lnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSGRwWkhSb1BTSWlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJbTFwWkdSc1pTSWdkMmxrZEdnOUlqSTBJaUJqYkdGemN6MGliV051Um05c2JHOTNTV052YmtOdmJuUmxiblFpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOFlTQm9jbVZtUFNKb2RIUndPaTh2ZDNkM0xtRnRZV3gwYnk1amIyMHZJaUIwWVhKblpYUTlJbDlpYkdGdWF5SWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBqeHBiV2NnYzNKalBTSm9kSFJ3T2k4dlkyUnVMV2x0WVdkbGN5NXRZV2xzWTJocGJYQXVZMjl0TDJsamIyNXpMM052WTJsaGJDMWliRzlqYXkxMk1pOWpiMnh2Y2kxc2FXNXJMVFE0TG5CdVp5SWdjM1I1YkdVOUltUnBjM0JzWVhrNklHSnNiMk5yTzJKdmNtUmxjam9nTUR0b1pXbG5hSFE2SUdGMWRHODdiM1YwYkdsdVpUb2dibTl1WlR0MFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUc1dmJtVTdMVzF6TFdsdWRHVnljRzlzWVhScGIyNHRiVzlrWlRvZ1ltbGpkV0pwWXpzaUlHaGxhV2RvZEQwaU1qUWlJSGRwWkhSb1BTSXlOQ0lnWTJ4aGMzTTlJaUkrUEM5aFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdsdWJHbHVaVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKd1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwTnZiblJsYm5SSmRHVnRRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZEVsMFpXMGlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW14bFpuUWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQnpkSGxzWlQwaWNHRmtaR2x1WnkxMGIzQTZJRFZ3ZUR0d1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBMWNIZzdjR0ZrWkdsdVp5MXNaV1owT2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlpSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQjNhV1IwYUQwaU1qUWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZEpZMjl1UTI5dWRHVnVkQ0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4aElHaHlaV1k5SW1oMGRIQnpPaTh2ZDNkM0xtWmhZMlZpYjI5ckxtTnZiUzloYldGc2RHOTBaV05vYm05c2IyZHBaWE1pSUhSaGNtZGxkRDBpWDJKc1lXNXJJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStQR2x0WnlCemNtTTlJbWgwZEhBNkx5OWpaRzR0YVcxaFoyVnpMbTFoYVd4amFHbHRjQzVqYjIwdmFXTnZibk12YzI5amFXRnNMV0pzYjJOckxYWXlMMk52Ykc5eUxXWmhZMlZpYjI5ckxUUTRMbkJ1WnlJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdKc2IyTnJPMkp2Y21SbGNqb2dNRHRvWldsbmFIUTZJR0YxZEc4N2IzVjBiR2x1WlRvZ2JtOXVaVHQwWlhoMExXUmxZMjl5WVhScGIyNDZJRzV2Ym1VN0xXMXpMV2x1ZEdWeWNHOXNZWFJwYjI0dGJXOWtaVG9nWW1samRXSnBZenNpSUdobGFXZG9kRDBpTWpRaUlIZHBaSFJvUFNJeU5DSWdZMnhoYzNNOUlpSStQQzloUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJblJ2Y0NJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnYzNSNWJHVTlJbVJwYzNCc1lYazZJR2x1YkdsdVpUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVQ0OGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdkbUZzYVdkdVBTSjBiM0FpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWEpwWjJoME9pQXhNSEI0TzNCaFpHUnBibWN0WW05MGRHOXRPaUE1Y0hnN2JYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBOdmJuUmxiblJKZEdWdFEyOXVkR0ZwYm1WeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcwaUlITjBlV3hsUFNKaWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVQ0OGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbXhsWm5RaUlIWmhiR2xuYmowaWJXbGtaR3hsSWlCemRIbHNaVDBpY0dGa1pHbHVaeTEwYjNBNklEVndlRHR3WVdSa2FXNW5MWEpwWjJoME9pQXhNSEI0TzNCaFpHUnBibWN0WW05MGRHOXRPaUExY0hnN2NHRmtaR2x1Wnkxc1pXWjBPaUE1Y0hnN2JYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWlJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlIWmhiR2xuYmowaWJXbGtaR3hsSWlCM2FXUjBhRDBpTWpRaUlHTnNZWE56UFNKdFkyNUdiMnhzYjNkSlkyOXVRMjl1ZEdWdWRDSWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHhoSUdoeVpXWTlJbWgwZEhCek9pOHZkM2QzTG14cGJtdGxaR2x1TG1OdmJTOWpiMjF3WVc1NUwyRnRZV3gwYnkxMFpXTm9ibTlzYjJkcFpYTWlJSFJoY21kbGREMGlYMkpzWVc1cklpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK1BHbHRaeUJ6Y21NOUltaDBkSEE2THk5alpHNHRhVzFoWjJWekxtMWhhV3hqYUdsdGNDNWpiMjB2YVdOdmJuTXZjMjlqYVdGc0xXSnNiMk5yTFhZeUwyTnZiRzl5TFd4cGJtdGxaR2x1TFRRNExuQnVaeUlnYzNSNWJHVTlJbVJwYzNCc1lYazZJR0pzYjJOck8ySnZjbVJsY2pvZ01EdG9aV2xuYUhRNklHRjFkRzg3YjNWMGJHbHVaVG9nYm05dVpUdDBaWGgwTFdSbFkyOXlZWFJwYjI0NklHNXZibVU3TFcxekxXbHVkR1Z5Y0c5c1lYUnBiMjR0Ylc5a1pUb2dZbWxqZFdKcFl6c2lJR2hsYVdkb2REMGlNalFpSUhkcFpIUm9QU0l5TkNJZ1kyeGhjM005SWlJK1BDOWhQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJUzB0VzJsbUlHMXpiMTArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdiWE52WFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQjJZV3hwWjI0OUluUnZjQ0krQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdjM1I1YkdVOUltUnBjM0JzWVhrNklHbHViR2x1WlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ2RtRnNhV2R1UFNKMGIzQWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYSnBaMmgwT2lBeE1IQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQTVjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUlnWTJ4aGMzTTlJbTFqYmtadmJHeHZkME52Ym5SbGJuUkpkR1Z0UTI5dWRHRnBibVZ5SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRFbDBaVzBpSUhOMGVXeGxQU0ppYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUlteGxablFpSUhaaGJHbG5iajBpYldsa1pHeGxJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp5MTBiM0E2SURWd2VEdHdZV1JrYVc1bkxYSnBaMmgwT2lBeE1IQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQTFjSGc3Y0dGa1pHbHVaeTFzWldaME9pQTVjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnZDJsa2RHZzlJaUlnYzNSNWJHVTlJbUp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpYldsa1pHeGxJaUIzYVdSMGFEMGlNalFpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2RKWTI5dVEyOXVkR1Z1ZENJZ2MzUjViR1U5SW0xemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeGhJR2h5WldZOUltaDBkSEJ6T2k4dmRIZHBkSFJsY2k1amIyMHZRVzFoYkhSdklpQjBZWEpuWlhROUlsOWliR0Z1YXlJZ2MzUjViR1U5SW0xemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGp4cGJXY2djM0pqUFNKb2RIUndPaTh2WTJSdUxXbHRZV2RsY3k1dFlXbHNZMmhwYlhBdVkyOXRMMmxqYjI1ekwzTnZZMmxoYkMxaWJHOWpheTEyTWk5amIyeHZjaTEwZDJsMGRHVnlMVFE0TG5CdVp5SWdjM1I1YkdVOUltUnBjM0JzWVhrNklHSnNiMk5yTzJKdmNtUmxjam9nTUR0b1pXbG5hSFE2SUdGMWRHODdiM1YwYkdsdVpUb2dibTl1WlR0MFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUc1dmJtVTdMVzF6TFdsdWRHVnljRzlzWVhScGIyNHRiVzlrWlRvZ1ltbGpkV0pwWXpzaUlHaGxhV2RvZEQwaU1qUWlJSGRwWkhSb1BTSXlOQ0lnWTJ4aGMzTTlJaUkrUEM5aFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdsdWJHbHVaVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKd1lXUmthVzVuTFhKcFoyaDBPaUF3TzNCaFpHUnBibWN0WW05MGRHOXRPaUE1Y0hnN2JYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBOdmJuUmxiblJKZEdWdFEyOXVkR0ZwYm1WeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcwaUlITjBlV3hsUFNKaWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVQ0OGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbXhsWm5RaUlIWmhiR2xuYmowaWJXbGtaR3hsSWlCemRIbHNaVDBpY0dGa1pHbHVaeTEwYjNBNklEVndlRHR3WVdSa2FXNW5MWEpwWjJoME9pQXhNSEI0TzNCaFpHUnBibWN0WW05MGRHOXRPaUExY0hnN2NHRmtaR2x1Wnkxc1pXWjBPaUE1Y0hnN2JYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWlJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlIWmhiR2xuYmowaWJXbGtaR3hsSWlCM2FXUjBhRDBpTWpRaUlHTnNZWE56UFNKdFkyNUdiMnhzYjNkSlkyOXVRMjl1ZEdWdWRDSWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHhoSUdoeVpXWTlJbWgwZEhCek9pOHZkM2QzTG5sdmRYUjFZbVV1WTI5dEwyTm9ZVzV1Wld3dlZVTTVWMWd0YWtWaFExaHRPRlJXTTNKa1kwTnBOMk4zSWlCMFlYSm5aWFE5SWw5aWJHRnVheUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQanhwYldjZ2MzSmpQU0pvZEhSd09pOHZZMlJ1TFdsdFlXZGxjeTV0WVdsc1kyaHBiWEF1WTI5dEwybGpiMjV6TDNOdlkybGhiQzFpYkc5amF5MTJNaTlqYjJ4dmNpMTViM1YwZFdKbExUUTRMbkJ1WnlJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdKc2IyTnJPMkp2Y21SbGNqb2dNRHRvWldsbmFIUTZJR0YxZEc4N2IzVjBiR2x1WlRvZ2JtOXVaVHQwWlhoMExXUmxZMjl5WVhScGIyNDZJRzV2Ym1VN0xXMXpMV2x1ZEdWeWNHOXNZWFJwYjI0dGJXOWtaVG9nWW1samRXSnBZenNpSUdobGFXZG9kRDBpTWpRaUlIZHBaSFJvUFNJeU5DSWdZMnhoYzNNOUlpSStQQzloUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBnb0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFlXSnNaVDQ4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051UkdsMmFXUmxja0pzYjJOcklpQnpkSGxzWlQwaWJXbHVMWGRwWkhSb09pQXhNREFsTzJKdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN2RHRmliR1V0YkdGNWIzVjBPaUJtYVhobFpDQWhhVzF3YjNKMFlXNTBPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrZ1kyeGhjM005SW0xamJrUnBkbWxrWlhKQ2JHOWphMDkxZEdWeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JqYkdGemN6MGliV051UkdsMmFXUmxja0pzYjJOclNXNXVaWElpSUhOMGVXeGxQU0p0YVc0dGQybGtkR2c2SURFd01DVTdjR0ZrWkdsdVp6b2dOWEI0SURFNGNIZ2dNakJ3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JqYkdGemN6MGliV051UkdsMmFXUmxja052Ym5SbGJuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdGliM0prWlhJdGRHOXdMWGRwWkhSb09pQXljSGc3WW05eVpHVnlMWFJ2Y0MxemRIbHNaVG9nYzI5c2FXUTdZbTl5WkdWeUxYUnZjQzFqYjJ4dmNqb2dJMFZGUlVWRlJUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJSE4wZVd4bFBTSnRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHh6Y0dGdVBqd3ZjM0JoYmo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJ0SmJtNWxjaUlnYzNSNWJHVTlJbkJoWkdScGJtYzZJREU0Y0hnN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhhSElnWTJ4aGMzTTlJbTFqYmtScGRtbGtaWEpEYjI1MFpXNTBJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXSnZkSFJ2YlMxamIyeHZjanB1YjI1bE95QmliM0prWlhJdGJHVm1kQzFqYjJ4dmNqcHViMjVsT3lCaWIzSmtaWEl0Y21sbmFIUXRZMjlzYjNJNmJtOXVaVHNnWW05eVpHVnlMV0p2ZEhSdmJTMTNhV1IwYURvd095QmliM0prWlhJdGJHVm1kQzEzYVdSMGFEb3dPeUJpYjNKa1pYSXRjbWxuYUhRdGQybGtkR2c2TURzZ2JXRnlaMmx1TFhSdmNEb3dPeUJ0WVhKbmFXNHRjbWxuYUhRNk1Ec2diV0Z5WjJsdUxXSnZkSFJ2YlRvd095QnRZWEpuYVc0dGJHVm1kRG93T3lJZ0x6NEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa3RMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0S0NRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdGaWJHVStQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUltMWpibFJsZUhSQ2JHOWpheUlnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrZ1kyeGhjM005SW0xamJsUmxlSFJDYkc5amEwOTFkR1Z5SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWs4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnWTJ4aGMzTTlJbTFqYmxSbGVIUkNiRzlqYTBsdWJtVnlJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp5MTBiM0E2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGliR1ZtZENJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQnpkSGxzWlQwaWQybGtkR2c2TVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCMllXeHBaMjQ5SW5SdmNDSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGliR1ZtZENJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhOMGVXeGxQU0p0WVhndGQybGtkR2c2SURFd01DVTdiV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJsUmxlSFJEYjI1MFpXNTBRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHSnZaSGsrUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJSFpoYkdsbmJqMGlkRzl3SWlCamJHRnpjejBpYldOdVZHVjRkRU52Ym5SbGJuUWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYUnZjRG9nTUR0d1lXUmthVzVuTFhKcFoyaDBPaUF4T0hCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBNWNIZzdjR0ZrWkdsdVp5MXNaV1owT2lBeE9IQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdDNiM0prTFdKeVpXRnJPaUJpY21WaGF5MTNiM0prTzJOdmJHOXlPaUFqTmpVMk5UWTFPMlp2Ym5RdFptRnRhV3g1T2lCVVlXaHZiV0VzSUZabGNtUmhibUVzSUZObFoyOWxMQ0J6WVc1ekxYTmxjbWxtTzJadmJuUXRjMmw2WlRvZ01USndlRHRzYVc1bExXaGxhV2RvZERvZ01UVXdKVHQwWlhoMExXRnNhV2R1T2lCalpXNTBaWEk3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHUnBkaUJ6ZEhsc1pUMGlkR1Y0ZEMxaGJHbG5iam9nWTJWdWRHVnlPeUkrVUd4bFlYTmxJR1J2SUc1dmRDQnlaWEJzZVNCMGJ5QjBhR2x6SUdVdGJXRnBiQzRnVkdobElITmxibVJsY2lCbGJXRnBiQ0JoWkdSeVpYTnpJR2x6SUc1dmRDQnRiMjVwZEc5eVpXUXVQR0p5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVVp2Y2lCaGJua2djWFZsYzNScGIyNHNJSEJzWldGelpTQThZU0JvY21WbVBTSnRZV2xzZEc4NlkyOXVkR0ZqZEVCd2JHRjBabTl5YlRZdWFXOGlJSFJoY21kbGREMGlYMkpzWVc1cklpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsTzJOdmJHOXlPaUFqTmpVMk5UWTFPMlp2Ym5RdGQyVnBaMmgwT2lCdWIzSnRZV3c3ZEdWNGRDMWtaV052Y21GMGFXOXVPaUIxYm1SbGNteHBibVU3SWo1elpXNWtJSFZ6SUdFZ2JXVnpjMkZuWlR3dllUNHVQR0p5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHhpY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4YzNSeWIyNW5QbEJzWVhSbWIzSnRJRFlnWW5rZ1FXMWhiSFJ2SUZSbFkyaHViMnh2WjJsbGN6d3ZjM1J5YjI1blBqeGljajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhZbkkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRbkNxU1p1WW5Od095UjdMbTV2ZHo5emRISnBibWN1ZVhsNWVYMG1ibUp6Y0R0RGIzQjVjbWxuYUhRdUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVQQzlrYVhZK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0S0NRa0pDUWtKQ1FrSkNRa0pQQzkwWVdKc1pUNDhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCbmRHVWdiWE52SURsZFBnb0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRazhMM1JoWW14bFBnb0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pQQzkwY2o0S0NRa0pDVHd2ZEdGaWJHVStDZ2tKQ1FrOElTMHRJQzh2SUVWT1JDQlVSVTFRVEVGVVJTQXRMVDRLQ1FrSlBDOTBaRDRLQ1FrOEwzUnlQZ29KUEM5MFlXSnNaVDRLQ1R3dlkyVnVkR1Z5UGdvOEwySnZaSGsrQ2p3dmFIUnRiRDRLXCIsXCJ0YXJnZXRSb290XCI6XCIke1A2X0RBVEF9XCIsXCJ0YXJnZXRQYXRoXCI6XCIvcmVzb3VyY2VzL3RlbXBsYXRlcy9wNmRlbW9fUE9SZXZpZXcuZnRsXCIsXCJwcm9wc1wiOnt9LFwiZGVwbG95ZWRcIjpmYWxzZSxcImhhc0J5dGVzQXR0YWNobWVudFwiOnRydWUsXCJhdHRhY2htZW50TmFtZVwiOlwicDZkZW1vX1BPUmV2aWV3LmZ0bFwiLFwiYXR0YWNobWVudFNpemVcIjo0ODA4NH0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzODk0NzZ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyIsIm5hbWUiOiJUYWJsZUl0ZW1zRGF0YSIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRhYmxlSXRlbXNEYXRhXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkNTViBmaWxlIHRvIGltcG9ydCBpbnRvIHRhYmxlIEl0ZW1zXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5NDQyLFwicmV2aXNpb25JZFwiOlwiNGUyNzBkNjAwM2ZkNzhkYTZhOGQ3ZDA1MjdlYmIyNmFcIixcIml0ZW1CeXRlc1wiOlwiU1dRc1JHVnpZM0pwY0hScGIyNHNWVzVwZEZCeWFXTmxMRU4xY25KbGJtTjVMRlZQVFN4RFlYUmxaMjl5ZVFvd01ETTBNelExTEZOcGJIWmxjaUJJWld4dFpYUXNNakFzVlZORUxFVkJMRWhsYkcxbGRBb3hNVEV4TVRFc1UyeHZkSFJsWkNCVFkzSmxkMlJ5YVhabGNpd3lOU3hWVTBRc1JVRXNVMk55Wlhka2NtbDJaWElLTVRNNU5EVXhNVEVzVUd4aGMzUnBZeUJJWld4dFpYUXNNVE1zVlZORUxFVkJMRWhsYkcxbGRBb3hOamMyTnpnc1EyeGhkeUJJWVcxdFpYSXNNVFVzVlZORUxFVkJMRWhoYlcxbGNnb3lNakl5TWpJc1VHaHBiR2x3Y3lCVFkzSmxkMlJ5YVhabGNpd3lOeXhWVTBRc1JVRXNVMk55Wlhka2NtbDJaWElLTWpJeU1qSTBMRkJ2ZW1sa2NtbDJJRk5qY21WM1pISnBkbVZ5TERNd0xGVlRSQ3hGUVN4VFkzSmxkMlJ5YVhabGNnbzBORFExTmpZc1EyeDFZaUJJWVcxdFpYSXNNakFzVlZORUxFVkJMRWhoYlcxbGNnbzRPVE15TWpNc1UyeGxaR2RsSUVoaGJXMWxjaXd4TURBc1ZWTkVMRVZCTEVoaGJXMWxjZ289XCIsXCJ0YXJnZXRSb290XCI6XCIke1RNUH1cIixcInRhcmdldFBhdGhcIjpcIi9wNl9kZW1vX2l0ZW1zLmNzdlwiLFwicHJvcHNcIjp7fSxcImRlcGxveWVkXCI6ZmFsc2UsXCJoYXNCeXRlc0F0dGFjaG1lbnRcIjp0cnVlLFwiYXR0YWNobWVudE5hbWVcIjpcInRhYmxlX3A2X2RlbW8uSXRlbXNfZGF0YV9leHBvcnQuY3N2XCIsXCJhdHRhY2htZW50U2l6ZVwiOjM4Nn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzODk0NDJ9XSwicGxhdGZvcm02LmNvdW50ZXJzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5jb3VudGVycyIsIm5hbWUiOiJDb3VudFJGUXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJDb3VudFJGUXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiIyBvZiBSRlFzIHdpdGggXFxcIlJlY2VpdmVkXFxcIiB0ZWNobmljYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5NTQ3LFwicmV2aXNpb25JZFwiOlwiMzIxMThhODg0NGEyZTY1ZTA5MjZlNzk2YTdlZjdhM2VcIixcImxhc3RTeW5jRGF0ZVwiOm51bGwsXCJ2YWx1ZVwiOm51bGwsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9UcmFuc2FjdGlvbkluZm9bVHJhbnNhY3Rpb25UeXBlID0gXFxcIlJlcXVlc3QgRm9yIFF1b3RhdGlvblxcXCIgXVtUZWNobmljYWxTdGF0dXNDb2RlID0gXFxcIlJlY2VpdmVkXFxcIiBdW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA8IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MG19XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMywyKSldW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA+IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEzLDIpKV1cIixcInRhcmdldFwiOlwiVHJhbnNhY3Rpb25cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzODk1NDd9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJDb3VudFF1b3Rlc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFF1b3RlcyB3aXRoIFxcXCJTZW50XFxcIiB0ZWNobmljYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5NTY0LFwicmV2aXNpb25JZFwiOlwiMmQ2MTg4NmQwMmI3ZWU0NTA2NzIzNmJiMzA0OTcyNTBcIixcImxhc3RTeW5jRGF0ZVwiOm51bGwsXCJ2YWx1ZVwiOm51bGwsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9UcmFuc2FjdGlvbkluZm9bVHJhbnNhY3Rpb25UeXBlID0gXFxcIlF1b3RlXFxcIiBdW1RlY2huaWNhbFN0YXR1c0NvZGUgPSBcXFwiU2VudFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1Mzg5NTY0fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmNvdW50ZXJzIiwibmFtZSI6IkNvdW50RmFpbGVkUm91dGluZ09yZGVycyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkNvdW50RmFpbGVkUm91dGluZ09yZGVyc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIEZhaWxlZCBSb3V0aW5nIE9yZGVyc1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM4OTU3NixcInJldmlzaW9uSWRcIjpcIjY0NTNlZmFiODk1MzJkMzAzOTkwMzE2ZDViY2MzYTZjXCIsXCJsYXN0U3luY0RhdGVcIjpudWxsLFwidmFsdWVcIjpudWxsLFwidHlwZVwiOlwiQ09VTlRcIixcInF1ZXJ5XCI6XCIvcm91dGluZ09yZGVyXCIsXCJ0YXJnZXRcIjpcIkZhaWxlZFJvdXRpbmdPcmRlclwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM4OTU3Nn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5jb3VudGVycyIsIm5hbWUiOiJDb3VudFJlamVjdGVkUE9zIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRSZWplY3RlZFBPc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFB1cmNoYXNlIE9yZGVycyB3aXRoIFxcXCJSZWplY3RlZFxcXCIgZnVuY3Rpb25hbCBzdGF0dXMgKG92ZXIgdGhlIHBhc3QgOTAgZGF5cylcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzODk1OTAsXCJyZXZpc2lvbklkXCI6XCIyN2JlMWIxMGRhMTk5YzlhM2MzZDgzYWJlZjc2NTJiOFwiLFwibGFzdFN5bmNEYXRlXCI6bnVsbCxcInZhbHVlXCI6bnVsbCxcInR5cGVcIjpcIkNPVU5UXCIsXCJxdWVyeVwiOlwiL1RyYW5zYWN0aW9uSW5mb1tUcmFuc2FjdGlvblR5cGUgPSBcXFwiUHVyY2hhc2UgT3JkZXJcXFwiIF1bRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSBcXFwiUmVqZWN0ZWRcXFwiIF1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpIDwgY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwbX1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEzLDIpKV1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpID4gY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTMsMikpXVwiLFwidGFyZ2V0XCI6XCJUcmFuc2FjdGlvblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM4OTU5MH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5jb3VudGVycyIsIm5hbWUiOiJDb3VudEFjY2VwdGVkUE9zIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRBY2NlcHRlZFBPc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFB1cmNoYXNlIE9yZGVycyB3aXRoIFxcXCJBY2NlcHRlZFxcXCIgZnVuY3Rpb25hbCBzdGF0dXMgKG92ZXIgdGhlIHBhc3QgOTAgZGF5cylcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzODk1MjksXCJyZXZpc2lvbklkXCI6XCJhODk2NzBhYTllMGNmNmUxZTU0ZWM1NGQ5YTYyYzAxOFwiLFwibGFzdFN5bmNEYXRlXCI6bnVsbCxcInZhbHVlXCI6bnVsbCxcInR5cGVcIjpcIkNPVU5UXCIsXCJxdWVyeVwiOlwiL1RyYW5zYWN0aW9uSW5mb1tUcmFuc2FjdGlvblR5cGUgPSBcXFwiUHVyY2hhc2UgT3JkZXJcXFwiIF1bRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSBcXFwiQWNjZXB0ZWRcXFwiIF1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpIDwgY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwbX1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEzLDIpKV1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpID4gY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTMsMikpXVwiLFwidGFyZ2V0XCI6XCJUcmFuc2FjdGlvblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM4OTUyOX1dLCJwbGF0Zm9ybTYudmlld3MiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnZpZXdzIiwibmFtZSI6IlRyYW5zYWN0aW9ucyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUcmFuc2FjdGlvbnMgZm9yIHA2X2RlbW9cIixcIkZSXCI6XCJUcmFuc2FjdGlvbnMgcG91ciBwNl9kZW1vXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1MzkwNDM1LFwicmV2aXNpb25JZFwiOlwiYjdhOTFmZDkwYjdkYWE5YmYwMTk1NjcxYjc2YWFjOTNcIixcInR5cGVcIjpcIlRSQU5TQUNUSU9OU1wiLFwieG1sVmlld1wiOlwiPFZpZXc+XFxuICAgIDxTbWFydFRhZ3M+XFxuICAgICAgICA8VHJhbnNhY3Rpb25UeXBlPlRyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvblR5cGU8L1RyYW5zYWN0aW9uVHlwZT5cXG4gICAgICAgIDxUcmFuc2FjdGlvbkZvcm1hdD5UcmFuc2FjdGlvbkluZm8vUGl2b3REb2N1bWVudEZvcm1hdDwvVHJhbnNhY3Rpb25Gb3JtYXQ+XFxuICAgIDwvU21hcnRUYWdzPlxcbiAgICA8RGF0YVR5cGU+cDZfZGVtby5UcmFuc2FjdGlvbkluZm88L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPnA2X2RlbW8uVHJhbnNhY3Rpb25JbmZvPC9EYXRhTW9kZWw+XFxuICAgIDxEYXRhUGFydGl0aW9uPlRSQU5TQUNUSU9OPC9EYXRhUGFydGl0aW9uPlxcbiAgICA8UmVwcm9jZXNzUm91dGVVcmk+ZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fRGlzcGF0Y2hlcjwvUmVwcm9jZXNzUm91dGVVcmk+XFxuICAgIDxMaXN0T2ZLZXlzPlxcbiAgICAgICAgPEtleT5cXG4gICAgICAgICAgICA8TmFtZT5JZDwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5JZDwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5JZDwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0lkPC9YUGF0aD5cXG4gICAgICAgIDwvS2V5PlxcbiAgICA8L0xpc3RPZktleXM+XFxuICAgIDxMaXN0T2ZTZWFyY2hhYmxlcz5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkxvYWREYXRlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkxvYWQgRGF0ZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5EYXRlIGRlIGNyw6lhdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0NyZWF0aW9uRGF0ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+UmFuZ2VPZkRhdGVzKHl5eXlNTWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+U3RhdHVzRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UZWNoLiBTdGF0dXMgRGF0ZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5EYXRlIGRlIG1vZGlmLiBTdGF0dXQgVGVjaC48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNEYXRlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5SYW5nZU9mRGF0ZXMoeXl5eU1NZGQnVCdISDptbTpzcyk8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UcmFuc2FjdGlvblR5cGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGRlIHRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgICAgICA8Q2hvaWNlIGZpZWxkLWxpbmUtaGVpZ2h0PVxcXCIxXFxcIiBtdWx0aS1zZWxlY3Q9XFxcInRydWVcXFwiIG11bHRpLXNlbGVjdC1kZWxpbWl0ZXI9XFxcInxcXFwiPlJlcXVlc3QgZm9yIFF1b3RhdGlvbiwgUXVvdGUsIFB1cmNoYXNlIE9yZGVyPC9DaG9pY2U+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UcmFuc2FjdGlvbk51bWJlcjwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UcmFuc2FjdGlvbiBOdW1iZXI8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+TnVtw6lybyBkZSB0cmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uTnVtYmVyPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkJ1eWVyTmFtZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5CdXllciBOYW1lPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk5vbSBkZSBsJ2FjaGV0ZXVyPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vS2V5VmFsdWVbLi9LZXkgPSBcXFwiQnV5ZXIgTmFtZVxcXCJdL1ZhbHVlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPktleXdvcmRzPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPktleXdvcmRzPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk1vdHMgY2xlZnM8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mbzwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UZWNobmljYWxTdGF0dXNDb2RlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRlY2huaWNhbCBTdGF0dXM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+U3RhdHV0IHRlY2huaXF1ZTwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0NvZGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgICAgIDxDaG9pY2UgZmllbGQtbGluZS1oZWlnaHQ9XFxcIjJcXFwiIG11bHRpLXNlbGVjdD1cXFwidHJ1ZVxcXCIgbXVsdGktc2VsZWN0LWRlbGltaXRlcj1cXFwifFxcXCI+SGFuZGxlZCxSZWNlaXZlZCxTZW50PC9DaG9pY2U+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5GdW5jdGlvbmFsU3RhdHVzQ29kZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5GdW5jdGlvbmFsIFN0YXR1czwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgZm9uY3Rpb25uZWw8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9GdW5jdGlvbmFsU3RhdHVzQ29kZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICAgICAgPENob2ljZSBmaWVsZC1saW5lLWhlaWdodD1cXFwiMlxcXCIgbXVsdGktc2VsZWN0PVxcXCJ0cnVlXFxcIiBtdWx0aS1zZWxlY3QtZGVsaW1pdGVyPVxcXCJ8XFxcIj5BY2NlcHRlZCxEZWNsaW5lZCxRdW90ZSBwcm92aWRlZCxSZWplY3RlZDwvQ2hvaWNlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICA8L0xpc3RPZlNlYXJjaGFibGVzPlxcbiAgICA8TGlzdE9mVmlld2FibGVzPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkxvYWREYXRlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkxvYWQgRGF0ZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5EYXRlIGRlIGNyw6lhdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0NyZWF0aW9uRGF0ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+RGF0ZSh5eXl5TU1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+U3RhdHVzRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5TdGF0dXMgRGF0ZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5EYXRlIHN0YXR1dDwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0RhdGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eU1NZGQnVCdISDptbTpzcyk8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlRyYW5zYWN0aW9uVHlwZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UcmFuc2FjdGlvbiBUeXBlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlR5cGUgZGUgdHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvblR5cGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+VHJhbnNhY3Rpb25OdW1iZXI8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gIzwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5OwrAgZGUgdHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvbk51bWJlcjwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5TZWxsZXJOYW1lPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlNlbGxlciBOYW1lPC9FTj5cXG4gICAgICAgICAgICAgICAgIDxGUj5Ob20gdmVuZGV1cjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlW0tleT1cXFwiU2VsbGVyIE5hbWVcXFwiXS9WYWx1ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5CdXllck5hbWU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+QnV5ZXIgTmFtZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Ob20gZGUgbCdhY2hldGV1cjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlW0tleT1cXFwiQnV5ZXIgTmFtZVxcXCJdL1ZhbHVlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlRlY2huaWNhbFN0YXR1c0NvZGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VGVjaC4gU3RhdHVzPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlN0YXR1dCB0ZWNoLjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0NvZGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+RnVuY3Rpb25hbFN0YXR1c0NvZGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+RnVuY3QuIFN0YXR1czwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgZm9uY3QuPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vRnVuY3Rpb25hbFN0YXR1c0NvZGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+RnVuY3Rpb25hbFN0YXR1c01lc3NhZ2U8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+RnVuY3QuIFN0YXR1cyBNc2cuPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlN0YXR1dCBGb25jdC4gTXNnLjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0Z1bmN0aW9uYWxTdGF0dXNNZXNzYWdlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkRvY3VtZW50PC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvY3VtZW50PC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjY8OocyBkb2MuPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVGFyZ2V0RG9jdW1lbnRVUkk8L1hQYXRoPlxcbiAgICAgICAgICAgICA8VHlwZT5VUkk8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgXFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgPE5hbWU+aXRlbUxpbms8L05hbWU+XFxuICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxFTj5Xb3JrIEl0ZW08L0VOPlxcbiAgICAgICAgICAgIDxGUj5UcmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1dvcmtmbG93L0luc3RhbmNlL2ZsaW5rPC9YUGF0aD5cXG4gICAgICAgICA8VHlwZT5JdGVtTGluazwvVHlwZT5cXG4gICAgICA8L1ZpZXdhYmxlPlxcbiAgICA8L0xpc3RPZlZpZXdhYmxlcz5cXG48L1ZpZXc+XFxuXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1MzkwNDM1fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnZpZXdzIiwibmFtZSI6IldvcmtmbG93IFRhc2tzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiV29ya2Zsb3cgVGFza3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiV29ya2Zsb3cgVGFza3MgZm9yIHA2X2RlbW9cIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzOTA0NTEsXCJyZXZpc2lvbklkXCI6XCIzNjc5NTBjODY5YWYyM2FmMzFkMmRhNWJmZDVmNGQ2ZVwiLFwidHlwZVwiOlwiV09SS0lURU1TXCIsXCJ4bWxWaWV3XCI6XCI8Vmlldz5cXG4gICAgPFNtYXJ0VGFncy8+XFxuICAgIDxEYXRhVHlwZT5Xb3JrZmxvd1Rhc2s8L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPldvcmtmbG93VGFzazwvRGF0YU1vZGVsPlxcbiAgICA8RGF0YVBhcnRpdGlvbj5UUkFOU0FDVElPTjwvRGF0YVBhcnRpdGlvbj5cXG4gICAgPFJlcHJvY2Vzc1JvdXRlVXJpLz5cXG4gICAgPExpc3RPZktleXM+XFxuICAgICAgICA8S2V5PlxcbiAgICAgICAgICAgIDxOYW1lPklkPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPklkPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPklkPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaWQ8L1hQYXRoPlxcbiAgICAgICAgPC9LZXk+XFxuICAgIDwvTGlzdE9mS2V5cz5cXG4gICAgPExpc3RPZlNlYXJjaGFibGVzPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+RG9jLiBUeXBlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGR1IERvYzwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25UeXBlXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkRvYy4gTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gTnVtYmVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk7CsCBkdSBEb2M8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPldvcmtmbG93VGFzay9pdGVtQXR0cmlidXRlc1trZXk9XFxcIlRyYW5zYWN0aW9uTnVtYmVyXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkFzc2lnbmVlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkFzc2lnbmVlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRlc3RpbmF0YWlyZTwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2Fzc2lnbmVlcy9hc3NpZ25lZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+SW5MaXN0PC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICA8L0xpc3RPZlNlYXJjaGFibGVzPlxcbiAgICA8TGlzdE9mVmlld2FibGVzPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPldGU3RhcnREYXRlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBTdGFydCBEYXRlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRhdGUgZGUgZMOpYnV0PC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJTdGFydERhdGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eS1NTS1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgIDxOYW1lPkRvY1R5cGU8L05hbWU+XFxuICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgIDxGUj5UeXBlPC9GUj5cXG4gICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPFhQYXRoPi9Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJUcmFuc2FjdGlvblR5cGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgPE5hbWU+RG9jTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgIDxFTj5Eb2MuIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgIDxGUj5OwrAgZG9jLjwvRlI+XFxuICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgIDxYUGF0aD4vV29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25OdW1iZXJcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICBcXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5pdGVtTGluazwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UcmFuc2FjdGlvbjwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UcmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2ZsaW5rPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5JdGVtTGluazwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+V29ya2Zsb3dTdGVwPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBBY3Rpb25zPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjdGlvbnMgV0YuPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svc3RlcC9Xb3JrZmxvd1N0ZXA8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPldvcmtmbG93U3RlcDwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgIDwvTGlzdE9mVmlld2FibGVzPlxcbjwvVmlldz5cXG5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzOTA0NTF9XSwicGxhdGZvcm02LnRhYmxlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYudGFibGVzIiwibmFtZSI6Ikl0ZW1zIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiSXRlbXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSXRlbXNcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzOTAzNjYsXCJyZXZpc2lvbklkXCI6XCJmYTI3NTU1N2ZjNGJkNzdjMGY4MDhhMWExMzZlODM5NFwiLFwiZmllbGRzXCI6W1wiSWRcIixcIkRlc2NyaXB0aW9uXCIsXCJVbml0UHJpY2VcIixcIkN1cnJlbmN5XCIsXCJVT01cIixcIkNhdGVnb3J5XCJdLFwia2V5c1wiOltcIklkXCJdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM5MDM2Nn1dLCJwbGF0Zm9ybTYucm91dGVzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5yb3V0ZXMiLCJuYW1lIjoiUm91dGluZ1J1bGVEaXNwYXRjaGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUm91dGluZ1J1bGVEaXNwYXRjaGVyXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkRpc3BhdGNoZXIgdG8gUkZRLCBRdW90ZSBvciBQTyBSb3V0aW5nIFJ1bGVzXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5NzM4LFwicmV2aXNpb25JZFwiOlwiMjA4MjYyYjAxOGFmNzBjYWRjY2ZlNDMyNzExYmI2NjlcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcbiAgICAgICAgICAgIC5jaG9pY2UoKVxcbiAgICAgICAgICAgICAgICAud2hlbih4cGF0aChcXFwiL1RyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvblR5cGU9J1JlcXVlc3QgRm9yIFF1b3RhdGlvbidcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC50bygnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUmVxdWVzdEZvclF1b3RhdGlvbicpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZT0nUXVvdGUnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAudG8oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1F1b3RlJylcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPSdQdXJjaGFzZSBPcmRlcidcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC50bygnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUHVyY2hhc2VPcmRlcicpXFxuICAgICAgICAgICAgICAgIC5vdGhlcndpc2UoKVxcbiAgICAgICAgICAgICAgICAgICAgLnRocm93RXhjZXB0aW9uKGlvLnBsYXRmb3JtNi5jb21tb24udXRpbC5QNkV4Y2VwdGlvbiwnTm8gbWF0Y2hpbmcgcnVsZSBmb3VuZCBmb3IgaXRlbSEnKVxcbiAgICAgICAgICAgIC5lbmQoKVxcbiAgICAgICAgICAgIC5yb3V0ZUlkKFxcXCJwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlclxcXCIpXFxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlclxcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1Mzg5NzM4fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJTY2hlZHVsZXJGb3JSRlFDcmVhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNjaGVkdWxlckZvclJGUUNyZWF0aW9uXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlNjaGVkdWxlZCBjcmVhdGlvbiBvZiBSZXF1ZXN0cyBmb3IgUXVvdGF0aW9uXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5NzgwLFwicmV2aXNpb25JZFwiOlwiOTFmNWU2MTAyYjYzMmNhNTY1NmU4NGI5ZjJlYjI1NGVcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcImRlZiByb3V0ZUlkID0gXFxcInA2X2RlbW8gU2NoZWR1bGVkIGNyZWF0aW9uIG9mIFJGUXNcXFwiXFxuXFxudHJ5IHtcXG4gICAgcDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuICAgICAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgICAgICBmcm9tKFxcXCJ0aW1lcjovL215VGltZXI/cGVyaW9kPTEwbVxcXCIpXFxuICAgICAgICAgICAgICAgIC50bygncDZjbWI6Ly9zY3JpcHRzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1leGVjdXRlJmlkPXA2X2RlbW8uQ3JlYXRlUkZRVHJhbnNhY3Rpb24nKVxcbiAgICAgICAgICAgICAgICAucm91dGVJZChyb3V0ZUlkKVxcbiAgICAgICAgICAgICAgICAuZGVzY3JpcHRpb24ocm91dGVJZClcXG4gICAgICAgIH1cXG4gICAgfSlcXG5cXG4gICAgcDYudXRpbHMucGF1c2UoKVxcbn0gZmluYWxseSB7XFxuICBwNi5jYW1lbC5kZXN0cm95Um91dGUocm91dGVJZClcXG59XFxuXCIsXCJ0eXBlXCI6XCJzY2hlZHVsZXJcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1Mzg5NzgwfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJSb3V0aW5nUnVsZXNGb3JQdXJjaGFzZU9yZGVycyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJvdXRpbmdSdWxlc0ZvclB1cmNoYXNlT3JkZXJzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlJvdXRpbmcgcnVsZXMgZm9yIFB1cmNoYXNlIE9yZGVyc1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM4OTcyMixcInJldmlzaW9uSWRcIjpcImUwOWM4N2Q3ZWY1MGNhMmVkOWQ1ZWU2NDkxNjlhZGRmXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG5cXG4gICAgdm9pZCBjb25maWd1cmUoKSB7XFxuXFxuICAgICAgICBmcm9tKCdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19QdXJjaGFzZU9yZGVyJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzQ29kZT0nUmVjZWl2ZWQnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJwbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb25cXFwiKS5jb25zdGFudChcXFwiaW52b2tlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcInN0YXR1c1xcXCIpLmNvbnN0YW50KFxcXCJSZWNlaXZlZFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGVwXFxcIikuY29uc3RhbnQoXFxcIkhhbmRsZVB1cmNoYXNlT3JkZXJcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiYXBwa2V5XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiZmxvd25hbWVcXFwiKS5jb25zdGFudChcXFwiVVVJRFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAudG8oXFxcInA2cm91dGU6Ly9wbGF0Zm9ybTYud29ya2Zsb3dzdGVwc1xcXCIpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzJylcXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzXFxcIilcXG4gICAgfVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJ4bWxfcm91dGluZ1wiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzODk3MjJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlNjaGVkdWxlckZvckNvdW50ZXJzUmVmcmVzaCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNjaGVkdWxlckZvckNvdW50ZXJzUmVmcmVzaFwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRlcnNcIixcIkZSXCI6XCJBY3R1YWxpc2F0aW9uIHBsYW5pZmnDqWUgZGVzIGNvbXB0ZXVyc1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM4OTc2OCxcInJldmlzaW9uSWRcIjpcIjlmOGZhN2FlMThhOWQ2YzQ3MTZkYWQ3NDAwMmIyOGZlXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG5cXHRkZWYgdm9pZCBjb25maWd1cmUoKSB7XFxuXFx0XFx0ZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X1JGUXM/Y3Jvbj0wKzErKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRSRlFzJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50UkZRcycpXFxuXFx0XFx0XFx0LmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFNjaGVkdWxlZCByZWZyZXNoIG9mIHRoZSBDb3VudFJGUXMgY291bnRlclxcXCIpXFxuXFxuXFx0XFx0ZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X1F1b3Rlcz9jcm9uPTArMisqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudFF1b3RlcycpXFxuXFx0XFx0XFx0LnJvdXRlSWQoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFF1b3RlcycpXFxuXFx0XFx0XFx0LmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFNjaGVkdWxlZCByZWZyZXNoIG9mIHRoZSBDb3VudFF1b3RlcyBjb3VudGVyXFxcIilcXG5cXG4gICAgICAgIGZyb20oXFxcInF1YXJ0ejI6Ly9wbGF0Zm9ybTYvcDZyb3V0ZV9Db3VudF9QT3NfQWNjZXB0ZWQ/Y3Jvbj0wKzMrKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRBY2NlcHRlZFBPcycpXFxuXFx0XFx0XFx0LnJvdXRlSWQoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudEFjY2VwdGVkUE9zJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50QWNjZXB0ZWRQT3MgY291bnRlclxcXCIpXFxuXFxuICAgICAgICBmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfUE9zX1JlamVjdGVkP2Nyb249MCs0KyorKisqKz8rKlxcXCIpXFxuXFx0XFx0XFx0LnRvKCdwNmNtYjovL2NvdW50ZXJzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1zeW5jaHJvbml6ZSZpZD1wNl9kZW1vLkNvdW50UmVqZWN0ZWRQT3MnKVxcblxcdFxcdFxcdC5yb3V0ZUlkKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSZWplY3RlZFBPcycpXFxuXFx0XFx0XFx0LmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFNjaGVkdWxlZCByZWZyZXNoIG9mIHRoZSBDb3VudFJlamVjdGVkUE9zIGNvdW50ZXJcXFwiKVxcblxcblxcdFxcdGZyb20oXFxcInF1YXJ0ejI6Ly9wbGF0Zm9ybTYvcDZyb3V0ZV9Db3VudF9GYWlsZWRSb3V0aW5nT3JkZXJzP2Nyb249MCswLzE1KyorKisqKz8rKlxcXCIpXFxuXFx0XFx0XFx0LnRvKCdwNmNtYjovL2NvdW50ZXJzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1zeW5jaHJvbml6ZSZpZD1wNl9kZW1vLkNvdW50RmFpbGVkUm91dGluZ09yZGVycycpXFxuXFx0XFx0XFx0LnJvdXRlSWQoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudEZhaWxlZFJvdXRpbmdPcmRlcnMnKVxcblxcdFxcdFxcdC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzIGNvdW50ZXJcXFwiKVxcblxcdH1cXG59KVxcblwiLFwidHlwZVwiOlwic2NoZWR1bGVyXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM4OTc2OH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5yb3V0ZXMiLCJuYW1lIjoiQmxvY2tjaGFpbkV2ZW50SGFuZGxlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkJsb2NrY2hhaW5FdmVudEhhbmRsZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQmxvY2tjaGFpbiBFdmVudCBIYW5kbGVyXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5ODAzLFwicmV2aXNpb25JZFwiOlwiNTE4MTdhOWY4ZWNjNjc1Zjk2OWJmZDIwY2EzZjc4YzZcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4vLyBEZWZpbmUgcm91dGVzIHdpdGggcHJlLXByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIChpZS4gdG8gZGVmaW5lIGFuZCByZWdpc3RlciBiZWFucykuXFxuLy9cXG4vLyBQYXJhbWV0ZXJzOlxcbi8vICAgIHByZVByb2Nlc3NpbmdTdGF0ZW1lbnQ6ICAgUHJlLXByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zXFxuLy8gICAgYWRkUm91dGVzOiAgICAgICAgICAgICAgICBUaGUgcm91dGUgZGVmaW5pdGlvbnNcXG4vL1xcbi8vIEV4YW1wbGU6XFxuLy8gICAgcDYuY2FtZWwucmVnaXN0ZXJCZWFuKFxcXCJteUJlYW5cXFwiLCBTZXJ2aWNlQmVhbiApXFxuLy9cXG4vLyBNb3JlIGluZm9ybWF0aW9uIG9uIGh0dHBzOi8vZG9jdW1lbnRhdGlvbi5hbWFsdG8uY29tL3BsYXRmb3JtNi9sYXRlc3QvZGV2ZWxvcC1hcHAvYnVpbHQtaW4tc2VydmljZXMvcm91dGVzL3JvdXRlcy1kc2wvI2dyb292eS1iZWFuLWV4ZWN1dGlvblxcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5cXG5cXG4ke3ByZVByb2Nlc3NpbmdTdGF0ZW1lbnR9XFxuXFxucDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuXFxuICAgIHZvaWQgY29uZmlndXJlKCkge1xcblxcbiAgICAgICAgJHthZGRSb3V0ZXN9XFxuXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwid2ViM2pcIixcInNjcmlwdFNlZ21lbnRzXCI6e1wiYWRkUm91dGVzXCI6XCJmcm9tKFxcXCJ3ZWIzajovL1xcXCIgKyBldGhDbGllbnRVUkwgKyBcXFwiP2FkZHJlc3M9XFxcIiArIGNvbnRyYWN0QWRkcmVzcyArIFxcXCImb3BlcmF0aW9uPUVUSF9MT0dfRkxPV0FCTEVcXFwiKVxcbiAgICAgICAgICAgIC50byhcXFwiYmVhbjovL2xvZ1RvSlNPTj9tZXRob2Q9dG9KU09OXFxcIilcXG4gICAgICAgICAgICAudG8oXFxcInA2Y21iOi8vc2NyaXB0cz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249ZXhlY3V0ZSZpZD1wNl9kZW1vLkJsb2NrY2hhaW5FdmVudEhhbmRsZXJcXFwiKVxcbiAgICAgICAgICAgIC5yb3V0ZUlkKFxcXCJwNl9kZW1vIFdlYjNqIC0gQmxvY2tjaGFpbkV2ZW50SGFuZGxlclxcXCIpXFxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIEJsb2NrY2hhaW4gRXZlbnQgSGFuZGxlclxcXCIpXCIsXCJwcmVQcm9jZXNzaW5nU3RhdGVtZW50XCI6XCJpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlclxcbmltcG9ydCBvcmcud2ViM2oucHJvdG9jb2wuY29yZS5tZXRob2RzLnJlc3BvbnNlLkxvZ1xcblxcbmNsYXNzIExvZ1RvSlNPTiB7XFxuICAgIGRlZiBTdHJpbmcgdG9KU09OKExvZyBsb2cpIHtcXG4gICAgICAgIHJldHVybiBuZXcgT2JqZWN0TWFwcGVyKCkud3JpdGVWYWx1ZUFzU3RyaW5nKGxvZyk7XFxuICAgIH1cXG59XFxuXFxucDYuY2FtZWwucmVnaXN0ZXJCZWFuKFxcXCJsb2dUb0pTT05cXFwiLCBMb2dUb0pTT04pXFxuXFxuZGVmIGV0aENsaWVudFVSTCA9IHA2LmFwcGNvbmZpZy5nZXQoJ2V0aENsaWVudFVSTCcpXFxuZGVmIGNvbnRyYWN0QWRkcmVzcyA9ICBwNi5hcHBjb25maWcuZ2V0KCdjb250cmFjdEFkZHJlc3MnKVxcblwifX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzODk4MDN9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlJvdXRpbmdSdWxlc0ZvclJGUXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSb3V0aW5nUnVsZXNGb3JSRlFzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlJvdXRpbmcgcnVsZXMgZm9yIFJlcXVlc3RGb3JRdW90YXRpb25zXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5NzU0LFwicmV2aXNpb25JZFwiOlwiYmJiZmZjOTJhMjI0MzNmODNmYjA5YWUxODgwYWExMzlcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcblxcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1JlcXVlc3RGb3JRdW90YXRpb24nKVxcbiAgICAgICAgICAgIC5jaG9pY2UoKVxcbiAgICAgICAgICAgICAgICAud2hlbih4cGF0aChcXFwiL1RyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNDb2RlPSdSZWNlaXZlZCdcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcInBsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvblxcXCIpLmNvbnN0YW50KFxcXCJpbnZva2VcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwic3RhdHVzXFxcIikuY29uc3RhbnQoXFxcIlJlY2VpdmVkXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcInN0ZXBcXFwiKS5jb25zdGFudChcXFwiSGFuZGxlUmVxdWVzdEZvclF1b3RhdGlvblxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJhcHBrZXlcXFwiKS5jb25zdGFudChcXFwicDZfZGVtb1xcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJmbG93bmFtZVxcXCIpLmNvbnN0YW50KFxcXCJVVUlEXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC50byhcXFwicDZyb3V0ZTovL3BsYXRmb3JtNi53b3JrZmxvd3N0ZXBzXFxcIilcXG4gICAgICAgICAgICAgICAgLm90aGVyd2lzZSgpXFxuICAgICAgICAgICAgICAgICAgICAudGhyb3dFeGNlcHRpb24oaW8ucGxhdGZvcm02LmNvbW1vbi51dGlsLlA2RXhjZXB0aW9uLCdObyBtYXRjaGluZyBydWxlIGZvdW5kIGZvciBpdGVtIScpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnNcXFwiKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBSZXF1ZXN0Rm9yUXVvdGF0aW9uc1xcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1Mzg5NzU0fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJSb3V0aW5nUnVsZXNGb3JRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSb3V0aW5nUnVsZXNGb3JRdW90ZXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUXVvdGVzXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5NzkyLFwicmV2aXNpb25JZFwiOlwiZmQwMmNhYTYxNzVmNjY3YzJmYjY5NDQwYTY0MmE1YmZcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcbiAgICBcXG4gICAgdm9pZCBjb25maWd1cmUoKSB7XFxuICAgICAgICBmcm9tKCdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19RdW90ZScpXFxuICAgICAgICAgICAgLmNob2ljZSgpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0NvZGU9J0NyZWF0ZWQnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKCAncGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uJykuY29uc3RhbnQoJ2V4ZWN1dGUnKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiYXBwa2V5XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcignaWQnKS5jb25zdGFudCgncDZfZGVtby5TZW5kUXVvdGVUb0Jsb2NrY2hhaW4nKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldFByb3BlcnR5KCdleGVjdXRlLmFzeW5jJykuY29uc3RhbnQodHJ1ZSlcXG4gICAgICAgICAgICAgICAgICAgIC50byhcXFwicDZyb3V0ZTovL3BsYXRmb3JtNi5zY3JpcHRzXFxcIilcXG4gICAgICAgICAgICAgICAgLm90aGVyd2lzZSgpXFxuICAgICAgICAgICAgICAgICAgICAudGhyb3dFeGNlcHRpb24oaW8ucGxhdGZvcm02LmNvbW1vbi51dGlsLlA2RXhjZXB0aW9uLCdObyBtYXRjaGluZyBydWxlIGZvdW5kIGZvciBpdGVtIScpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUXVvdGVzJylcXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUXVvdGVzXFxcIilcXG4gICAgfVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJ4bWxfcm91dGluZ1wiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzODk3OTJ9XSwicGxhdGZvcm02LnN0b3JlZHByb2NlZHVyZXMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnN0b3JlZHByb2NlZHVyZXMiLCJuYW1lIjoiRGVsZXRlUDZEZW1vVHJhbnNhY3Rpb25zIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiRGVsZXRlUDZEZW1vVHJhbnNhY3Rpb25zXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkRlbGV0ZSBhbGwgcDZfZGVtbyB0cmFuc2FjdGlvbiAtIGF1dG9tYXRpY2FsbHkgY2FsbGVkIHdoZW4gcDZfZGVtbyBhcHBsaWNhdGlvbiBpcyB1bmluc3RhbGxlZFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDMyMCxcInJldmlzaW9uSWRcIjpcIjM4MWIyMTc5MDdmYzFmZmFhZDkxNTk0MjJhMTViNTk3XCIsXCJ0eXBlXCI6XCJVc2VyRGVmaW5lZFwiLFwidXNlclF1ZXJ5VmFsdWVcIjpcImRlbGV0ZVxcbmZyb20gcDZjb3JlLnRyYW5zYWN0aW9uXFxud2hlcmUgZGF0YVR5cGUgPSAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nO1xcblxcbmRlbGV0ZVxcbmZyb20gcDZjb3JlLnRyYW5zYWN0aW9uXFxud2hlcmUgeHBhdGhfZXhpc3RzKCcvV29ya2Zsb3dUYXNrL2ZsaW5rL3ZpZXdbLj1cXFwicDZfZGVtby5UcmFuc2FjdGlvbnNcXFwiXScgLCBjb250ZW50KTtcXG5cIixcImRlZmluZWRQYXJhbWV0ZXJzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1MzkwMzIwfV0sInBsYXRmb3JtNi5ob21lcGFnZXMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmhvbWVwYWdlcyIsIm5hbWUiOiJEZW1vIEhvbWUiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJEZW1vIEhvbWVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVtbyBIb21lXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5Njc5LFwicmV2aXNpb25JZFwiOlwiN2ZmZmFhNjRhNzZjZTBmOWM0YTVkYTBmMjhiNjRjMzlcIixcIm1vZHVsZXNcIjpbe1wiaWRcIjpcInA2X2RlbW8uQ291bnRSRlFzXCIsXCJvcmRlclwiOjAsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9LHtcImlkXCI6XCJwNl9kZW1vLkNvdW50UXVvdGVzXCIsXCJvcmRlclwiOjEsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9LHtcImlkXCI6XCJwNl9kZW1vLkNvdW50QWNjZXB0ZWRQT3NcIixcIm9yZGVyXCI6MixcInR5cGVcIjpcImNvdW50ZXJzXCIsXCJ3aWR0aFwiOlwic21hbGxcIixcImhlaWdodFwiOlwibWVkaXVtXCIsXCJkYXRhXCI6bnVsbH0se1wiaWRcIjpcInA2X2RlbW8uQ291bnRSZWplY3RlZFBPc1wiLFwib3JkZXJcIjozLFwidHlwZVwiOlwiY291bnRlcnNcIixcIndpZHRoXCI6XCJzbWFsbFwiLFwiaGVpZ2h0XCI6XCJtZWRpdW1cIixcImRhdGFcIjpudWxsfV19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1Mzg5Njc5fV19", "version": "1.0.2", "installed": false, "signature": "IojW3spgBgfvY2Yx+7Hn7FOE3cvTR9L8C8q6/IuUnr6j4ISXHER8zmuVOoqavADZpEZ5831B/tJbXqiAIJIZIj3j+39moY6je3Ms60pQ0er9cqk4HFvG89rBsELesyF9afvSq6PVcDNxHXD5BeCKI1fYSWIw/tEuUrTe91EgfkE=", "createDate": 1585155431448, "expiryDays": 0, "revisionId": "705d895f9aea5e3650a38ff6745c2000", "contentMode": "READ", "description": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "publisherId": "4d8c4ac1-9db1-44d9-8d4e-604a845478e9", "appProperties": {}, "publisherName": "Platform 6", "lastModifiedBy": "choucri.fahed@amalto.com", "applicationName": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "componentBundle": null, "installationDate": null, "lastModifiedDate": 1585157960098, "underDevelopment": false, "uninstallScriptId": "UninstallApplication", "maxInstanceVersion": "", "minInstanceVersion": "6.0.2", "preInstallScriptId": "PreInstallApplication", "postInstallScriptId": "PostInstallApplication"} \N 1585157960122 \. @@ -707,6 +735,41 @@ CREATE INDEX item_idx01 ON p6core.transaction USING btree (datapartition); CREATE INDEX item_idx02 ON p6core.transaction USING btree (datatype); +-- +-- Name: item_mi_fts_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx01 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx02 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/CreationDate//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx03 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx04 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx05; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx05 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + -- -- Name: item_mi_idx01; Type: INDEX; Schema: p6core; Owner: b2box -- @@ -770,6 +833,34 @@ CREATE INDEX item_ti_fts_idx04 ON p6core.transaction USING gist (to_tsvector('en CREATE INDEX item_ti_fts_idx05 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/TransactionInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))) WHERE ((datatype)::text = 'TransactionInfo'::text); +-- +-- Name: item_ti_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_idx01 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/TransactionInfo/CreationDate//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_idx02 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/TransactionInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_idx03 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/TransactionInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_idx04 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/TransactionInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + -- -- Name: log_datatype_idx; Type: INDEX; Schema: p6core; Owner: b2box -- @@ -820,8 +911,8 @@ GRANT ALL ON DATABASE b2box TO b2box; -- PostgreSQL database dump -- --- Dumped from database version 11.3 --- Dumped by pg_dump version 11.3 +-- Dumped from database version 11.7 +-- Dumped by pg_dump version 11.7 SET statement_timeout = 0; SET lock_timeout = 0; diff --git a/docker-compose/reference/latest/p6core.data/conf/application.conf b/docker-compose/reference/latest/p6core.data/conf/application.conf new file mode 100644 index 0000000..ffa92f0 --- /dev/null +++ b/docker-compose/reference/latest/p6core.data/conf/application.conf @@ -0,0 +1,14 @@ +instance.id: ${?p6core_instance_id} + +p6auth { + + client { + id: ${?p6auth_client_id} + secret: ${?p6auth_client_secret} + } + +} + +p6 { + # Add any p6 specific configuration here... +} diff --git a/docker-compose/reference/latest/p6core.data/lib/.marker b/docker-compose/reference/latest/p6core.data/lib/.marker new file mode 100644 index 0000000..1059e25 --- /dev/null +++ b/docker-compose/reference/latest/p6core.data/lib/.marker @@ -0,0 +1 @@ +Marker file to ensure folder is tracked in git \ No newline at end of file diff --git a/docker-compose/reference/latest/p6core.data/logs/p6core.log b/docker-compose/reference/latest/p6core.data/logs/p6core.log new file mode 100644 index 0000000..1059e25 --- /dev/null +++ b/docker-compose/reference/latest/p6core.data/logs/p6core.log @@ -0,0 +1 @@ +Marker file to ensure folder is tracked in git \ No newline at end of file diff --git a/docker-compose/reference/latest/p6core.data/resources/certificates/readme.txt b/docker-compose/reference/latest/p6core.data/resources/certificates/readme.txt new file mode 100644 index 0000000..dccb670 --- /dev/null +++ b/docker-compose/reference/latest/p6core.data/resources/certificates/readme.txt @@ -0,0 +1 @@ +Note: PKI certificate files should be stored in this folder. diff --git a/docker-compose/reference/latest/p6core.data/resources/ftpd/conf/users/.marker b/docker-compose/reference/latest/p6core.data/resources/ftpd/conf/users/.marker new file mode 100644 index 0000000..1059e25 --- /dev/null +++ b/docker-compose/reference/latest/p6core.data/resources/ftpd/conf/users/.marker @@ -0,0 +1 @@ +Marker file to ensure folder is tracked in git \ No newline at end of file diff --git a/docker-compose/reference/latest/p6core.data/resources/ftpd/repository/.marker b/docker-compose/reference/latest/p6core.data/resources/ftpd/repository/.marker new file mode 100644 index 0000000..1059e25 --- /dev/null +++ b/docker-compose/reference/latest/p6core.data/resources/ftpd/repository/.marker @@ -0,0 +1 @@ +Marker file to ensure folder is tracked in git \ No newline at end of file diff --git a/docker-compose/reference/latest/p6core.data/resources/schemas/.marker b/docker-compose/reference/latest/p6core.data/resources/schemas/.marker new file mode 100644 index 0000000..1059e25 --- /dev/null +++ b/docker-compose/reference/latest/p6core.data/resources/schemas/.marker @@ -0,0 +1 @@ +Marker file to ensure folder is tracked in git \ No newline at end of file diff --git a/docker-compose/reference/latest/p6core.data/resources/sshd/conf/sftp.hostkey.ser b/docker-compose/reference/latest/p6core.data/resources/sshd/conf/sftp.hostkey.ser new file mode 100644 index 0000000..df8623b Binary files /dev/null and b/docker-compose/reference/latest/p6core.data/resources/sshd/conf/sftp.hostkey.ser differ diff --git a/docker-compose/reference/latest/p6core.data/resources/sshd/repository/.marker b/docker-compose/reference/latest/p6core.data/resources/sshd/repository/.marker new file mode 100644 index 0000000..1059e25 --- /dev/null +++ b/docker-compose/reference/latest/p6core.data/resources/sshd/repository/.marker @@ -0,0 +1 @@ +Marker file to ensure folder is tracked in git \ No newline at end of file diff --git a/docker-compose/reference/latest/p6core.data/resources/templates/.marker b/docker-compose/reference/latest/p6core.data/resources/templates/.marker new file mode 100644 index 0000000..1059e25 --- /dev/null +++ b/docker-compose/reference/latest/p6core.data/resources/templates/.marker @@ -0,0 +1 @@ +Marker file to ensure folder is tracked in git \ No newline at end of file diff --git a/docker-compose/reference/latest/p6core.data/webapps/.marker b/docker-compose/reference/latest/p6core.data/webapps/.marker new file mode 100644 index 0000000..1059e25 --- /dev/null +++ b/docker-compose/reference/latest/p6core.data/webapps/.marker @@ -0,0 +1 @@ +Marker file to ensure folder is tracked in git \ No newline at end of file diff --git a/docker-compose/reference/latest/p6init.sql b/docker-compose/reference/latest/p6init.sql new file mode 100644 index 0000000..0663da4 --- /dev/null +++ b/docker-compose/reference/latest/p6init.sql @@ -0,0 +1,987 @@ +-- +-- PostgreSQL database cluster dump +-- + +SET default_transaction_read_only = off; + +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; + +-- +-- Drop databases (except postgres and template1) +-- + +--DROP DATABASE b2box; + + + + +-- +-- Drop roles +-- + +--DROP ROLE b2box; +--DROP ROLE postgres; + + +-- +-- Roles +-- + +CREATE ROLE b2box; +ALTER ROLE b2box WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'md556e436fe2c6d8a21cdd3d1313b6410e4'; +--CREATE ROLE postgres; +ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS; + + + + + + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 11.7 +-- Dumped by pg_dump version 11.7 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +UPDATE pg_catalog.pg_database SET datistemplate = false WHERE datname = 'template1'; +DROP DATABASE template1; +-- +-- Name: template1; Type: DATABASE; Schema: -; Owner: postgres +-- + +CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; + + +ALTER DATABASE template1 OWNER TO postgres; + +\connect template1 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: DATABASE template1; Type: COMMENT; Schema: -; Owner: postgres +-- + +COMMENT ON DATABASE template1 IS 'default template for new databases'; + + +-- +-- Name: template1; Type: DATABASE PROPERTIES; Schema: -; Owner: postgres +-- + +ALTER DATABASE template1 IS_TEMPLATE = true; + + +\connect template1 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: DATABASE template1; Type: ACL; Schema: -; Owner: postgres +-- + +REVOKE CONNECT,TEMPORARY ON DATABASE template1 FROM PUBLIC; +GRANT CONNECT ON DATABASE template1 TO PUBLIC; + + +-- +-- PostgreSQL database dump complete +-- + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 11.7 +-- Dumped by pg_dump version 11.7 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: b2box; Type: DATABASE; Schema: -; Owner: postgres +-- + +CREATE DATABASE b2box WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; + + +ALTER DATABASE b2box OWNER TO postgres; + +\connect b2box + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: p6core; Type: SCHEMA; Schema: -; Owner: b2box +-- + +CREATE SCHEMA p6core; + + +ALTER SCHEMA p6core OWNER TO b2box; + +-- +-- Name: tablefunc; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS tablefunc WITH SCHEMA public; + + +-- +-- Name: EXTENSION tablefunc; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION tablefunc IS 'functions that manipulate whole tables, including crosstab'; + + +-- +-- Name: itempartitiontype; Type: TYPE; Schema: p6core; Owner: b2box +-- + +CREATE TYPE p6core.itempartitiontype AS ENUM ( + 'LOG', + 'TABLE_DATA', + 'TRANSACTION' +); + + +ALTER TYPE p6core.itempartitiontype OWNER TO b2box; + +-- +-- Name: array_to_string_i(text[], text); Type: FUNCTION; Schema: public; Owner: b2box +-- + +CREATE FUNCTION public.array_to_string_i(texts text[], sep text) RETURNS text + LANGUAGE sql IMMUTABLE STRICT + AS $$ + + + select array_to_string (texts, sep) + + + $$; + + +ALTER FUNCTION public.array_to_string_i(texts text[], sep text) OWNER TO b2box; + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- Name: activeroutingorder; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.activeroutingorder ( + name character varying(512) NOT NULL, + content xml NOT NULL +); + + +ALTER TABLE p6core.activeroutingorder OWNER TO b2box; + +-- +-- Name: completedroutingorder; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.completedroutingorder ( + name character varying(512) NOT NULL, + content xml NOT NULL +); + + +ALTER TABLE p6core.completedroutingorder OWNER TO b2box; + +-- +-- Name: failedroutingorder; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.failedroutingorder ( + name character varying(512) NOT NULL, + content xml NOT NULL +); + + +ALTER TABLE p6core.failedroutingorder OWNER TO b2box; + +-- +-- Name: flyway_schema_history; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.flyway_schema_history ( + installed_rank integer NOT NULL, + version character varying(50), + description character varying(200) NOT NULL, + type character varying(20) NOT NULL, + script character varying(1000) NOT NULL, + checksum integer, + installed_by character varying(100) NOT NULL, + installed_on timestamp without time zone DEFAULT now() NOT NULL, + execution_time integer NOT NULL, + success boolean NOT NULL +); + + +ALTER TABLE p6core.flyway_schema_history OWNER TO b2box; + +-- +-- Name: instancedata; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.instancedata ( + application character varying(512) NOT NULL, + service character varying(512) NOT NULL, + type character varying(512) NOT NULL, + content jsonb NOT NULL +); + + +ALTER TABLE p6core.instancedata OWNER TO b2box; + +-- +-- Name: item; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.item ( + datapartition p6core.itempartitiontype NOT NULL, + datatype character varying(64) NOT NULL, + iid1 character varying(256) NOT NULL, + iid2 character varying(96) NOT NULL, + iid3 character varying(96) NOT NULL, + iid4 character varying(96) NOT NULL, + content xml NOT NULL, + inserttime bigint +) +PARTITION BY LIST (datapartition); + + +ALTER TABLE p6core.item OWNER TO b2box; + +-- +-- Name: log; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.log ( + datapartition p6core.itempartitiontype NOT NULL, + datatype character varying(64) NOT NULL, + iid1 character varying(256) NOT NULL, + iid2 character varying(96) NOT NULL, + iid3 character varying(96) NOT NULL, + iid4 character varying(96) NOT NULL, + content xml NOT NULL, + inserttime bigint +); +ALTER TABLE ONLY p6core.item ATTACH PARTITION p6core.log FOR VALUES IN ('LOG'); + + +ALTER TABLE p6core.log OWNER TO b2box; + +-- +-- Name: rawbytes; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.rawbytes ( + id1 character varying(96) NOT NULL, + id2 character varying(96) NOT NULL, + content bytea NOT NULL, + inserttime bigint +); + + +ALTER TABLE p6core.rawbytes OWNER TO b2box; + +-- +-- Name: serviceconfig; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.serviceconfig ( + id1 character varying(512) NOT NULL, + id2 character varying(256) NOT NULL, + id3 character varying(256) NOT NULL, + content jsonb NOT NULL, + bytes bytea, + inserttime bigint +); + + +ALTER TABLE p6core.serviceconfig OWNER TO b2box; + +-- +-- Name: table_data; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.table_data ( + datapartition p6core.itempartitiontype NOT NULL, + datatype character varying(64) NOT NULL, + iid1 character varying(256) NOT NULL, + iid2 character varying(96) NOT NULL, + iid3 character varying(96) NOT NULL, + iid4 character varying(96) NOT NULL, + content xml NOT NULL, + inserttime bigint +); +ALTER TABLE ONLY p6core.item ATTACH PARTITION p6core.table_data FOR VALUES IN ('TABLE_DATA'); + + +ALTER TABLE p6core.table_data OWNER TO b2box; + +-- +-- Name: transaction; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.transaction ( + datapartition p6core.itempartitiontype NOT NULL, + datatype character varying(64) NOT NULL, + iid1 character varying(256) NOT NULL, + iid2 character varying(96) NOT NULL, + iid3 character varying(96) NOT NULL, + iid4 character varying(96) NOT NULL, + content xml NOT NULL, + inserttime bigint +); +ALTER TABLE ONLY p6core.item ATTACH PARTITION p6core.transaction FOR VALUES IN ('TRANSACTION'); + + +ALTER TABLE p6core.transaction OWNER TO b2box; + +-- +-- Data for Name: activeroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.activeroutingorder (name, content) FROM stdin; +\. + + +-- +-- Data for Name: completedroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.completedroutingorder (name, content) FROM stdin; +\. + + +-- +-- Data for Name: failedroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.failedroutingorder (name, content) FROM stdin; +\. + + +-- +-- Data for Name: flyway_schema_history; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.flyway_schema_history (installed_rank, version, description, type, script, checksum, installed_by, installed_on, execution_time, success) FROM stdin; +1 1 << Flyway Baseline >> BASELINE << Flyway Baseline >> \N b2box 2019-07-09 16:56:52.327831 0 t +2 2 B2BOX5-1833 Rename schema SQL V2__B2BOX5-1833_Rename_schema.sql -1383918368 b2box 2019-07-09 16:56:52.555483 81 t +3 3 B2BOX5-1757 Remove old tables SQL V3__B2BOX5-1757_Remove_old_tables.sql -877196747 b2box 2019-07-09 16:56:52.69576 76 t +4 4 B2BOX5-1797 Rename transaction dataType SQL V4__B2BOX5-1797_Rename_transaction_dataType.sql -1502122155 b2box 2019-07-09 16:56:52.976214 101 t +5 5 B2BOX5-1832 Remove iid-columns from item table SQL V5__B2BOX5-1832_Remove_iid-columns_from_item_table.sql 2108340418 b2box 2019-07-09 16:56:53.098325 26 t +6 6 B2BOX5-1832 Rename cluster column from item table SQL V6__B2BOX5-1832_Rename_cluster_column_from_item_table.sql -828191573 b2box 2019-07-09 16:56:53.153305 970 t +7 7 B2BOX5-1832 Rename concept column from item table SQL V7__B2BOX5-1832_Rename_concept_column_from_item_table.sql 938934585 b2box 2019-07-09 16:56:54.436847 45 t +8 8 B2BOX5-1832 Remove universPK from routingorder tables content SQL V8__B2BOX5-1832_Remove_universPK_from_routingorder_tables_content.sql -1348765445 b2box 2019-07-09 16:56:54.5331 277 t +9 9 B2BOX5-1832 Fix routingorder tables content SQL V9__B2BOX5-1832_Fix_routingorder_tables_content.sql -2075348165 b2box 2019-07-09 16:56:54.8256 38 t +10 10 B2BOX5-1832 Fix routingorder tables content adapter SQL V10__B2BOX5-1832_Fix_routingorder_tables_content_adapter.sql -1495442787 b2box 2019-07-09 16:56:54.892106 77 t +11 11 B2BOX5-1845 Table item partition SQL V11__B2BOX5-1845_Table_item_partition.sql -1362038486 b2box 2019-07-09 16:56:54.99719 417 t +12 12 B2BOX-1852 Fix transaction content for WFWorkItem SQL V12__B2BOX-1852_Fix_transaction_content_for_WFWorkItem.sql -257561398 b2box 2019-07-09 16:56:55.457054 72 t +13 13 B2BOX5-1540 Rename WFWorkItem to WorkflowTask SQL V13__B2BOX5-1540_Rename_WFWorkItem_to_WorkflowTask.sql 1974853329 b2box 2019-07-09 16:56:55.568073 29 t +14 13.1 B2BOX5-1540 Rename WFWorkItem to WorkflowTask in views SQL V13_1__B2BOX5-1540_Rename_WFWorkItem_to_WorkflowTask_in_views.sql 142754584 b2box 2019-07-09 16:56:55.631853 31 t +15 14 B2BOX5-1839 Simplify counter view SQL V14__B2BOX5-1839_Simplify_counter_view.sql 2110665982 b2box 2019-07-09 16:56:55.687712 35 t +16 15 B2BOX5-1901 Add indexes SQL V15__B2BOX5-1901_Add_indexes.sql -1607078097 b2box 2019-07-12 12:36:31.128033 66 t +17 16 B2BOX5-1928 Remove meta table SQL V16__B2BOX5-1928_Remove_meta_table.sql -1060199810 b2box 2019-09-19 14:45:47.956626 67 t +19 18 B2BOX5-1937 Exception migration SQL V18__B2BOX5-1937_Exception_migration.sql 1562596096 b2box 2019-09-19 14:45:48.204782 13 t +20 19 B2BOX5-1929 Remove application min-max version SQL V19__B2BOX5-1929_Remove_application_min-max_version.sql -656397094 b2box 2019-09-19 14:45:48.230868 147 t +18 17 B2BOX5-1914 DSL migration SQL V17__B2BOX5-1914_DSL_migration.sql 1644579705 b2box 2019-09-19 14:45:48.067897 117 t +21 20 B2BOX5-1822 DSL remove deprecated SQL V20__B2BOX5-1822_DSL_remove_deprecated.sql -1538317084 b2box 2019-09-19 14:45:48.395351 9 t +22 21 B2BOX5-1874 Remove TS Resource type for script SQL V21__B2BOX5-1874_Remove_TS_Resource_type_for_script.sql -1806590714 b2box 2019-10-21 17:02:03.381198 23 t +23 23 B2BOX5-1705 DSL migration SQL V23__B2BOX5-1705_DSL_migration.sql 1366299083 b2box 2019-10-21 17:02:03.430765 6 t +24 24 B2BOX5-1995 Remove Autoloaded datamodel SQL V24__B2BOX5-1995_Remove_Autoloaded_datamodel.sql -478008942 b2box 2019-10-21 17:02:03.45305 4 t +25 25 B2BOX5-2004 Item should be enabled by default SQL V25__B2BOX5-2004_Item_should_be_enabled_by_default.sql 1455541446 b2box 2019-10-21 17:02:03.468839 128 t +26 26 B2BOX5-2002 Migrate Script DSL SQL V26__B2BOX5-2002_Migrate_Script_DSL.sql -1600785459 b2box 2019-10-21 17:02:03.615834 8 t +27 27 B2BOX5-2008 Migrate Script Items SQL V27__B2BOX5-2008_Migrate_Script_Items.sql 122384951 b2box 2019-10-21 17:02:03.634207 5 t +28 28 B2BOX5-2016 Migrate Variable Names SQL V28__B2BOX5-2016_Migrate_Variable_Names.sql -548187125 b2box 2020-01-10 11:43:55.194265 39 t +29 29 B2BOX5-2052-Remove enabled attribute SQL V29__B2BOX5-2052-Remove_enabled_attribute.sql -278415559 b2box 2020-01-10 11:43:55.26231 183 t +30 30 B2BOX5-2059 Remove p6rest registration SQL V30__B2BOX5-2059_Remove_p6rest_registration.sql 1031885722 b2box 2020-01-10 11:43:55.526183 8 t +31 31 B2BOX5-2048 Create instancedata table SQL V31__B2BOX5-2048_Create_instancedata_table.sql -2118184683 b2box 2020-02-20 18:14:02.649568 31 t +32 32 B2BOX5-2100 Simplify table field SQL V32__B2BOX5-2100_Simplify_table_field.sql 1117258956 b2box 2020-02-20 18:14:02.696593 5 t +33 33 P6CORE-28 TransactionMessage xpath indexes SQL V33__P6CORE-28_TransactionMessage_xpath_indexes.sql 453706835 b2box 2020-03-25 17:30:36.086775 37 t +34 34 P6CORE-216 Remove unused datasource attributes SQL V34__P6CORE-216_Remove_unused_datasource_attributes.sql -1034506901 b2box 2020-03-25 17:30:36.136025 3 t +\. + + +-- +-- Data for Name: instancedata; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.instancedata (application, service, type, content) FROM stdin; +\. + + +-- +-- Data for Name: log; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.log (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; +\. + + +-- +-- Data for Name: rawbytes; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.rawbytes (id1, id2, content, inserttime) FROM stdin; +\. + + +-- +-- Data for Name: serviceconfig; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.serviceconfig (id1, id2, id3, content, bytes, inserttime) FROM stdin; +Default email {"name": "Default", "type": "JAVAMAIL", "appKey": "", "revisionId": "edf7ea27e3c35e3c0071e669e34d1d98", "contentMode": "NONE", "description": {"EN": "Default email profile"}, "defaultProfile": true, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548169368257, "configurationProperties": {}} \N 1548169368271 +Logging Event views {"name": "Logging Event", "type": "TRANSACTIONS", "appKey": "", "xmlView": "\\n \\n logging_event\\n \\n LOG\\n \\n \\n \\n ID\\n \\n Id\\n Identifiant\\n \\n logging_event/id\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n RangeOfDates(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n StringContains\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n StringContains\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n StringContains\\n \\n \\n AnyField\\n \\n Contains the words\\n Contient les mots\\n \\n logging_event\\n StringContains\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n Date(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n String\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n String\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n String\\n \\n \\n Level\\n \\n Level\\n Level\\n \\n logging_event/level\\n String\\n \\n \\n\\n", "revisionId": "efe8acc7d4f399db36d7f501f3487c9c", "contentMode": "NONE", "description": {"EN": "Logging Event", "FR": "Evènement de log"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548267162338} \N 1548267162347 +_logging_event datamodels {"name": "_logging_event", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n", "revisionId": "92330d48ae06ac2623bca161872d6cf0", "contentMode": "NONE", "description": {"EN": " Logging events (formerly named .logging_event)"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1538389926868} \N 1538389926969 +\. + + +-- +-- Data for Name: table_data; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.table_data (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; +\. + + +-- +-- Data for Name: transaction; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.transaction (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; +\. + + +-- +-- Name: activeroutingorder activeroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.activeroutingorder + ADD CONSTRAINT activeroutingorder_pkey PRIMARY KEY (name); + + +-- +-- Name: completedroutingorder completedroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.completedroutingorder + ADD CONSTRAINT completedroutingorder_pkey PRIMARY KEY (name); + + +-- +-- Name: failedroutingorder failedroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.failedroutingorder + ADD CONSTRAINT failedroutingorder_pkey PRIMARY KEY (name); + + +-- +-- Name: flyway_schema_history flyway_schema_history_pk; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.flyway_schema_history + ADD CONSTRAINT flyway_schema_history_pk PRIMARY KEY (installed_rank); + + +-- +-- Name: instancedata instance_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.instancedata + ADD CONSTRAINT instance_pkey PRIMARY KEY (application, service, type); + + +-- +-- Name: transaction item_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.transaction + ADD CONSTRAINT item_pkey PRIMARY KEY (datapartition, datatype, iid1, iid2, iid3, iid4); + + +-- +-- Name: rawbytes rawbytes_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.rawbytes + ADD CONSTRAINT rawbytes_pkey PRIMARY KEY (id1, id2); + + +-- +-- Name: serviceconfig serviceconfig_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.serviceconfig + ADD CONSTRAINT serviceconfig_pkey PRIMARY KEY (id1, id2, id3) WITH (fillfactor='100'); + + +-- +-- Name: aro_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx01 ON p6core.activeroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeScheduled//text()'::text, content))::text[], ' '::text))::bigint)); + + +-- +-- Name: aro_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx02 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: aro_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx03 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: aro_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx04 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: aro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx_itempk_datapartition ON p6core.activeroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); + + +-- +-- Name: cro_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx01 ON p6core.completedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeLastRunCompleted//text()'::text, content))::text[], ' '::text))::bigint)); + + +-- +-- Name: cro_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx02 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: cro_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx03 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: cro_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx04 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: cro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx_itempk_datapartition ON p6core.completedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); + + +-- +-- Name: flyway_schema_history_s_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX flyway_schema_history_s_idx ON p6core.flyway_schema_history USING btree (success); + + +-- +-- Name: fro_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx01 ON p6core.failedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeLastRunCompleted//text()'::text, content))::text[], ' '::text))::bigint)); + + +-- +-- Name: fro_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx02 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: fro_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx03 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: fro_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx04 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: fro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx_itempk_datapartition ON p6core.failedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); + + +-- +-- Name: fts_aro_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fts_aro_idx ON p6core.activeroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); + + +-- +-- Name: fts_cro_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fts_cro_idx ON p6core.completedroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); + + +-- +-- Name: fts_fro_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fts_fro_idx ON p6core.failedroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); + + +-- +-- Name: instance_idx_application_type; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX instance_idx_application_type ON p6core.instancedata USING btree (application, type); + + +-- +-- Name: instance_idx_content; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX instance_idx_content ON p6core.instancedata USING btree (content); + + +-- +-- Name: item_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_idx01 ON p6core.transaction USING btree (datapartition); + + +-- +-- Name: item_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_idx02 ON p6core.transaction USING btree (datatype); + + +-- +-- Name: item_mi_fts_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx01 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx02 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/CreationDate//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx03 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx04 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx05; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx05 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_idx01 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/CreationDate//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_idx02 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_idx03 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_idx04 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_ti_fts_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_fts_idx01 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/TransactionInfo//text()'::text, content))::text[], ' '::text))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_fts_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_fts_idx02 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/TransactionInfo/CreationDate//text()'::text, content))::text[], ' '::text))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_fts_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_fts_idx03 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/TransactionInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_fts_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_fts_idx04 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/TransactionInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_fts_idx05; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_fts_idx05 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/TransactionInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_idx01 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/TransactionInfo/CreationDate//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_idx02 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/TransactionInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_idx03 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/TransactionInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_idx04 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/TransactionInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: log_datatype_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX log_datatype_idx ON p6core.log USING btree (datatype); + + +-- +-- Name: sconfigjson_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX sconfigjson_idx01 ON p6core.serviceconfig USING gin (content jsonb_path_ops); + + +-- +-- Name: table_data_datatype_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX table_data_datatype_idx ON p6core.table_data USING btree (datatype); + + +-- +-- Name: xrocswyd3g5rejujxo; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX xrocswyd3g5rejujxo ON p6core.table_data USING btree (public.array_to_string_i((xpath('/DUNS_Internal/DUNSNumber//text()'::text, content))::text[], ' '::text)) WHERE ((datapartition = 'TABLE_DATA'::p6core.itempartitiontype) AND ((datatype)::text = 'DUNS_Internal'::text)); + + +-- +-- Name: xrvlaoi4elt5bbntlz; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX xrvlaoi4elt5bbntlz ON p6core.table_data USING btree (public.array_to_string_i((xpath('/DUNS_Customers/DUNSNumber//text()'::text, content))::text[], ' '::text)) WHERE ((datapartition = 'TABLE_DATA'::p6core.itempartitiontype) AND ((datatype)::text = 'DUNS_Customers'::text)); + + +-- +-- Name: DATABASE b2box; Type: ACL; Schema: -; Owner: postgres +-- + +GRANT ALL ON DATABASE b2box TO b2box; + + +-- +-- PostgreSQL database dump complete +-- + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 11.7 +-- Dumped by pg_dump version 11.7 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +DROP DATABASE postgres; +-- +-- Name: postgres; Type: DATABASE; Schema: -; Owner: postgres +-- + +CREATE DATABASE postgres WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; + + +ALTER DATABASE postgres OWNER TO postgres; + +\connect postgres + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: DATABASE postgres; Type: COMMENT; Schema: -; Owner: postgres +-- + +COMMENT ON DATABASE postgres IS 'default administrative connection database'; + + +-- +-- Name: b2head; Type: SCHEMA; Schema: -; Owner: postgres +-- + +CREATE SCHEMA b2head; + + +ALTER SCHEMA b2head OWNER TO postgres; + +-- +-- Name: tablefunc; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS tablefunc WITH SCHEMA public; + + +-- +-- Name: EXTENSION tablefunc; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION tablefunc IS 'functions that manipulate whole tables, including crosstab'; + + +-- +-- PostgreSQL database dump complete +-- + +-- +-- PostgreSQL database cluster dump complete +-- + diff --git a/docker-compose/reference/latest/p6init_with_demoapp.sql b/docker-compose/reference/latest/p6init_with_demoapp.sql new file mode 100644 index 0000000..e83451b --- /dev/null +++ b/docker-compose/reference/latest/p6init_with_demoapp.sql @@ -0,0 +1,988 @@ +-- +-- PostgreSQL database cluster dump +-- + +SET default_transaction_read_only = off; + +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; + +-- +-- Drop databases (except postgres and template1) +-- + +--DROP DATABASE b2box; + + + + +-- +-- Drop roles +-- + +--DROP ROLE b2box; +--DROP ROLE postgres; + + +-- +-- Roles +-- + +CREATE ROLE b2box; +ALTER ROLE b2box WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'md556e436fe2c6d8a21cdd3d1313b6410e4'; +--CREATE ROLE postgres; +ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS; + + + + + + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 11.7 +-- Dumped by pg_dump version 11.7 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +UPDATE pg_catalog.pg_database SET datistemplate = false WHERE datname = 'template1'; +DROP DATABASE template1; +-- +-- Name: template1; Type: DATABASE; Schema: -; Owner: postgres +-- + +CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; + + +ALTER DATABASE template1 OWNER TO postgres; + +\connect template1 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: DATABASE template1; Type: COMMENT; Schema: -; Owner: postgres +-- + +COMMENT ON DATABASE template1 IS 'default template for new databases'; + + +-- +-- Name: template1; Type: DATABASE PROPERTIES; Schema: -; Owner: postgres +-- + +ALTER DATABASE template1 IS_TEMPLATE = true; + + +\connect template1 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: DATABASE template1; Type: ACL; Schema: -; Owner: postgres +-- + +REVOKE CONNECT,TEMPORARY ON DATABASE template1 FROM PUBLIC; +GRANT CONNECT ON DATABASE template1 TO PUBLIC; + + +-- +-- PostgreSQL database dump complete +-- + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 11.7 +-- Dumped by pg_dump version 11.7 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: b2box; Type: DATABASE; Schema: -; Owner: postgres +-- + +CREATE DATABASE b2box WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; + + +ALTER DATABASE b2box OWNER TO postgres; + +\connect b2box + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: p6core; Type: SCHEMA; Schema: -; Owner: b2box +-- + +CREATE SCHEMA p6core; + + +ALTER SCHEMA p6core OWNER TO b2box; + +-- +-- Name: tablefunc; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS tablefunc WITH SCHEMA public; + + +-- +-- Name: EXTENSION tablefunc; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION tablefunc IS 'functions that manipulate whole tables, including crosstab'; + + +-- +-- Name: itempartitiontype; Type: TYPE; Schema: p6core; Owner: b2box +-- + +CREATE TYPE p6core.itempartitiontype AS ENUM ( + 'LOG', + 'TABLE_DATA', + 'TRANSACTION' +); + + +ALTER TYPE p6core.itempartitiontype OWNER TO b2box; + +-- +-- Name: array_to_string_i(text[], text); Type: FUNCTION; Schema: public; Owner: b2box +-- + +CREATE FUNCTION public.array_to_string_i(texts text[], sep text) RETURNS text + LANGUAGE sql IMMUTABLE STRICT + AS $$ + + + select array_to_string (texts, sep) + + + $$; + + +ALTER FUNCTION public.array_to_string_i(texts text[], sep text) OWNER TO b2box; + +SET default_tablespace = ''; + +SET default_with_oids = false; + +-- +-- Name: activeroutingorder; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.activeroutingorder ( + name character varying(512) NOT NULL, + content xml NOT NULL +); + + +ALTER TABLE p6core.activeroutingorder OWNER TO b2box; + +-- +-- Name: completedroutingorder; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.completedroutingorder ( + name character varying(512) NOT NULL, + content xml NOT NULL +); + + +ALTER TABLE p6core.completedroutingorder OWNER TO b2box; + +-- +-- Name: failedroutingorder; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.failedroutingorder ( + name character varying(512) NOT NULL, + content xml NOT NULL +); + + +ALTER TABLE p6core.failedroutingorder OWNER TO b2box; + +-- +-- Name: flyway_schema_history; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.flyway_schema_history ( + installed_rank integer NOT NULL, + version character varying(50), + description character varying(200) NOT NULL, + type character varying(20) NOT NULL, + script character varying(1000) NOT NULL, + checksum integer, + installed_by character varying(100) NOT NULL, + installed_on timestamp without time zone DEFAULT now() NOT NULL, + execution_time integer NOT NULL, + success boolean NOT NULL +); + + +ALTER TABLE p6core.flyway_schema_history OWNER TO b2box; + +-- +-- Name: instancedata; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.instancedata ( + application character varying(512) NOT NULL, + service character varying(512) NOT NULL, + type character varying(512) NOT NULL, + content jsonb NOT NULL +); + + +ALTER TABLE p6core.instancedata OWNER TO b2box; + +-- +-- Name: item; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.item ( + datapartition p6core.itempartitiontype NOT NULL, + datatype character varying(64) NOT NULL, + iid1 character varying(256) NOT NULL, + iid2 character varying(96) NOT NULL, + iid3 character varying(96) NOT NULL, + iid4 character varying(96) NOT NULL, + content xml NOT NULL, + inserttime bigint +) +PARTITION BY LIST (datapartition); + + +ALTER TABLE p6core.item OWNER TO b2box; + +-- +-- Name: log; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.log ( + datapartition p6core.itempartitiontype NOT NULL, + datatype character varying(64) NOT NULL, + iid1 character varying(256) NOT NULL, + iid2 character varying(96) NOT NULL, + iid3 character varying(96) NOT NULL, + iid4 character varying(96) NOT NULL, + content xml NOT NULL, + inserttime bigint +); +ALTER TABLE ONLY p6core.item ATTACH PARTITION p6core.log FOR VALUES IN ('LOG'); + + +ALTER TABLE p6core.log OWNER TO b2box; + +-- +-- Name: rawbytes; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.rawbytes ( + id1 character varying(96) NOT NULL, + id2 character varying(96) NOT NULL, + content bytea NOT NULL, + inserttime bigint +); + + +ALTER TABLE p6core.rawbytes OWNER TO b2box; + +-- +-- Name: serviceconfig; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.serviceconfig ( + id1 character varying(512) NOT NULL, + id2 character varying(256) NOT NULL, + id3 character varying(256) NOT NULL, + content jsonb NOT NULL, + bytes bytea, + inserttime bigint +); + + +ALTER TABLE p6core.serviceconfig OWNER TO b2box; + +-- +-- Name: table_data; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.table_data ( + datapartition p6core.itempartitiontype NOT NULL, + datatype character varying(64) NOT NULL, + iid1 character varying(256) NOT NULL, + iid2 character varying(96) NOT NULL, + iid3 character varying(96) NOT NULL, + iid4 character varying(96) NOT NULL, + content xml NOT NULL, + inserttime bigint +); +ALTER TABLE ONLY p6core.item ATTACH PARTITION p6core.table_data FOR VALUES IN ('TABLE_DATA'); + + +ALTER TABLE p6core.table_data OWNER TO b2box; + +-- +-- Name: transaction; Type: TABLE; Schema: p6core; Owner: b2box +-- + +CREATE TABLE p6core.transaction ( + datapartition p6core.itempartitiontype NOT NULL, + datatype character varying(64) NOT NULL, + iid1 character varying(256) NOT NULL, + iid2 character varying(96) NOT NULL, + iid3 character varying(96) NOT NULL, + iid4 character varying(96) NOT NULL, + content xml NOT NULL, + inserttime bigint +); +ALTER TABLE ONLY p6core.item ATTACH PARTITION p6core.transaction FOR VALUES IN ('TRANSACTION'); + + +ALTER TABLE p6core.transaction OWNER TO b2box; + +-- +-- Data for Name: activeroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.activeroutingorder (name, content) FROM stdin; +\. + + +-- +-- Data for Name: completedroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.completedroutingorder (name, content) FROM stdin; +\. + + +-- +-- Data for Name: failedroutingorder; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.failedroutingorder (name, content) FROM stdin; +\. + + +-- +-- Data for Name: flyway_schema_history; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.flyway_schema_history (installed_rank, version, description, type, script, checksum, installed_by, installed_on, execution_time, success) FROM stdin; +1 1 << Flyway Baseline >> BASELINE << Flyway Baseline >> \N b2box 2019-07-09 16:56:52.327831 0 t +2 2 B2BOX5-1833 Rename schema SQL V2__B2BOX5-1833_Rename_schema.sql -1383918368 b2box 2019-07-09 16:56:52.555483 81 t +3 3 B2BOX5-1757 Remove old tables SQL V3__B2BOX5-1757_Remove_old_tables.sql -877196747 b2box 2019-07-09 16:56:52.69576 76 t +4 4 B2BOX5-1797 Rename transaction dataType SQL V4__B2BOX5-1797_Rename_transaction_dataType.sql -1502122155 b2box 2019-07-09 16:56:52.976214 101 t +5 5 B2BOX5-1832 Remove iid-columns from item table SQL V5__B2BOX5-1832_Remove_iid-columns_from_item_table.sql 2108340418 b2box 2019-07-09 16:56:53.098325 26 t +6 6 B2BOX5-1832 Rename cluster column from item table SQL V6__B2BOX5-1832_Rename_cluster_column_from_item_table.sql -828191573 b2box 2019-07-09 16:56:53.153305 970 t +7 7 B2BOX5-1832 Rename concept column from item table SQL V7__B2BOX5-1832_Rename_concept_column_from_item_table.sql 938934585 b2box 2019-07-09 16:56:54.436847 45 t +8 8 B2BOX5-1832 Remove universPK from routingorder tables content SQL V8__B2BOX5-1832_Remove_universPK_from_routingorder_tables_content.sql -1348765445 b2box 2019-07-09 16:56:54.5331 277 t +9 9 B2BOX5-1832 Fix routingorder tables content SQL V9__B2BOX5-1832_Fix_routingorder_tables_content.sql -2075348165 b2box 2019-07-09 16:56:54.8256 38 t +10 10 B2BOX5-1832 Fix routingorder tables content adapter SQL V10__B2BOX5-1832_Fix_routingorder_tables_content_adapter.sql -1495442787 b2box 2019-07-09 16:56:54.892106 77 t +11 11 B2BOX5-1845 Table item partition SQL V11__B2BOX5-1845_Table_item_partition.sql -1362038486 b2box 2019-07-09 16:56:54.99719 417 t +12 12 B2BOX-1852 Fix transaction content for WFWorkItem SQL V12__B2BOX-1852_Fix_transaction_content_for_WFWorkItem.sql -257561398 b2box 2019-07-09 16:56:55.457054 72 t +13 13 B2BOX5-1540 Rename WFWorkItem to WorkflowTask SQL V13__B2BOX5-1540_Rename_WFWorkItem_to_WorkflowTask.sql 1974853329 b2box 2019-07-09 16:56:55.568073 29 t +14 13.1 B2BOX5-1540 Rename WFWorkItem to WorkflowTask in views SQL V13_1__B2BOX5-1540_Rename_WFWorkItem_to_WorkflowTask_in_views.sql 142754584 b2box 2019-07-09 16:56:55.631853 31 t +15 14 B2BOX5-1839 Simplify counter view SQL V14__B2BOX5-1839_Simplify_counter_view.sql 2110665982 b2box 2019-07-09 16:56:55.687712 35 t +16 15 B2BOX5-1901 Add indexes SQL V15__B2BOX5-1901_Add_indexes.sql -1607078097 b2box 2019-07-12 12:36:31.128033 66 t +17 16 B2BOX5-1928 Remove meta table SQL V16__B2BOX5-1928_Remove_meta_table.sql -1060199810 b2box 2019-09-19 14:45:47.956626 67 t +19 18 B2BOX5-1937 Exception migration SQL V18__B2BOX5-1937_Exception_migration.sql 1562596096 b2box 2019-09-19 14:45:48.204782 13 t +20 19 B2BOX5-1929 Remove application min-max version SQL V19__B2BOX5-1929_Remove_application_min-max_version.sql -656397094 b2box 2019-09-19 14:45:48.230868 147 t +18 17 B2BOX5-1914 DSL migration SQL V17__B2BOX5-1914_DSL_migration.sql 1644579705 b2box 2019-09-19 14:45:48.067897 117 t +21 20 B2BOX5-1822 DSL remove deprecated SQL V20__B2BOX5-1822_DSL_remove_deprecated.sql -1538317084 b2box 2019-09-19 14:45:48.395351 9 t +22 21 B2BOX5-1874 Remove TS Resource type for script SQL V21__B2BOX5-1874_Remove_TS_Resource_type_for_script.sql -1806590714 b2box 2019-10-21 17:02:03.381198 23 t +23 23 B2BOX5-1705 DSL migration SQL V23__B2BOX5-1705_DSL_migration.sql 1366299083 b2box 2019-10-21 17:02:03.430765 6 t +24 24 B2BOX5-1995 Remove Autoloaded datamodel SQL V24__B2BOX5-1995_Remove_Autoloaded_datamodel.sql -478008942 b2box 2019-10-21 17:02:03.45305 4 t +25 25 B2BOX5-2004 Item should be enabled by default SQL V25__B2BOX5-2004_Item_should_be_enabled_by_default.sql 1455541446 b2box 2019-10-21 17:02:03.468839 128 t +26 26 B2BOX5-2002 Migrate Script DSL SQL V26__B2BOX5-2002_Migrate_Script_DSL.sql -1600785459 b2box 2019-10-21 17:02:03.615834 8 t +27 27 B2BOX5-2008 Migrate Script Items SQL V27__B2BOX5-2008_Migrate_Script_Items.sql 122384951 b2box 2019-10-21 17:02:03.634207 5 t +28 28 B2BOX5-2016 Migrate Variable Names SQL V28__B2BOX5-2016_Migrate_Variable_Names.sql -548187125 b2box 2020-01-10 11:43:55.194265 39 t +29 29 B2BOX5-2052-Remove enabled attribute SQL V29__B2BOX5-2052-Remove_enabled_attribute.sql -278415559 b2box 2020-01-10 11:43:55.26231 183 t +30 30 B2BOX5-2059 Remove p6rest registration SQL V30__B2BOX5-2059_Remove_p6rest_registration.sql 1031885722 b2box 2020-01-10 11:43:55.526183 8 t +31 31 B2BOX5-2048 Create instancedata table SQL V31__B2BOX5-2048_Create_instancedata_table.sql -2118184683 b2box 2020-02-20 18:14:02.649568 31 t +32 32 B2BOX5-2100 Simplify table field SQL V32__B2BOX5-2100_Simplify_table_field.sql 1117258956 b2box 2020-02-20 18:14:02.696593 5 t +33 33 P6CORE-28 TransactionMessage xpath indexes SQL V33__P6CORE-28_TransactionMessage_xpath_indexes.sql 453706835 b2box 2020-03-25 17:30:36.086775 37 t +34 34 P6CORE-216 Remove unused datasource attributes SQL V34__P6CORE-216_Remove_unused_datasource_attributes.sql -1034506901 b2box 2020-03-25 17:30:36.136025 3 t +\. + + +-- +-- Data for Name: instancedata; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.instancedata (application, service, type, content) FROM stdin; +\. + + +-- +-- Data for Name: log; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.log (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; +\. + + +-- +-- Data for Name: rawbytes; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.rawbytes (id1, id2, content, inserttime) FROM stdin; +\. + + +-- +-- Data for Name: serviceconfig; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.serviceconfig (id1, id2, id3, content, bytes, inserttime) FROM stdin; +Default email {"name": "Default", "type": "JAVAMAIL", "appKey": "", "revisionId": "edf7ea27e3c35e3c0071e669e34d1d98", "contentMode": "NONE", "description": {"EN": "Default email profile"}, "defaultProfile": true, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548169368257, "configurationProperties": {}} \N 1548169368271 +Logging Event views {"name": "Logging Event", "type": "TRANSACTIONS", "appKey": "", "xmlView": "\\n \\n logging_event\\n \\n LOG\\n \\n \\n \\n ID\\n \\n Id\\n Identifiant\\n \\n logging_event/id\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n RangeOfDates(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n StringContains\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n StringContains\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n StringContains\\n \\n \\n AnyField\\n \\n Contains the words\\n Contient les mots\\n \\n logging_event\\n StringContains\\n \\n \\n \\n \\n Creation Date\\n \\n Creation Date\\n Date de Création\\n \\n logging_event/time\\n Date(yyyy'-'MM'-'dd' 'HH:mm:ss.S z)\\n \\n \\n ID\\n \\n ID\\n Identifiant\\n \\n logging_event/id\\n String\\n \\n \\n Logger\\n \\n Logger\\n logger\\n \\n logging_event/logger\\n String\\n \\n \\n Message\\n \\n Message\\n Message\\n \\n logging_event/message\\n String\\n \\n \\n Level\\n \\n Level\\n Level\\n \\n logging_event/level\\n String\\n \\n \\n\\n", "revisionId": "efe8acc7d4f399db36d7f501f3487c9c", "contentMode": "NONE", "description": {"EN": "Logging Event", "FR": "Evènement de log"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1548267162338} \N 1548267162347 +_logging_event datamodels {"name": "_logging_event", "appKey": "", "schema": "\\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n\\n\\n", "revisionId": "92330d48ae06ac2623bca161872d6cf0", "contentMode": "NONE", "description": {"EN": " Logging events (formerly named .logging_event)"}, "lastModifiedBy": "admin@amalto.com", "lastModifiedDate": 1538389926868} \N 1538389926969 +bfe0c4bb06704ca9b1f744c017c8a142 p6_demo applications {"logo": "data:image/jpeg;base64,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", "name": "bfe0c4bb06704ca9b1f744c017c8a142", "appKey": "p6_demo", "status": "6.0.2", "content": "eyJwbGF0Zm9ybTYuc2NyaXB0cyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJWaWV3X1dvcmtmbG93IFRhc2tzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVmlld19Xb3JrZmxvdyBUYXNrc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIGh0bWwgZGlzcGxheSBvZiBXb3JrZmxvdyBUYXNrc1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDAwNixcInJldmlzaW9uSWRcIjpcIjc1ZGY1NmE0NjVkMjcyNDY0MjQ4ZmY3ODhiMjFiYWRmXCIsXCJtYWluU2NyaXB0XCI6XCJkZWYgcmVzdWx0cyA9IHA2LnhzbHQucHJvY2VzcyhcXFwiVmlld19Xb3JrbG93IFRhc2tzXFxcIiwgcDYucmVzb3VyY2UuZ2V0KCdXb3JrZmxvd19UYXNrX3RvX0hUTUwnKSwgcDYucGlwZWxpbmUuZ2V0KCAneG1sJykpXFxuXFxucDYucGlwZWxpbmUucHV0ICdwb3J0YWxIdG1sJywgcmVzdWx0cywgJ3RleHQvaHRtbCdcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W3tcIm5hbWVcIjpcIldvcmtmbG93X1Rhc2tfdG9fSFRNTFwiLFwidHlwZVwiOlwiWFNMVFwiLFwiY29udGVudFwiOlwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIiBlbmNvZGluZz1cXFwiVVRGLThcXFwiPz5cXG48eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPVxcXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm1cXFwiIHZlcnNpb249XFxcIjIuMFxcXCI+XFxuICAgIDx4c2w6b3V0cHV0IG1ldGhvZD1cXFwiaHRtbFxcXCIgaW5kZW50PVxcXCJ5ZXNcXFwiIG9taXQteG1sLWRlY2xhcmF0aW9uPVxcXCJ5ZXNcXFwiIC8+XFxuICAgIFxcbiAgICA8eHNsOnRlbXBsYXRlIG1hdGNoPVxcXCIvV29ya2Zsb3dUYXNrXFxcIj5cXG5cXG5cXG5cXHRcXHQ8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmlldy13cmFwcGVyXFxcIj5cXG5cXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgdGV4dC1tZWRpdW1cXFwiIHN0eWxlPVxcXCJtYXJnaW4tYm90dG9tOiA1cHg7XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9XFxcIml0ZW1BdHRyaWJ1dGVzW2tleT0nVHJhbnNhY3Rpb25UeXBlJ10vdmFsdWVzL190ZXh0XFxcIi8+PHhzbDp0ZXh0PiAjIDwveHNsOnRleHQ+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9XFxcIml0ZW1BdHRyaWJ1dGVzW2tleT0nVHJhbnNhY3Rpb25OdW1iZXInXS92YWx1ZXMvX3RleHRcXFwiLz48L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgdGV4dC1tZWRpdW1cXFwiIHN0eWxlPVxcXCJtYXJnaW4tYm90dG9tOiA1cHg7XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+QXNzaWduZWQgdG86PC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XFxcIiNcXFwiIGRhdGEtdG9nZ2xlPVxcXCJtb2RhbFxcXCIgZGF0YS10YXJnZXQ9XFxcIiNhc3NpZ25lZXNEaWFsb2dcXFwiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J0Fzc2lnbmVkVG8nXS92YWx1ZXMvRU5cXFwiLz48L2E+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIFxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1sZy00XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlN0YXR1czwvZGl2PlxcblxcdCAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PVxcXCJpdGVtQXR0cmlidXRlc1trZXk9J1N0YXR1cyddL3ZhbHVlcy9FTlxcXCIvPjwvZGl2PlxcblxcdFxcdFxcdFxcdDwvZGl2PlxcblxcblxcdFxcdFxcdFxcdDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1sZy00XFxcIj5cXG5cXHRcXHRcXHRcXHRcXHQ8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlN0YXJ0IGRhdGU8L2Rpdj5cXG5cXHQgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj48eHNsOnZhbHVlLW9mIHNlbGVjdD1cXFwiaXRlbUF0dHJpYnV0ZXNba2V5PSdTdGFydERhdGUnXS92YWx1ZXMvX3RleHRcXFwiLz48L2Rpdj5cXG5cXHRcXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHRcXHQ8L2Rpdj5cXG5cXHRcXHQ8L2Rpdj5cXG4gICAgICAgIFxcbiAgICAgICAgPGRpdiBpZD1cXFwiYXNzaWduZWVzRGlhbG9nXFxcIiBjbGFzcz1cXFwibW9kYWwgZmFkZVxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtZGlhbG9nXFxcIj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9kYWwtY29udGVudFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb2RhbC1oZWFkZXJcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiY2xvc2VcXFwiIGRhdGEtZGlzbWlzcz1cXFwibW9kYWxcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj4mIzIxNTs8L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVxcXCJtb2RhbC10aXRsZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJyaWdodC1zcGFjZWRcXFwiPkFzc2lnbmVkIHRvOjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9XFxcIml0ZW1BdHRyaWJ1dGVzW2tleT0nQXNzaWduZWRUbyddL3ZhbHVlcy9FTlxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDQ+XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vZGFsLWJvZHlcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cXFwiYmFzaWMtbGlzdCBuby1ib3R0b20tbWFyZ2luXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpmb3ItZWFjaCBzZWxlY3Q9XFxcImFzc2lnbmVlcy9hc3NpZ25lZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGk+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9XFxcIi5cXFwiLz48L2xpPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hzbDpmb3ItZWFjaD5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuXFx0PC94c2w6dGVtcGxhdGU+XFxuXFxuPC94c2w6c3R5bGVzaGVldD5cIixcImJ5dGVDb250ZW50XCI6bnVsbH1dfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM5MDAwNn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlJGUVNtYXJ0Q29udHJhY3RIZWxwZXIiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSRlFTbWFydENvbnRyYWN0SGVscGVyXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlJGUSBTbWFydCBDb250cmFjdCBIZWxwZXJcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzOTAyNDMsXCJyZXZpc2lvbklkXCI6XCJiNzhlOWU0YjBmMWZlODZmZTc3ODYxMmNjOTAzMGI1YVwiLFwibWFpblNjcmlwdFwiOlwiZGVmIGhlbHBlciA9IG5ldyBSRlFTbWFydENvbnRyYWN0SGVscGVyKHRoaXMpXFxuXFxuLy8gVGVzdCBwcm90ZWN0aW5nIHByaXZhdGUga2V5IHdpdGggYSBwYXNzd29yZCBpbiBhIHdhbGxldFxcbmRlZiBwYXNzd29yZCA9IFxcXCJBRHVtbXlQYXNzd29yZFxcXCJcXG5kZWYgcHJpdmF0ZUtleSA9IFxcXCIweGM4NzUwOWExYzA2N2JiZGU3OGJlYjc5M2U2ZmE3NjUzMGI2MzgyYTRjMDI0MWU1ZTRhOWVjMGEwZjQ0ZGMwZDNcXFwiXFxubG9nLmRlYnVnIFxcXCJXYWxsZXQgZmlsZSBcXFwiICsgaGVscGVyLmdlbmVyYXRlV2FsbGV0SlNPTkZyb21Qcml2YXRlS2V5KHByaXZhdGVLZXksIHBhc3N3b3JkKVxcblxcbi8vIFRlc3QgcmVhZGluZyBjcmVkZW50aWFsc1xcbmRlZiBjcmVkZW50aWFscyA9IGhlbHBlci5yZWFkQ3JlZGVudGlhbHMoKVxcbmxvZy5kZWJ1ZyBcXFwiQWNjb3VudCBhZGRyZXNzIGlzOiBcXFwiICsgY3JlZGVudGlhbHMuZ2V0QWRkcmVzcygpXFxubG9nLmRlYnVnIFxcXCJBY2NvdW50IHByaXZhdGUga2V5IGlzOiAweFxcXCIgKyBjcmVkZW50aWFscy5nZXRFY0tleVBhaXIoKS5nZXRQcml2YXRlS2V5KCkudG9TdHJpbmcoMTYpXFxuXFxuLy8gVGVzdCBFdGggY2xpZW50IGNvbm5lY3Rpb25cXG5kZWYgY29udHJhY3QgPSBoZWxwZXIuZ2V0U21hcnRDb250cmFjdCgpXFxubG9nLmRlYnVnIFxcXCJHZXQgbnVtYmVyIG9mIFJGUXNcXFwiXFxuZGVmIG5ick9mUkZRcyA9IGNvbnRyYWN0Lm5ick9mUkZRcygpLnNlbmQoKVxcbmxvZy5kZWJ1ZyBcXFwiQ3VycmVudCBudW1iZXIgb2YgUkZRcyBpczogXFxcIiArIG5ick9mUkZRc1xcblxcbmxvZy5kZWJ1ZyBcXFwiR2V0IG51bWJlciBvZiBxdW90ZXNcXFwiXFxuZGVmIG5ick9mUXVvdGVzID0gY29udHJhY3QubmJyT2ZRdW90ZXMoKS5zZW5kKClcXG5sb2cuZGVidWcgXFxcIkN1cnJlbnQgbnVtYmVyIG9mIHF1b3RlcyBpczogXFxcIiArIG5ick9mUXVvdGVzXFxuXFxuLy8gVGVzdCBSRlEgc3VibWlzc2lvblxcbmRlZiByZnFJZCA9IFVVSUQucmFuZG9tVVVJRCgpXFxubG9nLmRlYnVnIFxcXCJSRlEgaWQgaXMgXFxcIiArIHJmcUlkXFxuXFxuZGVmIG5vdyA9IGhlbHBlci5ub3coKVxcbmRlZiB1YmwgPSBcXFwiPC4uLj5cXFwiXFxuXFxuZGVmIHJlY2VpcHQgPSBoZWxwZXIuc3VibWl0UkZRKHJmcUlkLCBub3csIHVibClcXG5sb2cuZGVidWcgcmVjZWlwdC50b1N0cmluZygpXFxuXFxuZGVmIChyZWFkSXNzdWVkQXQsIHJlYWRVQkwsIHJlYWRTdGF0dXMpID0gaGVscGVyLmdldFJGUShyZnFJZClcXG5sb2cuZGVidWcgXFxcIlJGUSBpcyBpc3N1ZWQgYXQ6IFxcXCIgKyByZWFkSXNzdWVkQXRcXG5sb2cuZGVidWcgXFxcIlJGUSBVQkwgaXM6IFxcXCIgKyByZWFkVUJMXFxubG9nLmRlYnVnIFxcXCJSRlEgc3RhdHVzIGlzOiBcXFwiICsgcmVhZFN0YXR1c1xcblxcbi8vIFJlYWQgUkZRUmVjZWl2ZWQgZXZlbnRzXFxuLy9kZWYgdG9waWNPZlJGUVJlY2VpdmVkID0gSGFzaC5zaGEzU3RyaW5nKFxcXCJSRlFSZWNlaXZlZChieXRlczE2LHVpbnQyNTYsc3RyaW5nKVxcXCIpXFxubG9nLmRlYnVnIFxcXCJUb3BpYyBvZiBSRlFSZWNlaXZlZDogXFxcIiArIGhlbHBlci5SRlFSZWNlaXZlZEV2ZW50SGFzaFxcblxcbi8vIFRlc3QgZGVjbGluaW5nIGEgUkZRXFxuZGVmIGRlY2xpbmVJZCA9IFVVSUQucmFuZG9tVVVJRCgpXFxucmVjZWlwdCA9IGhlbHBlci5kZWNsaW5lUkZRKGRlY2xpbmVJZCwgcmZxSWQsIG5vdylcXG5sb2cuZGVidWcgcmVjZWlwdC50b1N0cmluZygpXFxuXFxuZGVmIChyZWFkRGVjbGluZUlzc3VlZEF0LCByZWFkRGVjbGluZVVCTCwgcmVhZERlY2xpbmVTdGF0dXMsIHJlYWREZWNsaW5lUkZRSWQsIHJlYWREZWNsaW5lU3VwcGxpZXJBZGRyZXNzKSA9IGhlbHBlci5nZXRRdW90ZShkZWNsaW5lSWQpXFxubG9nLmRlYnVnIFxcXCJEZWNsaW5lIGlzIGlzc3VlZCBhdDogXFxcIiArIHJlYWREZWNsaW5lSXNzdWVkQXRcXG5sb2cuZGVidWcgXFxcIkRlY2xpbmUgVUJMIGlzOiBcXFwiICsgcmVhZERlY2xpbmVVQkwgLy8gc2hvdWxkIGJlIGVtcHR5XFxubG9nLmRlYnVnIFxcXCJEZWNsaW5lIHN0YXR1cyBpczogXFxcIiArIHJlYWREZWNsaW5lU3RhdHVzIC8vIHNob3VsZCBiZSBEZWNsaW5lXFxubG9nLmRlYnVnIFxcXCJEZWNsaW5lZCBSRlEgaXM6IFxcXCIgKyByZWFkRGVjbGluZVJGUUlkIC8vIHNob3VsZCBiZSByZnFJZFxcbmxvZy5kZWJ1ZyBcXFwiRGVjbGluZSBzdXBwbGllciBhZGRyZXNzIGlzOiBcXFwiICsgcmVhZERlY2xpbmVTdXBwbGllckFkZHJlc3NcXG5cXG5kZWYgcmVhZERlY2xpbmVkUkZRU3RhdHVzID0gaGVscGVyLmdldFJGUShyZnFJZClbMl1cXG5sb2cuZGVidWcgXFxcIkRlY2xpbmVkIFJGUSBzdGF0dXMgaXM6IFxcXCIgKyByZWFkRGVjbGluZWRSRlFTdGF0dXMgLy8gc2hvdWxkIGJlIERlY2xpbmVkXFxuXFxuLy8gVGVzdCBzdWJtaXR0aW5nIGEgcXVvdGVcXG5kZWYgcXVvdGVJZCA9IFVVSUQucmFuZG9tVVVJRCgpXFxuZGVmIHF1b3RlVWJsID0gXFxcIjxxdW90ZSAvPlxcXCJcXG5yZWNlaXB0ID0gaGVscGVyLnN1Ym1pdFF1b3RlKHF1b3RlSWQsIHJmcUlkLCBub3csIHF1b3RlVWJsKVxcbmxvZy5kZWJ1ZyByZWNlaXB0LnRvU3RyaW5nKClcXG5cXG5kZWYgKHJlYWRRdW90ZUlzc3VlZEF0LCByZWFkUXVvdGVVQkwsIHJlYWRRdW90ZVN0YXR1cywgcmVhZFF1b3RlUkZRSWQsIHJlYWRRdW90ZVN1cHBsaWVyQWRkcmVzcykgPSBoZWxwZXIuZ2V0UXVvdGUocXVvdGVJZClcXG5sb2cuZGVidWcgXFxcIlF1b3RlIGlzIGlzc3VlZCBhdDogXFxcIiArIHJlYWRRdW90ZUlzc3VlZEF0XFxubG9nLmRlYnVnIFxcXCJRdW90ZSBVQkwgaXM6IFxcXCIgKyByZWFkUXVvdGVVQkxcXG5sb2cuZGVidWcgXFxcIlF1b3RlIHN0YXR1cyBpczogXFxcIiArIHJlYWRRdW90ZVN0YXR1cyAvLyBzaG91bGQgYmUgT2ZmZXJcXG5sb2cuZGVidWcgXFxcIlF1b3RlIFJGUSBpczogXFxcIiArIHJlYWRRdW90ZVJGUUlkIC8vIHNob3VsZCBiZSByZnFJZFxcbmxvZy5kZWJ1ZyBcXFwiUXVvdGUgc3VwcGxpZXIgYWRkcmVzcyBpczogXFxcIiArIHJlYWRRdW90ZVN1cHBsaWVyQWRkcmVzc1xcblxcbmRlZiByZWFkUkZRU3RhdHVzID0gaGVscGVyLmdldFJGUShyZnFJZClbMl1cXG5sb2cuZGVidWcgXFxcIk5ldyBSRlEgc3RhdHVzIGlzOiBcXFwiICsgcmVhZFJGUVN0YXR1cyAvLyBzaG91bGQgYmUgUXVvdGVQcm92aWRlZFxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e1wiUkZRU21hcnRDb250cmFjdEhlbHBlclwiOlwiaW1wb3J0IGNvbS5mYXN0ZXJ4bWwuamFja3Nvbi5kYXRhYmluZC5PYmplY3RNYXBwZXJcXG5cXG5pbXBvcnQgaW8ucGxhdGZvcm02LmRlbW8uc2MuUmVxdWVzdEZvclF1b3RhdGlvbnNcXG5cXG5pbXBvcnQgamF2YS50aW1lLipcXG5cXG5pbXBvcnQgb3JnLndlYjNqLmFiaS5FdmVudEVuY29kZXJcXG5pbXBvcnQgb3JnLndlYjNqLmFiaS5FdmVudFZhbHVlc1xcbmltcG9ydCBvcmcud2ViM2ouYWJpLkZ1bmN0aW9uUmV0dXJuRGVjb2RlclxcbmltcG9ydCBvcmcud2ViM2ouYWJpLlR5cGVSZWZlcmVuY2VcXG5pbXBvcnQgb3JnLndlYjNqLmFiaS5kYXRhdHlwZXMuRXZlbnRcXG5pbXBvcnQgb3JnLndlYjNqLmFiaS5kYXRhdHlwZXMuVHlwZVxcbmltcG9ydCBvcmcud2ViM2ouY3J5cHRvLipcXG5pbXBvcnQgb3JnLndlYjNqLnByb3RvY29sLmNvcmUubWV0aG9kcy5yZXNwb25zZS5UcmFuc2FjdGlvblJlY2VpcHRcXG5pbXBvcnQgb3JnLndlYjNqLnR4LipcXG5pbXBvcnQgb3JnLndlYjNqLnV0aWxzLk51bWVyaWNcXG5cXG5cXG5lbnVtIFJGUVN0YXR1cyB7XFxuICAgIFJlY2VpdmVkLCBEZWNsaW5lZCwgUXVvdGVQcm92aWRlZFxcbn1cXG5cXG5lbnVtIFF1b3RlU3RhdHVzIHtcXG4gICAgT2ZmZXIsIERlY2xpbmVcXG59XFxuXFxuY2xhc3MgUkZRU21hcnRDb250cmFjdEhlbHBlciB7XFxuXFxuICAgIC8vICEhISBGb3IgZGVtbyBwdXJwb3NlcywgZG9uJ3QgZG8gdGhpcyBpbiBwcm9kdWN0aW9uISBBbHdheXMgYXNrIHRoZSB1c2VyIGZvciBoaXMvaGVyIHBhc3N3b3JkIG9yIHN0b3JlIHlvdXIgcHJpdmF0ZSBrZXkgaW4gYSB2YXVsdC9IRCB3YWxsZXQhXFxuICAgIHN0YXRpYyBkZWYgcGFzc3dvcmQgPSBcXFwiQUR1bW15UGFzc3dvcmRcXFwiXFxuXFxuICAgIC8vIEhlbHBlciBzdGF0ZVxcbiAgICBkZWYgY29udGV4dFxcbiAgICBkZWYgd2ViM2pcXG4gICAgZGVmIHNtYXJ0Q29udHJhY3RcXG5cXG4gICAgUkZRU21hcnRDb250cmFjdEhlbHBlcihkZWYgY29udGV4dCkge1xcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxcblxcbiAgICAgICAgZGVmIGV0aENsaWVudFVSTCAgPSBjb250ZXh0LnA2LmFwcGNvbmZpZy5nZXQoJ2V0aENsaWVudFVSTCcpXFxuICAgICAgICB0aGlzLndlYjNqID0gY29udGV4dC5wNi5ldGhlcmV1bXJwYy5idWlsZChldGhDbGllbnRVUkwpXFxuXFxuICAgICAgICAvLyBEZWZpbmUgYSBjdXN0b20gdHJhbnNhY3Rpb24gbWFuYWdlciB3aXRoIGEgcG9sbGluZyBmcmVxdWVuY3kgb2YgMiBzZWNvbmRzXFxuICAgICAgICBkZWYgdHJhbnNhY3Rpb25NYW5hZ2VyID0gY29udGV4dC5wNi5ldGhlcmV1bXJwYy5wb2xsaW5nVHJhbnNhY3Rpb25NYW5hZ2VyKHdlYjNqLCByZWFkQ3JlZGVudGlhbHMoKSwgMjAwMEwpXFxuXFxuICAgICAgICBkZWYgY29udHJhY3RBZGRyZXNzID0gY29udGV4dC5wNi5hcHBjb25maWcuZ2V0KCdjb250cmFjdEFkZHJlc3MnKVxcbiAgICAgICAgdGhpcy5zbWFydENvbnRyYWN0ID0gUmVxdWVzdEZvclF1b3RhdGlvbnMubG9hZChjb250cmFjdEFkZHJlc3MsIHdlYjNqLCB0cmFuc2FjdGlvbk1hbmFnZXIsIGNvbnRleHQucDYuZXRoZXJldW1ycGMuREVGQVVMVF9HQVNfUFJPVklERVIpXFxuICAgIH1cXG5cXG4gICAgQ3JlZGVudGlhbHMgcmVhZENyZWRlbnRpYWxzKCkge1xcbiAgICAgICAgcmV0dXJuIGNvbnRleHQucDYuZXRoZXJldW1ycGMuZ2V0Q3JlZGVudGlhbHMoY29udGV4dC5wNi5hcHBjb25maWcuZ2V0KFxcXCJkZW1vV2FsbGV0XFxcIiksIHBhc3N3b3JkKVxcbiAgICB9XFxuXFxuICAgIFRyYW5zYWN0aW9uUmVjZWlwdCBzdWJtaXRSRlEoVVVJRCBpZCwgWm9uZWREYXRlVGltZSBub3csIFN0cmluZyB1YmwpIHtcXG4gICAgICAgIHJldHVybiBzbWFydENvbnRyYWN0LnN1Ym1pdFJGUShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLnpkdFRvQmlnSW50ZWdlcihub3cpLFxcbiAgICAgICAgICAgIHVibCkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UkZRKFVVSUQgaWQpIHtcXG4gICAgICAgIGRlZiByZXN1bHQgPSBzbWFydENvbnRyYWN0LmdldFJGUShjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCkpLnNlbmQoKVxcblxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVChyZXN1bHQuZ2V0VmFsdWUxKCkpXFxuICAgICAgICBkZWYgdWJsID0gcmVzdWx0LmdldFZhbHVlMigpXFxuICAgICAgICBkZWYgc3RhdHVzID0gUkZRU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IGRlY2xpbmVSRlEoVVVJRCBkZWNsaW5lSWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93KSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5kZWNsaW5lUkZRKFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRCeXRlc0Zyb21VVUlEKGRlY2xpbmVJZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSkuc2VuZCgpXFxuICAgIH1cXG5cXG4gICAgVHVwbGUgZ2V0UXVvdGUoVVVJRCBpZCkge1xcbiAgICAgICAgZGVmIHJlc3VsdCA9IHNtYXJ0Q29udHJhY3QuZ2V0UXVvdGUoY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQoaWQpKS5zZW5kKClcXG5cXG4gICAgICAgIGRlZiBpc3N1ZWRBdCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5iaWdJbnRlZ2VyVG9aRFQocmVzdWx0LmdldFZhbHVlMSgpKVxcbiAgICAgICAgZGVmIHVibCA9IHJlc3VsdC5nZXRWYWx1ZTIoKVxcbiAgICAgICAgZGVmIHN0YXR1cyA9IFF1b3RlU3RhdHVzLnZhbHVlcygpW3Jlc3VsdC5nZXRWYWx1ZTMoKS5pbnRWYWx1ZSgpXVxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMocmVzdWx0LmdldFZhbHVlNCgpKVxcbiAgICAgICAgZGVmIHN1cHBsaWVyQWRkcmVzcyA9IHJlc3VsdC5nZXRWYWx1ZTUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShpc3N1ZWRBdCwgdWJsLCBzdGF0dXMsIHJmcUlkLCBzdXBwbGllckFkZHJlc3MpXFxuICAgIH1cXG5cXG4gICAgVHJhbnNhY3Rpb25SZWNlaXB0IHN1Ym1pdFF1b3RlKFVVSUQgaWQsIFVVSUQgcmZxSWQsIFpvbmVkRGF0ZVRpbWUgbm93LCBTdHJpbmcgdWJsKSB7XFxuICAgICAgICByZXR1cm4gc21hcnRDb250cmFjdC5zdWJtaXRRdW90ZShcXG4gICAgICAgICAgICBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0Qnl0ZXNGcm9tVVVJRChpZCksXFxuICAgICAgICAgICAgY29udGV4dC5wNi5jb252ZXJzaW9uLmdldEJ5dGVzRnJvbVVVSUQocmZxSWQpLFxcbiAgICAgICAgICAgIGNvbnRleHQucDYuY29udmVyc2lvbi56ZHRUb0JpZ0ludGVnZXIobm93KSwgdWJsKS5zZW5kKClcXG4gICAgfVxcblxcbiAgICAvLyBSZWFkIGV2ZW50c1xcblxcbiAgICBmaW5hbCBzdGF0aWMgU3RyaW5nIFJGUVJlY2VpdmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5SRlFSRUNFSVZFRF9FVkVOVClcXG5cXG4gICAgVHVwbGUgcmVhZFJGUVJlY2VpdmVkRXZlbnQoTGlzdDxTdHJpbmc+IGxvZ1RvcGljcywgU3RyaW5nIGxvZ0RhdGEpIHtcXG4gICAgICAgIGRlZiBldmVudCA9IGV4dHJhY3RFdmVudChSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5SRlFSRUNFSVZFRF9FVkVOVCwgbG9nVG9waWNzLCBsb2dEYXRhKVxcblxcbiAgICAgICAgZGVmIHJmcUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgwKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVCgoQmlnSW50ZWdlcikgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgxKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHVibCA9IChTdHJpbmcpIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMikuZ2V0VmFsdWUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShyZnFJZCwgaXNzdWVkQXQsIHVibClcXG4gICAgfVxcblxcbiAgICBmaW5hbCBzdGF0aWMgU3RyaW5nIFJGUURlY2xpbmVkRXZlbnRIYXNoID0gRXZlbnRFbmNvZGVyLmVuY29kZShSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5SRlFERUNMSU5FRF9FVkVOVClcXG5cXG4gICAgVHVwbGUgcmVhZFJGUURlY2xpbmVkRXZlbnQoTGlzdDxTdHJpbmc+IGxvZ1RvcGljcywgU3RyaW5nIGxvZ0RhdGEpIHtcXG4gICAgICAgIGRlZiBldmVudCA9IGV4dHJhY3RFdmVudChSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5SRlFERUNMSU5FRF9FVkVOVCwgbG9nVG9waWNzLCBsb2dEYXRhKVxcblxcbiAgICAgICAgZGVmIHN1cHBsaWVyID0gKFN0cmluZykgZXZlbnQuZ2V0SW5kZXhlZFZhbHVlcygpLmdldCgwKS5nZXRWYWx1ZSgpXFxuICAgICAgICBkZWYgcmZxSWQgPSBjb250ZXh0LnA2LmNvbnZlcnNpb24uZ2V0VVVJREZyb21CeXRlcygoYnl0ZVtdKSBldmVudC5nZXROb25JbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKCkpXFxuICAgICAgICBkZWYgcXVvdGVJZCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRVVUlERnJvbUJ5dGVzKChieXRlW10pIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMSkuZ2V0VmFsdWUoKSlcXG4gICAgICAgIGRlZiBpc3N1ZWRBdCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5iaWdJbnRlZ2VyVG9aRFQoKEJpZ0ludGVnZXIpIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMikuZ2V0VmFsdWUoKSlcXG5cXG4gICAgICAgIHJldHVybiBuZXcgVHVwbGUoc3VwcGxpZXIsIHJmcUlkLCBxdW90ZUlkLCBpc3N1ZWRBdClcXG4gICAgfVxcblxcbiAgICBmaW5hbCBzdGF0aWMgU3RyaW5nIFF1b3RlUmVjZWl2ZWRFdmVudEhhc2ggPSBFdmVudEVuY29kZXIuZW5jb2RlKFJlcXVlc3RGb3JRdW90YXRpb25zLlFVT1RFUkVDRUlWRURfRVZFTlQpXFxuXFxuICAgIFR1cGxlIHJlYWRRdW90ZVJlY2VpdmVkRXZlbnQoTGlzdDxTdHJpbmc+IGxvZ1RvcGljcywgU3RyaW5nIGxvZ0RhdGEpIHtcXG4gICAgICAgIGRlZiBldmVudCA9IGV4dHJhY3RFdmVudChSZXF1ZXN0Rm9yUXVvdGF0aW9ucy5RVU9URVJFQ0VJVkVEX0VWRU5ULCBsb2dUb3BpY3MsIGxvZ0RhdGEpXFxuXFxuICAgICAgICBkZWYgc3VwcGxpZXIgPSAoU3RyaW5nKSBldmVudC5nZXRJbmRleGVkVmFsdWVzKCkuZ2V0KDApLmdldFZhbHVlKClcXG4gICAgICAgIGRlZiByZnFJZCA9IGNvbnRleHQucDYuY29udmVyc2lvbi5nZXRVVUlERnJvbUJ5dGVzKChieXRlW10pIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMCkuZ2V0VmFsdWUoKSlcXG4gICAgICAgIGRlZiBxdW90ZUlkID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmdldFVVSURGcm9tQnl0ZXMoKGJ5dGVbXSkgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgxKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIGlzc3VlZEF0ID0gY29udGV4dC5wNi5jb252ZXJzaW9uLmJpZ0ludGVnZXJUb1pEVCgoQmlnSW50ZWdlcikgZXZlbnQuZ2V0Tm9uSW5kZXhlZFZhbHVlcygpLmdldCgyKS5nZXRWYWx1ZSgpKVxcbiAgICAgICAgZGVmIHVibCA9IChTdHJpbmcpIGV2ZW50LmdldE5vbkluZGV4ZWRWYWx1ZXMoKS5nZXQoMykuZ2V0VmFsdWUoKVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBUdXBsZShzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0LCB1YmwpXFxuICAgIH1cXG5cXG4gICAgLy8gRXZlbnQgaGVscGVyIG1ldGhvZHNcXG5cXG4gICAgc3RhdGljIEV2ZW50VmFsdWVzIGV4dHJhY3RFdmVudChFdmVudCBldmVudCwgTGlzdDxTdHJpbmc+IGxvZ1RvcGljcywgU3RyaW5nIGxvZ0RhdGEpIHtcXG4gICAgICAgIFN0cmluZyBlbmNvZGVkRXZlbnRTaWduYXR1cmUgPSBFdmVudEVuY29kZXIuZW5jb2RlKGV2ZW50KVxcblxcbiAgICAgICAgaWYgKGxvZ1RvcGljc1swXSAhPSBlbmNvZGVkRXZlbnRTaWduYXR1cmUpIHtcXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxcbiAgICAgICAgfVxcblxcbiAgICAgICAgTGlzdDxUeXBlPiBpbmRleGVkVmFsdWVzID0gbmV3IEFycmF5TGlzdDw+KClcXG4gICAgICAgIExpc3Q8VHlwZT4gbm9uSW5kZXhlZFZhbHVlcyA9IEZ1bmN0aW9uUmV0dXJuRGVjb2Rlci5kZWNvZGUobG9nRGF0YSwgZXZlbnQuZ2V0Tm9uSW5kZXhlZFBhcmFtZXRlcnMoKSlcXG5cXG4gICAgICAgIExpc3Q8VHlwZVJlZmVyZW5jZTxUeXBlPj4gaW5kZXhlZFBhcmFtZXRlcnMgPSBldmVudC5nZXRJbmRleGVkUGFyYW1ldGVycygpXFxuICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluZGV4ZWRQYXJhbWV0ZXJzLnNpemUoKTsgaSsrKSB7XFxuICAgICAgICAgICAgVHlwZSB2YWx1ZSA9IEZ1bmN0aW9uUmV0dXJuRGVjb2Rlci5kZWNvZGVJbmRleGVkVmFsdWUobG9nVG9waWNzW2kgKyAxXSwgaW5kZXhlZFBhcmFtZXRlcnMuZ2V0KGkpKVxcbiAgICAgICAgICAgIGluZGV4ZWRWYWx1ZXMuYWRkKHZhbHVlKVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgcmV0dXJuIG5ldyBFdmVudFZhbHVlcyhpbmRleGVkVmFsdWVzLCBub25JbmRleGVkVmFsdWVzKVxcbiAgICB9XFxuXFxuICAgIHN0YXRpYyBnZW5lcmF0ZVdhbGxldEpTT05Gcm9tUHJpdmF0ZUtleShTdHJpbmcgcHJpdmF0ZUtleUluSGV4LCBTdHJpbmcgcGFzc3dvcmQpIHtcXG4gICAgICAgIGRlZiBwcml2YXRlS2V5ID0gbmV3IEJpZ0ludGVnZXIoTnVtZXJpYy5jbGVhbkhleFByZWZpeChwcml2YXRlS2V5SW5IZXgpLCAxNilcXG4gICAgICAgIGRlZiBrZXlQYWlyID0gRUNLZXlQYWlyLmNyZWF0ZShwcml2YXRlS2V5KVxcbiAgICAgICAgZGVmIHdhbGxldEZpbGUgPSBXYWxsZXQuY3JlYXRlU3RhbmRhcmQocGFzc3dvcmQsIGtleVBhaXIpXFxuICAgICAgICBkZWYgb2JqZWN0TWFwcGVyID0gbmV3IE9iamVjdE1hcHBlcigpXFxuICAgICAgICByZXR1cm4gb2JqZWN0TWFwcGVyLndyaXRlVmFsdWVBc1N0cmluZyh3YWxsZXRGaWxlKVxcbiAgICB9XFxuXFxuICAgIC8vIERhdGUgLyBUaW1lIGhlbHBlciBmdW5jdGlvbnNcXG5cXG4gICAgc3RhdGljIFpvbmVkRGF0ZVRpbWUgbm93KCkge1xcbiAgICAgICAgcmV0dXJuIFpvbmVkRGF0ZVRpbWUubm93KFpvbmVJZC5zeXN0ZW1EZWZhdWx0KCkpXFxuICAgIH1cXG59XFxuXCJ9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1MzkwMjQzfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiUmVjZWl2ZVJGUVRyYW5zYWN0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUmVjZWl2ZVJGUVRyYW5zYWN0aW9uXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkhhbmRsZSB0aGUgcmVjZXB0aW9uIG9mIGFuIFJGUSAoY3JlYXRpb24gb2YgdGhlIFJGUSBUcmFuc2FjdGlvbkluZm8sIHN0b3JhZ2UgdG8gZmlsZSBzeXN0ZW3igKYpIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgQmxvY2tjaGFpbkV2ZW50SGFuZGxlciBzY3JpcHRcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzOTAwMjEsXCJyZXZpc2lvbklkXCI6XCJjMjI5YzZmYTE2YzBkMTkyMTk0NWZjZWY2ZDY5M2M0ZlwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5pby5GaWxlVXRpbHNcXG5pbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXRcXG5cXG4vLyBUaGlzIHNjcmlwdCByZWFkcyB0aGUgaW5jb21pbmcgUkZRLCBwYXJzZXMgaXRzIGNvbnRlbnQgYW5kIHdyaXRlcyB0aGUgdHJhbnNhY3Rpb24gaW4gUDYgZGF0YWJhc2UgdXNpbmcgaXRzIGludGVybmFsIFRyYW5zYWN0aW9uSW5mbyBtb2RlbCAoY2hlY2sgdGhlIERhdGEgTW9kZWxzIG1lbnUgZm9yIG1vcmUgaW5mbylcXG5kZWYgcmZxQ29udGVudCA9IHA2LnBpcGVsaW5lLmdldCAndWJsJ1xcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKGZhbHNlLCB0cnVlKVxcbmRlZiByZnEgPSBzbHVycGVyLnBhcnNlVGV4dChyZnFDb250ZW50KVxcblxcbmRlZiBpbnN0YW5jZUlkID0gcDYuY29uZmlndXJhdGlvbi5nZXQoXFxcImluc3RhbmNlLmlkXFxcIilcXG5cXG5kZWYgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXFxuU2ltcGxlRGF0ZUZvcm1hdCB0cmFuc2FjdGlvblNERiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KFxcXCJ5eXl5TU1kZCdUJ0hIOm1tOnNzXFxcIilcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IHRyYW5zYWN0aW9uU0RGLmZvcm1hdChjdXJyZW50RGF0ZSlcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHJmcS5JRC50ZXh0KClcXG5kZWYgY29tbWVudHMgPSByZnEuTm90ZS50ZXh0KClcXG5kZWYgaXNzdWVEYXRlID0gcmZxLklzc3VlRGF0ZS50ZXh0KClcXG5cXG5pbnQgbmJMaW5lcyA9IHJmcS5SZXF1ZXN0Rm9yUXVvdGF0aW9uTGluZS5zaXplKClcXG5cXG5kZWYgc2VsbGVyTmFtZSA9IHJmcS5TZWxsZXJTdXBwbGllclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiBidXllck5hbWUgPSByZnEuT3JpZ2luYXRvckN1c3RvbWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuXFxuZGVmIHRyYW5zYWN0aW9uVHlwZSA9ICdSZXF1ZXN0Rm9yUXVvdGF0aW9uJ1xcbmRlZiBzdGF0dXMgPSAnUmVjZWl2ZWQnXFxuZGVmIHN0YXR1c01lc3NhZ2UgPSAnUmVjZWl2ZWQgYnkgRGVtbyBBcHAnXFxuXFxuLy8gV3JpdGUgdGhlIHRyYW5zYWN0aW9uIG9uIHRoZSBmaWxlIHN5c3RlbVxcbmRlZiBzb3VyY2VVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUmVxdWVzdEZvclF1b3RhdGlvbi9pbi9cXFwiICsgdHJhbnNhY3Rpb25JZCArIFxcXCIueG1sXFxcIlxcbmRlZiBzb3VyY2VGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHNvdXJjZVVSSSlcXG5GaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUoc291cmNlRmlsZSwgcmZxQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0YXJnZXRVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUmVxdWVzdEZvclF1b3RhdGlvbi9cXFwiICsgdHJhbnNhY3Rpb25JZCArIFxcXCIueG1sXFxcIlxcbmRlZiB0YXJnZXRGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKHRhcmdldFVSSSlcXG5GaWxlVXRpbHMud3JpdGVTdHJpbmdUb0ZpbGUodGFyZ2V0RmlsZSwgcmZxQ29udGVudCwnVVRGLTgnKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHt0cmFuc2FjdGlvbklkfTwvSWQ+XFxuICAgIDxDcmVhdGlvbkRhdGU+JHtmb3JtYXR0ZWREYXRlfTwvQ3JlYXRpb25EYXRlPlxcbiAgICA8VHJhbnNhY3Rpb25UeXBlPlJlcXVlc3QgRm9yIFF1b3RhdGlvbjwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHt0cmFuc2FjdGlvbklkfTwvVHJhbnNhY3Rpb25OdW1iZXI+XFxuICAgIDxTb3VyY2VTeXN0ZW0+RGVtbyBBcHA8L1NvdXJjZVN5c3RlbT5cXG4gICAgPFRhcmdldFN5c3RlbS8+XFxuICAgIDxTZW5kZXIvPlxcbiAgICA8RmluYWxSZWNpcGllbnQ+U3VwcGxpZXI8L0ZpbmFsUmVjaXBpZW50PlxcbiAgICA8VHJhbnNmZXJQcm90b2NvbD5CbG9ja2NoYWluPC9UcmFuc2ZlclByb3RvY29sPlxcbiAgICA8RGVsaXZlcmVkVmlhPkV0aGVyZXVtIEJsb2NrY2hhaW48L0RlbGl2ZXJlZFZpYT5cXG4gICAgPFNvdXJjZURvY3VtZW50Rm9ybWF0PlVCTDwvU291cmNlRG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxTb3VyY2VEb2N1bWVudFVSST4ke3NvdXJjZVVSSX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1Bpdm90RG9jdW1lbnRVUkk+XFxuICAgIDxQaXZvdERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1Bpdm90RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRhcmdldERvY3VtZW50Rm9ybWF0PlVCTDwvVGFyZ2V0RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxUYXJnZXREb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1RhcmdldERvY3VtZW50VVJJPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRlY2huaWNhbFN0YXR1c0NvZGU+JHtzdGF0dXN9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3N0YXR1c01lc3NhZ2V9PC9UZWNobmljYWxTdGF0dXNNZXNzYWdlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9UZWNobmljYWxTdGF0dXNEYXRlPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0NvZGUvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0RhdGUvPlxcbiAgICA8RmxhZ3M+e1xcXCJhYXZpc2libGVcXFwiOiB0cnVlfTwvRmxhZ3M+XFxuICAgIDxPcmdQYXRoPi8ke2luc3RhbmNlSWR9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkJ1eWVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoYnV5ZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT48L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoJ3A2X2RlbW8uVHJhbnNhY3Rpb25JbmZvJywgdHJhbnNhY3Rpb25JZClcXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUodHJhbnNhY3Rpb25JbmZvLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1MzkwMDIxfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiVmlld19UcmFuc2FjdGlvbnMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJWaWV3X1RyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIGh0bWwgZGlzcGxheSBvZiBUcmFuc2FjdGlvbnNcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzOTAyMjMsXCJyZXZpc2lvbklkXCI6XCIyMGFjMGMyMjQyZDEyMTQ3MTVlZWMzYmYwYzIwMzRlOVwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0O1xcblxcbmxvZy5kZWJ1ZyAnUDZfREVNTydcXG5cXG5EZWNpbWFsRm9ybWF0IGRmID0gbmV3IERlY2ltYWxGb3JtYXQoXFxcIiMjIywjIyMuMDBcXFwiKTtcXG5cXG4vLyBEaXNwbGF5IHBpcGVsaW5lIHZhcmlhYmxlc1xcbi8vIHBpcGVsaW5lLnZhcmlhYmxlcygpLmVhY2goKSB7IFxcbi8vICAgICBsb2cuZGVidWcgXFxcIlBJUEVMSU5FIFZBUiAke2l0fVxcXCIgXFxuLy8gfVxcblxcbi8vIEdldCBhbmQgZGlzcGxheSByYXcgWG1sIGZvciB0ZXN0XFxuZGVmIHByZXR0eVhtbCA9IHA2LnBpcGVsaW5lLmdldCAneG1sJ1xcblxcbi8vIEdldCBzbHVycGVkIHhtbFxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBwNi5waXBlbGluZS5nZXRYbWwgJ3htbCdcXG5cXG4vLyBSZXR1cm4gZmlsZSBleHRlbnNpb25cXG5kZWYgZ2V0X2ZpbGVfZXh0ZW5zaW9uID0geyBTdHJpbmcgcGF0aCAtPiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCcuJykgKyAxKSB9XFxuXFxuLy8gUmV0dXJuIGZpbGUgbmFtZVxcbmRlZiBnZXRfZmlsZV9uYW1lID0geyBTdHJpbmcgcGF0aCAtPiBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCcvJykgKyAxKSB9IFxcblxcbi8vIEtleVxcbmRlZiBJZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5kZWYgQnVzaW5lc3NEb2NOYW1lID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uVHlwZS50ZXh0KClcXG5kZWYgQnVzaW5lc3NEb2NOdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uVHJhbnNhY3Rpb25OdW1iZXIudGV4dCgpXFxuZGVmIEVuZHBvaW50ID0gdHJhbnNhY3Rpb25JbmZvLkRlbGl2ZXJlZFZpYS50ZXh0KClcXG4vL2RlZiBNZXNzYWdlID0gbWVzc2FnZUluZm8uTWVzc2FnZS50ZXh0KClcXG5cXG4vLyBUcmFuc2FjdGlvblN0YXR1c0luZm9ybWF0aW9uIGJsb2NrIHN0YXJ0XFxuZGVmIFRlY2huaWNhbFN0YXR1c0NvZGUgPSB0cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZS50ZXh0KClcXG5kZWYgVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IHRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNEYXRlLnRleHQoKVxcbmRlZiBUZWNobmljYWxTdGF0dXNNZXNzYWdlID0gdHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c01lc3NhZ2UudGV4dCgpXFxuXFxuXFxuZGVmIEZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gdHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlLnRleHQoKVxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IHRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZS50ZXh0KClcXG5kZWYgRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UgPSB0cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UudGV4dCgpXFxuLy8gVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiBibG9jayBlbmRcXG5cXG5kZWYgU291cmNlRG9jdW1lbnRVUkkgPSB0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpXFxuZGVmIHNyY0RvY0V4dGVuc2lvbiA9IGdldF9maWxlX2V4dGVuc2lvbihTb3VyY2VEb2N1bWVudFVSSSlcXG5kZWYgc3JjRG9jRmlsZU5hbWUgPSBnZXRfZmlsZV9uYW1lKFNvdXJjZURvY3VtZW50VVJJKVxcblxcbmRlZiBTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlID0gdHJhbnNhY3Rpb25JbmZvLlNvdXJjZURvY3VtZW50Q29udGVudFR5cGUudGV4dCgpXFxuXFxuZGVmIEN1cnJlbnREb2N1bWVudFVSSSA9IHRyYW5zYWN0aW9uSW5mby5UYXJnZXREb2N1bWVudFVSSS50ZXh0KClcXG5kZWYgY3VyRG9jRXh0ZW5zaW9uID0gZ2V0X2ZpbGVfZXh0ZW5zaW9uKEN1cnJlbnREb2N1bWVudFVSSSlcXG5kZWYgY3VyRG9jRmlsZU5hbWUgPSBnZXRfZmlsZV9uYW1lKEN1cnJlbnREb2N1bWVudFVSSSlcXG5cXG5kZWYgQ3VycmVudERvY3VtZW50Q29udGVudFR5cGUgPSB0cmFuc2FjdGlvbkluZm8uVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZS50ZXh0KClcXG5cXG5kZWYgQXR0YWNobWVudHMgPSB0cmFuc2FjdGlvbkluZm8uQXR0YWNobWVudHNcXG5kZWYgRGlzcGxheWFibGVBdHRhY2htZW50cyA9IFxcXCJcXFwiXFxuXFxuQXR0YWNobWVudHMuZWFjaCB7XFxuICAgIGRlZiBVUkkgPSBpdC5BdHRhY2htZW50LlVSSS50ZXh0KClcXG4gICAgZGVmIENvbnRlbnRUeXBlID0gaXQuQXR0YWNobWVudC5Db250ZW50VHlwZS50ZXh0KClcXG4gICAgZGVmIGF0dGFjaG1lbnRFeHRlbnNpb24gPSBnZXRfZmlsZV9leHRlbnNpb24oVVJJKVxcbiAgICBkZWYgYXR0YWNobWVudEZpbGVOYW1lID0gZ2V0X2ZpbGVfbmFtZShVUkkpXFxuICAgIGRlZiBjdXJyZW50QXR0YWNobWVudCA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJpbmxpbmUtYmxvY2tcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj48Y2VudGVyPkF0dGFjaG1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke2F0dGFjaG1lbnRFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1leHRlbnNpb249XFxcIiR7YXR0YWNobWVudEV4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICBkYXRhLWlkcz0ke0lkfVxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiRVUkl9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1jb250ZW50LXR5cGU9XFxcIiR7Q29udGVudFR5cGV9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgZGF0YS12aWV3PVxcXCJ7e1ZJRVdOQU1FfX1cXFwiPlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPHhzbDp2YXJpYWJsZSBuYW1lPVxcXCJhdHRhY2htZW50RmlsZU5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9XFxcImdldC1maWxlLW5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPVxcXCJwYXRoXFxcIiBzZWxlY3Q9XFxcIlVSSVxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwveHNsOmNhbGwtdGVtcGxhdGU+XFxuICAgICAgICAgICAgICAgICAgICA8L3hzbDp2YXJpYWJsZT5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGUtbmFtZVxcXCIgdGl0bGU9XFxcIiR7YXR0YWNobWVudEZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAke2F0dGFjaG1lbnRGaWxlTmFtZX1cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgRGlzcGxheWFibGVBdHRhY2htZW50cyA9IFxcXCIke0Rpc3BsYXlhYmxlQXR0YWNobWVudHN9JHtjdXJyZW50QXR0YWNobWVudH1cXFwiXFxufVxcblxcbi8vIFdpbGwgZGlzcGxheSBpbmZvIG9uIEVycm9ycyBjYXB0dXJlZCB0aGUgXFxcIm9sZFxcXCIgd2F5XFxuZGVmIElzc3VlID0gdHJhbnNhY3Rpb25JbmZvLklzc3VlXFxuZGVmIElzc3VlTGV2ZWxFUlJPUiA9IElzc3VlLmZpbmRBbGwgeyBpdC5sZXZlbCA9PSAnRVJST1InIH1cXG5kZWYgZXJyb3JzID0gW11cXG5cXG5Jc3N1ZUxldmVsRVJST1IuZWFjaCB7XFxuICAgIGlmIChpdC5sZXZlbCA9PSAnRVJST1InKSB7XFxuICAgICAgICBlcnJvcnMgPSB0b2tlbml6ZSggaXQuVGV4dCwgJyYjeEE7JyApXFxuICAgIH1cXG59XFxuXFxuZGVmIElzc3VlRXJyb3JMaW5lID0gXFxcIlxcXCJcXG5cXG5lcnJvcnMuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcIm1pLWxpbmVcXFwiPlxcbiAgICAgICAgPHN0cm9uZz48c3BhbiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke3Rva2VuaXplKGl0LCdcXFxcXFxcXHwnKVsxXX08L3NwYW4+PC9zdHJvbmc+IDxzcGFuPiAtIDwvc3Bhbj5cXG4gICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7dG9rZW5pemUoaXQsJ1xcXFxcXFxcfCcpWzJdfTwvc3Bhbj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgSXNzdWVFcnJvckxpbmUgPSBcXFwiJHtJc3N1ZUVycm9yTGluZX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgSXNzdWVMZXZlbEVycm9yT2xkV2F5ID0gKElzc3VlTGV2ZWxFUlJPUi5zaXplKCkgIT0gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkludmFsaWQgZG9jdW1lbnQgZHVlIHRvIDxzdHJvbmc+JHtlcnJvcnMuc2l6ZSgpfSBlcnJvcihzKTwvc3Ryb25nPjwvZGl2PlxcbiAgICAgICAgXFxuICAgICAgICAke0lzc3VlRXJyb3JMaW5lfVxcblxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbi8vIFdpbGwgZGlzcGxheSBpbmZvIG9uIEVycm9ycyBjYXB0dXJlZCB0aGUgXFxcIm5ld1xcXCIgd2F5XFxuZGVmIElzc3VlcyA9IHRyYW5zYWN0aW9uSW5mby5Jc3N1ZXNcXG5kZWYgSXNzdWVzTGV2ZWxFUlJPUiA9IElzc3Vlcy5Jc3N1ZS5maW5kQWxsIHsgaXQubGV2ZWwgPT0gJ0VSUk9SJyB9XFxuXFxuZGVmIElzc3Vlc0Vycm9yTGluZSA9IFxcXCJcXFwiXFxuXFxuSXNzdWVzTGV2ZWxFUlJPUi5lYWNoIHtcXG4gICAgZGVmIGxpbmUgPSBcXFwiXFxcIlxcXCJcXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1pLWxpbmVcXFwiPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPuKAoiAke2l0Lk1lc3NhZ2V9PC9zcGFuPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgaXNzdWVzTGV2ZWxFcnJvck5ld1dheSA9IFxcXCIke2lzc3Vlc0xldmVsRXJyb3JOZXdXYXl9JHtsaW5lfVxcXCJcXG59XFxuXFxuZGVmIGlzc3Vlc0xldmVsRXJyb3JOZXdXYXkgPSAoSXNzdWVzTGV2ZWxFUlJPUi5zaXplKCkgIT0gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkNvbnRlbnQgY2hlY2sgaGFzIGlkZW50aWZpZWQgPHN0cm9uZz4ke0lzc3Vlc0xldmVsRVJST1Iuc2l6ZSgpfSBlcnJvcihzKTwvc3Ryb25nPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAke2lzc3Vlc0xldmVsRXJyb3JOZXdXYXl9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbmRlZiBBdWRpdFRyYWlsID0gdHJhbnNhY3Rpb25JbmZvLkF1ZGl0VHJhaWxcXG5kZWYgQXVkaW9UcmFpbFJlY29yZCA9IEF1ZGl0VHJhaWwuUmVjb3JkID86IFtdXFxuZGVmIEF1ZGlvVHJhaWxSZWNvcmREaXNwbGF5ID0gXFxcIlxcXCJcXG5cXG5BdWRpb1RyYWlsUmVjb3JkLmVhY2gge1xcbiAgICBkZWYgYXVkaXRUeXBlID0gKGl0LlR5cGUgPT0gXFxcIkZ1bmN0aW9uYWxTdGF0dXNcXFwiKSA/IFxcXCJGdW5jdGlvbmFsIHN0YXR1c1xcXCIgOiAoaXQuVHlwZSA9PSBcXFwiVGVjaG5pY2FsU3RhdHVzXFxcIikgPyBcXFwiVGVjaG5pY2FsIHN0YXR1c1xcXCIgOiAnJ1xcbiAgICBkZWYgbGluZSA9IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgcm93LWl0ZW0tc2VwYXJhdGVkXFxcIj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0xXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlR5cGU8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPlxcbiAgICAgICAgICAgICAgICAke2F1ZGl0VHlwZX1cXG4gICAgICAgICAgICAvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctMlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5TdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuQ29kZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTNcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5EYXRlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtNiBjb2wtbWQtNCBjb2wtbGctNlxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5NZXNzYWdlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0Lk1lc3NhZ2V9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgQXVkaW9UcmFpbFJlY29yZERpc3BsYXkgPSBcXFwiJHtBdWRpb1RyYWlsUmVjb3JkRGlzcGxheX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgQXVkaW9UcmFpbERpc3BsYXkgPSAoQXVkaW9UcmFpbFJlY29yZC5zaXplKCkgPiAwKSA/IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgdG9wLW1hcmdpblxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiIHN0eWxlPVxcXCJtYXJnaW4tYm90dG9tOiA1cHg7XFxcIj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cXFwiYnRuIGJ0bi14cyBidG4tc3VjY2Vzc1xcXCIgZGF0YS10b2dnbGU9XFxcImNvbGxhcHNlXFxcIiBkYXRhLXRhcmdldD1cXFwiI2F1ZGl0VHJhaWxcXFwiPlN0YXR1cyBoaXN0b3J5PC9idXR0b24+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBpZD1cXFwiYXVkaXRUcmFpbFxcXCIgY2xhc3M9XFxcImNvbGxhcHNlIHNpZGUtcGFkZGVkXFxcIj48ZGl2PjwvZGl2PlxcbiAgICAgICAgICAgICAgICAke0F1ZGlvVHJhaWxSZWNvcmREaXNwbGF5fVxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgIDwvZGl2PlxcblxcXCJcXFwiXFxcIiA6IFxcXCJcXFwiXFxuXFxuZGVmIFdvcmtmbG93ID0gdHJhbnNhY3Rpb25JbmZvLldvcmtmbG93XFxuZGVmIFdvcmtmbG93SW5zdGFuY2UgPSB0cmFuc2FjdGlvbkluZm8uV29ya2Zsb3cuSW5zdGFuY2VcXG5kZWYgV29ya2Zsb3dJbnN0YW5jZURpc3BsYXkgPSBcXFwiXFxcIlxcblxcblxcbldvcmtmbG93SW5zdGFuY2UuZWFjaCB7XFxuICAgIGRlZiBsaW5lID0gXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvdyByb3ctaXRlbS1zZXBhcmF0ZWRcXFwiPlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+V29ya2Zsb3cgVHlwZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGVwLnN0ZXBJZH08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTYgY29sLW1kLTQgY29sLWxnLTJcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhcnQgRGF0ZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGFydERhdGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkVuZCBEYXRlPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LmVuZERhdGV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc2lnbmVkIHRvPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke2l0LnN0ZXAuYXNzaWduZWRUb05hbWV9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkhhbmRsZWQgYnk8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7aXQuc3RlcC5hY3Rpb25lZEJ5RW1haWx9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy02IGNvbC1tZC00IGNvbC1sZy0yXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlN0YXR1czwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+JHtpdC5zdGF0dXN9PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG4gICAgV29ya2Zsb3dJbnN0YW5jZURpc3BsYXkgPSBcXFwiJHtXb3JrZmxvd0luc3RhbmNlRGlzcGxheX0ke2xpbmV9XFxcIlxcbn1cXG5cXG5kZWYgV29ya2Zsb3dEaXNwbGF5ID0gKFdvcmtmbG93SW5zdGFuY2Uuc2l6ZSgpID4gMCkgPyBcXFwiXFxcIlxcXCJcXG4gICAgPGRpdiBjbGFzcz1cXFwicm93IHRvcC1tYXJnaW5cXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIiBzdHlsZT1cXFwibWFyZ2luLWJvdHRvbTogNXB4O1xcXCI+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XFxcImJ0biBidG4teHMgYnRuLXN1Y2Nlc3NcXFwiIGRhdGEtdG9nZ2xlPVxcXCJjb2xsYXBzZVxcXCIgZGF0YS10YXJnZXQ9XFxcIiNoaXN0b3J5VHJhaWxcXFwiPldvcmtmbG93IGhpc3Rvcnk8L2J1dHRvbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGlkPVxcXCJoaXN0b3J5VHJhaWxcXFwiIGNsYXNzPVxcXCJjb2xsYXBzZSBzaWRlLXBhZGRlZFxcXCI+PGRpdj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgJHtXb3JrZmxvd0luc3RhbmNlRGlzcGxheX1cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICA8L2Rpdj5cXG5cXFwiXFxcIlxcXCIgOiBcXFwiXFxcIlxcblxcbi8vIEtleVZhbHVlXFxuZGVmIFNlbGxlck5hbWUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIlNlbGxlciBOYW1lXFxcIn0uVmFsdWUudGV4dCgpXFxuZGVmIEJ1eWVyTmFtZSA9IHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5maW5ke2l0LktleSA9PSBcXFwiQnV5ZXIgTmFtZVxcXCJ9LlZhbHVlLnRleHQoKVxcbmRlZiBJc3N1ZURhdGUgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIklzc3VlIERhdGVcXFwifS5WYWx1ZS50ZXh0KClcXG5kZWYgQ3VycmVuY3kgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkN1cnJlbmN5XFxcIn0uVmFsdWUudGV4dCgpXFxuXFxuZGVmIFRvdGFsQW1vdW50ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09IFxcXCJUb3RhbCBBbW91bnRcXFwifS5WYWx1ZS50ZXh0KClcXG5cXG5wcmludCBcXFwiVE9UQUwgQU1PVU5UXFxcIiArIFRvdGFsQW1vdW50XFxuZGVmIEZvcm1hdHRlZFRvdGFsQW1vdXQgPSBUb3RhbEFtb3VudCA/IGRmLmZvcm1hdChEb3VibGUudmFsdWVPZihUb3RhbEFtb3VudCkpIDogXFxcIlxcXCJcXG5cXG5sb2cuZGVidWcgJ1A2X0RFTU8gRm9ybWF0dGVkVG90YWxBbW91dCA9ICcrRm9ybWF0dGVkVG90YWxBbW91dFxcblxcblxcbmRlZiBMaW5lSXRlbXMgPSB0cmFuc2FjdGlvbkluZm8uS2V5VmFsdWUuZmluZHtpdC5LZXkgPT0gXFxcIkxpbmUgaXRlbXNcXFwifS5WYWx1ZS50ZXh0KClcXG5cXG5kZWYgVHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbiA9IChUZWNobmljYWxTdGF0dXNDb2RlICE9ICcnKVxcbiAgICA/IFxcXCJcXFwiXFxcIlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlRlY2huaWNhbCBzdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7VGVjaG5pY2FsU3RhdHVzQ29kZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZSAtIGFzIG9mICR7VGVjaG5pY2FsU3RhdHVzRGF0ZX08L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7VGVjaG5pY2FsU3RhdHVzTWVzc2FnZX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgXFxcIlxcXCJcXFwiXFxuICAgIDogXFxcIlxcXCJcXFwiXFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+U3RhdHVzPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj48L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC04XFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZTwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIFxcXCJcXFwiXFxcIlxcbiAgICBcXG5sb2cuZGVidWcgJ1A2REVNTyBWaWV3X0RlbW8gVHJhbnNhY3Rpb24gc2NyaXB0IExJTkUgMzA2JyAgXFxuICAgIFxcbmRlZiBGdW5jdGlvbmFsU3RhdHVzSW5mb3JtYXRpb24gPSAoRnVuY3Rpb25hbFN0YXR1c0NvZGUgIT0gJycpXFxuICAgID8gXFxcIlxcXCJcXFwiXFxuICAgIDxoci8+XFx0XFxuICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgY29sLW1kLTRcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RnVuY3Rpb25hbCBzdGF0dXM8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7RnVuY3Rpb25hbFN0YXR1c0NvZGV9PC9kaXY+XFxuXFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtOFxcXCI+XFxuICAgICAgICBcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkFzc29jaWF0ZWQgbWVzc2FnZSAtIGFzIG9mICR7RnVuY3Rpb25hbFN0YXR1c0RhdGV9PC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0Z1bmN0aW9uYWxTdGF0dXNNZXNzYWdlfTwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgIDwvZGl2PiBcXG4gICAgXFxcIlxcXCJcXFwiXFxuICAgIDogJydcXG5cXG4vLyBkZWYgbXlfaHRtbCA9IFxcXCJcXFwiXFxcIjxkaXY+VEVTVDwvZGl2PlxcXCJcXFwiXFxcIlxcblxcbmxvZy5kZWJ1ZyAnUDZERU1PIFZpZXdfRGVtbyBUcmFuc2FjdGlvbiBzY3JpcHQgTElORSAzMzEnXFxuXFxuZGVmIG15X2h0bWwgPSBcXFwiXFxcIlxcXCJcXG48ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmlldy13cmFwcGVyXFxcIj5cXG5cXG4gICAgPGRpdiBjbGFzcz1cXFwicm93XFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtc20tNiBtZXNzYWdlLWluZm8tc2VjdGlvblxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWhlYWRlclxcXCI+VHJhbnNhY3Rpb246IDxzdHJvbmc+PHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+JHtCdXNpbmVzc0RvY05hbWV9PC9zcGFuPiAke0J1c2luZXNzRG9jTnVtYmVyfTwvc3Ryb25nPjwvZGl2PlxcblxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInJvd1xcXCI+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuXFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPlNlbGxlciBuYW1lPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7U2VsbGVyTmFtZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+QnV5ZXIgbmFtZTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0J1eWVyTmFtZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+RGVsaXZlcmVkIHZpYTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0VuZHBvaW50fTwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgeHMtc3RhY2tlZC1zcGFjZXIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPkFkZGl0aW9uYWwgaW5mb3JtYXRpb248L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJyb3dcXFwiPlxcblxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5EYXRlPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj4ke0lzc3VlRGF0ZX08L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbC14cy0xMiBjb2wtbWQtNFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj5Ub3RhbCBBbW91bnQ8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInJpZ2h0LXNwYWNlZFxcXCI+JHtDdXJyZW5jeX08L3NwYW4+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7Rm9ybWF0dGVkVG90YWxBbW91dH1cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1tZC00XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICBcXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tbGFiZWxcXFwiPkxpbmUgaXRlbXM8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tdmFsdWVcXFwiPiR7TGluZUl0ZW1zfTwvZGl2PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcblxcbiAgICAgICAgXFxuICAgIDwvZGl2PlxcblxcbiAgICA8ZGl2IGNsYXNzPVxcXCJyb3cgdG9wLW1hcmdpblxcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb2wteHMtMTIgeHMtc3RhY2tlZC1zcGFjZXIgY29sLXNtLTYgbWVzc2FnZS1pbmZvLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1oZWFkZXJcXFwiPlRyYW5zYWN0aW9uIHN0YXR1cyBpbmZvcm1hdGlvbjwvZGl2PlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgICR7VHJhbnNhY3Rpb25TdGF0dXNJbmZvcm1hdGlvbn0gXFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgJHtGdW5jdGlvbmFsU3RhdHVzSW5mb3JtYXRpb259XFxuICAgICAgICAgICAgXFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIFxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29sLXhzLTEyIGNvbC1zbS02IG1lc3NhZ2UtaW5mby1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8taGVhZGVyXFxcIj5Eb2N1bWVudHMgYW5kIEF0dGFjaG1lbnQocyk8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2PlxcblxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJpbmxpbmUtYmxvY2tcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWxhYmVsXFxcIj48Y2VudGVyPlNvdXJjZSBkb2N1bWVudDwvY2VudGVyPjwvZGl2PlxcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlLWluZm8tZmlsZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgb25jbGljaz1cXFwicGxhdGZvcm02LnRyYW5zYWN0aW9uRG93bmxvYWQodGhpcylcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cXFwiZnQtaWNvbiBmdC1pY29uLSR7c3JjRG9jRXh0ZW5zaW9ufVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtZXh0ZW5zaW9uPVxcXCIke3NyY0RvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWlkcz1cXFwiJHtJZH1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXVyaT1cXFwiJHtTb3VyY2VEb2N1bWVudFVSSX1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWNvbnRlbnQtdHlwZT1cXFwiJHtTb3VyY2VEb2N1bWVudENvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke3NyY0RvY0ZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3NyY0RvY0ZpbGVOYW1lfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiaW5saW5lLWJsb2NrXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1sYWJlbFxcXCI+PGNlbnRlcj5UYXJnZXQgZG9jdW1lbnQ8L2NlbnRlcj48L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby12YWx1ZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZS1pbmZvLWZpbGVcXFwiPlxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG9uY2xpY2s9XFxcInBsYXRmb3JtNi50cmFuc2FjdGlvbkRvd25sb2FkKHRoaXMpXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XFxcImZ0LWljb24gZnQtaWNvbi0ke2N1ckRvY0V4dGVuc2lvbn1cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWV4dGVuc2lvbj1cXFwiJHtjdXJEb2NFeHRlbnNpb259XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1pZHM9XFxcIiR7SWR9XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS11cmk9XFxcIiR7Q3VycmVudERvY3VtZW50VVJJfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtY29udGVudC10eXBlPVxcXCIke0N1cnJlbnREb2N1bWVudENvbnRlbnRUeXBlfVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdmlldz1cXFwie3tWSUVXTkFNRX19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6dmFyaWFibGUgbmFtZT1cXFwiY3VyRG9jRmlsZU5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzbDpjYWxsLXRlbXBsYXRlIG5hbWU9XFxcImdldC1maWxlLW5hbWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2w6d2l0aC1wYXJhbSBuYW1lPVxcXCJwYXRoXFxcIiBzZWxlY3Q9XFxcIkN1cnJlbnREb2N1bWVudFVSSVxcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6Y2FsbC10ZW1wbGF0ZT5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94c2w6dmFyaWFibGU+XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1lc3NhZ2UtaW5mby1maWxlLW5hbWVcXFwiIHRpdGxlPVxcXCIke2N1ckRvY0ZpbGVOYW1lfVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2N1ckRvY0ZpbGVOYW1lfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgXFxuXFxuICAgICAgICAgICAgICAgICR7RGlzcGxheWFibGVBdHRhY2htZW50c31cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvZGl2PlxcblxcblxcbiAgICAgICAgPCEtLSBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJvbGRcXFwiIHdheSAtLT5cXG4gICAgICAgIFxcbiAgICAgICAgJHtJc3N1ZUxldmVsRXJyb3JPbGRXYXl9IFxcblxcbiAgICAgICAgPCEtLSBXaWxsIGRpc3BsYXkgaW5mbyBvbiBFcnJvcnMgY2FwdHVyZWQgdGhlIFxcXCJuZXdcXFwiIHdheSAtLT5cXG4gICAgICAgIFxcbiAgICAgICAgJHtpc3N1ZXNMZXZlbEVycm9yTmV3V2F5fVxcblxcbiAgICBcXG4gICAgPC9kaXY+XFxuXFxuICAgICR7QXVkaW9UcmFpbERpc3BsYXl9ICAgICAgICAgICAgXFxuICAgIFxcbiAgICAke1dvcmtmbG93RGlzcGxheX0gICAgICAgICAgICAgXFxuICAgIFxcbiAgICBcXG48L2Rpdj5cXG5cXFwiXFxcIlxcXCJcXG5cXG5wNi5waXBlbGluZS5wdXQgJ3BvcnRhbEh0bWwnLCBteV9odG1sLCAndGV4dC9odG1sJ1xcblxcbmxvZy5kZWJ1ZyAnUDZERU1PIFZpZXdfRGVtbyBUcmFuc2FjdGlvbiBzY3JpcHQgZXhlY3V0aW9uIGlzIE9WRVInXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM5MDIyM30seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlVuaW5zdGFsbEFwcGxpY2F0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVW5pbnN0YWxsQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVsZXRlIGFsbCBTZXJ2aWNlIEl0ZW1zLCBUcmFuc2FjdGlvbnMgYW5kIFdvcmtmbG93IFRhc2tzIHJlbGF0ZWQgdG8gcDZfZGVtb1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDA5NyxcInJldmlzaW9uSWRcIjpcIjkyNTQxZmNkYzhiNzYxMzQ4NTVlOTRjMDkxY2Q3NTg0XCIsXCJtYWluU2NyaXB0XCI6XCIvLyBUaGlzIHNjcmlwdCBpcyBleGVjdXRlZCB0byBjbGVhbiB1cCBhbGwgdGhlIGFwcGxpY2F0aW9ucyByZXNvdXJjZXNcXG5cXG4vLyBEZWxldGUgYWxsIHRyYW5zYWN0aW9ucyBhbmQgd29ya2Zsb3cgdGFza3NcXG5wNi5zcHJvYy5leGVjdXRlKCdwNl9kZW1vLkRlbGV0ZVA2RGVtb1RyYW5zYWN0aW9ucycpXFxubG9nLmRlYnVnICdEZW1vIGFwcCB0cmFuc2FjdGlvbnMgYW5kIHdvcmtmbG93IHRhc2tzIGRlbGV0ZWQnXFxuXFxuLy8gRGVzdHJveSByb3V0ZXNcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gV2ViM2ogLSBCbG9ja2NoYWluRXZlbnRIYW5kbGVyJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBSdWxlcyBEaXNwYXRjaGVyJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUXVvdGVzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnMnKVxcbnA2LmNhbWVsLmRlc3Ryb3lSb3V0ZSgncDZfZGVtbyBTY2hlZHVsZWQgY3JlYXRpb24gb2YgUkZRcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSRlFzJylcXG5wNi5jYW1lbC5kZXN0cm95Um91dGUoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFF1b3RlcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRBY2NlcHRlZFBPcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSZWplY3RlZFBPcycpXFxucDYuY2FtZWwuZGVzdHJveVJvdXRlKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzJylcXG5cXG4vLyBVbmRlcGxveSBidW5kbGVkIHJlc291cmNlc1xcbnA2LmJ1bmRsZWQudW5kZXBsb3koJ3A2X2RlbW8uUE9SZXZpZXcnKVxcbnA2LmJ1bmRsZWQudW5kZXBsb3koJ3A2X2RlbW8uVGFibGVJdGVtc0RhdGEnKVxcbmxvZy5kZWJ1ZyAnQnVuZGxlZCByZXNvdXJjZXMgZGVsZXRlZCBmcm9tIHRoZSBsb2NhbCBmaWxlIHN5c3RlbSdcXG5cXG4vLyBOb3RpZnkgUDYgdGhhdCB1bi1pbnN0YWxsYXRpb24gd2FzIHN1Y2Nlc3NmdWxcXG5wNi5waXBlbGluZS5wdXQoXFxcImluc3RhbGxTY3JpcHRSZXN1bHRcXFwiLCBcXFwidHJ1ZVxcXCIpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM5MDA5N30seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IlNlbmRRdW90ZVRvQmxvY2tjaGFpbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNlbmRRdW90ZVRvQmxvY2tjaGFpblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJXcml0ZSBRdW90ZSBpbiBhbiBFdGhlcmV1bSBzbWFydCBjb250cmFjdFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDExNSxcInJldmlzaW9uSWRcIjpcImRmMGY0N2IzZTM5OGMyZmI1ZjY3ODUzOTRmN2Y5MjQ4XCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5pbXBvcnQgamF2YS51dGlsLlVVSURcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIHF1b3RlSWRTdHJpbmcgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG4vLyBGZXRjaCB0aGUgcXVvdGUgdHJhbnNhY3Rpb24gaW5mb1xcbmRlZiBxdW90ZVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgcXVvdGVJZFN0cmluZylcXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmdldChxdW90ZVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG5kZWYgc3JjRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybCh0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpKVxcblN0cmluZyBxdW90ZUNvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZyhzcmNGaWxlKVxcblxcbi8vIFVwZGF0ZSB0cmFuc2FjdGlvbiBpbmZvIHN0YXR1c1xcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnU2VudCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXR0ZWREYXRlXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlUGspXFxuXFxuLy8gV3JpdGUgcXVvdGUgaW4gdGhlIGJsb2NrY2hhaW5cXG5kZWYgcXVvdGVJZCA9IFVVSUQuZnJvbVN0cmluZyhxdW90ZUlkU3RyaW5nKVxcblxcbmRlZiBxdW90ZVhNTCA9IHNsdXJwZXIucGFyc2VUZXh0KHF1b3RlQ29udGVudClcXG5kZWYgcmZxSWQgPSBVVUlELmZyb21TdHJpbmcocXVvdGVYTUwuUmVxdWVzdEZvclF1b3RhdGlvbkRvY3VtZW50UmVmZXJlbmNlLlVVSUQudGV4dCgpKVxcblxcbmhlbHBlci5zdWJtaXRRdW90ZShxdW90ZUlkLCByZnFJZCwgbm93LCBxdW90ZUNvbnRlbnQpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM5MDExNX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IkNyZWF0ZVJGUVRyYW5zYWN0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ3JlYXRlUkZRVHJhbnNhY3Rpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQ3JlYXRlIGEgUmVxdWVzdEZvclF1b3RhdGlvbiBVQkwgRG9jdW1lbnQgYW5kIHdyaXRlIGl0IGluIGFuIEV0aGVyZXVtIHNtYXJ0IGNvbnRyYWN0XCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1MzkwMTM3LFwicmV2aXNpb25JZFwiOlwiMzUyMzAwMGFmN2ExNjc5NzQ2YjhjNDA2ZDAwZWM1NGRcIixcIm1haW5TY3JpcHRcIjpcIi8qKlxcbiAqIFlvdSBjYW4gY2FsbCBhbm90aGVyIHNjcmlwdCBieSB1c2luZyAnSW5jbHVkZScgdGFnc1xcbiAqIFxcbiAqIEBpbmNsdWRlIFJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcXG4gKi9cXG5cXG5pbXBvcnQgamF2YS50aW1lLmZvcm1hdC5EYXRlVGltZUZvcm1hdHRlclxcbmltcG9ydCBqYXZhLnV0aWwuVVVJRFxcbmltcG9ydCBqYXZhLnV0aWwuUmFuZG9tXFxuXFxuXFxuLy8gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGJ1eWVyIGluIHRoZSBzeXN0ZW0gdG8ga2VlcCB0aGUgRGVtbyBBcHAgc2ltcGxlXFxuZGVmIGJ1eWVySWQgPSAnMSdcXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG4vLyBDYWxjdWxhdGUgaXNzdWUgZGF0ZSBhbmQgdGltZSBmb3IgZ2VuZXJhdGVkIFJGUSB0cmFuc2FjdGlvblxcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgaXNzdWVEYXRlID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJ5eXl5LU1NLWRkXFxcIikuZm9ybWF0KG5vdylcXG5kZWYgaXNzdWVUaW1lID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxuUmFuZG9tIHJhbmQgPSBuZXcgUmFuZG9tKClcXG5cXG4vLyBSZXRyaWV2ZSB0aGUgbGlzdCBvZiBjYXRlZ29yaWVzIGZyb20gSXRlbXMgdGFibGVcXG5kZWYgaXRlbVJlY29yZHMgPSBwNi50YWJsZS5sb29rdXAoJ3A2X2RlbW8uSXRlbXMnLCBbOl0pXFxuXFxuU2V0PFN0cmluZz4gY2F0ZWdvcmllcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKVxcbk1hcDxTdHJpbmcsU3RyaW5nPiBjYXRfdG9fdW9tID0gbmV3IEhhc2hNYXA8U3RyaW5nLFN0cmluZz4oKVxcblxcbmZvciAobXlSZWNvcmQgaW4gaXRlbVJlY29yZHMpIHtcXG4gICAgZGVmIGNhdGVnb3J5ID0gbXlSZWNvcmQuQ2F0ZWdvcnlcXG4gICAgZGVmIHVvbSA9IG15UmVjb3JkLlVPTVxcblxcbiAgICBpZiAoIWNhdGVnb3JpZXMuY29udGFpbnMoY2F0ZWdvcnkpKSB7XFxuICAgICAgICBjYXRlZ29yaWVzLmFkZChjYXRlZ29yeSlcXG4gICAgICAgIGNhdF90b191b20ucHV0KGNhdGVnb3J5LCB1b20pXFxuICAgIH1cXG59XFxuXFxuLy8gR2VuZXJhdGUgcmFuZG9tIFJGUSBsaW5lcyBmcm9tIGF2YWlsYWJsZSBpdGVtc1xcbmludCBuYkxpbmVNYXggPSBjYXRlZ29yaWVzLnNpemUoKVxcbmludCBxdWFudGl0eU1heCA9IDEwXFxuaW50IG5iTGluZXMgPSByYW5kLm5leHRJbnQobmJMaW5lTWF4KSArIDFcXG5cXG5kZWYgcmZxTGluZXM9ICcnXFxuZm9yIChpbnQgaSA9MDsgaTwgbmJMaW5lczsgaSsrKSB7XFxuICAgIFxcbiAgICBpbnQgY2F0ZWdvcnlJbmRleCA9IHJhbmQubmV4dEludChjYXRlZ29yaWVzLnNpemUoKSlcXG4gICAgZGVmIGNhdGVnb3J5QXJyYXkgPSBjYXRlZ29yaWVzLnRvQXJyYXkoKVxcbiAgICBcXG4gICAgZGVmIGNhdGVnb3J5ID0gY2F0ZWdvcnlBcnJheVtjYXRlZ29yeUluZGV4XVxcbiAgICBjYXRlZ29yaWVzLnJlbW92ZShjYXRlZ29yeSlcXG5cXG4gICAgZGVmIHF1YW50aXR5ID0gcmFuZC5uZXh0SW50KHF1YW50aXR5TWF4ICsgMSkgKyAxXFxuICAgIGRlZiB1b20gPSBjYXRfdG9fdW9tLmdldChjYXRlZ29yeSlcXG4gICAgICAgIFxcbiAgICByZnFMaW5lcyArPSBcXFwiXFxcIlxcXCI8Y2FjOlJlcXVlc3RGb3JRdW90YXRpb25MaW5lPlxcbiAgICAgIDxjYmM6SUQ+JHtpKzF9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpOb3RlPnNhbXBsZTwvY2JjOk5vdGU+XFxuICAgICAgPGNhYzpMaW5lSXRlbT5cXG4gICAgICAgICA8Y2JjOklEPiR7aSsxfTwvY2JjOklEPlxcbiAgICAgICAgIDxjYmM6UXVhbnRpdHkgdW5pdENvZGU9XFxcIiR7dW9tfVxcXCI+JHtxdWFudGl0eX08L2NiYzpRdWFudGl0eT5cXG4gICAgICAgICA8Y2FjOkl0ZW0+XFxuICAgICAgICAgICAgPGNiYzpEZXNjcmlwdGlvbj48L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8Y2JjOk5hbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoY2F0ZWdvcnkpfTwvY2JjOk5hbWU+XFxuICAgICAgICAgICAgPGNhYzpCdXllcnNJdGVtSWRlbnRpZmljYXRpb24+XFxuICAgICAgICAgICAgICAgPGNiYzpJRD4ke2J1eWVySWR9PC9jYmM6SUQ+XFxuICAgICAgICAgICAgPC9jYWM6QnV5ZXJzSXRlbUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgIDwvY2FjOkl0ZW0+XFxuICAgICAgPC9jYWM6TGluZUl0ZW0+XFxuICAgPC9jYWM6UmVxdWVzdEZvclF1b3RhdGlvbkxpbmU+XFxuICAgIFxcXCJcXFwiXFxcIlxcbn1cXG5cXG4vLyBHZW5lcmF0ZSB0aGUgdHJhbnNhY3Rpb24gSUQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIFVCTFxcbmRlZiB0cmFuc2FjdGlvbklkID0gVVVJRC5yYW5kb21VVUlEKClcXG5cXG5kZWYgcmVxdWVzdEZvclF1b3RhdGlvblVCTCA9IFxcXCJcXFwiXFxcIjxSZXF1ZXN0Rm9yUXVvdGF0aW9uIHhtbG5zPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpSZXF1ZXN0Rm9yUXVvdGF0aW9uLTJcXFwiIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIiB4bWxuczpjYmM9XFxcInVybjpvYXNpczpuYW1lczpzcGVjaWZpY2F0aW9uOnVibDpzY2hlbWE6eHNkOkNvbW1vbkJhc2ljQ29tcG9uZW50cy0yXFxcIj5cXG4gICA8Y2JjOlVCTFZlcnNpb25JRD4yLjA8L2NiYzpVQkxWZXJzaW9uSUQ+XFxuICAgPGNiYzpJRD4ke3RyYW5zYWN0aW9uSWR9PC9jYmM6SUQ+XFxuICAgPGNiYzpJc3N1ZURhdGU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVEYXRlKX08L2NiYzpJc3N1ZURhdGU+XFxuICAgPGNiYzpJc3N1ZVRpbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICAgPGNiYzpOb3RlPkF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIFJGUTwvY2JjOk5vdGU+XFxuICAgPGNhYzpPcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eT5cXG4gICAgICA8Y2FjOlBhcnR5PlxcbiAgICAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6TmFtZT5CdXllciBDb3JwLjwvY2JjOk5hbWU+XFxuICAgICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QXZvbiBXYXk8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOYW1lPlRoZXJlYWJvdXRzPC9jYmM6QnVpbGRpbmdOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6QnVpbGRpbmdOdW1iZXI+NTZBPC9jYmM6QnVpbGRpbmdOdW1iZXI+XFxuICAgICAgICAgICAgPGNiYzpDaXR5TmFtZT5CcmlkZ3RvdzwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgICAgIDxjYmM6UG9zdGFsWm9uZT5aWjk5IDFaWjwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PkF2b248L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICAgIDxjYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgICAgPGNiYzpMaW5lPjNyZCBGbG9vciwgUm9vbSA1PC9jYmM6TGluZT5cXG4gICAgICAgICAgICA8L2NhYzpBZGRyZXNzTGluZT5cXG4gICAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+R0I8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5PlxcbiAgIDwvY2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcbiAgIDxjYWM6U2VsbGVyU3VwcGxpZXJQYXJ0eT5cXG4gICAgICA8Y2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+Q08wMDE8L2NiYzpDdXN0b21lckFzc2lnbmVkQWNjb3VudElEPlxcbiAgICAgIDxjYWM6UGFydHk+XFxuICAgICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICAgICAgPGNiYzpOYW1lPlNlbGxlciBJbmMuPC9jYmM6TmFtZT5cXG4gICAgICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgICAgIDxjYmM6U3RyZWV0TmFtZT5CdXN5IFN0cmVldDwvY2JjOlN0cmVldE5hbWU+XFxuICAgICAgICAgICAgPGNiYzpCdWlsZGluZ05hbWU+VGhlcmVhYm91dHM8L2NiYzpCdWlsZGluZ05hbWU+XFxuICAgICAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj41NkE8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgICAgICA8Y2JjOkNpdHlOYW1lPkZhcnRoaW5nPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICAgICAgPGNiYzpQb3N0YWxab25lPkFBOTkgMUJCPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+SGVyZW1vdXRoc2hpcmU8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICAgIDxjYWM6QWRkcmVzc0xpbmU+XFxuICAgICAgICAgICAgICAgPGNiYzpMaW5lPlRoZSBSb3VuZGFib3V0PC9jYmM6TGluZT5cXG4gICAgICAgICAgICA8L2NhYzpBZGRyZXNzTGluZT5cXG4gICAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+R0I8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5PlxcbiAgIDwvY2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgJHtyZnFMaW5lc31cXG48L1JlcXVlc3RGb3JRdW90YXRpb24+XFxuXFxcIlxcXCJcXFwiXFxuXFxuLy8gV3JpdGUgdGhlIHRyYW5zYWN0aW9uIGluIHRoZSBibG9ja2NoYWluXFxuaGVscGVyLnN1Ym1pdFJGUSh0cmFuc2FjdGlvbklkLCBub3csIHJlcXVlc3RGb3JRdW90YXRpb25VQkwpXFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM5MDEzN30seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIHRoZSBmb3JtIHN1cHBvcnRpbmcgdGhlIGNyZWF0aW9uIG9mIGEgcXVvdGVcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzODk4OTUsXCJyZXZpc2lvbklkXCI6XCIyNmU2NmFhZDU4ZjIzNGMwODU4MjMwMTNlOWJjMzFhZlwiLFwibWFpblNjcmlwdFwiOlwiaW1wb3J0IGdyb292eS5qc29uLipcXG5pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlsc1xcblxcbmRlZiB4bWwgXFx0XFx0PSBwNi5waXBlbGluZS5nZXRYbWwgJ3htbCdcXG5sb2cuZGVidWcgJ1hNTCA9PT09PT0+ICcrIHhtbFxcblxcbnA2LnBpcGVsaW5lLnZhcmlhYmxlcygpLmVhY2goKSB7IGxvZy5kZWJ1ZyBcXFwiUElQRUxJTkUgVkFSICR7aXR9XFxcIiB9XFxuXFxuZGVmIG1wayBcXHRcXHQ9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoeG1sLml0ZW1EYXRhVHlwZS50ZXh0KCksIHhtbC5pdGVtSWRzLnRleHQoKS5zcGxpdCgnXFxcXFxcXFwuJykpXFxuZGVmIG1lc3NhZ2UgXFx0PSBwNi50cmFuc2FjdGlvbi5nZXQobXBrKVxcblxcbmxvZy5kZWJ1ZyAnTUVTU0FHRSA9PT09PT0+ICcrIG1lc3NhZ2VcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcihmYWxzZSwgdHJ1ZSlcXG5kZWYgdHJhbnNhY3Rpb24gPSBzbHVycGVyLnBhcnNlVGV4dChtZXNzYWdlKVxcblxcbmRlZiBteVVSSSA9IHRyYW5zYWN0aW9uLlNvdXJjZURvY3VtZW50VVJJLnRleHQoKVxcbiAgICAgICAgXFxuZGVmICBzcmNGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKG15VVJJKVxcbiAgICAgICAgXFxuU3RyaW5nIHJmcUNvbnRlbnQgPSBGaWxlVXRpbHMucmVhZEZpbGVUb1N0cmluZyhzcmNGaWxlKVxcblxcbmRlZiByZnEgPSBzbHVycGVyLnBhcnNlVGV4dChyZnFDb250ZW50KVxcblxcbmRlZiByZnFMaW5lcyA9IFxcXCJcXFwiXFxucmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLmVhY2h7IHJmcUxpbmUgLT4gXFxuXFxuICAgIGRlZiBpdGVtQ2F0ZWdvcnkgPSByZnFMaW5lLkxpbmVJdGVtLkl0ZW0uTmFtZS50ZXh0KClcXG4gICAgXFxuICAgIGRlZiBpdGVtUmVjb3JkcyA9IHA2LnRhYmxlLmxvb2t1cCgncDZfZGVtby5JdGVtcycsIFsnQ2F0ZWdvcnknOml0ZW1DYXRlZ29yeV0pXFxuXFxuICAgIGRlZiBpdGVtcz0gJydcXG4gICAgZm9yKG15UmVjb3JkIGluIGl0ZW1SZWNvcmRzKSB7XFxuICAgICAgICBkZWYgZGVzY3JpcHRpb24gPSBteVJlY29yZC5EZXNjcmlwdGlvblxcbiAgICAgICAgZGVmIGlkID0gbXlSZWNvcmQuSWRcXG4gICAgICAgIGRlZiB1b20gPSBteVJlY29yZC5VT01cXG4gICAgICAgIGRlZiB1bml0UHJpY2UgPSBteVJlY29yZC5Vbml0UHJpY2VcXG4gICAgICAgIGRlZiBjdXJyZW5jeSA9IG15UmVjb3JkLkN1cnJlbmN5XFxuICAgIFxcbiAgICAgICAgaWYgKCEnJy5lcXVhbHMoaXRlbXMpKSB7XFxuICAgICAgICAgICAgaXRlbXMgKz0gJyxcXFxcclxcXFxuJ1xcbiAgICAgICAgfSAgICAgICAgXFxuICAgICAgICBpdGVtcyArPSAneyBcXFwiaWRcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGRlc2NyaXB0aW9uKSsnLCBcXFwicHJpY2VcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKHVuaXRQcmljZSkrJywgXFxcInVuaXRcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGN1cnJlbmN5KSsnLCBcXFwiY3VycmVuY3lcXFwiOiAnK0pzb25PdXRwdXQudG9Kc29uKGN1cnJlbmN5KSsnLCBcXFwidW9tXFxcIjogJytKc29uT3V0cHV0LnRvSnNvbih1b20pKycgfSdcXG4gICAgfSAgICAgICAgICAgICAgICAgXFxuICAgICAgICAgICAgXFxuICAgIGxvZy5kZWJ1ZyAnSVRFTVMgPT4gJytpdGVtcyAgXFxuXFxuXFxuICAgIGRlZiBvbmVMaW5lID0gXFxcIlxcXCJcXFwiIHtcXG4gICAgICAgICAgICAgXFxcImlkXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnFMaW5lLklELnRleHQoKSl9LFxcbiAgICAgICAgICAgICBcXFwibm90ZVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5MaW5lSXRlbS5JdGVtLk5hbWUudGV4dCgpKX0sXFxuICAgICAgICAgICAgIFxcXCJxdWFudGl0eVxcXCI6ICR7SnNvbk91dHB1dC50b0pzb24ocmZxTGluZS5MaW5lSXRlbS5RdWFudGl0eS50ZXh0KCkpfSxcXG4gICAgICAgICAgICAgXFxcIml0ZW1zXFxcIjogW1xcbiAgICAgICAgICAgICAgICAgJHtpdGVtc31cXG4gICAgICAgICAgICBdXFxuICAgICAgICB9XFxcIlxcXCJcXFwiXFxuICAgICAgICBcXG5cXG4gICAgaWYgKCFcXFwiXFxcIi5lcXVhbHMocmZxTGluZXMpKSB7XFxuICAgICAgICByZnFMaW5lcyArPSBcXFwiLFxcXFxyXFxcXG5cXFwiXFxuICAgIH1cXG4gICAgIHJmcUxpbmVzICs9IG9uZUxpbmVcXG59XFxuXFxubG9nLmRlYnVnICdSRlEgTElORVMgPT4gJytyZnFMaW5lc1xcblxcbmRlZiBtb2RlbCA9IFxcXCJcXFwiXFxcIntcXG4gICAgXFxcInJmcVxcXCI6IHsgXFxuICAgICAgICBcXFwiaWRcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5JRC50ZXh0KCkpfSxcXG4gICAgICAgIFxcXCJpc3N1ZURhdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5Jc3N1ZURhdGUudGV4dCgpKX0sXFxuICAgICAgICBcXFwiaXNzdWVUaW1lXFxcIjogJHtKc29uT3V0cHV0LnRvSnNvbihyZnEuSXNzdWVUaW1lLnRleHQoKSl9LFxcbiAgICAgICAgXFxcIm5vdGVcXFwiOiAke0pzb25PdXRwdXQudG9Kc29uKHJmcS5Ob3RlLnRleHQoKSl9XFxuICAgIH0sXFxuICAgIFxcXCJsaW5lc1xcXCI6IFtcXG4gICAgICAgICR7cmZxTGluZXN9XFxuICAgIF1cXG59XFxcIlxcXCJcXFwiXFxuXFxubG9nLmRlYnVnICdNT0RFTCA9PiAnK21vZGVsXFxuXFxuZGVmIGZvcm0gPSBwNi5yZXNvdXJjZS5nZXQoICdXRl9SRlFfRm9ybScgKVxcbmFzc2VydCBmb3JtICE9IG51bGwgOiBcXFwiVW5hYmxlIHRvIGZpbmQgdGhlIGNvbXBpbGVkIHJlc291cmNlIFdGX1JGUV9Gb3JtXFxcIlxcblxcbnA2LnBpcGVsaW5lLnB1dCAnbW9kZWwnLCBtb2RlbFxcbnA2LnBpcGVsaW5lLnB1dCAnZm9ybScsIGZvcm1cXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W3tcIm5hbWVcIjpcIldGX1JGUV9Gb3JtXCIsXCJ0eXBlXCI6XCJUWVBFU0NSSVBUXCIsXCJjb250ZW50XCI6XCIvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXFxuLyoqKioqKi8gXFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxcbi8qKioqKiovIFxcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxcbi8qKioqKiovIFxcdFxcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XFxuLyoqKioqKi8gXFx0XFx0XFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdFxcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXFxuLyoqKioqKi8gXFx0XFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xcbi8qKioqKiovIFxcdFxcdFxcdGk6IG1vZHVsZUlkLFxcbi8qKioqKiovIFxcdFxcdFxcdGw6IGZhbHNlLFxcbi8qKioqKiovIFxcdFxcdFxcdGV4cG9ydHM6IHt9XFxuLyoqKioqKi8gXFx0XFx0fTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxcbi8qKioqKiovIFxcdFxcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0XFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxcbi8qKioqKiovIFxcdFxcdG1vZHVsZS5sID0gdHJ1ZTtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdFxcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xcbi8qKioqKiovIFxcdH1cXG4vKioqKioqL1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XFxuLyoqKioqKi8gXFx0XFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xcbi8qKioqKiovIFxcdFxcdFxcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XFxuLyoqKioqKi8gXFx0XFx0XFx0XFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcXG4vKioqKioqLyBcXHRcXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcbi8qKioqKiovIFxcdFxcdFxcdFxcdGdldDogZ2V0dGVyXFxuLyoqKioqKi8gXFx0XFx0XFx0fSk7XFxuLyoqKioqKi8gXFx0XFx0fVxcbi8qKioqKiovIFxcdH07XFxuLyoqKioqKi9cXG4vKioqKioqLyBcXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xcbi8qKioqKiovIFxcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xcbi8qKioqKiovIFxcdFxcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xcbi8qKioqKiovIFxcdFxcdFxcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XFxuLyoqKioqKi8gXFx0XFx0XFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcXG4vKioqKioqLyBcXHRcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XFxuLyoqKioqKi8gXFx0XFx0cmV0dXJuIGdldHRlcjtcXG4vKioqKioqLyBcXHR9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXFxuLyoqKioqKi8gXFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xcbi8qKioqKiovXFxuLyoqKioqKi8gXFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cXG4vKioqKioqLyBcXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcXFwiXFxcIjtcXG4vKioqKioqL1xcbi8qKioqKiovIFxcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xcbi8qKioqKiovIFxcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDkwKTtcXG4vKioqKioqLyB9KVxcbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuLyoqKioqKi8gKFtcXG4vKiAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbm1vZHVsZS5leHBvcnRzID0gUmVhY3Q7XFxuXFxuLyoqKi8gfSksXFxuLyogMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XFxuXFxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXFxuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXFxuXFxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XFxudmFyIGNhY2hlZENsZWFyVGltZW91dDtcXG5cXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcXG59XFxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XFxufVxcbihmdW5jdGlvbiAoKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XFxuICAgICAgICB9XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcXG4gICAgICAgIH1cXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcXG4gICAgfVxcbn0gKCkpXFxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcXG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcXG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfVxcbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcXG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcXG4gICAgfSBjYXRjaChlKXtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xcbiAgICAgICAgfSBjYXRjaChlKXtcXG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcblxcbn1cXG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XFxuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXFxuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XFxuICAgIH1cXG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcXG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xcbiAgICB9IGNhdGNoIChlKXtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xcbiAgICAgICAgfSBjYXRjaCAoZSl7XFxuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXFxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuXFxuXFxufVxcbnZhciBxdWV1ZSA9IFtdO1xcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xcbnZhciBjdXJyZW50UXVldWU7XFxudmFyIHF1ZXVlSW5kZXggPSAtMTtcXG5cXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XFxuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIGRyYWluaW5nID0gZmFsc2U7XFxuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XFxuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xcbiAgICB9XFxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcXG4gICAgICAgIGRyYWluUXVldWUoKTtcXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xcbiAgICBpZiAoZHJhaW5pbmcpIHtcXG4gICAgICAgIHJldHVybjtcXG4gICAgfVxcbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcXG4gICAgZHJhaW5pbmcgPSB0cnVlO1xcblxcbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xcbiAgICB3aGlsZShsZW4pIHtcXG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xcbiAgICAgICAgcXVldWUgPSBbXTtcXG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcXG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XFxuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XFxuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XFxuICAgIH1cXG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcXG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcXG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xcbn1cXG5cXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XFxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcXG4gICAgfVxcbn07XFxuXFxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xcbiAgICB0aGlzLmZ1biA9IGZ1bjtcXG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xcbn1cXG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XFxuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xcbn07XFxucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcXG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xcbnByb2Nlc3MuZW52ID0ge307XFxucHJvY2Vzcy5hcmd2ID0gW107XFxucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXFxucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xcblxcbmZ1bmN0aW9uIG5vb3AoKSB7fVxcblxcbnByb2Nlc3Mub24gPSBub29wO1xcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xcbnByb2Nlc3Mub25jZSA9IG5vb3A7XFxucHJvY2Vzcy5vZmYgPSBub29wO1xcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcXG5wcm9jZXNzLmVtaXQgPSBub29wO1xcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcXG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xcblxcbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cXG5cXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XFxufTtcXG5cXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XFxufTtcXG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5KCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5KF8ubm9vcCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcXG5cXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cXG52YXIgcm9vdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHJvb3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHRoZVxcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMC4xLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIG9iamVjdCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzT2JqZWN0KHt9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzT2JqZWN0KFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdChfLm5vb3ApO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3QobnVsbCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc09iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcXFwib2JqZWN0XFxcIi5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc09iamVjdExpa2Uoe30pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc09iamVjdExpa2UobnVsbCk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNPYmplY3RMaWtlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNOYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTAxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDQpO1xcblxcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXFxuICovXFxuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XFxuICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXkpO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc05hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldE5hdGl2ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRSYXdUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX29iamVjdFRvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk1KTtcXG5cXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBzeW1Ub1N0cmluZ1RhZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10udG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldFRhZ2Agd2l0aG91dCBmYWxsYmFja3MgZm9yIGJ1Z2d5IGVudmlyb25tZW50cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlKSB7XFxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XFxuICB9XFxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXFxuICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UmF3VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSlcXG4gICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19vYmplY3RUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlR2V0VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zcGxpY2VfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRJbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldEluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZGVlcEVxdWFsX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fZGVsZXRlSW5fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19rZXlzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHN0cnVjdHVyZSA9IHtcXG4gIGVtcHR5OiB7fSxcXG4gIGVtcHR5TGlzdDogW10sXFxuICBnZXRJbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRJbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHNldEluOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldEluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgZGVlcEVxdWFsOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2RlZXBFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIGRlbGV0ZUluOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2RlbGV0ZUluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgZnJvbUpTOiBmdW5jdGlvbiBmcm9tSlModmFsdWUpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfSxcXG4gIGtleXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fa2V5c19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gIHNpemU6IGZ1bmN0aW9uIHNpemUoYXJyYXkpIHtcXG4gICAgcmV0dXJuIGFycmF5ID8gYXJyYXkubGVuZ3RoIDogMDtcXG4gIH0sXFxuICBzcGxpY2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3BsaWNlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgdG9KUzogZnVuY3Rpb24gdG9KUyh2YWx1ZSkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHJ1Y3R1cmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFBlcmZvcm1zIGFcXG4gKiBbYFNhbWVWYWx1ZVplcm9gXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1zYW1ldmFsdWV6ZXJvKVxcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XFxuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcXG4gKlxcbiAqIF8uZXEob2JqZWN0LCBvYmplY3QpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uZXEob2JqZWN0LCBvdGhlcik7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uZXEoJ2EnLCAnYScpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uZXEoJ2EnLCBPYmplY3QoJ2EnKSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uZXEoTmFOLCBOYU4pO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBlcSh2YWx1ZSwgb3RoZXIpIHtcXG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG5cXG5cXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXFxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cXG4gKi9cXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XFxuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvS2V5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9uZW50c19Qcm92aWRlcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jb25uZWN0X2Nvbm5lY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAwKTtcXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBQcm92aWRlciAqL1xcbi8qIHVudXNlZCBoYXJtb255IHJlZXhwb3J0IGNyZWF0ZVByb3ZpZGVyICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29ubmVjdEFkdmFuY2VkICovXFxuLyogaGFybW9ueSByZWV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Nvbm5lY3RfY29ubmVjdF9fW1xcXCJhXFxcIl07IH0pO1xcblxcblxcblxcblxcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbi8qKlxcbiAqIFVzZSBpbnZhcmlhbnQoKSB0byBhc3NlcnQgc3RhdGUgd2hpY2ggeW91ciBwcm9ncmFtIGFzc3VtZXMgdG8gYmUgdHJ1ZS5cXG4gKlxcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXFxuICogdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGJyb2tlIGFuZCB3aGF0IHlvdSB3ZXJlXFxuICogZXhwZWN0aW5nLlxcbiAqXFxuICogVGhlIGludmFyaWFudCBtZXNzYWdlIHdpbGwgYmUgc3RyaXBwZWQgaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBpbnZhcmlhbnRcXG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXFxuICovXFxuXFxudmFyIGludmFyaWFudCA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGlmICghY29uZGl0aW9uKSB7XFxuICAgIHZhciBlcnJvcjtcXG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXFxuICAgICAgICAnTWluaWZpZWQgZXhjZXB0aW9uIG9jY3VycmVkOyB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgJyArXFxuICAgICAgICAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nXFxuICAgICAgKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcXG4gICAgICB2YXIgYXJnSW5kZXggPSAwO1xcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKFxcbiAgICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsgfSlcXG4gICAgICApO1xcbiAgICAgIGVycm9yLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XFxuICAgIH1cXG5cXG4gICAgZXJyb3IuZnJhbWVzVG9Qb3AgPSAxOyAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGludmFyaWFudCdzIG93biBmcmFtZVxcbiAgICB0aHJvdyBlcnJvcjtcXG4gIH1cXG59O1xcblxcbm1vZHVsZS5leHBvcnRzID0gaW52YXJpYW50O1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG52YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXywgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyohXFxuICBDb3B5cmlnaHQgKGMpIDIwMTYgSmVkIFdhdHNvbi5cXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSAoTUlUKSwgc2VlXFxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXFxuKi9cXG4vKiBnbG9iYWwgZGVmaW5lICovXFxuXFxuKGZ1bmN0aW9uICgpIHtcXG5cXHQndXNlIHN0cmljdCc7XFxuXFxuXFx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xcblxcblxcdGZ1bmN0aW9uIGNsYXNzTmFtZXMgKCkge1xcblxcdFxcdHZhciBjbGFzc2VzID0gW107XFxuXFxuXFx0XFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcXG5cXHRcXHRcXHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xcblxcdFxcdFxcdGlmICghYXJnKSBjb250aW51ZTtcXG5cXG5cXHRcXHRcXHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XFxuXFxuXFx0XFx0XFx0aWYgKGFyZ1R5cGUgPT09ICdzdHJpbmcnIHx8IGFyZ1R5cGUgPT09ICdudW1iZXInKSB7XFxuXFx0XFx0XFx0XFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XFxuXFx0XFx0XFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcXG5cXHRcXHRcXHRcXHRjbGFzc2VzLnB1c2goY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpKTtcXG5cXHRcXHRcXHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XFxuXFx0XFx0XFx0XFx0Zm9yICh2YXIga2V5IGluIGFyZykge1xcblxcdFxcdFxcdFxcdFxcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcXG5cXHRcXHRcXHRcXHRcXHRcXHRjbGFzc2VzLnB1c2goa2V5KTtcXG5cXHRcXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0XFx0fVxcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xcblxcdH1cXG5cXG5cXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcXG5cXHRcXHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XFxuXFx0fSBlbHNlIGlmICh0cnVlKSB7XFxuXFx0XFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxcblxcdFxcdCEoX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyA9IFtdLCBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXyA9IChmdW5jdGlvbiAoKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGNsYXNzTmFtZXM7XFxuXFx0XFx0fSkuYXBwbHkoZXhwb3J0cywgX19XRUJQQUNLX0FNRF9ERUZJTkVfQVJSQVlfXyksXFxuXFx0XFx0XFx0XFx0X19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18gIT09IHVuZGVmaW5lZCAmJiAobW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfQU1EX0RFRklORV9SRVNVTFRfXykpO1xcblxcdH0gZWxzZSB7XFxuXFx0XFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xcblxcdH1cXG59KCkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheU1hcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29weUFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdHJpbmdUb1BhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NCk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgVXRpbFxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgcHJvcGVydHkgcGF0aCBhcnJheS5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy50b1BhdGgoJ2EuYi5jJyk7XFxuICogLy8gPT4gWydhJywgJ2InLCAnYyddXFxuICpcXG4gKiBfLnRvUGF0aCgnYVswXS5iLmMnKTtcXG4gKiAvLyA9PiBbJ2EnLCAnMCcsICdiJywgJ2MnXVxcbiAqL1xcbmZ1bmN0aW9uIHRvUGF0aCh2YWx1ZSkge1xcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3RvS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gIH1cXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gW3ZhbHVlXSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NvcHlBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RyaW5nVG9QYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XFxuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XFxuICAgIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNTeW1ib2wpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBTeW1ib2wgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uU3ltYm9sO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFN5bWJvbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIG5hdGl2ZUNyZWF0ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0LCAnY3JlYXRlJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobmF0aXZlQ3JlYXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbGlzdENhY2hlQ2xlYXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19saXN0Q2FjaGVEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19saXN0Q2FjaGVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTExKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19saXN0Q2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19saXN0Q2FjaGVTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEzKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAY29uc3RydWN0b3JcXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxcbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2xpc3RDYWNoZUNsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19saXN0Q2FjaGVEZWxldGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2xpc3RDYWNoZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbGlzdENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19saXN0Q2FjaGVTZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoTGlzdENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXFxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cXG4gKi9cXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcXG4gIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcXG4gICAgICByZXR1cm4gbGVuZ3RoO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gLTE7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFzc29jSW5kZXhPZik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzS2V5YWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTUpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWFwIGRhdGEuXFxuICovXFxuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xcbiAgdmFyIGRhdGEgPSBtYXAuX19kYXRhX187XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNLZXlhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShrZXkpXFxuICAgID8gZGF0YVt0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8gJ3N0cmluZycgOiAnaGFzaCddXFxuICAgIDogZGF0YS5tYXA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldE1hcERhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nik7XFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGFzc2lnblZhbHVlYCBhbmQgYGFzc2lnbk1lcmdlVmFsdWVgIHdpdGhvdXRcXG4gKiB2YWx1ZSBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBtb2RpZnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBhc3NpZ24uXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gYXNzaWduLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VBc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIGlmIChrZXkgPT0gJ19fcHJvdG9fXycgJiYgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19kZWZpbmVQcm9wZXJ0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIHtcXG4gICAgICAnY29uZmlndXJhYmxlJzogdHJ1ZSxcXG4gICAgICAnZW51bWVyYWJsZSc6IHRydWUsXFxuICAgICAgJ3ZhbHVlJzogdmFsdWUsXFxuICAgICAgJ3dyaXRhYmxlJzogdHJ1ZVxcbiAgICB9KTtcXG4gIH0gZWxzZSB7XFxuICAgIG9iamVjdFtrZXldID0gdmFsdWU7XFxuICB9XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VBc3NpZ25WYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcmlnaW5hbE1vZHVsZSkge1xcblxcdGlmKCFvcmlnaW5hbE1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcXG5cXHRcXHR2YXIgbW9kdWxlID0gT2JqZWN0LmNyZWF0ZShvcmlnaW5hbE1vZHVsZSk7XFxuXFx0XFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XFxuXFx0XFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImxvYWRlZFxcXCIsIHtcXG5cXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcblxcdFxcdFxcdGdldDogZnVuY3Rpb24oKSB7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIG1vZHVsZS5sO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9KTtcXG5cXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcXFwiaWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUuaTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImV4cG9ydHNcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHR9KTtcXG5cXHRcXHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcXG5cXHR9XFxuXFx0cmV0dXJuIG1vZHVsZTtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0xlbmd0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xcbiAqIG5vdCBhIGZ1bmN0aW9uIGFuZCBoYXMgYSBgdmFsdWUubGVuZ3RoYCB0aGF0J3MgYW4gaW50ZWdlciBncmVhdGVyIHRoYW4gb3JcXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0xlbmd0aF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUubGVuZ3RoKSAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0FycmF5TGlrZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc09iamVjdExpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNSk7XFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cXG52YXIgb2JqZWN0Q3RvclN0cmluZyA9IGZ1bmNUb1N0cmluZy5jYWxsKE9iamVjdCk7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIHRoYXQgaXMsIGFuIG9iamVjdCBjcmVhdGVkIGJ5IHRoZVxcbiAqIGBPYmplY3RgIGNvbnN0cnVjdG9yIG9yIG9uZSB3aXRoIGEgYFtbUHJvdG90eXBlXV1gIG9mIGBudWxsYC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjguMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogZnVuY3Rpb24gRm9vKCkge1xcbiAqICAgdGhpcy5hID0gMTtcXG4gKiB9XFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QobmV3IEZvbyk7XFxuICogLy8gPT4gZmFsc2VcXG4gKlxcbiAqIF8uaXNQbGFpbk9iamVjdChbMSwgMiwgM10pO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoeyAneCc6IDAsICd5JzogMCB9KTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzUGxhaW5PYmplY3QoT2JqZWN0LmNyZWF0ZShudWxsKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICE9IG9iamVjdFRhZykge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgcHJvdG8gPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XFxuICByZXR1cm4gdHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJlxcbiAgICBmdW5jVG9TdHJpbmcuY2FsbChDdG9yKSA9PSBvYmplY3RDdG9yU3RyaW5nO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1BsYWluT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gZm9ybWF0TmFtZTtcXG5mdW5jdGlvbiBmb3JtYXROYW1lKGNvbnRleHQsIG5hbWUpIHtcXG4gIHZhciBzZWN0aW9uUHJlZml4ID0gY29udGV4dC5fcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXg7XFxuXFxuICByZXR1cm4gIXNlY3Rpb25QcmVmaXggPyBuYW1lIDogc2VjdGlvblByZWZpeCArIFxcXCIuXFxcIiArIG5hbWU7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDI2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFjdGlvblR5cGVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhY3Rpb25UeXBlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlJbnNlcnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5SW5zZXJ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheU1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5TW92ZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlQb3BcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UG9wOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVB1c2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UHVzaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlSZW1vdmVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5UmVtb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZUFsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmVBbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U2hpZnRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5U3BsaWNlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVNwbGljZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTd2FwXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVN3YXA7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5VW5zaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlVbnNoaWZ0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhdXRvZmlsbFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXV0b2ZpbGw7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJsdXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGJsdXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNoYW5nZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gY2hhbmdlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJkZXN0cm95XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBkZXN0cm95OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkZpZWxkc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRmllbGRzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGaWVsZEFycmF5XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGaWVsZEFycmF5OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGb3JtXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBGb3JtOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJGb3JtU2VjdGlvblxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gRm9ybVNlY3Rpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImZvY3VzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBmb2N1czsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZm9ybVZhbHVlU2VsZWN0b3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvcm1WYWx1ZVNlbGVjdG9yOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtTmFtZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1OYW1lczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybVZhbHVlc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVZhbHVlczsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZ2V0Rm9ybUluaXRpYWxWYWx1ZXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGdldEZvcm1Jbml0aWFsVmFsdWVzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybVN5bmNFcnJvcnM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImdldEZvcm1Bc3luY0Vycm9yc1xcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZ2V0Rm9ybUFzeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3luY1dhcm5pbmdzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtU3luY1dhcm5pbmdzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJnZXRGb3JtU3VibWl0RXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBnZXRGb3JtU3VibWl0RXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpbml0aWFsaXplXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbml0aWFsaXplOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpc0RpcnR5XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc0RpcnR5OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpc0ludmFsaWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGlzSW52YWxpZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNQcmlzdGluZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNQcmlzdGluZTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNWYWxpZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaXNWYWxpZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiaXNTdWJtaXR0aW5nXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpc1N1Ym1pdHRpbmc7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImhhc1N1Ym1pdFN1Y2NlZWRlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gaGFzU3VibWl0U3VjY2VlZGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJoYXNTdWJtaXRGYWlsZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGhhc1N1Ym1pdEZhaWxlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwicHJvcFR5cGVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBwcm9wVHlwZXM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInJlZHVjZXJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHJlZHVjZXI7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInJlZHV4Rm9ybVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVkdXhGb3JtOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZXNldFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzZXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdEZhaWxlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0RmFpbGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzZXRTdWJtaXRTdWNjZWVkZWRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHNldFN1Ym1pdFN1Y2NlZWRlZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRBc3luY1ZhbGlkYXRpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0QXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdGFydFN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3RhcnRTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0b3BBc3luY1ZhbGlkYXRpb25cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0b3BBc3luY1ZhbGlkYXRpb247IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0b3BTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0b3BTdWJtaXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN1Ym1pdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTdWJtaXNzaW9uRXJyb3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1Ym1pc3Npb25FcnJvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidG91Y2hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnJlZ2lzdGVyRmllbGRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVucmVnaXN0ZXJGaWVsZDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidW50b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW50b3VjaDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwidmFsdWVzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB2YWx1ZXM7IH0pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUFsbF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcblxcbnZhciBfY3JlYXRlQWxsID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlQWxsX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxudmFyIGFjdGlvblR5cGVzID0gX2NyZWF0ZUFsbC5hY3Rpb25UeXBlcyxcXG4gICAgYXJyYXlJbnNlcnQgPSBfY3JlYXRlQWxsLmFycmF5SW5zZXJ0LFxcbiAgICBhcnJheU1vdmUgPSBfY3JlYXRlQWxsLmFycmF5TW92ZSxcXG4gICAgYXJyYXlQb3AgPSBfY3JlYXRlQWxsLmFycmF5UG9wLFxcbiAgICBhcnJheVB1c2ggPSBfY3JlYXRlQWxsLmFycmF5UHVzaCxcXG4gICAgYXJyYXlSZW1vdmUgPSBfY3JlYXRlQWxsLmFycmF5UmVtb3ZlLFxcbiAgICBhcnJheVJlbW92ZUFsbCA9IF9jcmVhdGVBbGwuYXJyYXlSZW1vdmVBbGwsXFxuICAgIGFycmF5U2hpZnQgPSBfY3JlYXRlQWxsLmFycmF5U2hpZnQsXFxuICAgIGFycmF5U3BsaWNlID0gX2NyZWF0ZUFsbC5hcnJheVNwbGljZSxcXG4gICAgYXJyYXlTd2FwID0gX2NyZWF0ZUFsbC5hcnJheVN3YXAsXFxuICAgIGFycmF5VW5zaGlmdCA9IF9jcmVhdGVBbGwuYXJyYXlVbnNoaWZ0LFxcbiAgICBhdXRvZmlsbCA9IF9jcmVhdGVBbGwuYXV0b2ZpbGwsXFxuICAgIGJsdXIgPSBfY3JlYXRlQWxsLmJsdXIsXFxuICAgIGNoYW5nZSA9IF9jcmVhdGVBbGwuY2hhbmdlLFxcbiAgICBkZXN0cm95ID0gX2NyZWF0ZUFsbC5kZXN0cm95LFxcbiAgICBGaWVsZCA9IF9jcmVhdGVBbGwuRmllbGQsXFxuICAgIEZpZWxkcyA9IF9jcmVhdGVBbGwuRmllbGRzLFxcbiAgICBGaWVsZEFycmF5ID0gX2NyZWF0ZUFsbC5GaWVsZEFycmF5LFxcbiAgICBGb3JtID0gX2NyZWF0ZUFsbC5Gb3JtLFxcbiAgICBGb3JtU2VjdGlvbiA9IF9jcmVhdGVBbGwuRm9ybVNlY3Rpb24sXFxuICAgIGZvY3VzID0gX2NyZWF0ZUFsbC5mb2N1cyxcXG4gICAgZm9ybVZhbHVlU2VsZWN0b3IgPSBfY3JlYXRlQWxsLmZvcm1WYWx1ZVNlbGVjdG9yLFxcbiAgICBnZXRGb3JtTmFtZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1OYW1lcyxcXG4gICAgZ2V0Rm9ybVZhbHVlcyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVZhbHVlcyxcXG4gICAgZ2V0Rm9ybUluaXRpYWxWYWx1ZXMgPSBfY3JlYXRlQWxsLmdldEZvcm1Jbml0aWFsVmFsdWVzLFxcbiAgICBnZXRGb3JtU3luY0Vycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybVN5bmNFcnJvcnMsXFxuICAgIGdldEZvcm1Bc3luY0Vycm9ycyA9IF9jcmVhdGVBbGwuZ2V0Rm9ybUFzeW5jRXJyb3JzLFxcbiAgICBnZXRGb3JtU3luY1dhcm5pbmdzID0gX2NyZWF0ZUFsbC5nZXRGb3JtU3luY1dhcm5pbmdzLFxcbiAgICBnZXRGb3JtU3VibWl0RXJyb3JzID0gX2NyZWF0ZUFsbC5nZXRGb3JtU3VibWl0RXJyb3JzLFxcbiAgICBpbml0aWFsaXplID0gX2NyZWF0ZUFsbC5pbml0aWFsaXplLFxcbiAgICBpc0RpcnR5ID0gX2NyZWF0ZUFsbC5pc0RpcnR5LFxcbiAgICBpc0ludmFsaWQgPSBfY3JlYXRlQWxsLmlzSW52YWxpZCxcXG4gICAgaXNQcmlzdGluZSA9IF9jcmVhdGVBbGwuaXNQcmlzdGluZSxcXG4gICAgaXNWYWxpZCA9IF9jcmVhdGVBbGwuaXNWYWxpZCxcXG4gICAgaXNTdWJtaXR0aW5nID0gX2NyZWF0ZUFsbC5pc1N1Ym1pdHRpbmcsXFxuICAgIGhhc1N1Ym1pdFN1Y2NlZWRlZCA9IF9jcmVhdGVBbGwuaGFzU3VibWl0U3VjY2VlZGVkLFxcbiAgICBoYXNTdWJtaXRGYWlsZWQgPSBfY3JlYXRlQWxsLmhhc1N1Ym1pdEZhaWxlZCxcXG4gICAgcHJvcFR5cGVzID0gX2NyZWF0ZUFsbC5wcm9wVHlwZXMsXFxuICAgIHJlZHVjZXIgPSBfY3JlYXRlQWxsLnJlZHVjZXIsXFxuICAgIHJlZHV4Rm9ybSA9IF9jcmVhdGVBbGwucmVkdXhGb3JtLFxcbiAgICByZWdpc3RlckZpZWxkID0gX2NyZWF0ZUFsbC5yZWdpc3RlckZpZWxkLFxcbiAgICByZXNldCA9IF9jcmVhdGVBbGwucmVzZXQsXFxuICAgIHNldFN1Ym1pdEZhaWxlZCA9IF9jcmVhdGVBbGwuc2V0U3VibWl0RmFpbGVkLFxcbiAgICBzZXRTdWJtaXRTdWNjZWVkZWQgPSBfY3JlYXRlQWxsLnNldFN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBfY3JlYXRlQWxsLnN0YXJ0QXN5bmNWYWxpZGF0aW9uLFxcbiAgICBzdGFydFN1Ym1pdCA9IF9jcmVhdGVBbGwuc3RhcnRTdWJtaXQsXFxuICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfY3JlYXRlQWxsLnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgIHN0b3BTdWJtaXQgPSBfY3JlYXRlQWxsLnN0b3BTdWJtaXQsXFxuICAgIHN1Ym1pdCA9IF9jcmVhdGVBbGwuc3VibWl0LFxcbiAgICBTdWJtaXNzaW9uRXJyb3IgPSBfY3JlYXRlQWxsLlN1Ym1pc3Npb25FcnJvcixcXG4gICAgdG91Y2ggPSBfY3JlYXRlQWxsLnRvdWNoLFxcbiAgICB1bnJlZ2lzdGVyRmllbGQgPSBfY3JlYXRlQWxsLnVucmVnaXN0ZXJGaWVsZCxcXG4gICAgdW50b3VjaCA9IF9jcmVhdGVBbGwudW50b3VjaCxcXG4gICAgdmFsdWVzID0gX2NyZWF0ZUFsbC52YWx1ZXM7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfSU5TRVJUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9JTlNFUlQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX01PVkVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX01PVkU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkFSUkFZX1BPUFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUE9QOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9QVVNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBBUlJBWV9QVVNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9SRU1PVkVcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1JFTU9WRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfUkVNT1ZFX0FMTFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfUkVNT1ZFX0FMTDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU0hJRlRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NISUZUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJBUlJBWV9TUExJQ0VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFSUkFZX1NQTElDRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfVU5TSElGVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfVU5TSElGVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVJSQVlfU1dBUFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gQVJSQVlfU1dBUDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQVVUT0ZJTExcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFVVE9GSUxMOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJCTFVSXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBCTFVSOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJDSEFOR0VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENIQU5HRTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiQ0xFQVJfU1VCTUlUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9TVUJNSVQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIENMRUFSX1NVQk1JVF9FUlJPUlM7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIkNMRUFSX0FTWU5DX0VSUk9SXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBDTEVBUl9BU1lOQ19FUlJPUjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiREVTVFJPWVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gREVTVFJPWTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiRk9DVVNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEZPQ1VTOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJJTklUSUFMSVpFXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBJTklUSUFMSVpFOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJSRUdJU1RFUl9GSUVMRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gUkVHSVNURVJfRklFTEQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlJFU0VUXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBSRVNFVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU0VUX1NVQk1JVF9GQUlMRURcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNFVF9TVUJNSVRfRkFJTEVEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTRVRfU1VCTUlUX1NVQ0NFRURFRFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU0VUX1NVQk1JVF9TVUNDRUVERUQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUQVJUX0FTWU5DX1ZBTElEQVRJT05cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUQVJUX0FTWU5DX1ZBTElEQVRJT047IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcIlNUQVJUX1NVQk1JVFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gU1RBUlRfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVE9QX0FTWU5DX1ZBTElEQVRJT05cXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUT1BfQVNZTkNfVkFMSURBVElPTjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiU1RPUF9TVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNUT1BfU1VCTUlUOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJTVUJNSVRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFNVQk1JVDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVE9VQ0hcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFRPVUNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVTlJFR0lTVEVSX0ZJRUxEXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVTlJFR0lTVEVSX0ZJRUxEOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVTlRPVUNIXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBVTlRPVUNIOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJVUERBVEVfU1lOQ19FUlJPUlNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVQREFURV9TWU5DX0VSUk9SUzsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiVVBEQVRFX1NZTkNfV0FSTklOR1NcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFVQREFURV9TWU5DX1dBUk5JTkdTOyB9KTtcXG52YXIgQVJSQVlfSU5TRVJUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9JTlNFUlQnO1xcbnZhciBBUlJBWV9NT1ZFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9NT1ZFJztcXG52YXIgQVJSQVlfUE9QID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9QT1AnO1xcbnZhciBBUlJBWV9QVVNIID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9QVVNIJztcXG52YXIgQVJSQVlfUkVNT1ZFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9SRU1PVkUnO1xcbnZhciBBUlJBWV9SRU1PVkVfQUxMID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9SRU1PVkVfQUxMJztcXG52YXIgQVJSQVlfU0hJRlQgPSAnQEByZWR1eC1mb3JtL0FSUkFZX1NISUZUJztcXG52YXIgQVJSQVlfU1BMSUNFID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9TUExJQ0UnO1xcbnZhciBBUlJBWV9VTlNISUZUID0gJ0BAcmVkdXgtZm9ybS9BUlJBWV9VTlNISUZUJztcXG52YXIgQVJSQVlfU1dBUCA9ICdAQHJlZHV4LWZvcm0vQVJSQVlfU1dBUCc7XFxudmFyIEFVVE9GSUxMID0gJ0BAcmVkdXgtZm9ybS9BVVRPRklMTCc7XFxudmFyIEJMVVIgPSAnQEByZWR1eC1mb3JtL0JMVVInO1xcbnZhciBDSEFOR0UgPSAnQEByZWR1eC1mb3JtL0NIQU5HRSc7XFxudmFyIENMRUFSX1NVQk1JVCA9ICdAQHJlZHV4LWZvcm0vQ0xFQVJfU1VCTUlUJztcXG52YXIgQ0xFQVJfU1VCTUlUX0VSUk9SUyA9ICdAQHJlZHV4LWZvcm0vQ0xFQVJfU1VCTUlUX0VSUk9SUyc7XFxudmFyIENMRUFSX0FTWU5DX0VSUk9SID0gJ0ByZWR1eC1mb3JtL0NMRUFSX0FTWU5DX0VSUk9SJztcXG52YXIgREVTVFJPWSA9ICdAQHJlZHV4LWZvcm0vREVTVFJPWSc7XFxudmFyIEZPQ1VTID0gJ0BAcmVkdXgtZm9ybS9GT0NVUyc7XFxudmFyIElOSVRJQUxJWkUgPSAnQEByZWR1eC1mb3JtL0lOSVRJQUxJWkUnO1xcbnZhciBSRUdJU1RFUl9GSUVMRCA9ICdAQHJlZHV4LWZvcm0vUkVHSVNURVJfRklFTEQnO1xcbnZhciBSRVNFVCA9ICdAQHJlZHV4LWZvcm0vUkVTRVQnO1xcbnZhciBTRVRfU1VCTUlUX0ZBSUxFRCA9ICdAQHJlZHV4LWZvcm0vU0VUX1NVQk1JVF9GQUlMRUQnO1xcbnZhciBTRVRfU1VCTUlUX1NVQ0NFRURFRCA9ICdAQHJlZHV4LWZvcm0vU0VUX1NVQk1JVF9TVUNDRUVERUQnO1xcbnZhciBTVEFSVF9BU1lOQ19WQUxJREFUSU9OID0gJ0BAcmVkdXgtZm9ybS9TVEFSVF9BU1lOQ19WQUxJREFUSU9OJztcXG52YXIgU1RBUlRfU1VCTUlUID0gJ0BAcmVkdXgtZm9ybS9TVEFSVF9TVUJNSVQnO1xcbnZhciBTVE9QX0FTWU5DX1ZBTElEQVRJT04gPSAnQEByZWR1eC1mb3JtL1NUT1BfQVNZTkNfVkFMSURBVElPTic7XFxudmFyIFNUT1BfU1VCTUlUID0gJ0BAcmVkdXgtZm9ybS9TVE9QX1NVQk1JVCc7XFxudmFyIFNVQk1JVCA9ICdAQHJlZHV4LWZvcm0vU1VCTUlUJztcXG52YXIgVE9VQ0ggPSAnQEByZWR1eC1mb3JtL1RPVUNIJztcXG52YXIgVU5SRUdJU1RFUl9GSUVMRCA9ICdAQHJlZHV4LWZvcm0vVU5SRUdJU1RFUl9GSUVMRCc7XFxudmFyIFVOVE9VQ0ggPSAnQEByZWR1eC1mb3JtL1VOVE9VQ0gnO1xcbnZhciBVUERBVEVfU1lOQ19FUlJPUlMgPSAnQEByZWR1eC1mb3JtL1VQREFURV9TWU5DX0VSUk9SUyc7XFxudmFyIFVQREFURV9TWU5DX1dBUk5JTkdTID0gJ0BAcmVkdXgtZm9ybS9VUERBVEVfU1lOQ19XQVJOSU5HUyc7XFxuXFxuLyoqKi8gfSksXFxuLyogMjggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxudmFyIGc7XFxuXFxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcXG5nID0gKGZ1bmN0aW9uKCkge1xcblxcdHJldHVybiB0aGlzO1xcbn0pKCk7XFxuXFxudHJ5IHtcXG5cXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcXG5cXHRnID0gZyB8fCBGdW5jdGlvbihcXFwicmV0dXJuIHRoaXNcXFwiKSgpIHx8ICgxLGV2YWwpKFxcXCJ0aGlzXFxcIik7XFxufSBjYXRjaChlKSB7XFxuXFx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcXG5cXHRpZih0eXBlb2Ygd2luZG93ID09PSBcXFwib2JqZWN0XFxcIilcXG5cXHRcXHRnID0gd2luZG93O1xcbn1cXG5cXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXFxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBnO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tYXBDYWNoZUNsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19tYXBDYWNoZURlbGV0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcENhY2hlR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fbWFwQ2FjaGVIYXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTE3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBDYWNoZVNldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMTgpO1xcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXFxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19tYXBDYWNoZUNsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX21hcENhY2hlRGVsZXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX21hcENhY2hlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21hcENhY2hlU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKE1hcENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldFRhZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzRnVuY3Rpb24oXyk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxcbiAgdmFyIHRhZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzRnVuY3Rpb24pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDMxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIE1hcCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnTWFwJyk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoTWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAzMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdGFja0NsZWFyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fc3RhY2tEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdGFja0dldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0YWNrSGFzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc3RhY2tTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI3KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgc3RhY2sgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXFxuICovXFxuZnVuY3Rpb24gU3RhY2soZW50cmllcykge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKGVudHJpZXMpO1xcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbn1cXG5cXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxcblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RhY2tDbGVhcl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdGFja0RlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdGFja0dldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19zdGFja0hhc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5TdGFjay5wcm90b3R5cGUuc2V0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zdGFja1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChTdGFjayk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcXG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXFxuICAgICAgcHJvdG8gPSAodHlwZW9mIEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBDdG9yLnByb3RvdHlwZSkgfHwgb2JqZWN0UHJvdG87XFxuXFxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1Byb3RvdHlwZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJndW1lbnRzKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNBcmd1bWVudHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBmdW5jdGlvbih2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxcbiAgICAhcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNBcmd1bWVudHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cXG4gKlxcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXFxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc0xlbmd0aCgzKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xcbiAqIC8vID0+IGZhbHNlXFxuICpcXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0xlbmd0aCgnMycpO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcXG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0xlbmd0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihtb2R1bGUpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJGYWxzZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzcpO1xcblxcblxcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXFxudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xcblxcbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xcblxcbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXFxudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uQnVmZmVyIDogdW5kZWZpbmVkO1xcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cXG52YXIgbmF0aXZlSXNCdWZmZXIgPSBCdWZmZXIgPyBCdWZmZXIuaXNCdWZmZXIgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBidWZmZXIuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4zLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XFxuICogLy8gPT4gZmFsc2VcXG4gKi9cXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3N0dWJGYWxzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0J1ZmZlcik7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjIpKG1vZHVsZSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNUeXBlZEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVVuYXJ5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbm9kZVV0aWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQwKTtcXG5cXG5cXG5cXG5cXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xcbnZhciBub2RlSXNUeXBlZEFycmF5ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19ub2RlVXRpbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25vZGVVdGlsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmlzVHlwZWRBcnJheTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMy4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVVuYXJ5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShub2RlSXNUeXBlZEFycmF5KSA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc1R5cGVkQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xcbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcXFxkKikkLztcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcXG5cXG4gIHJldHVybiAhIWxlbmd0aCAmJlxcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNJbmRleCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBzaW5jZSAwLjEuMFxcbiAqIEBtZW1iZXJPZiBfXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyBgdmFsdWVgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcXG4gKlxcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcXG4gKiAvLyA9PiB0cnVlXFxuICovXFxuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaWRlbnRpdHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hcnJheUxpa2VLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXFxuICogW0VTIHNwZWNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5rZXlzKVxcbiAqIGZvciBtb3JlIGRldGFpbHMuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQHNpbmNlIDAuMS4wXFxuICogQG1lbWJlck9mIF9cXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYSA9IDE7XFxuICogICB0aGlzLmIgPSAyO1xcbiAqIH1cXG4gKlxcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XFxuICpcXG4gKiBfLmtleXMobmV3IEZvbyk7XFxuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqXFxuICogXy5rZXlzKCdoaScpO1xcbiAqIC8vID0+IFsnMCcsICcxJ11cXG4gKi9cXG5mdW5jdGlvbiBrZXlzKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChrZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA0MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxEZWVwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxcbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cXG4gKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgaWYgKHZhbHVlID09PSBvdGhlcikge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlcikpKSB7XFxuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsRGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNFcXVhbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNTeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xcblxcblxcblxcbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcXFwufFxcXFxbKD86W15bXFxcXF1dKnwoW1xcXCInXSkoPzooPyFcXFxcMSlbXlxcXFxcXFxcXXxcXFxcXFxcXC4pKj9cXFxcMSlcXFxcXS8sXFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcXFx3KiQvO1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcXG4gICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaXNLZXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDQzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xcblxcbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHdhcm5pbmc7XFxuLyoqXFxuICogUHJpbnRzIGEgd2FybmluZyBpbiB0aGUgY29uc29sZSBpZiBpdCBleGlzdHMuXFxuICpcXG4gKiBAcGFyYW0ge1N0cmluZ30gbWVzc2FnZSBUaGUgd2FybmluZyBtZXNzYWdlLlxcbiAqIEByZXR1cm5zIHt2b2lkfVxcbiAqL1xcbmZ1bmN0aW9uIHdhcm5pbmcobWVzc2FnZSkge1xcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xcbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgfVxcbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXFxuICB0cnkge1xcbiAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IGlmIHlvdSBlbmFibGVcXG4gICAgLy8gXFxcImJyZWFrIG9uIGFsbCBleGNlcHRpb25zXFxcIiBpbiB5b3VyIGNvbnNvbGUsXFxuICAgIC8vIGl0IHdvdWxkIHBhdXNlIHRoZSBleGVjdXRpb24gYXQgdGhpcyBsaW5lLlxcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XFxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWVtcHR5ICovXFxuICB9IGNhdGNoIChlKSB7fVxcbiAgLyogZXNsaW50LWVuYWJsZSBuby1lbXB0eSAqL1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA0NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY29tYmluZVJlZHVjZXJzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmluZEFjdGlvbkNyZWF0b3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYXBwbHlNaWRkbGV3YXJlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY29tcG9zZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbHNfd2FybmluZ19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NCk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY3JlYXRlU3RvcmUgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSByZWV4cG9ydCBjb21iaW5lUmVkdWNlcnMgKi9cXG4vKiBoYXJtb255IHJlZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmluZEFjdGlvbkNyZWF0b3JzX19bXFxcImFcXFwiXTsgfSk7XFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgYXBwbHlNaWRkbGV3YXJlICovXFxuLyogdW51c2VkIGhhcm1vbnkgcmVleHBvcnQgY29tcG9zZSAqL1xcblxcblxcblxcblxcblxcblxcblxcbi8qXFxuKiBUaGlzIGlzIGEgZHVtbXkgZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGZ1bmN0aW9uIG5hbWUgaGFzIGJlZW4gYWx0ZXJlZCBieSBtaW5pZmljYXRpb24uXFxuKiBJZiB0aGUgZnVuY3Rpb24gaGFzIGJlZW4gbWluaWZpZWQgYW5kIE5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsIHdhcm4gdGhlIHVzZXIuXFxuKi9cXG5mdW5jdGlvbiBpc0NydXNoZWQoKSB7fVxcblxcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBpc0NydXNoZWQubmFtZSA9PT0gJ3N0cmluZycgJiYgaXNDcnVzaGVkLm5hbWUgIT09ICdpc0NydXNoZWQnKSB7XFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnWW91IGFyZSBjdXJyZW50bHkgdXNpbmcgbWluaWZpZWQgY29kZSBvdXRzaWRlIG9mIE5PREVfRU5WID09PSBcXFxcJ3Byb2R1Y3Rpb25cXFxcJy4gJyArICdUaGlzIG1lYW5zIHRoYXQgeW91IGFyZSBydW5uaW5nIGEgc2xvd2VyIGRldmVsb3BtZW50IGJ1aWxkIG9mIFJlZHV4LiAnICsgJ1lvdSBjYW4gdXNlIGxvb3NlLWVudmlmeSAoaHR0cHM6Ly9naXRodWIuY29tL3plcnRvc2gvbG9vc2UtZW52aWZ5KSBmb3IgYnJvd3NlcmlmeSAnICsgJ29yIERlZmluZVBsdWdpbiBmb3Igd2VicGFjayAoaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zMDAzMDAzMSkgJyArICd0byBlbnN1cmUgeW91IGhhdmUgdGhlIGNvcnJlY3QgY29kZSBmb3IgeW91ciBwcm9kdWN0aW9uIGJ1aWxkLicpO1xcbn1cXG5cXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNDYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBpc1Byb21pc2U7XFxuXFxuZnVuY3Rpb24gaXNQcm9taXNlKG9iaikge1xcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNFcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMjYpO1xcblxcblxcbnZhciBjcmVhdGVJc1ZhbGlkID0gZnVuY3Rpb24gY3JlYXRlSXNWYWxpZChzdHJ1Y3R1cmUpIHtcXG4gIHZhciBnZXRJbiA9IHN0cnVjdHVyZS5nZXRJbixcXG4gICAgICBrZXlzID0gc3RydWN0dXJlLmtleXM7XFxuXFxuICB2YXIgaGFzRXJyb3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19oYXNFcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHZhciBpZ25vcmVTdWJtaXRFcnJvcnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgdmFyIHN5bmNFcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3luY0Vycm9yJyk7XFxuICAgICAgaWYgKHN5bmNFcnJvcikge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICBpZiAoIWlnbm9yZVN1Ym1pdEVycm9ycykge1xcbiAgICAgICAgdmFyIGVycm9yID0gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5lcnJvcicpO1xcbiAgICAgICAgaWYgKGVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnN5bmNFcnJvcnMnKTtcXG4gICAgICB2YXIgYXN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLmFzeW5jRXJyb3JzJyk7XFxuICAgICAgdmFyIHN1Ym1pdEVycm9ycyA9IGlnbm9yZVN1Ym1pdEVycm9ycyA/IHVuZGVmaW5lZCA6IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0RXJyb3JzJyk7XFxuICAgICAgaWYgKCFzeW5jRXJyb3JzICYmICFhc3luY0Vycm9ycyAmJiAhc3VibWl0RXJyb3JzKSB7XFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICB9XFxuXFxuICAgICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnJlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICBpZiAoIXJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gIWtleXMocmVnaXN0ZXJlZEZpZWxkcykuZmlsdGVyKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICByZXR1cm4gZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXS5jb3VudCcpID4gMDtcXG4gICAgICB9KS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICByZXR1cm4gaGFzRXJyb3IoZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXScpLCBzeW5jRXJyb3JzLCBhc3luY0Vycm9ycywgc3VibWl0RXJyb3JzKTtcXG4gICAgICB9KTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVJc1ZhbGlkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA0OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODIpO1xcblxcblxcblxcbnZhciBjdXN0b21pemVyID0gZnVuY3Rpb24gY3VzdG9taXplcihvYmplY3RWYWx1ZSwgb3RoZXJWYWx1ZSwgaW5kZXhPcmtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spIHtcXG4gIC8vIGh0dHBzOi8vbG9kYXNoLmNvbS9kb2NzLzQuMTcuNCNpc0VxdWFsV2l0aFxcbiAgaWYgKHN0YWNrKSB7XFxuICAgIC8vIFNoYWxsb3cgY29tcGFyZXNcXG4gICAgLy8gRm9yIDFzdCBsZXZlbCwgc3RhY2sgPT09IHVuZGVmaW5lZC5cXG4gICAgLy8gICAtPiBEbyBub3RoaW5nIChhbmQgaW1wbGljaXRseSByZXR1cm4gdW5kZWZpbmVkIHNvIHRoYXQgaXQgZ29lcyB0byBjb21wYXJlIDJuZCBsZXZlbClcXG4gICAgLy8gRm9yIDJuZCBsZXZlbCBhbmQgdXAsIHN0YWNrICE9PSB1bmRlZmluZWQuXFxuICAgIC8vICAgLT4gQ29tcGFyZSBieSA9PT0gb3BlcmF0b3JcXG4gICAgcmV0dXJuIG9iamVjdFZhbHVlID09PSBvdGhlclZhbHVlO1xcbiAgfVxcbn07XFxuXFxudmFyIHNoYWxsb3dDb21wYXJlID0gZnVuY3Rpb24gc2hhbGxvd0NvbXBhcmUoaW5zdGFuY2UsIG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICByZXR1cm4gIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzRXF1YWxXaXRoX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpbnN0YW5jZS5wcm9wcywgbmV4dFByb3BzLCBjdXN0b21pemVyKSB8fCAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNFcXVhbFdpdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGluc3RhbmNlLnN0YXRlLCBuZXh0U3RhdGUsIGN1c3RvbWl6ZXIpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2hhbGxvd0NvbXBhcmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDQ5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcXG4gKiBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5TWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxcbiAqL1xcbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xcblxcbiAgYXJyYXkgfHwgKGFycmF5ID0gQXJyYXkobGVuZ3RoKSk7XFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xcbiAgfVxcbiAgcmV0dXJuIGFycmF5O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb3B5QXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDUxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24oZ2xvYmFsKSB7LyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZnJlZUdsb2JhbCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiA1MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZUNhcHBlZF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nik7XFxuXFxuXFxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xcbnZhciByZVByb3BOYW1lID0gL1teLltcXFxcXV0rfFxcXFxbKD86KC0/XFxcXGQrKD86XFxcXC5cXFxcZCspPyl8KFtcXFwiJ10pKCg/Oig/IVxcXFwyKVteXFxcXFxcXFxdfFxcXFxcXFxcLikqPylcXFxcMilcXFxcXXwoPz0oPzpcXFxcLnxcXFxcW1xcXFxdKSg/OlxcXFwufFxcXFxbXFxcXF18JCkpL2c7XFxuXFxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXFxudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcXFxcXChcXFxcXFxcXCk/L2c7XFxuXFxuLyoqXFxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXFxuICovXFxudmFyIHN0cmluZ1RvUGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX21lbW9pemVDYXBwZWRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmN0aW9uKHN0cmluZykge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XFxuICAgIHJlc3VsdC5wdXNoKCcnKTtcXG4gIH1cXG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcXG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xcbiAgfSk7XFxuICByZXR1cm4gcmVzdWx0O1xcbn0pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0cmluZ1RvUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xcblxcbi8qKlxcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXFxuICovXFxuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xcbiAgICB0cnkge1xcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcXG4gICAgfSBjYXRjaCAoZSkge31cXG4gICAgdHJ5IHtcXG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XFxuICAgIH0gY2F0Y2ggKGUpIHt9XFxuICB9XFxuICByZXR1cm4gJyc7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvU291cmNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVRvU3RyaW5nX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExOSk7XFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZy4gQW4gZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkIGZvciBgbnVsbGBcXG4gKiBhbmQgYHVuZGVmaW5lZGAgdmFsdWVzLiBUaGUgc2lnbiBvZiBgLTBgIGlzIHByZXNlcnZlZC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSA0LjAuMFxcbiAqIEBjYXRlZ29yeSBMYW5nXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xcbiAqIC8vID0+ICcnXFxuICpcXG4gKiBfLnRvU3RyaW5nKC0wKTtcXG4gKiAvLyA9PiAnLTAnXFxuICpcXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XFxuICogLy8gPT4gJzEsMiwzJ1xcbiAqL1xcbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/ICcnIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVRvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19lcV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGFzc2lnblZhbHVlYCBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGFzc2lnblxcbiAqIGB1bmRlZmluZWRgIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGFzc2lnbi5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBhc3NpZ24uXFxuICovXFxuZnVuY3Rpb24gYXNzaWduTWVyZ2VWYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIGlmICgodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdFtrZXldLCB2YWx1ZSkpIHx8XFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgdmFsdWUpO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NpZ25NZXJnZVZhbHVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcblxcblxcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcXG4gIHRyeSB7XFxuICAgIHZhciBmdW5jID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QsICdkZWZpbmVQcm9wZXJ0eScpO1xcbiAgICBmdW5jKHt9LCAnJywge30pO1xcbiAgICByZXR1cm4gZnVuYztcXG4gIH0gY2F0Y2ggKGUpIHt9XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChkZWZpbmVQcm9wZXJ0eSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUJhc2VGb3JfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTI4KTtcXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgYmFzZUZvck93bmAgd2hpY2ggaXRlcmF0ZXMgb3ZlciBgb2JqZWN0YFxcbiAqIHByb3BlcnRpZXMgcmV0dXJuZWQgYnkgYGtleXNGdW5jYCBhbmQgaW52b2tlcyBgaXRlcmF0ZWVgIGZvciBlYWNoIHByb3BlcnR5LlxcbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cXG4gKi9cXG52YXIgYmFzZUZvciA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZUJhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUZvcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIFVpbnQ4QXJyYXkgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uVWludDhBcnJheTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChVaW50OEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA1OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fb3ZlckFyZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MCk7XFxuXFxuXFxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXFxudmFyIGdldFByb3RvdHlwZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX292ZXJBcmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRQcm90b3R5cGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDYwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChvdmVyQXJnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgdmFsdWUgYXQgYGtleWAsIHVubGVzcyBga2V5YCBpcyBcXFwiX19wcm90b19fXFxcIi5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBzYWZlR2V0KG9iamVjdCwga2V5KSB7XFxuICBpZiAoa2V5ID09ICdfX3Byb3RvX18nKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG5cXG4gIHJldHVybiBvYmplY3Rba2V5XTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2FmZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5TGlrZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGFuZCBpbmhlcml0ZWQgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IE9iamVjdFxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBGb28oKSB7XFxuICogICB0aGlzLmEgPSAxO1xcbiAqICAgdGhpcy5iID0gMjtcXG4gKiB9XFxuICpcXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xcbiAqXFxuICogXy5rZXlzSW4obmV3IEZvbyk7XFxuICogLy8gPT4gWydhJywgJ2InLCAnYyddIChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXFxuICovXFxuZnVuY3Rpb24ga2V5c0luKG9iamVjdCkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlMaWtlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCB0cnVlKSA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VLZXlzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUaW1lc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgdGhlIGFycmF5LWxpa2UgYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XFxuICB2YXIgaXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSxcXG4gICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgIWlzQXJnICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSksXFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzVHlwZWRBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VUaW1lc19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUubGVuZ3RoLCBTdHJpbmcpIDogW10sXFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcXG5cXG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXFxuICAgICAgICAgICAvLyBTYWZhcmkgOSBoYXMgZW51bWVyYWJsZSBgYXJndW1lbnRzLmxlbmd0aGAgaW4gc3RyaWN0IG1vZGUuXFxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcXG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxcbiAgICAgICAgICAgKGlzQnVmZiAmJiAoa2V5ID09ICdvZmZzZXQnIHx8IGtleSA9PSAncGFyZW50JykpIHx8XFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXFxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcXG4gICAgICAgICAgIC8vIFNraXAgaW5kZXggcHJvcGVydGllcy5cXG4gICAgICAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzSW5kZXhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGtleSwgbGVuZ3RoKVxcbiAgICAgICAgKSkpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheUxpa2VLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlRm9yT3duX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUl0ZXJhdGVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1OSk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFzIGBvYmplY3RgIGFuZCB2YWx1ZXMgZ2VuZXJhdGVkXFxuICogYnkgcnVubmluZyBlYWNoIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YCB0aHJ1XFxuICogYGl0ZXJhdGVlYC4gVGhlIGl0ZXJhdGVlIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6XFxuICogKHZhbHVlLCBrZXksIG9iamVjdCkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMi40LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbaXRlcmF0ZWU9Xy5pZGVudGl0eV0gVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIG9iamVjdC5cXG4gKiBAc2VlIF8ubWFwS2V5c1xcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgdXNlcnMgPSB7XFxuICogICAnZnJlZCc6ICAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCB9LFxcbiAqICAgJ3BlYmJsZXMnOiB7ICd1c2VyJzogJ3BlYmJsZXMnLCAnYWdlJzogMSB9XFxuICogfTtcXG4gKlxcbiAqIF8ubWFwVmFsdWVzKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvLmFnZTsgfSk7XFxuICogLy8gPT4geyAnZnJlZCc6IDQwLCAncGViYmxlcyc6IDEgfSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxcbiAqXFxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXFxuICogXy5tYXBWYWx1ZXModXNlcnMsICdhZ2UnKTtcXG4gKiAvLyA9PiB7ICdmcmVkJzogNDAsICdwZWJibGVzJzogMSB9IChpdGVyYXRpb24gb3JkZXIgaXMgbm90IGd1YXJhbnRlZWQpXFxuICovXFxuZnVuY3Rpb24gbWFwVmFsdWVzKG9iamVjdCwgaXRlcmF0ZWUpIHtcXG4gIHZhciByZXN1bHQgPSB7fTtcXG4gIGl0ZXJhdGVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUl0ZXJhdGVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShpdGVyYXRlZSwgMyk7XFxuXFxuICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlRm9yT3duX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGZ1bmN0aW9uKHZhbHVlLCBrZXksIG9iamVjdCkge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQXNzaWduVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHJlc3VsdCwga2V5LCBpdGVyYXRlZSh2YWx1ZSwga2V5LCBvYmplY3QpKTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwVmFsdWVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU2V0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hcnJheVNvbWVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jYWNoZUhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjcpO1xcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XFxuXFxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cXG4gIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcXG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcXG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICB9XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSB0cnVlLFxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU2V0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiB1bmRlZmluZWQ7XFxuXFxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcXG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xcblxcbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxcbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcXG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XFxuXFxuICAgIGlmIChjdXN0b21pemVyKSB7XFxuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcXG4gICAgfVxcbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIGlmIChjb21wYXJlZCkge1xcbiAgICAgICAgY29udGludWU7XFxuICAgICAgfVxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIGlmIChzZWVuKSB7XFxuICAgICAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hcnJheVNvbWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcXG4gICAgICAgICAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzZWVuLCBvdGhJbmRleCkgJiZcXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pKSB7XFxuICAgICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIGlmICghKFxcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcXG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcXG4gICAgICAgICkpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgfVxcbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcXG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcXVhbEFycmF5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcXG4gKiAgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcXG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzU3RyaWN0Q29tcGFyYWJsZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxcbiAqIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdFtrZXldID09PSBzcmNWYWx1ZSAmJlxcbiAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY2FzdFBhdGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xcbiAgcGF0aCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwYXRoLCBvYmplY3QpO1xcblxcbiAgdmFyIGluZGV4ID0gMCxcXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcXG5cXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xcbiAgICBvYmplY3QgPSBvYmplY3RbT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdG9LZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGhbaW5kZXgrK10pXTtcXG4gIH1cXG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3N0cmluZ1RvUGF0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9TdHJpbmdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTQpO1xcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxcbiAqL1xcbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzS2V5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zdHJpbmdUb1BhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU3RyaW5nX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjYXN0UGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogNzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgdmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9ICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmXFxuICAgIFN5bWJvbC5mb3IgJiZcXG4gICAgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpKSB8fFxcbiAgICAweGVhYzc7XFxuXFxuICB2YXIgaXNWYWxpZEVsZW1lbnQgPSBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXFxuICAgICAgb2JqZWN0ICE9PSBudWxsICYmXFxuICAgICAgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XFxuICB9O1xcblxcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXFxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XFxuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk0KShpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XFxufSBlbHNlIHtcXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXFxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXFxuICBtb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk3KSgpO1xcbn1cXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImJcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1YnNjcmlwdGlvblNoYXBlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9yZVNoYXBlOyB9KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfXyk7XFxuXFxuXFxudmFyIHN1YnNjcmlwdGlvblNoYXBlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuc2hhcGUoe1xcbiAgdHJ5U3Vic2NyaWJlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWQsXFxuICB0cnlVbnN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgbm90aWZ5TmVzdGVkU3ViczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgaXNTdWJzY3JpYmVkOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWRcXG59KTtcXG5cXG52YXIgc3RvcmVTaGFwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLnNoYXBlKHtcXG4gIHN1YnNjcmliZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3Byb3BfdHlwZXNfX19kZWZhdWx0LmEuZnVuYy5pc1JlcXVpcmVkLFxcbiAgZGlzcGF0Y2g6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmZ1bmMuaXNSZXF1aXJlZCxcXG4gIGdldFN0YXRlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcHJvcF90eXBlc19fX2RlZmF1bHQuYS5mdW5jLmlzUmVxdWlyZWRcXG59KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA3MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSBjb25uZWN0QWR2YW5jZWQ7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbHNfU3Vic2NyaXB0aW9uX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcxKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciBob3RSZWxvYWRpbmdWZXJzaW9uID0gMDtcXG52YXIgZHVtbXlTdGF0ZSA9IHt9O1xcbmZ1bmN0aW9uIG5vb3AoKSB7fVxcbmZ1bmN0aW9uIG1ha2VTZWxlY3RvclN0YXRlZnVsKHNvdXJjZVNlbGVjdG9yLCBzdG9yZSkge1xcbiAgLy8gd3JhcCB0aGUgc2VsZWN0b3IgaW4gYW4gb2JqZWN0IHRoYXQgdHJhY2tzIGl0cyByZXN1bHRzIGJldHdlZW4gcnVucy5cXG4gIHZhciBzZWxlY3RvciA9IHtcXG4gICAgcnVuOiBmdW5jdGlvbiBydW5Db21wb25lbnRTZWxlY3Rvcihwcm9wcykge1xcbiAgICAgIHRyeSB7XFxuICAgICAgICB2YXIgbmV4dFByb3BzID0gc291cmNlU2VsZWN0b3Ioc3RvcmUuZ2V0U3RhdGUoKSwgcHJvcHMpO1xcbiAgICAgICAgaWYgKG5leHRQcm9wcyAhPT0gc2VsZWN0b3IucHJvcHMgfHwgc2VsZWN0b3IuZXJyb3IpIHtcXG4gICAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcXG4gICAgICAgICAgc2VsZWN0b3IucHJvcHMgPSBuZXh0UHJvcHM7XFxuICAgICAgICAgIHNlbGVjdG9yLmVycm9yID0gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gdHJ1ZTtcXG4gICAgICAgIHNlbGVjdG9yLmVycm9yID0gZXJyb3I7XFxuICAgICAgfVxcbiAgICB9XFxuICB9O1xcblxcbiAgcmV0dXJuIHNlbGVjdG9yO1xcbn1cXG5cXG5mdW5jdGlvbiBjb25uZWN0QWR2YW5jZWQoXFxuLypcXG4gIHNlbGVjdG9yRmFjdG9yeSBpcyBhIGZ1bmMgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcmV0dXJuaW5nIHRoZSBzZWxlY3RvciBmdW5jdGlvbiB1c2VkIHRvXFxuICBjb21wdXRlIG5ldyBwcm9wcyBmcm9tIHN0YXRlLCBwcm9wcywgYW5kIGRpc3BhdGNoLiBGb3IgZXhhbXBsZTpcXG4gICAgIGV4cG9ydCBkZWZhdWx0IGNvbm5lY3RBZHZhbmNlZCgoZGlzcGF0Y2gsIG9wdGlvbnMpID0+IChzdGF0ZSwgcHJvcHMpID0+ICh7XFxuICAgICAgdGhpbmc6IHN0YXRlLnRoaW5nc1twcm9wcy50aGluZ0lkXSxcXG4gICAgICBzYXZlVGhpbmc6IGZpZWxkcyA9PiBkaXNwYXRjaChhY3Rpb25DcmVhdG9ycy5zYXZlVGhpbmcocHJvcHMudGhpbmdJZCwgZmllbGRzKSksXFxuICAgIH0pKShZb3VyQ29tcG9uZW50KVxcbiAgIEFjY2VzcyB0byBkaXNwYXRjaCBpcyBwcm92aWRlZCB0byB0aGUgZmFjdG9yeSBzbyBzZWxlY3RvckZhY3RvcmllcyBjYW4gYmluZCBhY3Rpb25DcmVhdG9yc1xcbiAgb3V0c2lkZSBvZiB0aGVpciBzZWxlY3RvciBhcyBhbiBvcHRpbWl6YXRpb24uIE9wdGlvbnMgcGFzc2VkIHRvIGNvbm5lY3RBZHZhbmNlZCBhcmUgcGFzc2VkIHRvXFxuICB0aGUgc2VsZWN0b3JGYWN0b3J5LCBhbG9uZyB3aXRoIGRpc3BsYXlOYW1lIGFuZCBXcmFwcGVkQ29tcG9uZW50LCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxcbiAgIE5vdGUgdGhhdCBzZWxlY3RvckZhY3RvcnkgaXMgcmVzcG9uc2libGUgZm9yIGFsbCBjYWNoaW5nL21lbW9pemF0aW9uIG9mIGluYm91bmQgYW5kIG91dGJvdW5kXFxuICBwcm9wcy4gRG8gbm90IHVzZSBjb25uZWN0QWR2YW5jZWQgZGlyZWN0bHkgd2l0aG91dCBtZW1vaXppbmcgcmVzdWx0cyBiZXR3ZWVuIGNhbGxzIHRvIHlvdXJcXG4gIHNlbGVjdG9yLCBvdGhlcndpc2UgdGhlIENvbm5lY3QgY29tcG9uZW50IHdpbGwgcmUtcmVuZGVyIG9uIGV2ZXJ5IHN0YXRlIG9yIHByb3BzIGNoYW5nZS5cXG4qL1xcbnNlbGVjdG9yRmFjdG9yeSkge1xcbiAgdmFyIF9jb250ZXh0VHlwZXMsIF9jaGlsZENvbnRleHRUeXBlcztcXG5cXG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcXG4gICAgICBfcmVmJGdldERpc3BsYXlOYW1lID0gX3JlZi5nZXREaXNwbGF5TmFtZSxcXG4gICAgICBnZXREaXNwbGF5TmFtZSA9IF9yZWYkZ2V0RGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgIHJldHVybiAnQ29ubmVjdEFkdmFuY2VkKCcgKyBuYW1lICsgJyknO1xcbiAgfSA6IF9yZWYkZ2V0RGlzcGxheU5hbWUsXFxuICAgICAgX3JlZiRtZXRob2ROYW1lID0gX3JlZi5tZXRob2ROYW1lLFxcbiAgICAgIG1ldGhvZE5hbWUgPSBfcmVmJG1ldGhvZE5hbWUgPT09IHVuZGVmaW5lZCA/ICdjb25uZWN0QWR2YW5jZWQnIDogX3JlZiRtZXRob2ROYW1lLFxcbiAgICAgIF9yZWYkcmVuZGVyQ291bnRQcm9wID0gX3JlZi5yZW5kZXJDb3VudFByb3AsXFxuICAgICAgcmVuZGVyQ291bnRQcm9wID0gX3JlZiRyZW5kZXJDb3VudFByb3AgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9yZWYkcmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9IF9yZWYuc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyA9IF9yZWYkc2hvdWxkSGFuZGxlU3RhdCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IF9yZWYkc2hvdWxkSGFuZGxlU3RhdCxcXG4gICAgICBfcmVmJHN0b3JlS2V5ID0gX3JlZi5zdG9yZUtleSxcXG4gICAgICBzdG9yZUtleSA9IF9yZWYkc3RvcmVLZXkgPT09IHVuZGVmaW5lZCA/ICdzdG9yZScgOiBfcmVmJHN0b3JlS2V5LFxcbiAgICAgIF9yZWYkd2l0aFJlZiA9IF9yZWYud2l0aFJlZixcXG4gICAgICB3aXRoUmVmID0gX3JlZiR3aXRoUmVmID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYkd2l0aFJlZixcXG4gICAgICBjb25uZWN0T3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2dldERpc3BsYXlOYW1lJywgJ21ldGhvZE5hbWUnLCAncmVuZGVyQ291bnRQcm9wJywgJ3Nob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcycsICdzdG9yZUtleScsICd3aXRoUmVmJ10pO1xcblxcbiAgdmFyIHN1YnNjcmlwdGlvbktleSA9IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XFxuICB2YXIgdmVyc2lvbiA9IGhvdFJlbG9hZGluZ1ZlcnNpb24rKztcXG5cXG4gIHZhciBjb250ZXh0VHlwZXMgPSAoX2NvbnRleHRUeXBlcyA9IHt9LCBfY29udGV4dFR5cGVzW3N0b3JlS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImFcXFwiIC8qIHN0b3JlU2hhcGUgKi9dLCBfY29udGV4dFR5cGVzW3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9jb250ZXh0VHlwZXMpO1xcbiAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gKF9jaGlsZENvbnRleHRUeXBlcyA9IHt9LCBfY2hpbGRDb250ZXh0VHlwZXNbc3Vic2NyaXB0aW9uS2V5XSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbHNfUHJvcFR5cGVzX19bXFxcImJcXFwiIC8qIHN1YnNjcmlwdGlvblNoYXBlICovXSwgX2NoaWxkQ29udGV4dFR5cGVzKTtcXG5cXG4gIHJldHVybiBmdW5jdGlvbiB3cmFwV2l0aENvbm5lY3QoV3JhcHBlZENvbXBvbmVudCkge1xcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHR5cGVvZiBXcmFwcGVkQ29tcG9uZW50ID09ICdmdW5jdGlvbicsICdZb3UgbXVzdCBwYXNzIGEgY29tcG9uZW50IHRvIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBieSAnICsgKCdjb25uZWN0LiBJbnN0ZWFkIHJlY2VpdmVkICcgKyBKU09OLnN0cmluZ2lmeShXcmFwcGVkQ29tcG9uZW50KSkpO1xcblxcbiAgICB2YXIgd3JhcHBlZENvbXBvbmVudE5hbWUgPSBXcmFwcGVkQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IFdyYXBwZWRDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcXG5cXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gZ2V0RGlzcGxheU5hbWUod3JhcHBlZENvbXBvbmVudE5hbWUpO1xcblxcbiAgICB2YXIgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyA9IF9leHRlbmRzKHt9LCBjb25uZWN0T3B0aW9ucywge1xcbiAgICAgIGdldERpc3BsYXlOYW1lOiBnZXREaXNwbGF5TmFtZSxcXG4gICAgICBtZXRob2ROYW1lOiBtZXRob2ROYW1lLFxcbiAgICAgIHJlbmRlckNvdW50UHJvcDogcmVuZGVyQ291bnRQcm9wLFxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxcbiAgICAgIHN0b3JlS2V5OiBzdG9yZUtleSxcXG4gICAgICB3aXRoUmVmOiB3aXRoUmVmLFxcbiAgICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcXG4gICAgICB3cmFwcGVkQ29tcG9uZW50TmFtZTogd3JhcHBlZENvbXBvbmVudE5hbWUsXFxuICAgICAgV3JhcHBlZENvbXBvbmVudDogV3JhcHBlZENvbXBvbmVudFxcbiAgICB9KTtcXG5cXG4gICAgdmFyIENvbm5lY3QgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICAgIF9pbmhlcml0cyhDb25uZWN0LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgICBmdW5jdGlvbiBDb25uZWN0KHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdCk7XFxuXFxuICAgICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICAgIF90aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7fTtcXG4gICAgICAgIF90aGlzLnJlbmRlckNvdW50ID0gMDtcXG4gICAgICAgIF90aGlzLnN0b3JlID0gcHJvcHNbc3RvcmVLZXldIHx8IGNvbnRleHRbc3RvcmVLZXldO1xcbiAgICAgICAgX3RoaXMucHJvcHNNb2RlID0gQm9vbGVhbihwcm9wc1tzdG9yZUtleV0pO1xcbiAgICAgICAgX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlID0gX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlLmJpbmQoX3RoaXMpO1xcblxcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKShfdGhpcy5zdG9yZSwgJ0NvdWxkIG5vdCBmaW5kIFxcXCInICsgc3RvcmVLZXkgKyAnXFxcIiBpbiBlaXRoZXIgdGhlIGNvbnRleHQgb3IgcHJvcHMgb2YgJyArICgnXFxcIicgKyBkaXNwbGF5TmFtZSArICdcXFwiLiBFaXRoZXIgd3JhcCB0aGUgcm9vdCBjb21wb25lbnQgaW4gYSA8UHJvdmlkZXI+LCAnKSArICgnb3IgZXhwbGljaXRseSBwYXNzIFxcXCInICsgc3RvcmVLZXkgKyAnXFxcIiBhcyBhIHByb3AgdG8gXFxcIicgKyBkaXNwbGF5TmFtZSArICdcXFwiLicpKTtcXG5cXG4gICAgICAgIF90aGlzLmluaXRTZWxlY3RvcigpO1xcbiAgICAgICAgX3RoaXMuaW5pdFN1YnNjcmlwdGlvbigpO1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICAgIH1cXG5cXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5nZXRDaGlsZENvbnRleHQgPSBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgICB2YXIgX3JlZjI7XFxuXFxuICAgICAgICAvLyBJZiB0aGlzIGNvbXBvbmVudCByZWNlaXZlZCBzdG9yZSBmcm9tIHByb3BzLCBpdHMgc3Vic2NyaXB0aW9uIHNob3VsZCBiZSB0cmFuc3BhcmVudFxcbiAgICAgICAgLy8gdG8gYW55IGRlc2NlbmRhbnRzIHJlY2VpdmluZyBzdG9yZStzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0OyBpdCBwYXNzZXMgYWxvbmdcXG4gICAgICAgIC8vIHN1YnNjcmlwdGlvbiBwYXNzZWQgdG8gaXQuIE90aGVyd2lzZSwgaXQgc2hhZG93cyB0aGUgcGFyZW50IHN1YnNjcmlwdGlvbiwgd2hpY2ggYWxsb3dzXFxuICAgICAgICAvLyBDb25uZWN0IHRvIGNvbnRyb2wgb3JkZXJpbmcgb2Ygbm90aWZpY2F0aW9ucyB0byBmbG93IHRvcC1kb3duLlxcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMucHJvcHNNb2RlID8gbnVsbCA6IHRoaXMuc3Vic2NyaXB0aW9uO1xcbiAgICAgICAgcmV0dXJuIF9yZWYyID0ge30sIF9yZWYyW3N1YnNjcmlwdGlvbktleV0gPSBzdWJzY3JpcHRpb24gfHwgdGhpcy5jb250ZXh0W3N1YnNjcmlwdGlvbktleV0sIF9yZWYyO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcXG4gICAgICAgIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm47XFxuXFxuICAgICAgICAvLyBjb21wb25lbnRXaWxsTW91bnQgZmlyZXMgZHVyaW5nIHNlcnZlciBzaWRlIHJlbmRlcmluZywgYnV0IGNvbXBvbmVudERpZE1vdW50IGFuZFxcbiAgICAgICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQgZG8gbm90LiBCZWNhdXNlIG9mIHRoaXMsIHRyeVN1YnNjcmliZSBoYXBwZW5zIGR1cmluZyAuLi5kaWRNb3VudC5cXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdW5zdWJzY3JpcHRpb24gd291bGQgbmV2ZXIgdGFrZSBwbGFjZSBkdXJpbmcgU1NSLCBjYXVzaW5nIGEgbWVtb3J5IGxlYWsuXFxuICAgICAgICAvLyBUbyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYSBjaGlsZCBjb21wb25lbnQgbWF5IGhhdmUgdHJpZ2dlcmVkIGEgc3RhdGUgY2hhbmdlIGJ5XFxuICAgICAgICAvLyBkaXNwYXRjaGluZyBhbiBhY3Rpb24gaW4gaXRzIGNvbXBvbmVudFdpbGxNb3VudCwgd2UgaGF2ZSB0byByZS1ydW4gdGhlIHNlbGVjdCBhbmQgbWF5YmVcXG4gICAgICAgIC8vIHJlLXJlbmRlci5cXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyk7XFxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUpIHRoaXMuZm9yY2VVcGRhdGUoKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4obmV4dFByb3BzKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG51bGw7XFxuICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMgPSBub29wO1xcbiAgICAgICAgdGhpcy5zdG9yZSA9IG51bGw7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnJ1biA9IG5vb3A7XFxuICAgICAgICB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuZ2V0V3JhcHBlZEluc3RhbmNlID0gZnVuY3Rpb24gZ2V0V3JhcHBlZEluc3RhbmNlKCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh3aXRoUmVmLCAnVG8gYWNjZXNzIHRoZSB3cmFwcGVkIGluc3RhbmNlLCB5b3UgbmVlZCB0byBzcGVjaWZ5ICcgKyAoJ3sgd2l0aFJlZjogdHJ1ZSB9IGluIHRoZSBvcHRpb25zIGFyZ3VtZW50IG9mIHRoZSAnICsgbWV0aG9kTmFtZSArICcoKSBjYWxsLicpKTtcXG4gICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRJbnN0YW5jZTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLnNldFdyYXBwZWRJbnN0YW5jZSA9IGZ1bmN0aW9uIHNldFdyYXBwZWRJbnN0YW5jZShyZWYpIHtcXG4gICAgICAgIHRoaXMud3JhcHBlZEluc3RhbmNlID0gcmVmO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFNlbGVjdG9yID0gZnVuY3Rpb24gaW5pdFNlbGVjdG9yKCkge1xcbiAgICAgICAgdmFyIHNvdXJjZVNlbGVjdG9yID0gc2VsZWN0b3JGYWN0b3J5KHRoaXMuc3RvcmUuZGlzcGF0Y2gsIHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMpO1xcbiAgICAgICAgdGhpcy5zZWxlY3RvciA9IG1ha2VTZWxlY3RvclN0YXRlZnVsKHNvdXJjZVNlbGVjdG9yLCB0aGlzLnN0b3JlKTtcXG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIGluaXRTdWJzY3JpcHRpb24oKSB7XFxuICAgICAgICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuO1xcblxcbiAgICAgICAgLy8gcGFyZW50U3ViJ3Mgc291cmNlIHNob3VsZCBtYXRjaCB3aGVyZSBzdG9yZSBjYW1lIGZyb206IHByb3BzIHZzLiBjb250ZXh0LiBBIGNvbXBvbmVudFxcbiAgICAgICAgLy8gY29ubmVjdGVkIHRvIHRoZSBzdG9yZSB2aWEgcHJvcHMgc2hvdWxkbid0IHVzZSBzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0LCBvciB2aWNlIHZlcnNhLlxcbiAgICAgICAgdmFyIHBhcmVudFN1YiA9ICh0aGlzLnByb3BzTW9kZSA/IHRoaXMucHJvcHMgOiB0aGlzLmNvbnRleHQpW3N1YnNjcmlwdGlvbktleV07XFxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX1N1YnNjcmlwdGlvbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSh0aGlzLnN0b3JlLCBwYXJlbnRTdWIsIHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpKTtcXG5cXG4gICAgICAgIC8vIGBub3RpZnlOZXN0ZWRTdWJzYCBpcyBkdXBsaWNhdGVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgY29tcG9uZW50IGlzICB1bm1vdW50ZWQgaW5cXG4gICAgICAgIC8vIHRoZSBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLCB3aGVyZSBgdGhpcy5zdWJzY3JpcHRpb25gIHdpbGwgdGhlbiBiZSBudWxsLiBBblxcbiAgICAgICAgLy8gZXh0cmEgbnVsbCBjaGVjayBldmVyeSBjaGFuZ2UgY2FuIGJlIGF2b2lkZWQgYnkgY29weWluZyB0aGUgbWV0aG9kIG9udG8gYHRoaXNgIGFuZCB0aGVuXFxuICAgICAgICAvLyByZXBsYWNpbmcgaXQgd2l0aCBhIG5vLW9wIG9uIHVubW91bnQuIFRoaXMgY2FuIHByb2JhYmx5IGJlIGF2b2lkZWQgaWYgU3Vic2NyaXB0aW9uJ3NcXG4gICAgICAgIC8vIGxpc3RlbmVycyBsb2dpYyBpcyBjaGFuZ2VkIHRvIG5vdCBjYWxsIGxpc3RlbmVycyB0aGF0IGhhdmUgYmVlbiB1bnN1YnNjcmliZWQgaW4gdGhlXFxuICAgICAgICAvLyBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLlxcbiAgICAgICAgdGhpcy5ub3RpZnlOZXN0ZWRTdWJzID0gdGhpcy5zdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3Vicy5iaW5kKHRoaXMuc3Vic2NyaXB0aW9uKTtcXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm9uU3RhdGVDaGFuZ2UgPSBmdW5jdGlvbiBvblN0YXRlQ2hhbmdlKCkge1xcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyk7XFxuXFxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlKSB7XFxuICAgICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicygpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgdGhpcy5jb21wb25lbnREaWRVcGRhdGUgPSB0aGlzLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZTtcXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShkdW1teVN0YXRlKTtcXG4gICAgICAgIH1cXG4gICAgICB9O1xcblxcbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSgpIHtcXG4gICAgICAgIC8vIGBjb21wb25lbnREaWRVcGRhdGVgIGlzIGNvbmRpdGlvbmFsbHkgaW1wbGVtZW50ZWQgd2hlbiBgb25TdGF0ZUNoYW5nZWAgZGV0ZXJtaW5lcyBpdFxcbiAgICAgICAgLy8gbmVlZHMgdG8gbm90aWZ5IG5lc3RlZCBzdWJzLiBPbmNlIGNhbGxlZCwgaXQgdW5pbXBsZW1lbnRzIGl0c2VsZiB1bnRpbCBmdXJ0aGVyIHN0YXRlXFxuICAgICAgICAvLyBjaGFuZ2VzIG9jY3VyLiBEb2luZyBpdCB0aGlzIHdheSB2cyBoYXZpbmcgYSBwZXJtYW5lbnQgYGNvbXBvbmVudERpZFVwZGF0ZWAgdGhhdCBkb2VzXFxuICAgICAgICAvLyBhIGJvb2xlYW4gY2hlY2sgZXZlcnkgdGltZSBhdm9pZHMgYW4gZXh0cmEgbWV0aG9kIGNhbGwgbW9zdCBvZiB0aGUgdGltZSwgcmVzdWx0aW5nXFxuICAgICAgICAvLyBpbiBzb21lIHBlcmYgYm9vc3QuXFxuICAgICAgICB0aGlzLmNvbXBvbmVudERpZFVwZGF0ZSA9IHVuZGVmaW5lZDtcXG4gICAgICAgIHRoaXMubm90aWZ5TmVzdGVkU3VicygpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaXNTdWJzY3JpYmVkID0gZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5zdWJzY3JpcHRpb24pICYmIHRoaXMuc3Vic2NyaXB0aW9uLmlzU3Vic2NyaWJlZCgpO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuYWRkRXh0cmFQcm9wcyA9IGZ1bmN0aW9uIGFkZEV4dHJhUHJvcHMocHJvcHMpIHtcXG4gICAgICAgIGlmICghd2l0aFJlZiAmJiAhcmVuZGVyQ291bnRQcm9wICYmICEodGhpcy5wcm9wc01vZGUgJiYgdGhpcy5zdWJzY3JpcHRpb24pKSByZXR1cm4gcHJvcHM7XFxuICAgICAgICAvLyBtYWtlIGEgc2hhbGxvdyBjb3B5IHNvIHRoYXQgZmllbGRzIGFkZGVkIGRvbid0IGxlYWsgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdG9yLlxcbiAgICAgICAgLy8gdGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgJ3JlZicgc2luY2UgdGhhdCdzIGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlIGNvbXBvbmVudFxcbiAgICAgICAgLy8gaW5zdGFuY2UuIGEgc2luZ2xldG9uIG1lbW9pemVkIHNlbGVjdG9yIHdvdWxkIHRoZW4gYmUgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGVcXG4gICAgICAgIC8vIGluc3RhbmNlLCBwcmV2ZW50aW5nIHRoZSBpbnN0YW5jZSBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkLCBhbmQgdGhhdCB3b3VsZCBiZSBiYWRcXG4gICAgICAgIHZhciB3aXRoRXh0cmFzID0gX2V4dGVuZHMoe30sIHByb3BzKTtcXG4gICAgICAgIGlmICh3aXRoUmVmKSB3aXRoRXh0cmFzLnJlZiA9IHRoaXMuc2V0V3JhcHBlZEluc3RhbmNlO1xcbiAgICAgICAgaWYgKHJlbmRlckNvdW50UHJvcCkgd2l0aEV4dHJhc1tyZW5kZXJDb3VudFByb3BdID0gdGhpcy5yZW5kZXJDb3VudCsrO1xcbiAgICAgICAgaWYgKHRoaXMucHJvcHNNb2RlICYmIHRoaXMuc3Vic2NyaXB0aW9uKSB3aXRoRXh0cmFzW3N1YnNjcmlwdGlvbktleV0gPSB0aGlzLnN1YnNjcmlwdGlvbjtcXG4gICAgICAgIHJldHVybiB3aXRoRXh0cmFzO1xcbiAgICAgIH07XFxuXFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIHNlbGVjdG9yID0gdGhpcy5zZWxlY3RvcjtcXG4gICAgICAgIHNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xcblxcbiAgICAgICAgaWYgKHNlbGVjdG9yLmVycm9yKSB7XFxuICAgICAgICAgIHRocm93IHNlbGVjdG9yLmVycm9yO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShXcmFwcGVkQ29tcG9uZW50LCB0aGlzLmFkZEV4dHJhUHJvcHMoc2VsZWN0b3IucHJvcHMpKTtcXG4gICAgICAgIH1cXG4gICAgICB9O1xcblxcbiAgICAgIHJldHVybiBDb25uZWN0O1xcbiAgICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICAgIENvbm5lY3QuV3JhcHBlZENvbXBvbmVudCA9IFdyYXBwZWRDb21wb25lbnQ7XFxuICAgIENvbm5lY3QuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcXG4gICAgQ29ubmVjdC5jaGlsZENvbnRleHRUeXBlcyA9IGNoaWxkQ29udGV4dFR5cGVzO1xcbiAgICBDb25uZWN0LmNvbnRleHRUeXBlcyA9IGNvbnRleHRUeXBlcztcXG4gICAgQ29ubmVjdC5wcm9wVHlwZXMgPSBjb250ZXh0VHlwZXM7XFxuXFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVcGRhdGUoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIC8vIFdlIGFyZSBob3QgcmVsb2FkaW5nIVxcbiAgICAgICAgaWYgKHRoaXMudmVyc2lvbiAhPT0gdmVyc2lvbikge1xcbiAgICAgICAgICB0aGlzLnZlcnNpb24gPSB2ZXJzaW9uO1xcbiAgICAgICAgICB0aGlzLmluaXRTZWxlY3RvcigpO1xcblxcbiAgICAgICAgICAvLyBJZiBhbnkgY29ubmVjdGVkIGRlc2NlbmRhbnRzIGRvbid0IGhvdCByZWxvYWQgKGFuZCByZXN1YnNjcmliZSBpbiB0aGUgcHJvY2VzcyksIHRoZWlyXFxuICAgICAgICAgIC8vIGxpc3RlbmVycyB3aWxsIGJlIGxvc3Qgd2hlbiB3ZSB1bnN1YnNjcmliZS4gVW5mb3J0dW5hdGVseSwgYnkgY29weWluZyBvdmVyIGFsbFxcbiAgICAgICAgICAvLyBsaXN0ZW5lcnMsIHRoaXMgZG9lcyBtZWFuIHRoYXQgdGhlIG9sZCB2ZXJzaW9ucyBvZiBjb25uZWN0ZWQgZGVzY2VuZGFudHMgd2lsbCBzdGlsbCBiZVxcbiAgICAgICAgICAvLyBub3RpZmllZCBvZiBzdGF0ZSBjaGFuZ2VzOyBob3dldmVyLCB0aGVpciBvblN0YXRlQ2hhbmdlIGZ1bmN0aW9uIGlzIGEgbm8tb3Agc28gdGhpc1xcbiAgICAgICAgICAvLyBpc24ndCBhIGh1Z2UgZGVhbC5cXG4gICAgICAgICAgdmFyIG9sZExpc3RlbmVycyA9IFtdO1xcblxcbiAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcXG4gICAgICAgICAgICBvbGRMaXN0ZW5lcnMgPSB0aGlzLnN1YnNjcmlwdGlvbi5saXN0ZW5lcnMuZ2V0KCk7XFxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udHJ5VW5zdWJzY3JpYmUoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICB0aGlzLmluaXRTdWJzY3JpcHRpb24oKTtcXG4gICAgICAgICAgaWYgKHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykge1xcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xcbiAgICAgICAgICAgIG9sZExpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5zdWJzY3JpcHRpb24ubGlzdGVuZXJzLnN1YnNjcmliZShsaXN0ZW5lcik7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9O1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0KCkoQ29ubmVjdCwgV3JhcHBlZENvbXBvbmVudCk7XFxuICB9O1xcbn1cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIEFjdGlvblR5cGVzOyB9KTtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAzKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGVzZSBhcmUgcHJpdmF0ZSBhY3Rpb24gdHlwZXMgcmVzZXJ2ZWQgYnkgUmVkdXguXFxuICogRm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHlvdSBtdXN0IHJldHVybiB0aGUgY3VycmVudCBzdGF0ZS5cXG4gKiBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyB1bmRlZmluZWQsIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS5cXG4gKiBEbyBub3QgcmVmZXJlbmNlIHRoZXNlIGFjdGlvbiB0eXBlcyBkaXJlY3RseSBpbiB5b3VyIGNvZGUuXFxuICovXFxudmFyIEFjdGlvblR5cGVzID0ge1xcbiAgSU5JVDogJ0BAcmVkdXgvSU5JVCdcXG5cXG4gIC8qKlxcbiAgICogQ3JlYXRlcyBhIFJlZHV4IHN0b3JlIHRoYXQgaG9sZHMgdGhlIHN0YXRlIHRyZWUuXFxuICAgKiBUaGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBkYXRhIGluIHRoZSBzdG9yZSBpcyB0byBjYWxsIGBkaXNwYXRjaCgpYCBvbiBpdC5cXG4gICAqXFxuICAgKiBUaGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBzdG9yZSBpbiB5b3VyIGFwcC4gVG8gc3BlY2lmeSBob3cgZGlmZmVyZW50XFxuICAgKiBwYXJ0cyBvZiB0aGUgc3RhdGUgdHJlZSByZXNwb25kIHRvIGFjdGlvbnMsIHlvdSBtYXkgY29tYmluZSBzZXZlcmFsIHJlZHVjZXJzXFxuICAgKiBpbnRvIGEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gYnkgdXNpbmcgYGNvbWJpbmVSZWR1Y2Vyc2AuXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSB0cmVlLCBnaXZlblxcbiAgICogdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGFjdGlvbiB0byBoYW5kbGUuXFxuICAgKlxcbiAgICogQHBhcmFtIHthbnl9IFtwcmVsb2FkZWRTdGF0ZV0gVGhlIGluaXRpYWwgc3RhdGUuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XFxuICAgKiB0byBoeWRyYXRlIHRoZSBzdGF0ZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYVxcbiAgICogcHJldmlvdXNseSBzZXJpYWxpemVkIHVzZXIgc2Vzc2lvbi5cXG4gICAqIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2Vyc2AgdG8gcHJvZHVjZSB0aGUgcm9vdCByZWR1Y2VyIGZ1bmN0aW9uLCB0aGlzIG11c3QgYmVcXG4gICAqIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIGBjb21iaW5lUmVkdWNlcnNgIGtleXMuXFxuICAgKlxcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2VuaGFuY2VyXSBUaGUgc3RvcmUgZW5oYW5jZXIuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XFxuICAgKiB0byBlbmhhbmNlIHRoZSBzdG9yZSB3aXRoIHRoaXJkLXBhcnR5IGNhcGFiaWxpdGllcyBzdWNoIGFzIG1pZGRsZXdhcmUsXFxuICAgKiB0aW1lIHRyYXZlbCwgcGVyc2lzdGVuY2UsIGV0Yy4gVGhlIG9ubHkgc3RvcmUgZW5oYW5jZXIgdGhhdCBzaGlwcyB3aXRoIFJlZHV4XFxuICAgKiBpcyBgYXBwbHlNaWRkbGV3YXJlKClgLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHtTdG9yZX0gQSBSZWR1eCBzdG9yZSB0aGF0IGxldHMgeW91IHJlYWQgdGhlIHN0YXRlLCBkaXNwYXRjaCBhY3Rpb25zXFxuICAgKiBhbmQgc3Vic2NyaWJlIHRvIGNoYW5nZXMuXFxuICAgKi9cXG59O2Z1bmN0aW9uIGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xcbiAgdmFyIF9yZWYyO1xcblxcbiAgaWYgKHR5cGVvZiBwcmVsb2FkZWRTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZW5oYW5jZXIgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XFxuICAgIHByZWxvYWRlZFN0YXRlID0gdW5kZWZpbmVkO1xcbiAgfVxcblxcbiAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgaWYgKHR5cGVvZiBlbmhhbmNlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdGhlIGVuaGFuY2VyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XFxuICB9XFxuXFxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0aGUgcmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgfVxcblxcbiAgdmFyIGN1cnJlbnRSZWR1Y2VyID0gcmVkdWNlcjtcXG4gIHZhciBjdXJyZW50U3RhdGUgPSBwcmVsb2FkZWRTdGF0ZTtcXG4gIHZhciBjdXJyZW50TGlzdGVuZXJzID0gW107XFxuICB2YXIgbmV4dExpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnM7XFxuICB2YXIgaXNEaXNwYXRjaGluZyA9IGZhbHNlO1xcblxcbiAgZnVuY3Rpb24gZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpIHtcXG4gICAgaWYgKG5leHRMaXN0ZW5lcnMgPT09IGN1cnJlbnRMaXN0ZW5lcnMpIHtcXG4gICAgICBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycy5zbGljZSgpO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKipcXG4gICAqIFJlYWRzIHRoZSBzdGF0ZSB0cmVlIG1hbmFnZWQgYnkgdGhlIHN0b3JlLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHthbnl9IFRoZSBjdXJyZW50IHN0YXRlIHRyZWUgb2YgeW91ciBhcHBsaWNhdGlvbi5cXG4gICAqL1xcbiAgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XFxuICAgIHJldHVybiBjdXJyZW50U3RhdGU7XFxuICB9XFxuXFxuICAvKipcXG4gICAqIEFkZHMgYSBjaGFuZ2UgbGlzdGVuZXIuIEl0IHdpbGwgYmUgY2FsbGVkIGFueSB0aW1lIGFuIGFjdGlvbiBpcyBkaXNwYXRjaGVkLFxcbiAgICogYW5kIHNvbWUgcGFydCBvZiB0aGUgc3RhdGUgdHJlZSBtYXkgcG90ZW50aWFsbHkgaGF2ZSBjaGFuZ2VkLiBZb3UgbWF5IHRoZW5cXG4gICAqIGNhbGwgYGdldFN0YXRlKClgIHRvIHJlYWQgdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBpbnNpZGUgdGhlIGNhbGxiYWNrLlxcbiAgICpcXG4gICAqIFlvdSBtYXkgY2FsbCBgZGlzcGF0Y2goKWAgZnJvbSBhIGNoYW5nZSBsaXN0ZW5lciwgd2l0aCB0aGUgZm9sbG93aW5nXFxuICAgKiBjYXZlYXRzOlxcbiAgICpcXG4gICAqIDEuIFRoZSBzdWJzY3JpcHRpb25zIGFyZSBzbmFwc2hvdHRlZCBqdXN0IGJlZm9yZSBldmVyeSBgZGlzcGF0Y2goKWAgY2FsbC5cXG4gICAqIElmIHlvdSBzdWJzY3JpYmUgb3IgdW5zdWJzY3JpYmUgd2hpbGUgdGhlIGxpc3RlbmVycyBhcmUgYmVpbmcgaW52b2tlZCwgdGhpc1xcbiAgICogd2lsbCBub3QgaGF2ZSBhbnkgZWZmZWN0IG9uIHRoZSBgZGlzcGF0Y2goKWAgdGhhdCBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXFxuICAgKiBIb3dldmVyLCB0aGUgbmV4dCBgZGlzcGF0Y2goKWAgY2FsbCwgd2hldGhlciBuZXN0ZWQgb3Igbm90LCB3aWxsIHVzZSBhIG1vcmVcXG4gICAqIHJlY2VudCBzbmFwc2hvdCBvZiB0aGUgc3Vic2NyaXB0aW9uIGxpc3QuXFxuICAgKlxcbiAgICogMi4gVGhlIGxpc3RlbmVyIHNob3VsZCBub3QgZXhwZWN0IHRvIHNlZSBhbGwgc3RhdGUgY2hhbmdlcywgYXMgdGhlIHN0YXRlXFxuICAgKiBtaWdodCBoYXZlIGJlZW4gdXBkYXRlZCBtdWx0aXBsZSB0aW1lcyBkdXJpbmcgYSBuZXN0ZWQgYGRpc3BhdGNoKClgIGJlZm9yZVxcbiAgICogdGhlIGxpc3RlbmVyIGlzIGNhbGxlZC4gSXQgaXMsIGhvd2V2ZXIsIGd1YXJhbnRlZWQgdGhhdCBhbGwgc3Vic2NyaWJlcnNcXG4gICAqIHJlZ2lzdGVyZWQgYmVmb3JlIHRoZSBgZGlzcGF0Y2goKWAgc3RhcnRlZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsYXRlc3RcXG4gICAqIHN0YXRlIGJ5IHRoZSB0aW1lIGl0IGV4aXRzLlxcbiAgICpcXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBldmVyeSBkaXNwYXRjaC5cXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0byByZW1vdmUgdGhpcyBjaGFuZ2UgbGlzdGVuZXIuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xcbiAgICBpZiAodHlwZW9mIGxpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xcblxcbiAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XFxuICAgIG5leHRMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XFxuXFxuICAgIHJldHVybiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHtcXG4gICAgICBpZiAoIWlzU3Vic2NyaWJlZCkge1xcbiAgICAgICAgcmV0dXJuO1xcbiAgICAgIH1cXG5cXG4gICAgICBpc1N1YnNjcmliZWQgPSBmYWxzZTtcXG5cXG4gICAgICBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCk7XFxuICAgICAgdmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcXG4gICAgICBuZXh0TGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XFxuICAgIH07XFxuICB9XFxuXFxuICAvKipcXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uLiBJdCBpcyB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBhIHN0YXRlIGNoYW5nZS5cXG4gICAqXFxuICAgKiBUaGUgYHJlZHVjZXJgIGZ1bmN0aW9uLCB1c2VkIHRvIGNyZWF0ZSB0aGUgc3RvcmUsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlXFxuICAgKiBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBnaXZlbiBgYWN0aW9uYC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsXFxuICAgKiBiZSBjb25zaWRlcmVkIHRoZSAqKm5leHQqKiBzdGF0ZSBvZiB0aGUgdHJlZSwgYW5kIHRoZSBjaGFuZ2UgbGlzdGVuZXJzXFxuICAgKiB3aWxsIGJlIG5vdGlmaWVkLlxcbiAgICpcXG4gICAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9ubHkgc3VwcG9ydHMgcGxhaW4gb2JqZWN0IGFjdGlvbnMuIElmIHlvdSB3YW50IHRvXFxuICAgKiBkaXNwYXRjaCBhIFByb21pc2UsIGFuIE9ic2VydmFibGUsIGEgdGh1bmssIG9yIHNvbWV0aGluZyBlbHNlLCB5b3UgbmVlZCB0b1xcbiAgICogd3JhcCB5b3VyIHN0b3JlIGNyZWF0aW5nIGZ1bmN0aW9uIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbWlkZGxld2FyZS4gRm9yXFxuICAgKiBleGFtcGxlLCBzZWUgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgcmVkdXgtdGh1bmtgIHBhY2thZ2UuIEV2ZW4gdGhlXFxuICAgKiBtaWRkbGV3YXJlIHdpbGwgZXZlbnR1YWxseSBkaXNwYXRjaCBwbGFpbiBvYmplY3QgYWN0aW9ucyB1c2luZyB0aGlzIG1ldGhvZC5cXG4gICAqXFxuICAgKiBAcGFyYW0ge09iamVjdH0gYWN0aW9uIEEgcGxhaW4gb2JqZWN0IHJlcHJlc2VudGluZyDigJx3aGF0IGNoYW5nZWTigJ0uIEl0IGlzXFxuICAgKiBhIGdvb2QgaWRlYSB0byBrZWVwIGFjdGlvbnMgc2VyaWFsaXphYmxlIHNvIHlvdSBjYW4gcmVjb3JkIGFuZCByZXBsYXkgdXNlclxcbiAgICogc2Vzc2lvbnMsIG9yIHVzZSB0aGUgdGltZSB0cmF2ZWxsaW5nIGByZWR1eC1kZXZ0b29sc2AuIEFuIGFjdGlvbiBtdXN0IGhhdmVcXG4gICAqIGEgYHR5cGVgIHByb3BlcnR5IHdoaWNoIG1heSBub3QgYmUgYHVuZGVmaW5lZGAuIEl0IGlzIGEgZ29vZCBpZGVhIHRvIHVzZVxcbiAgICogc3RyaW5nIGNvbnN0YW50cyBmb3IgYWN0aW9uIHR5cGVzLlxcbiAgICpcXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IEZvciBjb252ZW5pZW5jZSwgdGhlIHNhbWUgYWN0aW9uIG9iamVjdCB5b3UgZGlzcGF0Y2hlZC5cXG4gICAqXFxuICAgKiBOb3RlIHRoYXQsIGlmIHlvdSB1c2UgYSBjdXN0b20gbWlkZGxld2FyZSwgaXQgbWF5IHdyYXAgYGRpc3BhdGNoKClgIHRvXFxuICAgKiByZXR1cm4gc29tZXRoaW5nIGVsc2UgKGZvciBleGFtcGxlLCBhIFByb21pc2UgeW91IGNhbiBhd2FpdCkuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xcbiAgICBpZiAoIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX2lzUGxhaW5PYmplY3RfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFjdGlvbikpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbnMgbXVzdCBiZSBwbGFpbiBvYmplY3RzLiAnICsgJ1VzZSBjdXN0b20gbWlkZGxld2FyZSBmb3IgYXN5bmMgYWN0aW9ucy4nKTtcXG4gICAgfVxcblxcbiAgICBpZiAodHlwZW9mIGFjdGlvbi50eXBlID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWN0aW9ucyBtYXkgbm90IGhhdmUgYW4gdW5kZWZpbmVkIFxcXCJ0eXBlXFxcIiBwcm9wZXJ0eS4gJyArICdIYXZlIHlvdSBtaXNzcGVsbGVkIGEgY29uc3RhbnQ/Jyk7XFxuICAgIH1cXG5cXG4gICAgaWYgKGlzRGlzcGF0Y2hpbmcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXJzIG1heSBub3QgZGlzcGF0Y2ggYWN0aW9ucy4nKTtcXG4gICAgfVxcblxcbiAgICB0cnkge1xcbiAgICAgIGlzRGlzcGF0Y2hpbmcgPSB0cnVlO1xcbiAgICAgIGN1cnJlbnRTdGF0ZSA9IGN1cnJlbnRSZWR1Y2VyKGN1cnJlbnRTdGF0ZSwgYWN0aW9uKTtcXG4gICAgfSBmaW5hbGx5IHtcXG4gICAgICBpc0Rpc3BhdGNoaW5nID0gZmFsc2U7XFxuICAgIH1cXG5cXG4gICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnRMaXN0ZW5lcnMgPSBuZXh0TGlzdGVuZXJzO1xcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3RlbmVycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciBsaXN0ZW5lciA9IGxpc3RlbmVyc1tpXTtcXG4gICAgICBsaXN0ZW5lcigpO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBhY3Rpb247XFxuICB9XFxuXFxuICAvKipcXG4gICAqIFJlcGxhY2VzIHRoZSByZWR1Y2VyIGN1cnJlbnRseSB1c2VkIGJ5IHRoZSBzdG9yZSB0byBjYWxjdWxhdGUgdGhlIHN0YXRlLlxcbiAgICpcXG4gICAqIFlvdSBtaWdodCBuZWVkIHRoaXMgaWYgeW91ciBhcHAgaW1wbGVtZW50cyBjb2RlIHNwbGl0dGluZyBhbmQgeW91IHdhbnQgdG9cXG4gICAqIGxvYWQgc29tZSBvZiB0aGUgcmVkdWNlcnMgZHluYW1pY2FsbHkuIFlvdSBtaWdodCBhbHNvIG5lZWQgdGhpcyBpZiB5b3VcXG4gICAqIGltcGxlbWVudCBhIGhvdCByZWxvYWRpbmcgbWVjaGFuaXNtIGZvciBSZWR1eC5cXG4gICAqXFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBuZXh0UmVkdWNlciBUaGUgcmVkdWNlciBmb3IgdGhlIHN0b3JlIHRvIHVzZSBpbnN0ZWFkLlxcbiAgICogQHJldHVybnMge3ZvaWR9XFxuICAgKi9cXG4gIGZ1bmN0aW9uIHJlcGxhY2VSZWR1Y2VyKG5leHRSZWR1Y2VyKSB7XFxuICAgIGlmICh0eXBlb2YgbmV4dFJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRoZSBuZXh0UmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xcbiAgICB9XFxuXFxuICAgIGN1cnJlbnRSZWR1Y2VyID0gbmV4dFJlZHVjZXI7XFxuICAgIGRpc3BhdGNoKHsgdHlwZTogQWN0aW9uVHlwZXMuSU5JVCB9KTtcXG4gIH1cXG5cXG4gIC8qKlxcbiAgICogSW50ZXJvcGVyYWJpbGl0eSBwb2ludCBmb3Igb2JzZXJ2YWJsZS9yZWFjdGl2ZSBsaWJyYXJpZXMuXFxuICAgKiBAcmV0dXJucyB7b2JzZXJ2YWJsZX0gQSBtaW5pbWFsIG9ic2VydmFibGUgb2Ygc3RhdGUgY2hhbmdlcy5cXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgdGhlIG9ic2VydmFibGUgcHJvcG9zYWw6XFxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYnNlcnZhYmxlXFxuICAgKi9cXG4gIGZ1bmN0aW9uIG9ic2VydmFibGUoKSB7XFxuICAgIHZhciBfcmVmO1xcblxcbiAgICB2YXIgb3V0ZXJTdWJzY3JpYmUgPSBzdWJzY3JpYmU7XFxuICAgIHJldHVybiBfcmVmID0ge1xcbiAgICAgIC8qKlxcbiAgICAgICAqIFRoZSBtaW5pbWFsIG9ic2VydmFibGUgc3Vic2NyaXB0aW9uIG1ldGhvZC5cXG4gICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JzZXJ2ZXIgQW55IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIGFuIG9ic2VydmVyLlxcbiAgICAgICAqIFRoZSBvYnNlcnZlciBvYmplY3Qgc2hvdWxkIGhhdmUgYSBgbmV4dGAgbWV0aG9kLlxcbiAgICAgICAqIEByZXR1cm5zIHtzdWJzY3JpcHRpb259IEFuIG9iamVjdCB3aXRoIGFuIGB1bnN1YnNjcmliZWAgbWV0aG9kIHRoYXQgY2FuXFxuICAgICAgICogYmUgdXNlZCB0byB1bnN1YnNjcmliZSB0aGUgb2JzZXJ2YWJsZSBmcm9tIHRoZSBzdG9yZSwgYW5kIHByZXZlbnQgZnVydGhlclxcbiAgICAgICAqIGVtaXNzaW9uIG9mIHZhbHVlcyBmcm9tIHRoZSBvYnNlcnZhYmxlLlxcbiAgICAgICAqL1xcbiAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XFxuICAgICAgICBpZiAodHlwZW9mIG9ic2VydmVyICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCB0aGUgb2JzZXJ2ZXIgdG8gYmUgYW4gb2JqZWN0LicpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZnVuY3Rpb24gb2JzZXJ2ZVN0YXRlKCkge1xcbiAgICAgICAgICBpZiAob2JzZXJ2ZXIubmV4dCkge1xcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZ2V0U3RhdGUoKSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIG9ic2VydmVTdGF0ZSgpO1xcbiAgICAgICAgdmFyIHVuc3Vic2NyaWJlID0gb3V0ZXJTdWJzY3JpYmUob2JzZXJ2ZVN0YXRlKTtcXG4gICAgICAgIHJldHVybiB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZSB9O1xcbiAgICAgIH1cXG4gICAgfSwgX3JlZltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11dID0gZnVuY3Rpb24gKCkge1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9LCBfcmVmO1xcbiAgfVxcblxcbiAgLy8gV2hlbiBhIHN0b3JlIGlzIGNyZWF0ZWQsIGFuIFxcXCJJTklUXFxcIiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCBzbyB0aGF0IGV2ZXJ5XFxuICAvLyByZWR1Y2VyIHJldHVybnMgdGhlaXIgaW5pdGlhbCBzdGF0ZS4gVGhpcyBlZmZlY3RpdmVseSBwb3B1bGF0ZXNcXG4gIC8vIHRoZSBpbml0aWFsIHN0YXRlIHRyZWUuXFxuICBkaXNwYXRjaCh7IHR5cGU6IEFjdGlvblR5cGVzLklOSVQgfSk7XFxuXFxuICByZXR1cm4gX3JlZjIgPSB7XFxuICAgIGRpc3BhdGNoOiBkaXNwYXRjaCxcXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmUsXFxuICAgIGdldFN0YXRlOiBnZXRTdGF0ZSxcXG4gICAgcmVwbGFjZVJlZHVjZXI6IHJlcGxhY2VSZWR1Y2VyXFxuICB9LCBfcmVmMltfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfc3ltYm9sX29ic2VydmFibGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL11dID0gb2JzZXJ2YWJsZSwgX3JlZjI7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDc0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3YXJuaW5nO1xcbi8qKlxcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxcbiAqXFxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZS5cXG4gKiBAcmV0dXJucyB7dm9pZH1cXG4gKi9cXG5mdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHtcXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cXG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcXG4gIH1cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xcbiAgdHJ5IHtcXG4gICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBpZiB5b3UgZW5hYmxlXFxuICAgIC8vIFxcXCJicmVhayBvbiBhbGwgZXhjZXB0aW9uc1xcXCIgaW4geW91ciBjb25zb2xlLFxcbiAgICAvLyBpdCB3b3VsZCBwYXVzZSB0aGUgZXhlY3V0aW9uIGF0IHRoaXMgbGluZS5cXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eSAqL1xcbiAgfSBjYXRjaCAoZSkge31cXG4gIC8qIGVzbGludC1lbmFibGUgbm8tZW1wdHkgKi9cXG59XFxuXFxuLyoqKi8gfSksXFxuLyogNzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IGNvbXBvc2U7XFxuLyoqXFxuICogQ29tcG9zZXMgc2luZ2xlLWFyZ3VtZW50IGZ1bmN0aW9ucyBmcm9tIHJpZ2h0IHRvIGxlZnQuIFRoZSByaWdodG1vc3RcXG4gKiBmdW5jdGlvbiBjYW4gdGFrZSBtdWx0aXBsZSBhcmd1bWVudHMgYXMgaXQgcHJvdmlkZXMgdGhlIHNpZ25hdHVyZSBmb3JcXG4gKiB0aGUgcmVzdWx0aW5nIGNvbXBvc2l0ZSBmdW5jdGlvbi5cXG4gKlxcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IGZ1bmNzIFRoZSBmdW5jdGlvbnMgdG8gY29tcG9zZS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgZnVuY3Rpb24gb2J0YWluZWQgYnkgY29tcG9zaW5nIHRoZSBhcmd1bWVudCBmdW5jdGlvbnNcXG4gKiBmcm9tIHJpZ2h0IHRvIGxlZnQuIEZvciBleGFtcGxlLCBjb21wb3NlKGYsIGcsIGgpIGlzIGlkZW50aWNhbCB0byBkb2luZ1xcbiAqICguLi5hcmdzKSA9PiBmKGcoaCguLi5hcmdzKSkpLlxcbiAqL1xcblxcbmZ1bmN0aW9uIGNvbXBvc2UoKSB7XFxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZnVuY3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgZnVuY3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XFxuICB9XFxuXFxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAwKSB7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XFxuICAgICAgcmV0dXJuIGFyZztcXG4gICAgfTtcXG4gIH1cXG5cXG4gIGlmIChmdW5jcy5sZW5ndGggPT09IDEpIHtcXG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmNzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICAgIHJldHVybiBhKGIuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpKTtcXG4gICAgfTtcXG4gIH0pO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50O1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBnZXREZXBlbmRzT25Pd25Qcm9wcyAqL1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImJcXFwiXSA9IHdyYXBNYXBUb1Byb3BzRnVuYztcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc192ZXJpZnlQbGFpbk9iamVjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3Nyk7XFxuXFxuXFxuZnVuY3Rpb24gd3JhcE1hcFRvUHJvcHNDb25zdGFudChnZXRDb25zdGFudCkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRDb25zdGFudFNlbGVjdG9yKGRpc3BhdGNoLCBvcHRpb25zKSB7XFxuICAgIHZhciBjb25zdGFudCA9IGdldENvbnN0YW50KGRpc3BhdGNoLCBvcHRpb25zKTtcXG5cXG4gICAgZnVuY3Rpb24gY29uc3RhbnRTZWxlY3RvcigpIHtcXG4gICAgICByZXR1cm4gY29uc3RhbnQ7XFxuICAgIH1cXG4gICAgY29uc3RhbnRTZWxlY3Rvci5kZXBlbmRzT25Pd25Qcm9wcyA9IGZhbHNlO1xcbiAgICByZXR1cm4gY29uc3RhbnRTZWxlY3RvcjtcXG4gIH07XFxufVxcblxcbi8vIGRlcGVuZHNPbk93blByb3BzIGlzIHVzZWQgYnkgY3JlYXRlTWFwVG9Qcm9wc1Byb3h5IHRvIGRldGVybWluZSB3aGV0aGVyIHRvIHBhc3MgcHJvcHMgYXMgYXJnc1xcbi8vIHRvIHRoZSBtYXBUb1Byb3BzIGZ1bmN0aW9uIGJlaW5nIHdyYXBwZWQuIEl0IGlzIGFsc28gdXNlZCBieSBtYWtlUHVyZVByb3BzU2VsZWN0b3IgdG8gZGV0ZXJtaW5lXFxuLy8gd2hldGhlciBtYXBUb1Byb3BzIG5lZWRzIHRvIGJlIGludm9rZWQgd2hlbiBwcm9wcyBoYXZlIGNoYW5nZWQuXFxuLy8gXFxuLy8gQSBsZW5ndGggb2Ygb25lIHNpZ25hbHMgdGhhdCBtYXBUb1Byb3BzIGRvZXMgbm90IGRlcGVuZCBvbiBwcm9wcyBmcm9tIHRoZSBwYXJlbnQgY29tcG9uZW50Llxcbi8vIEEgbGVuZ3RoIG9mIHplcm8gaXMgYXNzdW1lZCB0byBtZWFuIG1hcFRvUHJvcHMgaXMgZ2V0dGluZyBhcmdzIHZpYSBhcmd1bWVudHMgb3IgLi4uYXJncyBhbmRcXG4vLyB0aGVyZWZvcmUgbm90IHJlcG9ydGluZyBpdHMgbGVuZ3RoIGFjY3VyYXRlbHkuLlxcbmZ1bmN0aW9uIGdldERlcGVuZHNPbk93blByb3BzKG1hcFRvUHJvcHMpIHtcXG4gIHJldHVybiBtYXBUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzICE9PSBudWxsICYmIG1hcFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMgIT09IHVuZGVmaW5lZCA/IEJvb2xlYW4obWFwVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgOiBtYXBUb1Byb3BzLmxlbmd0aCAhPT0gMTtcXG59XFxuXFxuLy8gVXNlZCBieSB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiBhbmQgd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzRnVuY3Rpb24sXFxuLy8gdGhpcyBmdW5jdGlvbiB3cmFwcyBtYXBUb1Byb3BzIGluIGEgcHJveHkgZnVuY3Rpb24gd2hpY2ggZG9lcyBzZXZlcmFsIHRoaW5nczpcXG4vLyBcXG4vLyAgKiBEZXRlY3RzIHdoZXRoZXIgdGhlIG1hcFRvUHJvcHMgZnVuY3Rpb24gYmVpbmcgY2FsbGVkIGRlcGVuZHMgb24gcHJvcHMsIHdoaWNoXFxuLy8gICAgaXMgdXNlZCBieSBzZWxlY3RvckZhY3RvcnkgdG8gZGVjaWRlIGlmIGl0IHNob3VsZCByZWludm9rZSBvbiBwcm9wcyBjaGFuZ2VzLlxcbi8vICAgIFxcbi8vICAqIE9uIGZpcnN0IGNhbGwsIGhhbmRsZXMgbWFwVG9Qcm9wcyBpZiByZXR1cm5zIGFub3RoZXIgZnVuY3Rpb24sIGFuZCB0cmVhdHMgdGhhdFxcbi8vICAgIG5ldyBmdW5jdGlvbiBhcyB0aGUgdHJ1ZSBtYXBUb1Byb3BzIGZvciBzdWJzZXF1ZW50IGNhbGxzLlxcbi8vICAgIFxcbi8vICAqIE9uIGZpcnN0IGNhbGwsIHZlcmlmaWVzIHRoZSBmaXJzdCByZXN1bHQgaXMgYSBwbGFpbiBvYmplY3QsIGluIG9yZGVyIHRvIHdhcm5cXG4vLyAgICB0aGUgZGV2ZWxvcGVyIHRoYXQgdGhlaXIgbWFwVG9Qcm9wcyBmdW5jdGlvbiBpcyBub3QgcmV0dXJuaW5nIGEgdmFsaWQgcmVzdWx0Llxcbi8vICAgIFxcbmZ1bmN0aW9uIHdyYXBNYXBUb1Byb3BzRnVuYyhtYXBUb1Byb3BzLCBtZXRob2ROYW1lKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gaW5pdFByb3h5U2VsZWN0b3IoZGlzcGF0Y2gsIF9yZWYpIHtcXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gX3JlZi5kaXNwbGF5TmFtZTtcXG5cXG4gICAgdmFyIHByb3h5ID0gZnVuY3Rpb24gbWFwVG9Qcm9wc1Byb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcXG4gICAgICByZXR1cm4gcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPyBwcm94eS5tYXBUb1Byb3BzKHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIDogcHJveHkubWFwVG9Qcm9wcyhzdGF0ZU9yRGlzcGF0Y2gpO1xcbiAgICB9O1xcblxcbiAgICAvLyBhbGxvdyBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5IHRvIGdldCBvd25Qcm9wc1xcbiAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IHRydWU7XFxuXFxuICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBmdW5jdGlvbiBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcXG4gICAgICBwcm94eS5tYXBUb1Byb3BzID0gbWFwVG9Qcm9wcztcXG4gICAgICBwcm94eS5kZXBlbmRzT25Pd25Qcm9wcyA9IGdldERlcGVuZHNPbk93blByb3BzKG1hcFRvUHJvcHMpO1xcbiAgICAgIHZhciBwcm9wcyA9IHByb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpO1xcblxcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBwcm9wcztcXG4gICAgICAgIHByb3h5LmRlcGVuZHNPbk93blByb3BzID0gZ2V0RGVwZW5kc09uT3duUHJvcHMocHJvcHMpO1xcbiAgICAgICAgcHJvcHMgPSBwcm94eShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKTtcXG4gICAgICB9XFxuXFxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShwcm9wcywgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpO1xcblxcbiAgICAgIHJldHVybiBwcm9wcztcXG4gICAgfTtcXG5cXG4gICAgcmV0dXJuIHByb3h5O1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDc3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGV4cG9ydCAoaW1tdXRhYmxlKSAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSB2ZXJpZnlQbGFpbk9iamVjdDtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5cXG5cXG5cXG5mdW5jdGlvbiB2ZXJpZnlQbGFpbk9iamVjdCh2YWx1ZSwgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1ldGhvZE5hbWUgKyAnKCkgaW4gJyArIGRpc3BsYXlOYW1lICsgJyBtdXN0IHJldHVybiBhIHBsYWluIG9iamVjdC4gSW5zdGVhZCByZWNlaXZlZCAnICsgdmFsdWUgKyAnLicpO1xcbiAgfVxcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiA3OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KF9fd2VicGFja19leHBvcnRzX18sIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheUluc2VydFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlJbnNlcnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5TW92ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlNb3ZlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVBvcFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlQb3A7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UHVzaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlQdXNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVJlbW92ZVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlSZW1vdmU7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFycmF5UmVtb3ZlQWxsXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVJlbW92ZUFsbDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTaGlmdFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJyYXlTaGlmdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlTcGxpY2VcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U3BsaWNlOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJhcnJheVN3YXBcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGFycmF5U3dhcDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYXJyYXlVbnNoaWZ0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhcnJheVVuc2hpZnQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImF1dG9maWxsXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBhdXRvZmlsbDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYmx1clxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gYmx1cjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2hhbmdlXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjaGFuZ2U7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImNsZWFyU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBjbGVhclN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiY2xlYXJTdWJtaXRFcnJvcnNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsZWFyU3VibWl0RXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJjbGVhckFzeW5jRXJyb3JcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGNsZWFyQXN5bmNFcnJvcjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZGVzdHJveVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGVzdHJveTsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiZm9jdXNcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIGZvY3VzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJpbml0aWFsaXplXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBpbml0aWFsaXplOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZWdpc3RlckZpZWxkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiByZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJyZXNldFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVzZXQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInN0YXJ0QXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdGFydEFzeW5jVmFsaWRhdGlvbjsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic3RhcnRTdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN0YXJ0U3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wQXN5bmNWYWxpZGF0aW9uXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wQXN5bmNWYWxpZGF0aW9uOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdG9wU3VibWl0XFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzdG9wU3VibWl0OyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJzdWJtaXRcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHN1Ym1pdDsgfSk7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwic2V0U3VibWl0RmFpbGVkXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiBzZXRTdWJtaXRGYWlsZWQ7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInNldFN1Ym1pdFN1Y2NlZWRlZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gc2V0U3VibWl0U3VjY2VlZGVkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ0b3VjaFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdG91Y2g7IH0pO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcInVucmVnaXN0ZXJGaWVsZFxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gdW5yZWdpc3RlckZpZWxkOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1bnRvdWNoXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1bnRvdWNoOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1cGRhdGVTeW5jRXJyb3JzXFxcIiwgZnVuY3Rpb24oKSB7IHJldHVybiB1cGRhdGVTeW5jRXJyb3JzOyB9KTtcXG4vKiBoYXJtb255IGV4cG9ydCAoYmluZGluZykgKi8gX193ZWJwYWNrX3JlcXVpcmVfXy5kKF9fd2VicGFja19leHBvcnRzX18sIFxcXCJ1cGRhdGVTeW5jV2FybmluZ3NcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIHVwZGF0ZVN5bmNXYXJuaW5nczsgfSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcpO1xcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuXFxuXFxudmFyIGFycmF5SW5zZXJ0ID0gZnVuY3Rpb24gYXJyYXlJbnNlcnQoZm9ybSwgZmllbGQsIGluZGV4LCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9JTlNFUlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQsIGluZGV4OiBpbmRleCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGFycmF5TW92ZSA9IGZ1bmN0aW9uIGFycmF5TW92ZShmb3JtLCBmaWVsZCwgZnJvbSwgdG8pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfTU9WRVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgZnJvbTogZnJvbSwgdG86IHRvIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVBvcCA9IGZ1bmN0aW9uIGFycmF5UG9wKGZvcm0sIGZpZWxkKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1BPUFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlQdXNoID0gZnVuY3Rpb24gYXJyYXlQdXNoKGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QVVNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgYXJyYXlSZW1vdmUgPSBmdW5jdGlvbiBhcnJheVJlbW92ZShmb3JtLCBmaWVsZCwgaW5kZXgpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUkVNT1ZFXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCBpbmRleDogaW5kZXggfSB9O1xcbn07XFxuXFxudmFyIGFycmF5UmVtb3ZlQWxsID0gZnVuY3Rpb24gYXJyYXlSZW1vdmVBbGwoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUkVNT1ZFX0FMTFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9IH07XFxufTtcXG5cXG52YXIgYXJyYXlTaGlmdCA9IGZ1bmN0aW9uIGFycmF5U2hpZnQoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU0hJRlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGFycmF5U3BsaWNlID0gZnVuY3Rpb24gYXJyYXlTcGxpY2UoZm9ybSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NQTElDRVxcXCJdLFxcbiAgICBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXg6IGluZGV4LCByZW1vdmVOdW06IHJlbW92ZU51bSB9XFxuICB9O1xcbiAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcXG4gICAgYWN0aW9uLnBheWxvYWQgPSB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgYXJyYXlTd2FwID0gZnVuY3Rpb24gYXJyYXlTd2FwKGZvcm0sIGZpZWxkLCBpbmRleEEsIGluZGV4Qikge1xcbiAgaWYgKGluZGV4QSA9PT0gaW5kZXhCKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignU3dhcCBpbmRpY2VzIGNhbm5vdCBiZSBlcXVhbCcpO1xcbiAgfVxcbiAgaWYgKGluZGV4QSA8IDAgfHwgaW5kZXhCIDwgMCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N3YXAgaW5kaWNlcyBjYW5ub3QgYmUgbmVnYXRpdmUnKTtcXG4gIH1cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfU1dBUFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgaW5kZXhBOiBpbmRleEEsIGluZGV4QjogaW5kZXhCIH0gfTtcXG59O1xcblxcbnZhciBhcnJheVVuc2hpZnQgPSBmdW5jdGlvbiBhcnJheVVuc2hpZnQoZm9ybSwgZmllbGQsIHZhbHVlKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1VOU0hJRlRcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBhdXRvZmlsbCA9IGZ1bmN0aW9uIGF1dG9maWxsKGZvcm0sIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBVVRPRklMTFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCB9LCBwYXlsb2FkOiB2YWx1ZSB9O1xcbn07XFxuXFxudmFyIGJsdXIgPSBmdW5jdGlvbiBibHVyKGZvcm0sIGZpZWxkLCB2YWx1ZSwgdG91Y2gpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQkxVUlxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0sIGZpZWxkOiBmaWVsZCwgdG91Y2g6IHRvdWNoIH0sIHBheWxvYWQ6IHZhbHVlIH07XFxufTtcXG5cXG52YXIgY2hhbmdlID0gZnVuY3Rpb24gY2hhbmdlKGZvcm0sIGZpZWxkLCB2YWx1ZSwgdG91Y2gsIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0hBTkdFXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkLCB0b3VjaDogdG91Y2gsIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgfSwgcGF5bG9hZDogdmFsdWUgfTtcXG59O1xcblxcbnZhciBjbGVhclN1Ym1pdCA9IGZ1bmN0aW9uIGNsZWFyU3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgY2xlYXJTdWJtaXRFcnJvcnMgPSBmdW5jdGlvbiBjbGVhclN1Ym1pdEVycm9ycyhmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0gfTtcXG59O1xcblxcbnZhciBjbGVhckFzeW5jRXJyb3IgPSBmdW5jdGlvbiBjbGVhckFzeW5jRXJyb3IoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfQVNZTkNfRVJST1JcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGRlc3Ryb3kgPSBmdW5jdGlvbiBkZXN0cm95KCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGZvcm0gPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcXG4gICAgZm9ybVtfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiREVTVFJPWVxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSB9O1xcbn07XFxuXFxudmFyIGZvY3VzID0gZnVuY3Rpb24gZm9jdXMoZm9ybSwgZmllbGQpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiRk9DVVNcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZDogZmllbGQgfSB9O1xcbn07XFxuXFxudmFyIGluaXRpYWxpemUgPSBmdW5jdGlvbiBpbml0aWFsaXplKGZvcm0sIHZhbHVlcywga2VlcERpcnR5KSB7XFxuICB2YXIgb3RoZXJNZXRhID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiB7fTtcXG5cXG4gIGlmIChrZWVwRGlydHkgaW5zdGFuY2VvZiBPYmplY3QpIHtcXG4gICAgb3RoZXJNZXRhID0ga2VlcERpcnR5O1xcbiAgICBrZWVwRGlydHkgPSBmYWxzZTtcXG4gIH1cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiSU5JVElBTElaRVxcXCJdLCBtZXRhOiBfZXh0ZW5kcyh7IGZvcm06IGZvcm0sIGtlZXBEaXJ0eToga2VlcERpcnR5IH0sIG90aGVyTWV0YSksIHBheWxvYWQ6IHZhbHVlcyB9O1xcbn07XFxuXFxudmFyIHJlZ2lzdGVyRmllbGQgPSBmdW5jdGlvbiByZWdpc3RlckZpZWxkKGZvcm0sIG5hbWUsIHR5cGUpIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVHSVNURVJfRklFTERcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtIH0sIHBheWxvYWQ6IHsgbmFtZTogbmFtZSwgdHlwZTogdHlwZSB9IH07XFxufTtcXG5cXG52YXIgcmVzZXQgPSBmdW5jdGlvbiByZXNldChmb3JtKSB7XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlJFU0VUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBmdW5jdGlvbiBzdGFydEFzeW5jVmFsaWRhdGlvbihmb3JtLCBmaWVsZCkge1xcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJTVEFSVF9BU1lOQ19WQUxJREFUSU9OXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGQ6IGZpZWxkIH0gfTtcXG59O1xcblxcbnZhciBzdGFydFN1Ym1pdCA9IGZ1bmN0aW9uIHN0YXJ0U3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RBUlRfU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc3RvcEFzeW5jVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIHN0b3BBc3luY1ZhbGlkYXRpb24oZm9ybSwgZXJyb3JzKSB7XFxuICB2YXIgYWN0aW9uID0ge1xcbiAgICB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfQVNZTkNfVkFMSURBVElPTlxcXCJdLFxcbiAgICBtZXRhOiB7IGZvcm06IGZvcm0gfSxcXG4gICAgcGF5bG9hZDogZXJyb3JzXFxuICB9O1xcbiAgaWYgKGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCkge1xcbiAgICBhY3Rpb24uZXJyb3IgPSB0cnVlO1xcbiAgfVxcbiAgcmV0dXJuIGFjdGlvbjtcXG59O1xcblxcbnZhciBzdG9wU3VibWl0ID0gZnVuY3Rpb24gc3RvcFN1Ym1pdChmb3JtLCBlcnJvcnMpIHtcXG4gIHZhciBhY3Rpb24gPSB7XFxuICAgIHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1RPUF9TVUJNSVRcXFwiXSxcXG4gICAgbWV0YTogeyBmb3JtOiBmb3JtIH0sXFxuICAgIHBheWxvYWQ6IGVycm9yc1xcbiAgfTtcXG4gIGlmIChlcnJvcnMgJiYgT2JqZWN0LmtleXMoZXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgYWN0aW9uLmVycm9yID0gdHJ1ZTtcXG4gIH1cXG4gIHJldHVybiBhY3Rpb247XFxufTtcXG5cXG52YXIgc3VibWl0ID0gZnVuY3Rpb24gc3VibWl0KGZvcm0pIHtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU1VCTUlUXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9IH07XFxufTtcXG5cXG52YXIgc2V0U3VibWl0RmFpbGVkID0gZnVuY3Rpb24gc2V0U3VibWl0RmFpbGVkKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xcbiAgICBmaWVsZHNbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNFVF9TVUJNSVRfRkFJTEVEXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSwgZXJyb3I6IHRydWUgfTtcXG59O1xcblxcbnZhciBzZXRTdWJtaXRTdWNjZWVkZWQgPSBmdW5jdGlvbiBzZXRTdWJtaXRTdWNjZWVkZWQoZm9ybSkge1xcbiAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBmaWVsZHMgPSBBcnJheShfbGVuMyA+IDEgPyBfbGVuMyAtIDEgOiAwKSwgX2tleTMgPSAxOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XFxuICAgIGZpZWxkc1tfa2V5MyAtIDFdID0gYXJndW1lbnRzW19rZXkzXTtcXG4gIH1cXG5cXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiXSwgbWV0YTogeyBmb3JtOiBmb3JtLCBmaWVsZHM6IGZpZWxkcyB9LCBlcnJvcjogZmFsc2UgfTtcXG59O1xcblxcbnZhciB0b3VjaCA9IGZ1bmN0aW9uIHRvdWNoKGZvcm0pIHtcXG4gIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbjQgPiAxID8gX2xlbjQgLSAxIDogMCksIF9rZXk0ID0gMTsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xcbiAgICBmaWVsZHNbX2tleTQgLSAxXSA9IGFyZ3VtZW50c1tfa2V5NF07XFxuICB9XFxuXFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlRPVUNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSB9O1xcbn07XFxuXFxudmFyIHVucmVnaXN0ZXJGaWVsZCA9IGZ1bmN0aW9uIHVucmVnaXN0ZXJGaWVsZChmb3JtLCBuYW1lKSB7XFxuICB2YXIgZGVzdHJveU9uVW5tb3VudCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogdHJ1ZTtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVU5SRUdJU1RFUl9GSUVMRFxcXCJdLCBtZXRhOiB7IGZvcm06IGZvcm0gfSwgcGF5bG9hZDogeyBuYW1lOiBuYW1lLCBkZXN0cm95T25Vbm1vdW50OiBkZXN0cm95T25Vbm1vdW50IH0gfTtcXG59O1xcblxcbnZhciB1bnRvdWNoID0gZnVuY3Rpb24gdW50b3VjaChmb3JtKSB7XFxuICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGZpZWxkcyA9IEFycmF5KF9sZW41ID4gMSA/IF9sZW41IC0gMSA6IDApLCBfa2V5NSA9IDE7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcXG4gICAgZmllbGRzW19rZXk1IC0gMV0gPSBhcmd1bWVudHNbX2tleTVdO1xcbiAgfVxcblxcbiAgcmV0dXJuIHsgdHlwZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlRPVUNIXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSwgZmllbGRzOiBmaWVsZHMgfSB9O1xcbn07XFxuXFxudmFyIHVwZGF0ZVN5bmNFcnJvcnMgPSBmdW5jdGlvbiB1cGRhdGVTeW5jRXJyb3JzKGZvcm0pIHtcXG4gIHZhciBzeW5jRXJyb3JzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcXG4gIHZhciBlcnJvciA9IGFyZ3VtZW50c1syXTtcXG4gIHJldHVybiB7IHR5cGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVVBEQVRFX1NZTkNfRVJST1JTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IHN5bmNFcnJvcnM6IHN5bmNFcnJvcnMsIGVycm9yOiBlcnJvciB9IH07XFxufTtcXG5cXG52YXIgdXBkYXRlU3luY1dhcm5pbmdzID0gZnVuY3Rpb24gdXBkYXRlU3luY1dhcm5pbmdzKGZvcm0pIHtcXG4gIHZhciBzeW5jV2FybmluZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcbiAgdmFyIHdhcm5pbmcgPSBhcmd1bWVudHNbMl07XFxuICByZXR1cm4geyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX1dBUk5JTkdTXFxcIl0sIG1ldGE6IHsgZm9ybTogZm9ybSB9LCBwYXlsb2FkOiB7IHN5bmNXYXJuaW5nczogc3luY1dhcm5pbmdzLCB3YXJuaW5nOiB3YXJuaW5nIH0gfTtcXG59O1xcblxcbi8qKiovIH0pLFxcbi8qIDc5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2VzNl9lcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTQpO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxudmFyIFN1Ym1pc3Npb25FcnJvciA9IGZ1bmN0aW9uIChfRXh0ZW5kYWJsZUVycm9yKSB7XFxuICBfaW5oZXJpdHMoU3VibWlzc2lvbkVycm9yLCBfRXh0ZW5kYWJsZUVycm9yKTtcXG5cXG4gIGZ1bmN0aW9uIFN1Ym1pc3Npb25FcnJvcihlcnJvcnMpIHtcXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN1Ym1pc3Npb25FcnJvcik7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChTdWJtaXNzaW9uRXJyb3IuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihTdWJtaXNzaW9uRXJyb3IpKS5jYWxsKHRoaXMsICdTdWJtaXQgVmFsaWRhdGlvbiBGYWlsZWQnKSk7XFxuXFxuICAgIF90aGlzLmVycm9ycyA9IGVycm9ycztcXG4gICAgcmV0dXJuIF90aGlzO1xcbiAgfVxcblxcbiAgcmV0dXJuIFN1Ym1pc3Npb25FcnJvcjtcXG59KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9lczZfZXJyb3JfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFN1Ym1pc3Npb25FcnJvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogODAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODEpO1xcblxcblxcbnZhciBzaWxlbmNlRXZlbnQgPSBmdW5jdGlvbiBzaWxlbmNlRXZlbnQoZXZlbnQpIHtcXG4gIHZhciBpcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50KTtcXG4gIGlmIChpcykge1xcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xcbiAgfVxcbiAgcmV0dXJuIGlzO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc2lsZW5jZUV2ZW50KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGlzRXZlbnQgPSBmdW5jdGlvbiBpc0V2ZW50KGNhbmRpZGF0ZSkge1xcbiAgcmV0dXJuICEhKGNhbmRpZGF0ZSAmJiBjYW5kaWRhdGUuc3RvcFByb3BhZ2F0aW9uICYmIGNhbmRpZGF0ZS5wcmV2ZW50RGVmYXVsdCk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0V2ZW50KTtcXG5cXG4vKioqLyB9KSxcXG4vKiA4MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcblxcblxcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uaXNFcXVhbGAgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBgY3VzdG9taXplcmAgd2hpY2hcXG4gKiBpcyBpbnZva2VkIHRvIGNvbXBhcmUgdmFsdWVzLiBJZiBgY3VzdG9taXplcmAgcmV0dXJucyBgdW5kZWZpbmVkYCwgY29tcGFyaXNvbnNcXG4gKiBhcmUgaGFuZGxlZCBieSB0aGUgbWV0aG9kIGluc3RlYWQuIFRoZSBgY3VzdG9taXplcmAgaXMgaW52b2tlZCB3aXRoIHVwIHRvXFxuICogc2l4IGFyZ3VtZW50czogKG9ialZhbHVlLCBvdGhWYWx1ZSBbLCBpbmRleHxrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrXSkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgTGFuZ1xcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBmdW5jdGlvbiBpc0dyZWV0aW5nKHZhbHVlKSB7XFxuICogICByZXR1cm4gL15oKD86aXxlbGxvKSQvLnRlc3QodmFsdWUpO1xcbiAqIH1cXG4gKlxcbiAqIGZ1bmN0aW9uIGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlKSB7XFxuICogICBpZiAoaXNHcmVldGluZyhvYmpWYWx1ZSkgJiYgaXNHcmVldGluZyhvdGhWYWx1ZSkpIHtcXG4gKiAgICAgcmV0dXJuIHRydWU7XFxuICogICB9XFxuICogfVxcbiAqXFxuICogdmFyIGFycmF5ID0gWydoZWxsbycsICdnb29kYnllJ107XFxuICogdmFyIG90aGVyID0gWydoaScsICdnb29kYnllJ107XFxuICpcXG4gKiBfLmlzRXF1YWxXaXRoKGFycmF5LCBvdGhlciwgY3VzdG9taXplcik7XFxuICogLy8gPT4gdHJ1ZVxcbiAqL1xcbmZ1bmN0aW9uIGlzRXF1YWxXaXRoKHZhbHVlLCBvdGhlciwgY3VzdG9taXplcikge1xcbiAgY3VzdG9taXplciA9IHR5cGVvZiBjdXN0b21pemVyID09ICdmdW5jdGlvbicgPyBjdXN0b21pemVyIDogdW5kZWZpbmVkO1xcbiAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKHZhbHVlLCBvdGhlcikgOiB1bmRlZmluZWQ7XFxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUsIG90aGVyLCB1bmRlZmluZWQsIGN1c3RvbWl6ZXIpIDogISFyZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzRXF1YWxXaXRoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA4MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxudmFyIHByb2Nlc3NQcm9wcyA9IGZ1bmN0aW9uIHByb2Nlc3NQcm9wcyh0eXBlLCBwcm9wcywgX3ZhbHVlKSB7XFxuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcXG5cXG4gIGlmICh0eXBlID09PSAnY2hlY2tib3gnKSB7XFxuICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcXG4gICAgICBjaGVja2VkOiAhIXZhbHVlXFxuICAgIH0pO1xcbiAgfVxcbiAgaWYgKHR5cGUgPT09ICdyYWRpbycpIHtcXG4gICAgcmV0dXJuIF9leHRlbmRzKHt9LCBwcm9wcywge1xcbiAgICAgIGNoZWNrZWQ6IHZhbHVlID09PSBfdmFsdWUsXFxuICAgICAgdmFsdWU6IF92YWx1ZVxcbiAgICB9KTtcXG4gIH1cXG4gIGlmICh0eXBlID09PSAnc2VsZWN0LW11bHRpcGxlJykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgdmFsdWU6IHZhbHVlIHx8IFtdXFxuICAgIH0pO1xcbiAgfVxcbiAgaWYgKHR5cGUgPT09ICdmaWxlJykge1xcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHByb3BzLCB7XFxuICAgICAgdmFsdWU6IHZhbHVlIHx8IHVuZGVmaW5lZFxcbiAgICB9KTtcXG4gIH1cXG4gIHJldHVybiBwcm9wcztcXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZFByb3BzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRQcm9wcyhfcmVmMiwgbmFtZSwgX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZjIuZ2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYyLnRvSlM7XFxuXFxuICB2YXIgYXN5bmNFcnJvciA9IF9yZWYuYXN5bmNFcnJvcixcXG4gICAgICBhc3luY1ZhbGlkYXRpbmcgPSBfcmVmLmFzeW5jVmFsaWRhdGluZyxcXG4gICAgICBvbkJsdXIgPSBfcmVmLm9uQmx1cixcXG4gICAgICBvbkNoYW5nZSA9IF9yZWYub25DaGFuZ2UsXFxuICAgICAgb25Ecm9wID0gX3JlZi5vbkRyb3AsXFxuICAgICAgb25EcmFnU3RhcnQgPSBfcmVmLm9uRHJhZ1N0YXJ0LFxcbiAgICAgIGRpcnR5ID0gX3JlZi5kaXJ0eSxcXG4gICAgICBkaXNwYXRjaCA9IF9yZWYuZGlzcGF0Y2gsXFxuICAgICAgb25Gb2N1cyA9IF9yZWYub25Gb2N1cyxcXG4gICAgICBmb3JtID0gX3JlZi5mb3JtLFxcbiAgICAgIGZvcm1hdCA9IF9yZWYuZm9ybWF0LFxcbiAgICAgIHBhcnNlID0gX3JlZi5wYXJzZSxcXG4gICAgICBwcmlzdGluZSA9IF9yZWYucHJpc3RpbmUsXFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcXG4gICAgICBzdWJtaXRFcnJvciA9IF9yZWYuc3VibWl0RXJyb3IsXFxuICAgICAgc3VibWl0RmFpbGVkID0gX3JlZi5zdWJtaXRGYWlsZWQsXFxuICAgICAgc3VibWl0dGluZyA9IF9yZWYuc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3IgPSBfcmVmLnN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZyA9IF9yZWYuc3luY1dhcm5pbmcsXFxuICAgICAgdmFsaWRhdGUgPSBfcmVmLnZhbGlkYXRlLFxcbiAgICAgIHZhbHVlID0gX3JlZi52YWx1ZSxcXG4gICAgICBfdmFsdWUgPSBfcmVmLl92YWx1ZSxcXG4gICAgICB3YXJuID0gX3JlZi53YXJuLFxcbiAgICAgIGN1c3RvbSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbJ2FzeW5jRXJyb3InLCAnYXN5bmNWYWxpZGF0aW5nJywgJ29uQmx1cicsICdvbkNoYW5nZScsICdvbkRyb3AnLCAnb25EcmFnU3RhcnQnLCAnZGlydHknLCAnZGlzcGF0Y2gnLCAnb25Gb2N1cycsICdmb3JtJywgJ2Zvcm1hdCcsICdwYXJzZScsICdwcmlzdGluZScsICdwcm9wcycsICdzdGF0ZScsICdzdWJtaXRFcnJvcicsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0dGluZycsICdzeW5jRXJyb3InLCAnc3luY1dhcm5pbmcnLCAndmFsaWRhdGUnLCAndmFsdWUnLCAnX3ZhbHVlJywgJ3dhcm4nXSk7XFxuXFxuICB2YXIgZXJyb3IgPSBzeW5jRXJyb3IgfHwgYXN5bmNFcnJvciB8fCBzdWJtaXRFcnJvcjtcXG4gIHZhciB3YXJuaW5nID0gc3luY1dhcm5pbmc7XFxuXFxuICB2YXIgZm9ybWF0RmllbGRWYWx1ZSA9IGZ1bmN0aW9uIGZvcm1hdEZpZWxkVmFsdWUodmFsdWUsIGZvcm1hdCkge1xcbiAgICBpZiAoZm9ybWF0ID09PSBudWxsKSB7XFxuICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICB9XFxuICAgIHZhciBkZWZhdWx0Rm9ybWF0dGVkVmFsdWUgPSB2YWx1ZSA9PSBudWxsID8gJycgOiB2YWx1ZTtcXG4gICAgcmV0dXJuIGZvcm1hdCA/IGZvcm1hdCh2YWx1ZSwgbmFtZSkgOiBkZWZhdWx0Rm9ybWF0dGVkVmFsdWU7XFxuICB9O1xcblxcbiAgdmFyIGZvcm1hdHRlZEZpZWxkVmFsdWUgPSBmb3JtYXRGaWVsZFZhbHVlKHZhbHVlLCBmb3JtYXQpO1xcblxcbiAgcmV0dXJuIHtcXG4gICAgaW5wdXQ6IHByb2Nlc3NQcm9wcyhjdXN0b20udHlwZSwge1xcbiAgICAgIG5hbWU6IG5hbWUsXFxuICAgICAgb25CbHVyOiBvbkJsdXIsXFxuICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxcbiAgICAgIG9uRHJhZ1N0YXJ0OiBvbkRyYWdTdGFydCxcXG4gICAgICBvbkRyb3A6IG9uRHJvcCxcXG4gICAgICBvbkZvY3VzOiBvbkZvY3VzLFxcbiAgICAgIHZhbHVlOiBmb3JtYXR0ZWRGaWVsZFZhbHVlXFxuICAgIH0sIF92YWx1ZSksXFxuICAgIG1ldGE6IF9leHRlbmRzKHt9LCB0b0pTKHN0YXRlKSwge1xcbiAgICAgIGFjdGl2ZTogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICdhY3RpdmUnKSksXFxuICAgICAgYXN5bmNWYWxpZGF0aW5nOiBhc3luY1ZhbGlkYXRpbmcsXFxuICAgICAgYXV0b2ZpbGxlZDogISEoc3RhdGUgJiYgZ2V0SW4oc3RhdGUsICdhdXRvZmlsbGVkJykpLFxcbiAgICAgIGRpcnR5OiBkaXJ0eSxcXG4gICAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXFxuICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgIGZvcm06IGZvcm0sXFxuICAgICAgd2FybmluZzogd2FybmluZyxcXG4gICAgICBpbnZhbGlkOiAhIWVycm9yLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdWJtaXR0aW5nOiAhIXN1Ym1pdHRpbmcsXFxuICAgICAgc3VibWl0RmFpbGVkOiAhIXN1Ym1pdEZhaWxlZCxcXG4gICAgICB0b3VjaGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3RvdWNoZWQnKSksXFxuICAgICAgdmFsaWQ6ICFlcnJvcixcXG4gICAgICB2aXNpdGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3Zpc2l0ZWQnKSlcXG4gICAgfSksXFxuICAgIGN1c3RvbTogX2V4dGVuZHMoe30sIGN1c3RvbSwgcHJvcHMpXFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRQcm9wcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogODQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldFZhbHVlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNSZWFjdE5hdGl2ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzApO1xcblxcblxcblxcbnZhciBvbkNoYW5nZVZhbHVlID0gZnVuY3Rpb24gb25DaGFuZ2VWYWx1ZShldmVudCwgX3JlZikge1xcbiAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxcbiAgICAgIG5vcm1hbGl6ZSA9IF9yZWYubm9ybWFsaXplO1xcblxcbiAgLy8gcmVhZCB2YWx1ZSBmcm9tIGlucHV0XFxuICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNSZWFjdE5hdGl2ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuICAvLyBwYXJzZSB2YWx1ZSBpZiB3ZSBoYXZlIGEgcGFyc2VyXFxuICBpZiAocGFyc2UpIHtcXG4gICAgdmFsdWUgPSBwYXJzZSh2YWx1ZSwgbmFtZSk7XFxuICB9XFxuXFxuICAvLyBub3JtYWxpemUgdmFsdWVcXG4gIGlmIChub3JtYWxpemUpIHtcXG4gICAgdmFsdWUgPSBub3JtYWxpemUobmFtZSwgdmFsdWUpO1xcbiAgfVxcblxcbiAgcmV0dXJuIHZhbHVlO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob25DaGFuZ2VWYWx1ZSk7XFxuXFxuLyoqKi8gfSksXFxuLyogODUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVJc1ByaXN0aW5lID0gZnVuY3Rpb24gY3JlYXRlSXNQcmlzdGluZShfcmVmKSB7XFxuICB2YXIgZGVlcEVxdWFsID0gX3JlZi5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBfcmVmLmVtcHR5LFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgICB2YXIgaW5pdGlhbCA9IGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuaW5pdGlhbCcpIHx8IGVtcHR5O1xcbiAgICAgIHZhciB2YWx1ZXMgPSBnZXRJbihmb3JtU3RhdGUsIGZvcm0gKyAnLnZhbHVlcycpIHx8IGluaXRpYWw7XFxuICAgICAgcmV0dXJuIGRlZXBFcXVhbChpbml0aWFsLCB2YWx1ZXMpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzUHJpc3RpbmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDg2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cykge1xcblxcbi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuICBJbiB0aGVcXG4vLyBicm93c2VyIHRoaXMgaXMgYSBsaXR0bGUgY29tcGxpY2F0ZWQgZHVlIHRvIHVua25vd24gcXVhbGl0eSBvZiBNYXRoLnJhbmRvbSgpXFxuLy8gYW5kIGluY29uc2lzdGVudCBzdXBwb3J0IGZvciB0aGUgYGNyeXB0b2AgQVBJLiAgV2UgZG8gdGhlIGJlc3Qgd2UgY2FuIHZpYVxcbi8vIGZlYXR1cmUtZGV0ZWN0aW9uXFxuXFxuLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFxcXCJ0aGlzXFxcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cXG52YXIgZ2V0UmFuZG9tVmFsdWVzID0gKHR5cGVvZihjcnlwdG8pICE9ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pKSB8fFxcbiAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mKG1zQ3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0bykpO1xcbmlmIChnZXRSYW5kb21WYWx1ZXMpIHtcXG4gIC8vIFdIQVRXRyBjcnlwdG8gUk5HIC0gaHR0cDovL3dpa2kud2hhdHdnLm9yZy93aWtpL0NyeXB0b1xcbiAgdmFyIHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXFxuXFxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdoYXR3Z1JORygpIHtcXG4gICAgZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcXG4gICAgcmV0dXJuIHJuZHM4O1xcbiAgfTtcXG59IGVsc2Uge1xcbiAgLy8gTWF0aC5yYW5kb20oKS1iYXNlZCAoUk5HKVxcbiAgLy9cXG4gIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB1c2UgTWF0aC5yYW5kb20oKS4gIEl0J3MgZmFzdCwgYnV0IGlzIG9mIHVuc3BlY2lmaWVkXFxuICAvLyBxdWFsaXR5LlxcbiAgdmFyIHJuZHMgPSBuZXcgQXJyYXkoMTYpO1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRoUk5HKCkge1xcbiAgICBmb3IgKHZhciBpID0gMCwgcjsgaSA8IDE2OyBpKyspIHtcXG4gICAgICBpZiAoKGkgJiAweDAzKSA9PT0gMCkgciA9IE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAwMDtcXG4gICAgICBybmRzW2ldID0gciA+Pj4gKChpICYgMHgwMykgPDwgMykgJiAweGZmO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBybmRzO1xcbiAgfTtcXG59XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogODcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuLyoqXFxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XFxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXFxuICovXFxudmFyIGJ5dGVUb0hleCA9IFtdO1xcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcXG4gIGJ5dGVUb0hleFtpXSA9IChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSk7XFxufVxcblxcbmZ1bmN0aW9uIGJ5dGVzVG9VdWlkKGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IG9mZnNldCB8fCAwO1xcbiAgdmFyIGJ0aCA9IGJ5dGVUb0hleDtcXG4gIHJldHVybiBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gKyAnLScgK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArICctJyArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dICsgJy0nICtcXG4gICAgICAgICAgYnRoW2J1ZltpKytdXSArIGJ0aFtidWZbaSsrXV0gK1xcbiAgICAgICAgICBidGhbYnVmW2krK11dICsgYnRoW2J1ZltpKytdXSArXFxuICAgICAgICAgIGJ0aFtidWZbaSsrXV0gKyBidGhbYnVmW2krK11dO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGJ5dGVzVG9VdWlkO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDg4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbnZhciBSZWFjdCA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgSGVscCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhIZWxwLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBIZWxwKCkge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5faGVscFBvcHVwID0gSFRNTFNwYW5FbGVtZW50ID0gbnVsbDtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBIZWxwLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2ZhcyBmYS1mdyBmYS1xdWVzdGlvbi1jaXJjbGUgZGVmYXVsdC1jb2xvcicsIHRoaXMucHJvcHMuY29udGFpbmVyQ2xhc3MpLCBcXFwiZGF0YS1jb250ZW50XFxcIjogdGhpcy5wcm9wcy50ZXh0LCByZWY6IGZ1bmN0aW9uIChkb20pIHsgcmV0dXJuIF90aGlzLl9oZWxwUG9wdXAgPSBkb207IH0sIHN0eWxlOiB0aGlzLnByb3BzLnN0eWxlIH0pKTtcXG4gICAgfTtcXG4gICAgSGVscC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAkKHRoaXMuX2hlbHBQb3B1cCkucG9wb3Zlcih7XFxuICAgICAgICAgICAgY29udGFpbmVyOiAnYm9keScsXFxuICAgICAgICAgICAgdHJpZ2dlcjogJ2hvdmVyJyxcXG4gICAgICAgICAgICBodG1sOiB0cnVlXFxuICAgICAgICB9KTtcXG4gICAgfTtcXG4gICAgSGVscC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAkKHRoaXMuX2hlbHBQb3B1cCkucG9wb3ZlcignZGVzdHJveScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gSGVscDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IEhlbHA7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogODkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxudmFyIGNoYXJlbmMgPSB7XFxuICAvLyBVVEYtOCBlbmNvZGluZ1xcbiAgdXRmODoge1xcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBzdHJpbmdUb0J5dGVzOiBmdW5jdGlvbihzdHIpIHtcXG4gICAgICByZXR1cm4gY2hhcmVuYy5iaW4uc3RyaW5nVG9CeXRlcyh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSkpO1xcbiAgICB9LFxcblxcbiAgICAvLyBDb252ZXJ0IGEgYnl0ZSBhcnJheSB0byBhIHN0cmluZ1xcbiAgICBieXRlc1RvU3RyaW5nOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGNoYXJlbmMuYmluLmJ5dGVzVG9TdHJpbmcoYnl0ZXMpKSk7XFxuICAgIH1cXG4gIH0sXFxuXFxuICAvLyBCaW5hcnkgZW5jb2RpbmdcXG4gIGJpbjoge1xcbiAgICAvLyBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBzdHJpbmdUb0J5dGVzOiBmdW5jdGlvbihzdHIpIHtcXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcXG4gICAgICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKTtcXG4gICAgICByZXR1cm4gYnl0ZXM7XFxuICAgIH0sXFxuXFxuICAgIC8vIENvbnZlcnQgYSBieXRlIGFycmF5IHRvIGEgc3RyaW5nXFxuICAgIGJ5dGVzVG9TdHJpbmc6IGZ1bmN0aW9uKGJ5dGVzKSB7XFxuICAgICAgZm9yICh2YXIgc3RyID0gW10sIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspXFxuICAgICAgICBzdHIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKSk7XFxuICAgICAgcmV0dXJuIHN0ci5qb2luKCcnKTtcXG4gICAgfVxcbiAgfVxcbn07XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBjaGFyZW5jO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDkwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG52YXIgX19leHRlbmRzID0gdGhpcyAmJiB0aGlzLl9fZXh0ZW5kcyB8fCBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGQuX19wcm90b19fID0gYjtcXG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkge1xcbiAgICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xcbiAgICAgICAgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0oKTtcXG52YXIgX19hc3NpZ24gPSB0aGlzICYmIHRoaXMuX19hc3NpZ24gfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xcbiAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcXG4gICAgICAgIHMgPSBhcmd1bWVudHNbaV07XFxuICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xcbiAgICB9XFxuICAgIHJldHVybiB0O1xcbn07XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciByZWR1eF9mb3JtXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcXG52YXIgcGxhdGZvcm02ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTQpO1xcbnZhciB3ZWJTdG9yYWdlID0gcGxhdGZvcm02LndlYlN0b3JhZ2U7XFxudmFyIGZvcm1zID0gcGxhdGZvcm02LmZvcm1zO1xcbnZhciB0ZXh0X2lucHV0XzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1NSk7XFxudmFyIHNlbGVjdF9pbnB1dF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTkpO1xcbnZhciB0b2dnbGVfcGFuZWxfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYwKTtcXG52YXIgaGVscGVyc18xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjMpO1xcbnZhciBVdGlscyA9IF9fd2VicGFja19yZXF1aXJlX18oMjcyKTtcXG52YXIgd29yZGluZ3NfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjczKTtcXG52YXIgV09SRElOR1MgPSBoZWxwZXJzXzEuZ2V0V29yZGluZ3Mod29yZGluZ3NfMS5kZWZhdWx0LCB3ZWJTdG9yYWdlLmxvY2FsZSk7XFxudmFyIEN1c3RvbUZvcm0gPSBmdW5jdGlvbiAoX3N1cGVyKSB7XFxuICAgIF9fZXh0ZW5kcyhDdXN0b21Gb3JtLCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBDdXN0b21Gb3JtKHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnJlbmRlclJGUURldGFpbHMgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgdmFyIHJmcSA9IF90aGlzLnByb3BzLmRhdGEucmZxO1xcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInRpbGUgY29sLXhzLTEyIGJvdHRvbS1tYXJnaW4tbGdcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRhYmxlXFxcIiwgeyBzdHlsZTogeyB3aWR0aDogJzEwMCUnLCBtaW5IZWlnaHQ6IDQwIH0gfSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhlYWRcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0clxcXCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pZCksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRoXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLWxhYmVsXFxcIiB9LCBXT1JESU5HUy5pc3N1ZV9kYXRlKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGhcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tbGFiZWxcXFwiIH0sIFdPUkRJTkdTLmlzc3VlX3RpbWUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0aFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby1sYWJlbFxcXCIgfSwgV09SRElOR1Mubm90ZSkpKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGJvZHlcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0clxcXCIsIG51bGwsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEuaWQpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJ0ZFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiaW5mby12YWx1ZVxcXCIsIHN0eWxlOiB7IHZlcnRpY2FsQWxpZ246ICdib3R0b20nIH0gfSwgcmZxLmlzc3VlRGF0ZSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInRkXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJpbmZvLXZhbHVlXFxcIiwgc3R5bGU6IHsgdmVydGljYWxBbGlnbjogJ2JvdHRvbScgfSB9LCByZnEuaXNzdWVUaW1lKSwgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwidGRcXFwiLCB7IGNsYXNzTmFtZTogXFxcImluZm8tdmFsdWVcXFwiLCBzdHlsZTogeyB2ZXJ0aWNhbEFsaWduOiAnYm90dG9tJyB9IH0sIHJmcS5ub3RlKSkpKSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMucmVuZGVySXRlbXMgPSBmdW5jdGlvbiAoX2EpIHtcXG4gICAgICAgICAgICB2YXIgZmllbGRzID0gX2EuZmllbGRzO1xcbiAgICAgICAgICAgIHZhciB0b3RhbCA9IFV0aWxzLmRpc3BsYXlUb3RhbEFtb3VudChmaWVsZHMuZ2V0QWxsKCkpO1xcbiAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHsgdG90YWw6IHRvdGFsIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCBudWxsLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImJvdHRvbS1tYXJnaW5cXFwiLCBzdHlsZTogeyB0ZXh0QWxpZ246ICdyaWdodCcgfSB9LCBXT1JESU5HUy50b3RhbF9hbW91bnQsIFxcXCI6IFxcXCIsIHRvdGFsKSwgX3RoaXMucmVuZGVySXRlbSh7IGZpZWxkczogZmllbGRzIH0pKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5yZW5kZXJJdGVtID0gZnVuY3Rpb24gKF9hKSB7XFxuICAgICAgICAgICAgdmFyIGZpZWxkcyA9IF9hLmZpZWxkcztcXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgbnVsbCwgZmllbGRzLm1hcChmdW5jdGlvbiAobWVtYmVyLCBpbmRleCwgZmllbGRzKSB7XFxuICAgICAgICAgICAgICAgIHZhciBsaW5lID0gX3RoaXMucHJvcHMuZGF0YS5saW5lc1tpbmRleF07XFxuICAgICAgICAgICAgICAgIHZhciBmaWVsZCA9IGZpZWxkcy5nZXQoaW5kZXgpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBrZXk6IGluZGV4LCBjbGFzc05hbWU6IFxcXCJib3R0b20tbWFyZ2luXFxcIiwgc3R5bGU6IHsgcGFkZGluZzogMTUsIGJvcmRlckNvbG9yOiBcXFwiI2VlZVxcXCIsIGJvcmRlcldpZHRoOiAxLCBib3JkZXJTdHlsZTogXFxcInNvbGlkXFxcIiB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicm93IGJvdHRvbS1tYXJnaW5cXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJcXFwiLCBudWxsLCBXT1JESU5HUy5saW5lLCBcXFwiICNcXFwiLCBsaW5lLmlkKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFdPUkRJTkdTLmFtb3VudCwgXFxcIjogXFxcIiwgVXRpbHMuZGlzcGxheUl0ZW1BbW91bnQoZmllbGQpKSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicm93IHRleHQtbWVkaXVtIGJvdHRvbS1tYXJnaW5cXFwiIH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwiY29sLXhzLTZcXFwiIH0sIFdPUkRJTkdTLmRlc2NyaXB0aW9uLCBcXFwiOiBcXFwiLCBsaW5lLm5vdGUpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcImNvbC14cy02XFxcIiB9LCBXT1JESU5HUy5xdWFudGl0eSwgXFxcIjogXFxcIiwgbGluZS5xdWFudGl0eSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvd1xcXCIgfSwgUmVhY3QuY3JlYXRlRWxlbWVudChzZWxlY3RfaW5wdXRfMS5kZWZhdWx0LCB7IG5hbWU6IG1lbWJlciArIFxcXCIuaXRlbVxcXCIsIGxhYmVsOiBXT1JESU5HUy5zZWxlY3RfaXRlbSwgY29udGFpbmVyQ2xhc3M6IFxcXCJjb2wteHMtMTJcXFwiLCBvcHRpb25zOiBVdGlscy5mb3JtYXRJdGVtc09wdGlvbnMobGluZS5pdGVtcykgfSkpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInJvd1xcXCIgfSwgUmVhY3QuY3JlYXRlRWxlbWVudCh0ZXh0X2lucHV0XzEuZGVmYXVsdCwgeyBuYW1lOiBtZW1iZXIgKyBcXFwiLmRpc2NvdW50XFxcIiwgbGFiZWw6IFdPUkRJTkdTLmRpc2NvdW50LCBjb250YWluZXJDbGFzczogXFxcImNvbC14cy0xMlxcXCIsIHR5cGU6IFxcXCJudW1iZXJcXFwiIH0pKSk7XFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN1Ym1pdEZvcm0gPSBmdW5jdGlvbiAodmFsdWVzKSB7XFxuICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gX19hc3NpZ24oe30sIHZhbHVlcywgeyB0b3RhbDogX3RoaXMuc3RhdGUudG90YWwgfSk7XFxuICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xcbiAgICAgICAgICAgIF90aGlzLnByb3BzLnN1Ym1pdEZvcm0oe1xcbiAgICAgICAgICAgICAgICByZnE6IEpTT04uc3RyaW5naWZ5KHZhbHVlcy5yZnEpLFxcbiAgICAgICAgICAgICAgICBsaW5lczogSlNPTi5zdHJpbmdpZnkodmFsdWVzLmxpbmVzKVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0geyB0b3RhbDogJycgfTtcXG4gICAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcbiAgICBDdXN0b21Gb3JtLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgcHJvcHMgPSB0aGlzLnByb3BzO1xcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQodG9nZ2xlX3BhbmVsXzEuZGVmYXVsdCwgeyBwYW5lbFRpdGxlOiBcXFwiUHJvdmlkZSBRdW90ZVxcXCIsIGhpZGVUaXRsZTogZmFsc2UsIGRlZmF1bHRPcGVuZWQ6IHRydWUsIHRvZ2dsYWJsZTogZmFsc2UsIGNhbmNlbEJ0bjogeyBsYWJlbDogV09SRElOR1MuY2FuY2VsLCBhY3Rpb246IHByb3BzLmNsb3NlRm9ybSB9LCBzdWJtaXRCdG46IHsgbGFiZWw6IFdPUkRJTkdTLnN1Ym1pdCwgYWN0aW9uOiBwcm9wcy5oYW5kbGVTdWJtaXQodGhpcy5zdWJtaXRGb3JtKSB9IH0sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImg0XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJ1cHBlciBib3R0b20tbWFyZ2luXFxcIiB9LCBXT1JESU5HUy5yZnFfaW5mbyksIHRoaXMucmVuZGVyUkZRRGV0YWlscygpLCBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJoNFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidXBwZXIgYm90dG9tLW1hcmdpblxcXCIgfSwgV09SRElOR1MubGlzdF9pdGVtcyksIFJlYWN0LmNyZWF0ZUVsZW1lbnQocmVkdXhfZm9ybV8xLkZpZWxkQXJyYXksIHsgbmFtZTogXFxcImxpbmVzXFxcIiwgY29tcG9uZW50OiB0aGlzLnJlbmRlckl0ZW1zIH0pKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIEN1c3RvbUZvcm07XFxufShSZWFjdC5Db21wb25lbnQpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IGZvcm1zLnJlZHV4Rm9ybSh7IGZvcm06ICdjdXN0b21fZm9ybScgfSkoQ3VzdG9tRm9ybSk7XFxuXFxuLyoqKi8gfSksXFxuLyogOTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3JlZHVjZXJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3JlZHV4Rm9ybV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0ZpZWxkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fRmllbGRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fRmllbGRBcnJheV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Zvcm1WYWx1ZVNlbGVjdG9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fc2VsZWN0b3JzX2dldEZvcm1OYW1lc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX3NlbGVjdG9yc19nZXRGb3JtVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9fc2VsZWN0b3JzX2dldEZvcm1Jbml0aWFsVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX3NlbGVjdG9yc19nZXRGb3JtU3luY0Vycm9yc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19zZWxlY3RvcnNfZ2V0Rm9ybUFzeW5jRXJyb3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX3NlbGVjdG9yc19nZXRGb3JtU3luY1dhcm5pbmdzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NlbGVjdG9yc19nZXRGb3JtU3VibWl0RXJyb3JzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX3NlbGVjdG9yc19pc0RpcnR5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3NlbGVjdG9yc19pc0ludmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fc2VsZWN0b3JzX2lzUHJpc3RpbmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMThfX3NlbGVjdG9yc19pc1N1Ym1pdHRpbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjQ4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOV9fc2VsZWN0b3JzX2hhc1N1Ym1pdFN1Y2NlZWRlZF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19zZWxlY3RvcnNfaGFzU3VibWl0RmFpbGVkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX0Zvcm1fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fRm9ybVNlY3Rpb25fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjUyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fU3VibWlzc2lvbkVycm9yX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fcHJvcFR5cGVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX2FjdGlvbnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X19hY3Rpb25UeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgY3JlYXRlQWxsID0gZnVuY3Rpb24gY3JlYXRlQWxsKHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIF9leHRlbmRzKHtcXG4gICAgLy8gc2VwYXJhdGUgb3V0IGZpZWxkIGFjdGlvbnNcXG4gICAgYWN0aW9uVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjZfX2FjdGlvblR5cGVzX19cXG4gIH0sIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfX2FjdGlvbnNfXywge1xcbiAgICBGaWVsZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fRmllbGRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIEZpZWxkczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fRmllbGRzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGaWVsZEFycmF5OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19GaWVsZEFycmF5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIxX19Gb3JtX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICBGb3JtU2VjdGlvbjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMl9fRm9ybVNlY3Rpb25fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgIGZvcm1WYWx1ZVNlbGVjdG9yOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19mb3JtVmFsdWVTZWxlY3Rvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybU5hbWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19zZWxlY3RvcnNfZ2V0Rm9ybU5hbWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBnZXRGb3JtVmFsdWVzOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19zZWxlY3RvcnNfZ2V0Rm9ybVZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybUluaXRpYWxWYWx1ZXM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX3NlbGVjdG9yc19nZXRGb3JtSW5pdGlhbFZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVN5bmNFcnJvcnM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNFcnJvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1Bc3luY0Vycm9yczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX3NlbGVjdG9yc19nZXRGb3JtQXN5bmNFcnJvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGdldEZvcm1TeW5jV2FybmluZ3M6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19zZWxlY3RvcnNfZ2V0Rm9ybVN5bmNXYXJuaW5nc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgZ2V0Rm9ybVN1Ym1pdEVycm9yczogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NlbGVjdG9yc19nZXRGb3JtU3VibWl0RXJyb3JzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc0RpcnR5OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fc2VsZWN0b3JzX2lzRGlydHlfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzSW52YWxpZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3NlbGVjdG9yc19pc0ludmFsaWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIGlzUHJpc3RpbmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19zZWxlY3RvcnNfaXNQcmlzdGluZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKSxcXG4gICAgaXNWYWxpZDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfX3NlbGVjdG9yc19pc1ZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBpc1N1Ym1pdHRpbmc6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X19zZWxlY3RvcnNfaXNTdWJtaXR0aW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBoYXNTdWJtaXRTdWNjZWVkZWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19zZWxlY3RvcnNfaGFzU3VibWl0U3VjY2VlZGVkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBoYXNTdWJtaXRGYWlsZWQ6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19zZWxlY3RvcnNfaGFzU3VibWl0RmFpbGVkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpLFxcbiAgICBwcm9wVHlwZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX3Byb3BUeXBlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgcmVkdXhGb3JtOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yZWR1eEZvcm1fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIHJlZHVjZXI6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3JlZHVjZXJfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSksXFxuICAgIFN1Ym1pc3Npb25FcnJvcjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fU3VibWlzc2lvbkVycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLFxcbiAgICB2YWx1ZXM6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3ZhbHVlc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKVxcbiAgfSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVBbGwpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVsZXRlSW5XaXRoQ2xlYW5VcF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Myk7XFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZVJlZHVjZXIgPSBmdW5jdGlvbiBjcmVhdGVSZWR1Y2VyKHN0cnVjdHVyZSkge1xcbiAgdmFyIF9iZWhhdmlvcnM7XFxuXFxuICB2YXIgZGVlcEVxdWFsID0gc3RydWN0dXJlLmRlZXBFcXVhbCxcXG4gICAgICBlbXB0eSA9IHN0cnVjdHVyZS5lbXB0eSxcXG4gICAgICBnZXRJbiA9IHN0cnVjdHVyZS5nZXRJbixcXG4gICAgICBzZXRJbiA9IHN0cnVjdHVyZS5zZXRJbixcXG4gICAgICBkZWxldGVJbiA9IHN0cnVjdHVyZS5kZWxldGVJbixcXG4gICAgICBmcm9tSlMgPSBzdHJ1Y3R1cmUuZnJvbUpTLFxcbiAgICAgIGtleXMgPSBzdHJ1Y3R1cmUua2V5cyxcXG4gICAgICBzaXplID0gc3RydWN0dXJlLnNpemUsXFxuICAgICAgc3BsaWNlID0gc3RydWN0dXJlLnNwbGljZTtcXG5cXG4gIHZhciBkZWxldGVJbldpdGhDbGVhblVwID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVsZXRlSW5XaXRoQ2xlYW5VcF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHZhciBkb1NwbGljZSA9IGZ1bmN0aW9uIGRvU3BsaWNlKHN0YXRlLCBrZXksIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB2YWx1ZSwgZm9yY2UpIHtcXG4gICAgdmFyIGV4aXN0aW5nID0gZ2V0SW4oc3RhdGUsIGtleSArICcuJyArIGZpZWxkKTtcXG4gICAgcmV0dXJuIGV4aXN0aW5nIHx8IGZvcmNlID8gc2V0SW4oc3RhdGUsIGtleSArICcuJyArIGZpZWxkLCBzcGxpY2UoZXhpc3RpbmcsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSkgOiBzdGF0ZTtcXG4gIH07XFxuICB2YXIgcm9vdEtleXMgPSBbJ3ZhbHVlcycsICdmaWVsZHMnLCAnc3VibWl0RXJyb3JzJywgJ2FzeW5jRXJyb3JzJ107XFxuICB2YXIgYXJyYXlTcGxpY2UgPSBmdW5jdGlvbiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIG5vblZhbHVlc1ZhbHVlID0gdmFsdWUgIT0gbnVsbCA/IGVtcHR5IDogdW5kZWZpbmVkO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICd2YWx1ZXMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUsIHRydWUpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdmaWVsZHMnLCBmaWVsZCwgaW5kZXgsIHJlbW92ZU51bSwgbm9uVmFsdWVzVmFsdWUpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdzeW5jRXJyb3JzJywgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHVuZGVmaW5lZCk7XFxuICAgIHJlc3VsdCA9IGRvU3BsaWNlKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXN1bHQgPSBkb1NwbGljZShyZXN1bHQsICdhc3luY0Vycm9ycycsIGZpZWxkLCBpbmRleCwgcmVtb3ZlTnVtLCB1bmRlZmluZWQpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG5cXG4gIHZhciBiZWhhdmlvcnMgPSAoX2JlaGF2aW9ycyA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9JTlNFUlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmKSB7XFxuICAgIHZhciBfcmVmJG1ldGEgPSBfcmVmLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZiRtZXRhLmluZGV4LFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYucGF5bG9hZDtcXG5cXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgaW5kZXgsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX01PVkVcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMikge1xcbiAgICB2YXIgX3JlZjIkbWV0YSA9IF9yZWYyLm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWYyJG1ldGEuZmllbGQsXFxuICAgICAgICBmcm9tID0gX3JlZjIkbWV0YS5mcm9tLFxcbiAgICAgICAgdG8gPSBfcmVmMiRtZXRhLnRvO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgaWYgKGxlbmd0aCkge1xcbiAgICAgIHJvb3RLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgdmFyIHBhdGggPSBrZXkgKyAnLicgKyBmaWVsZDtcXG4gICAgICAgIGlmIChnZXRJbihyZXN1bHQsIHBhdGgpKSB7XFxuICAgICAgICAgIHZhciB2YWx1ZSA9IGdldEluKHJlc3VsdCwgcGF0aCArICdbJyArIGZyb20gKyAnXScpO1xcbiAgICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIHBhdGgsIHNwbGljZShnZXRJbihyZXN1bHQsIHBhdGgpLCBmcm9tLCAxKSk7IC8vIHJlbW92ZVxcbiAgICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIHBhdGgsIHNwbGljZShnZXRJbihyZXN1bHQsIHBhdGgpLCB0bywgMCwgdmFsdWUpKTsgLy8gaW5zZXJ0XFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9QT1BcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMykge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmMy5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHJldHVybiBsZW5ndGggPyBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGxlbmd0aCAtIDEsIDEpIDogc3RhdGU7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQVJSQVlfUFVTSFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY0KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWY0Lm1ldGEuZmllbGQsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjQucGF5bG9hZDtcXG5cXG4gICAgdmFyIGFycmF5ID0gZ2V0SW4oc3RhdGUsICd2YWx1ZXMuJyArIGZpZWxkKTtcXG4gICAgdmFyIGxlbmd0aCA9IGFycmF5ID8gc2l6ZShhcnJheSkgOiAwO1xcbiAgICByZXR1cm4gYXJyYXlTcGxpY2Uoc3RhdGUsIGZpZWxkLCBsZW5ndGgsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY1KSB7XFxuICAgIHZhciBfcmVmNSRtZXRhID0gX3JlZjUubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjUkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZjUkbWV0YS5pbmRleDtcXG5cXG4gICAgcmV0dXJuIGFycmF5U3BsaWNlKHN0YXRlLCBmaWVsZCwgaW5kZXgsIDEpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1JFTU9WRV9BTExcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmNikge1xcbiAgICB2YXIgZmllbGQgPSBfcmVmNi5tZXRhLmZpZWxkO1xcblxcbiAgICB2YXIgYXJyYXkgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB2YXIgbGVuZ3RoID0gYXJyYXkgPyBzaXplKGFycmF5KSA6IDA7XFxuICAgIHJldHVybiBsZW5ndGggPyBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIGxlbmd0aCkgOiBzdGF0ZTtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJBUlJBWV9TSElGVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY3KSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWY3Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIDEpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NQTElDRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWY4KSB7XFxuICAgIHZhciBfcmVmOCRtZXRhID0gX3JlZjgubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjgkbWV0YS5maWVsZCxcXG4gICAgICAgIGluZGV4ID0gX3JlZjgkbWV0YS5pbmRleCxcXG4gICAgICAgIHJlbW92ZU51bSA9IF9yZWY4JG1ldGEucmVtb3ZlTnVtLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWY4LnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIGluZGV4LCByZW1vdmVOdW0sIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1NXQVBcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmOSkge1xcbiAgICB2YXIgX3JlZjkkbWV0YSA9IF9yZWY5Lm1ldGEsXFxuICAgICAgICBmaWVsZCA9IF9yZWY5JG1ldGEuZmllbGQsXFxuICAgICAgICBpbmRleEEgPSBfcmVmOSRtZXRhLmluZGV4QSxcXG4gICAgICAgIGluZGV4QiA9IF9yZWY5JG1ldGEuaW5kZXhCO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJvb3RLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHZhciB2YWx1ZUEgPSBnZXRJbihyZXN1bHQsIGtleSArICcuJyArIGZpZWxkICsgJ1snICsgaW5kZXhBICsgJ10nKTtcXG4gICAgICB2YXIgdmFsdWVCID0gZ2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QiArICddJyk7XFxuICAgICAgaWYgKHZhbHVlQSAhPT0gdW5kZWZpbmVkIHx8IHZhbHVlQiAhPT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsIGtleSArICcuJyArIGZpZWxkICsgJ1snICsgaW5kZXhBICsgJ10nLCB2YWx1ZUIpO1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXkgKyAnLicgKyBmaWVsZCArICdbJyArIGluZGV4QiArICddJywgdmFsdWVBKTtcXG4gICAgICB9XFxuICAgIH0pO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFSUkFZX1VOU0hJRlRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTApIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjEwLm1ldGEuZmllbGQsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEwLnBheWxvYWQ7XFxuXFxuICAgIHJldHVybiBhcnJheVNwbGljZShzdGF0ZSwgZmllbGQsIDAsIDAsIHBheWxvYWQpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkFVVE9GSUxMXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjExKSB7XFxuICAgIHZhciBmaWVsZCA9IF9yZWYxMS5tZXRhLmZpZWxkLFxcbiAgICAgICAgcGF5bG9hZCA9IF9yZWYxMS5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnYXN5bmNFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdzdWJtaXRFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcuYXV0b2ZpbGxlZCcsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICd2YWx1ZXMuJyArIGZpZWxkLCBwYXlsb2FkKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJCTFVSXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjEyKSB7XFxuICAgIHZhciBfcmVmMTIkbWV0YSA9IF9yZWYxMi5tZXRhLFxcbiAgICAgICAgZmllbGQgPSBfcmVmMTIkbWV0YS5maWVsZCxcXG4gICAgICAgIHRvdWNoID0gX3JlZjEyJG1ldGEudG91Y2gsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEyLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGluaXRpYWwgPSBnZXRJbihyZXN1bHQsICdpbml0aWFsLicgKyBmaWVsZCk7XFxuICAgIGlmIChpbml0aWFsID09PSB1bmRlZmluZWQgJiYgcGF5bG9hZCA9PT0gJycpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB9IGVsc2UgaWYgKHBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQsIHBheWxvYWQpO1xcbiAgICB9XFxuICAgIGlmIChmaWVsZCA9PT0gZ2V0SW4ocmVzdWx0LCAnYWN0aXZlJykpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdhY3RpdmUnKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy5hY3RpdmUnKTtcXG4gICAgaWYgKHRvdWNoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcsIHRydWUpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNIQU5HRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxMykge1xcbiAgICB2YXIgX3JlZjEzJG1ldGEgPSBfcmVmMTMubWV0YSxcXG4gICAgICAgIGZpZWxkID0gX3JlZjEzJG1ldGEuZmllbGQsXFxuICAgICAgICB0b3VjaCA9IF9yZWYxMyRtZXRhLnRvdWNoLFxcbiAgICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9ycyA9IF9yZWYxMyRtZXRhLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMsXFxuICAgICAgICBwYXlsb2FkID0gX3JlZjEzLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIGluaXRpYWwgPSBnZXRJbihyZXN1bHQsICdpbml0aWFsLicgKyBmaWVsZCk7XFxuICAgIGlmIChpbml0aWFsID09PSB1bmRlZmluZWQgJiYgcGF5bG9hZCA9PT0gJycpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQpO1xcbiAgICB9IGVsc2UgaWYgKHBheWxvYWQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcy4nICsgZmllbGQsIHBheWxvYWQpO1xcbiAgICB9XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCAnYXN5bmNFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgaWYgKCFwZXJzaXN0ZW50U3VibWl0RXJyb3JzKSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW5XaXRoQ2xlYW5VcChyZXN1bHQsICdzdWJtaXRFcnJvcnMuJyArIGZpZWxkKTtcXG4gICAgfVxcbiAgICByZXN1bHQgPSBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmF1dG9maWxsZWQnKTtcXG4gICAgaWYgKHRvdWNoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcsIHRydWUpO1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIGRlbGV0ZUluKHN0YXRlLCAndHJpZ2dlclN1Ym1pdCcpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkNMRUFSX1NVQk1JVF9FUlJPUlNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHN0YXRlLCAnc3VibWl0RXJyb3JzJyk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiQ0xFQVJfQVNZTkNfRVJST1JcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTQpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE0Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBkZWxldGVJbihzdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBmaWVsZCk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiRk9DVVNcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTUpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE1Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgdmFyIHByZXZpb3VzbHlBY3RpdmUgPSBnZXRJbihzdGF0ZSwgJ2FjdGl2ZScpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdmaWVsZHMuJyArIHByZXZpb3VzbHlBY3RpdmUgKyAnLmFjdGl2ZScpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdmaWVsZHMuJyArIGZpZWxkICsgJy52aXNpdGVkJywgdHJ1ZSk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLmFjdGl2ZScsIHRydWUpO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdhY3RpdmUnLCBmaWVsZCk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiSU5JVElBTElaRVxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxNikge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYxNi5wYXlsb2FkLFxcbiAgICAgICAgX3JlZjE2JG1ldGEgPSBfcmVmMTYubWV0YSxcXG4gICAgICAgIGtlZXBEaXJ0eSA9IF9yZWYxNiRtZXRhLmtlZXBEaXJ0eSxcXG4gICAgICAgIGtlZXBTdWJtaXRTdWNjZWVkZWQgPSBfcmVmMTYkbWV0YS5rZWVwU3VibWl0U3VjY2VlZGVkO1xcblxcbiAgICB2YXIgbWFwRGF0YSA9IGZyb21KUyhwYXlsb2FkKTtcXG4gICAgdmFyIHJlc3VsdCA9IGVtcHR5OyAvLyBjbGVhbiBhbGwgZmllbGQgc3RhdGVcXG5cXG4gICAgLy8gcGVyc2lzdCBvbGQgd2FybmluZ3MsIHRoZXkgd2lsbCBnZXQgcmVjYWxjdWxhdGVkIGlmIHRoZSBuZXcgZm9ybSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgdmFsdWVzXFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3RhdGUsICd3YXJuaW5nJyk7XFxuICAgIGlmICh3YXJuaW5nKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnd2FybmluZycsIHdhcm5pbmcpO1xcbiAgICB9XFxuICAgIHZhciBzeW5jV2FybmluZ3MgPSBnZXRJbihzdGF0ZSwgJ3N5bmNXYXJuaW5ncycpO1xcbiAgICBpZiAoc3luY1dhcm5pbmdzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJywgc3luY1dhcm5pbmdzKTtcXG4gICAgfVxcblxcbiAgICAvLyBwZXJzaXN0IG9sZCBlcnJvcnMsIHRoZXkgd2lsbCBnZXQgcmVjYWxjdWxhdGVkIGlmIHRoZSBuZXcgZm9ybSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBvbGQgdmFsdWVzXFxuICAgIHZhciBlcnJvciA9IGdldEluKHN0YXRlLCAnZXJyb3InKTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBlcnJvcik7XFxuICAgIH1cXG4gICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihzdGF0ZSwgJ3N5bmNFcnJvcnMnKTtcXG4gICAgaWYgKHN5bmNFcnJvcnMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3JzJywgc3luY0Vycm9ycyk7XFxuICAgIH1cXG5cXG4gICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihzdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgaWYgKHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJywgcmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgIH1cXG4gICAgdmFyIG5ld1ZhbHVlcyA9IG1hcERhdGE7XFxuICAgIGlmIChrZWVwRGlydHkgJiYgcmVnaXN0ZXJlZEZpZWxkcykge1xcbiAgICAgIC8vXFxuICAgICAgLy8gS2VlcCB0aGUgdmFsdWUgb2YgZGlydHkgZmllbGRzIHdoaWxlIHVwZGF0aW5nIHRoZSB2YWx1ZSBvZlxcbiAgICAgIC8vIHByaXN0aW5lIGZpZWxkcy4gVGhpcyB3YXksIGFwcHMgY2FuIHJlaW5pdGlhbGl6ZSBmb3JtcyB3aGlsZVxcbiAgICAgIC8vIGF2b2lkaW5nIHN0b21waW5nIG9uIHVzZXIgZWRpdHMuXFxuICAgICAgLy9cXG4gICAgICAvLyBOb3RlIDE6IFRoZSBpbml0aWFsaXplIGFjdGlvbiByZXBsYWNlcyBhbGwgaW5pdGlhbCB2YWx1ZXNcXG4gICAgICAvLyByZWdhcmRsZXNzIG9mIGtlZXBEaXJ0eS5cXG4gICAgICAvL1xcbiAgICAgIC8vIE5vdGUgMjogV2hlbiBhIGZpZWxkIGlzIGRpcnR5LCBrZWVwRGlydHkgaXMgZW5hYmxlZCwgYW5kIHRoZSBmaWVsZFxcbiAgICAgIC8vIHZhbHVlIGlzIHRoZSBzYW1lIGFzIHRoZSBuZXcgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGZpZWxkLCB0aGVcXG4gICAgICAvLyBpbml0aWFsaXplIGFjdGlvbiBjYXVzZXMgdGhlIGZpZWxkIHRvIGJlY29tZSBwcmlzdGluZS4gVGhhdCBlZmZlY3RcXG4gICAgICAvLyBpcyB3aGF0IHdlIHdhbnQuXFxuICAgICAgLy9cXG4gICAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ3ZhbHVlcycpO1xcbiAgICAgIHZhciBwcmV2aW91c0luaXRpYWxWYWx1ZXMgPSBnZXRJbihzdGF0ZSwgJ2luaXRpYWwnKTtcXG4gICAgICBrZXlzKHJlZ2lzdGVyZWRGaWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgIHZhciBwcmV2aW91c0luaXRpYWxWYWx1ZSA9IGdldEluKHByZXZpb3VzSW5pdGlhbFZhbHVlcywgbmFtZSk7XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGdldEluKHByZXZpb3VzVmFsdWVzLCBuYW1lKTtcXG4gICAgICAgIGlmICghZGVlcEVxdWFsKHByZXZpb3VzVmFsdWUsIHByZXZpb3VzSW5pdGlhbFZhbHVlKSkge1xcbiAgICAgICAgICAvLyBUaGlzIGZpZWxkIHdhcyBkaXJ0eS4gUmVzdG9yZSB0aGUgZGlydHkgdmFsdWUuXFxuICAgICAgICAgIG5ld1ZhbHVlcyA9IHNldEluKG5ld1ZhbHVlcywgbmFtZSwgcHJldmlvdXNWYWx1ZSk7XFxuICAgICAgICB9XFxuICAgICAgfSk7XFxuICAgIH1cXG4gICAgaWYgKGtlZXBTdWJtaXRTdWNjZWVkZWQgJiYgZ2V0SW4oc3RhdGUsICdzdWJtaXRTdWNjZWVkZWQnKSkge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcsIHRydWUpO1xcbiAgICB9XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3ZhbHVlcycsIG5ld1ZhbHVlcyk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2luaXRpYWwnLCBtYXBEYXRhKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJSRUdJU1RFUl9GSUVMRFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxNykge1xcbiAgICB2YXIgX3JlZjE3JHBheWxvYWQgPSBfcmVmMTcucGF5bG9hZCxcXG4gICAgICAgIG5hbWUgPSBfcmVmMTckcGF5bG9hZC5uYW1lLFxcbiAgICAgICAgdHlwZSA9IF9yZWYxNyRwYXlsb2FkLnR5cGU7XFxuXFxuICAgIHZhciBrZXkgPSAncmVnaXN0ZXJlZEZpZWxkc1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXSc7XFxuICAgIHZhciBmaWVsZCA9IGdldEluKHN0YXRlLCBrZXkpO1xcbiAgICBpZiAoZmllbGQpIHtcXG4gICAgICB2YXIgY291bnQgPSBnZXRJbihmaWVsZCwgJ2NvdW50JykgKyAxO1xcbiAgICAgIGZpZWxkID0gc2V0SW4oZmllbGQsICdjb3VudCcsIGNvdW50KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICBmaWVsZCA9IGZyb21KUyh7IG5hbWU6IG5hbWUsIHR5cGU6IHR5cGUsIGNvdW50OiAxIH0pO1xcbiAgICB9XFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwga2V5LCBmaWVsZCk7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiUkVTRVRcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHZhciByZXN1bHQgPSBlbXB0eTtcXG4gICAgdmFyIHJlZ2lzdGVyZWRGaWVsZHMgPSBnZXRJbihzdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgaWYgKHJlZ2lzdGVyZWRGaWVsZHMpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJywgcmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgIH1cXG4gICAgdmFyIHZhbHVlcyA9IGdldEluKHN0YXRlLCAnaW5pdGlhbCcpO1xcbiAgICBpZiAodmFsdWVzKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAndmFsdWVzJywgdmFsdWVzKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdpbml0aWFsJywgdmFsdWVzKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIHNldEluKHN0YXRlLCAndHJpZ2dlclN1Ym1pdCcsIHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX0FTWU5DX1ZBTElEQVRJT05cXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMTgpIHtcXG4gICAgdmFyIGZpZWxkID0gX3JlZjE4Lm1ldGEuZmllbGQ7XFxuXFxuICAgIHJldHVybiBzZXRJbihzdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycsIGZpZWxkIHx8IHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUQVJUX1NVQk1JVFxcXCJdLCBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgcmV0dXJuIHNldEluKHN0YXRlLCAnc3VibWl0dGluZycsIHRydWUpO1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfQVNZTkNfVkFMSURBVElPTlxcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYxOSkge1xcbiAgICB2YXIgcGF5bG9hZCA9IF9yZWYxOS5wYXlsb2FkO1xcblxcbiAgICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jVmFsaWRhdGluZycpO1xcbiAgICBpZiAocGF5bG9hZCAmJiBPYmplY3Qua2V5cyhwYXlsb2FkKS5sZW5ndGgpIHtcXG4gICAgICB2YXIgX2Vycm9yID0gcGF5bG9hZC5fZXJyb3IsXFxuICAgICAgICAgIGZpZWxkRXJyb3JzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHBheWxvYWQsIFsnX2Vycm9yJ10pO1xcblxcbiAgICAgIGlmIChfZXJyb3IpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2Vycm9yJywgX2Vycm9yKTtcXG4gICAgICB9XFxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZpZWxkRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJywgZnJvbUpTKGZpZWxkRXJyb3JzKSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2FzeW5jRXJyb3JzJyk7XFxuICAgICAgfVxcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ2Vycm9yJyk7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnYXN5bmNFcnJvcnMnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlNUT1BfU1VCTUlUXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIwKSB7XFxuICAgIHZhciBwYXlsb2FkID0gX3JlZjIwLnBheWxvYWQ7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0dGluZycpO1xcbiAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgIGlmIChwYXlsb2FkICYmIE9iamVjdC5rZXlzKHBheWxvYWQpLmxlbmd0aCkge1xcbiAgICAgIHZhciBfZXJyb3IgPSBwYXlsb2FkLl9lcnJvcixcXG4gICAgICAgICAgZmllbGRFcnJvcnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocGF5bG9hZCwgWydfZXJyb3InXSk7XFxuXFxuICAgICAgaWYgKF9lcnJvcikge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnZXJyb3InLCBfZXJyb3IpO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIH1cXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmllbGRFcnJvcnMpLmxlbmd0aCkge1xcbiAgICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3VibWl0RXJyb3JzJywgZnJvbUpTKGZpZWxkRXJyb3JzKSk7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgICAgIH1cXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnLCB0cnVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRTdWNjZWVkZWQnLCB0cnVlKTtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdEVycm9ycycpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9GQUlMRURcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjEpIHtcXG4gICAgdmFyIGZpZWxkcyA9IF9yZWYyMS5tZXRhLmZpZWxkcztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzdWJtaXRGYWlsZWQnLCB0cnVlKTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0U3VjY2VlZGVkJyk7XFxuICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfSk7XFxuICAgIGlmIChmaWVsZHMubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnYW55VG91Y2hlZCcsIHRydWUpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiU0VUX1NVQk1JVF9TVUNDRUVERURcXFwiXSwgZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3VibWl0RmFpbGVkJyk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3N1Ym1pdFN1Y2NlZWRlZCcsIHRydWUpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlRPVUNIXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIyKSB7XFxuICAgIHZhciBmaWVsZHMgPSBfcmVmMjIubWV0YS5maWVsZHM7XFxuXFxuICAgIHZhciByZXN1bHQgPSBzdGF0ZTtcXG4gICAgZmllbGRzLmZvckVhY2goZnVuY3Rpb24gKGZpZWxkKSB7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsgZmllbGQgKyAnLnRvdWNoZWQnLCB0cnVlKTtcXG4gICAgfSk7XFxuICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ2FueVRvdWNoZWQnLCB0cnVlKTtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH0pLCBfZGVmaW5lUHJvcGVydHkoX2JlaGF2aW9ycywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hY3Rpb25UeXBlc19fW1xcXCJVTlJFR0lTVEVSX0ZJRUxEXFxcIl0sIGZ1bmN0aW9uIChzdGF0ZSwgX3JlZjIzKSB7XFxuICAgIHZhciBfcmVmMjMkcGF5bG9hZCA9IF9yZWYyMy5wYXlsb2FkLFxcbiAgICAgICAgbmFtZSA9IF9yZWYyMyRwYXlsb2FkLm5hbWUsXFxuICAgICAgICBkZXN0cm95T25Vbm1vdW50ID0gX3JlZjIzJHBheWxvYWQuZGVzdHJveU9uVW5tb3VudDtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICB2YXIga2V5ID0gJ3JlZ2lzdGVyZWRGaWVsZHNbXFxcXCcnICsgbmFtZSArICdcXFxcJ10nO1xcbiAgICB2YXIgZmllbGQgPSBnZXRJbihyZXN1bHQsIGtleSk7XFxuICAgIGlmICghZmllbGQpIHtcXG4gICAgICByZXR1cm4gcmVzdWx0O1xcbiAgICB9XFxuXFxuICAgIHZhciBjb3VudCA9IGdldEluKGZpZWxkLCAnY291bnQnKSAtIDE7XFxuICAgIGlmIChjb3VudCA8PSAwICYmIGRlc3Ryb3lPblVubW91bnQpIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsIGtleSk7XFxuICAgICAgaWYgKGRlZXBFcXVhbChnZXRJbihyZXN1bHQsICdyZWdpc3RlcmVkRmllbGRzJyksIGVtcHR5KSkge1xcbiAgICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAncmVnaXN0ZXJlZEZpZWxkcycpO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICBmaWVsZCA9IHNldEluKGZpZWxkLCAnY291bnQnLCBjb3VudCk7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCBrZXksIGZpZWxkKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVOVE9VQ0hcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjQpIHtcXG4gICAgdmFyIGZpZWxkcyA9IF9yZWYyNC5tZXRhLmZpZWxkcztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBmaWVsZHMuZm9yRWFjaChmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICByZXR1cm4gcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnZmllbGRzLicgKyBmaWVsZCArICcudG91Y2hlZCcpO1xcbiAgICB9KTtcXG4gICAgdmFyIGFueVRvdWNoZWQgPSBrZXlzKGdldEluKHJlc3VsdCwgJ3JlZ2lzdGVyZWRGaWVsZHMnKSkuc29tZShmdW5jdGlvbiAoa2V5KSB7XFxuICAgICAgcmV0dXJuIGdldEluKHJlc3VsdCwgJ2ZpZWxkcy4nICsga2V5ICsgJy50b3VjaGVkJyk7XFxuICAgIH0pO1xcbiAgICByZXN1bHQgPSBhbnlUb3VjaGVkID8gc2V0SW4ocmVzdWx0LCAnYW55VG91Y2hlZCcsIHRydWUpIDogZGVsZXRlSW4ocmVzdWx0LCAnYW55VG91Y2hlZCcpO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfYmVoYXZpb3JzLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIlVQREFURV9TWU5DX0VSUk9SU1xcXCJdLCBmdW5jdGlvbiAoc3RhdGUsIF9yZWYyNSkge1xcbiAgICB2YXIgX3JlZjI1JHBheWxvYWQgPSBfcmVmMjUucGF5bG9hZCxcXG4gICAgICAgIHN5bmNFcnJvcnMgPSBfcmVmMjUkcGF5bG9hZC5zeW5jRXJyb3JzLFxcbiAgICAgICAgZXJyb3IgPSBfcmVmMjUkcGF5bG9hZC5lcnJvcjtcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBpZiAoZXJyb3IpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdlcnJvcicsIGVycm9yKTtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3InLCB0cnVlKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdlcnJvcicpO1xcbiAgICAgIHJlc3VsdCA9IGRlbGV0ZUluKHJlc3VsdCwgJ3N5bmNFcnJvcicpO1xcbiAgICB9XFxuICAgIGlmIChPYmplY3Qua2V5cyhzeW5jRXJyb3JzKS5sZW5ndGgpIHtcXG4gICAgICByZXN1bHQgPSBzZXRJbihyZXN1bHQsICdzeW5jRXJyb3JzJywgc3luY0Vycm9ycyk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgcmVzdWx0ID0gZGVsZXRlSW4ocmVzdWx0LCAnc3luY0Vycm9ycycpO1xcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9KSwgX2RlZmluZVByb3BlcnR5KF9iZWhhdmlvcnMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYWN0aW9uVHlwZXNfX1tcXFwiVVBEQVRFX1NZTkNfV0FSTklOR1NcXFwiXSwgZnVuY3Rpb24gKHN0YXRlLCBfcmVmMjYpIHtcXG4gICAgdmFyIF9yZWYyNiRwYXlsb2FkID0gX3JlZjI2LnBheWxvYWQsXFxuICAgICAgICBzeW5jV2FybmluZ3MgPSBfcmVmMjYkcGF5bG9hZC5zeW5jV2FybmluZ3MsXFxuICAgICAgICB3YXJuaW5nID0gX3JlZjI2JHBheWxvYWQud2FybmluZztcXG5cXG4gICAgdmFyIHJlc3VsdCA9IHN0YXRlO1xcbiAgICBpZiAod2FybmluZykge1xcbiAgICAgIHJlc3VsdCA9IHNldEluKHJlc3VsdCwgJ3dhcm5pbmcnLCB3YXJuaW5nKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICd3YXJuaW5nJyk7XFxuICAgIH1cXG4gICAgaWYgKE9iamVjdC5rZXlzKHN5bmNXYXJuaW5ncykubGVuZ3RoKSB7XFxuICAgICAgcmVzdWx0ID0gc2V0SW4ocmVzdWx0LCAnc3luY1dhcm5pbmdzJywgc3luY1dhcm5pbmdzKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICByZXN1bHQgPSBkZWxldGVJbihyZXN1bHQsICdzeW5jV2FybmluZ3MnKTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfSksIF9iZWhhdmlvcnMpO1xcblxcbiAgdmFyIHJlZHVjZXIgPSBmdW5jdGlvbiByZWR1Y2VyKCkge1xcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGVtcHR5O1xcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xcblxcbiAgICB2YXIgYmVoYXZpb3IgPSBiZWhhdmlvcnNbYWN0aW9uLnR5cGVdO1xcbiAgICByZXR1cm4gYmVoYXZpb3IgPyBiZWhhdmlvcihzdGF0ZSwgYWN0aW9uKSA6IHN0YXRlO1xcbiAgfTtcXG5cXG4gIHZhciBieUZvcm0gPSBmdW5jdGlvbiBieUZvcm0ocmVkdWNlcikge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICAgIHZhciBzdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZW1wdHk7XFxuICAgICAgdmFyIGFjdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XFxuXFxuICAgICAgdmFyIGZvcm0gPSBhY3Rpb24gJiYgYWN0aW9uLm1ldGEgJiYgYWN0aW9uLm1ldGEuZm9ybTtcXG4gICAgICBpZiAoIWZvcm0pIHtcXG4gICAgICAgIHJldHVybiBzdGF0ZTtcXG4gICAgICB9XFxuICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FjdGlvblR5cGVzX19bXFxcIkRFU1RST1lcXFwiXSkge1xcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5tZXRhLmZvcm0ucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGZvcm0pIHtcXG4gICAgICAgICAgcmV0dXJuIGRlbGV0ZUluV2l0aENsZWFuVXAocmVzdWx0LCBmb3JtKTtcXG4gICAgICAgIH0sIHN0YXRlKTtcXG4gICAgICB9XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEluKHN0YXRlLCBmb3JtKTtcXG4gICAgICB2YXIgcmVzdWx0ID0gcmVkdWNlcihmb3JtU3RhdGUsIGFjdGlvbik7XFxuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gZm9ybVN0YXRlID8gc3RhdGUgOiBzZXRJbihzdGF0ZSwgZm9ybSwgcmVzdWx0KTtcXG4gICAgfTtcXG4gIH07XFxuXFxuICAvKipcXG4gICAqIEFkZHMgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IHRvIHRoZSByZWR1Y2VyXFxuICAgKi9cXG4gIGZ1bmN0aW9uIGRlY29yYXRlKHRhcmdldCkge1xcbiAgICB0YXJnZXQucGx1Z2luID0gZnVuY3Rpb24gcGx1Z2luKHJlZHVjZXJzKSB7XFxuICAgICAgdmFyIF90aGlzID0gdGhpcztcXG5cXG4gICAgICAvLyB1c2UgJ2Z1bmN0aW9uJyBrZXl3b3JkIHRvIGVuYWJsZSAndGhpcydcXG4gICAgICByZXR1cm4gZGVjb3JhdGUoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIHN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBlbXB0eTtcXG4gICAgICAgIHZhciBhY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHJlZHVjZXJzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBrZXkpIHtcXG4gICAgICAgICAgdmFyIHByZXZpb3VzU3RhdGUgPSBnZXRJbihhY2N1bXVsYXRvciwga2V5KTtcXG4gICAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHJlZHVjZXJzW2tleV0ocHJldmlvdXNTdGF0ZSwgYWN0aW9uLCBnZXRJbihzdGF0ZSwga2V5KSk7XFxuICAgICAgICAgIHJldHVybiBuZXh0U3RhdGUgPT09IHByZXZpb3VzU3RhdGUgPyBhY2N1bXVsYXRvciA6IHNldEluKGFjY3VtdWxhdG9yLCBrZXksIG5leHRTdGF0ZSk7XFxuICAgICAgICB9LCBfdGhpcyhzdGF0ZSwgYWN0aW9uKSk7XFxuICAgICAgfSk7XFxuICAgIH07XFxuXFxuICAgIHJldHVybiB0YXJnZXQ7XFxuICB9XFxuXFxuICByZXR1cm4gZGVjb3JhdGUoYnlGb3JtKHJlZHVjZXIpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZVJlZHVjZXIpO1xcblxcbi8qKiovIH0pLFxcbi8qIDkzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xcblxcblxcblxcbnZhciBjcmVhdGVEZWxldGVJbldpdGhDbGVhblVwID0gZnVuY3Rpb24gY3JlYXRlRGVsZXRlSW5XaXRoQ2xlYW5VcChfcmVmKSB7XFxuICB2YXIgZGVlcEVxdWFsID0gX3JlZi5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBfcmVmLmVtcHR5LFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBkZWxldGVJbiA9IF9yZWYuZGVsZXRlSW4sXFxuICAgICAgc2V0SW4gPSBfcmVmLnNldEluO1xcblxcblxcbiAgdmFyIGRlbGV0ZUluV2l0aENsZWFuVXAgPSBmdW5jdGlvbiBkZWxldGVJbldpdGhDbGVhblVwKHN0YXRlLCBwYXRoKSB7XFxuICAgIGlmIChwYXRoW3BhdGgubGVuZ3RoIC0gMV0gPT09ICddJykge1xcbiAgICAgIC8vIGFycmF5IHBhdGhcXG4gICAgICB2YXIgcGF0aFRva2VucyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCk7XFxuICAgICAgcGF0aFRva2Vucy5wb3AoKTtcXG4gICAgICB2YXIgcGFyZW50ID0gZ2V0SW4oc3RhdGUsIHBhdGhUb2tlbnMuam9pbignLicpKTtcXG4gICAgICByZXR1cm4gcGFyZW50ID8gc2V0SW4oc3RhdGUsIHBhdGgsIHVuZGVmaW5lZCkgOiBzdGF0ZTtcXG4gICAgfVxcbiAgICB2YXIgcmVzdWx0ID0gZGVsZXRlSW4oc3RhdGUsIHBhdGgpO1xcbiAgICB2YXIgZG90SW5kZXggPSBwYXRoLmxhc3RJbmRleE9mKCcuJyk7XFxuICAgIGlmIChkb3RJbmRleCA+IDApIHtcXG4gICAgICB2YXIgcGFyZW50UGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIGRvdEluZGV4KTtcXG4gICAgICBpZiAocGFyZW50UGF0aFtwYXJlbnRQYXRoLmxlbmd0aCAtIDFdICE9PSAnXScpIHtcXG4gICAgICAgIHZhciBfcGFyZW50ID0gZ2V0SW4ocmVzdWx0LCBwYXJlbnRQYXRoKTtcXG4gICAgICAgIGlmIChkZWVwRXF1YWwoX3BhcmVudCwgZW1wdHkpKSB7XFxuICAgICAgICAgIHJldHVybiBkZWxldGVJbldpdGhDbGVhblVwKHJlc3VsdCwgcGFyZW50UGF0aCk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiByZXN1bHQ7XFxuICB9O1xcblxcbiAgcmV0dXJuIGRlbGV0ZUluV2l0aENsZWFuVXA7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVEZWxldGVJbldpdGhDbGVhblVwKTtcXG5cXG4vKioqLyB9KSxcXG4vKiA5NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2KTtcXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXFxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXFxuICogb2YgdmFsdWVzLlxcbiAqL1xcbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBzeW1Ub1N0cmluZ1RhZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10udG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXFxuICovXFxuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XFxuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXFxuICAgICAgdGFnID0gdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xcblxcbiAgdHJ5IHtcXG4gICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdW5kZWZpbmVkO1xcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xcbiAgfSBjYXRjaCAoZSkge31cXG5cXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcXG4gIGlmICh1bm1hc2tlZCkge1xcbiAgICBpZiAoaXNPd24pIHtcXG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgZGVsZXRlIHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0UmF3VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqXFxuICogVXNlZCB0byByZXNvbHZlIHRoZVxcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxcbiAqIG9mIHZhbHVlcy5cXG4gKi9cXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcXG5cXG4vKipcXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIHVzaW5nIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxcbiAqL1xcbmZ1bmN0aW9uIG9iamVjdFRvU3RyaW5nKHZhbHVlKSB7XFxuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG9iamVjdFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5Nyk7XFxuXFxuXFxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xcbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcXG4gKiBjYWNoZSB3aGVuIGl0IGV4Y2VlZHMgYE1BWF9NRU1PSVpFX1NJWkVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gbWVtb2l6ZUNhcHBlZChmdW5jKSB7XFxuICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbWVtb2l6ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuYywgZnVuY3Rpb24oa2V5KSB7XFxuICAgIGlmIChjYWNoZS5zaXplID09PSBNQVhfTUVNT0laRV9TSVpFKSB7XFxuICAgICAgY2FjaGUuY2xlYXIoKTtcXG4gICAgfVxcbiAgICByZXR1cm4ga2V5O1xcbiAgfSk7XFxuXFxuICB2YXIgY2FjaGUgPSByZXN1bHQuY2FjaGU7XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZW1vaXplQ2FwcGVkKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjkpO1xcblxcblxcbi8qKiBFcnJvciBtZXNzYWdlIGNvbnN0YW50cy4gKi9cXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXFxuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxcbiAqIGFyZ3VtZW50cyBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCBhcmd1bWVudFxcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXFxuICpcXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXFxuICogY29uc3RydWN0b3Igd2l0aCBvbmUgd2hvc2UgaW5zdGFuY2VzIGltcGxlbWVudCB0aGVcXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDAuMS4wXFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtyZXNvbHZlcl0gVGhlIGZ1bmN0aW9uIHRvIHJlc29sdmUgdGhlIGNhY2hlIGtleS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcXG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XFxuICpcXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcXG4gKiB2YWx1ZXMob2JqZWN0KTtcXG4gKiAvLyA9PiBbMSwgMl1cXG4gKlxcbiAqIHZhbHVlcyhvdGhlcik7XFxuICogLy8gPT4gWzMsIDRdXFxuICpcXG4gKiBvYmplY3QuYSA9IDI7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWzEsIDJdXFxuICpcXG4gKiAvLyBNb2RpZnkgdGhlIHJlc3VsdCBjYWNoZS5cXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XFxuICogdmFsdWVzKG9iamVjdCk7XFxuICogLy8gPT4gWydhJywgJ2InXVxcbiAqXFxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cXG4gKiBfLm1lbW9pemUuQ2FjaGUgPSBXZWFrTWFwO1xcbiAqL1xcbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcXG4gIGlmICh0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nIHx8IChyZXNvbHZlciAhPSBudWxsICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XFxuICB9XFxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XFxuXFxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcXG4gICAgfVxcbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcXG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpIHx8IGNhY2hlO1xcbiAgICByZXR1cm4gcmVzdWx0O1xcbiAgfTtcXG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgcmV0dXJuIG1lbW9pemVkO1xcbn1cXG5cXG4vLyBFeHBvc2UgYE1hcENhY2hlYC5cXG5tZW1vaXplLkNhY2hlID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19NYXBDYWNoZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZW1vaXplKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiA5OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg5OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTGlzdENhY2hlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKi9cXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xcbiAgdGhpcy5zaXplID0gMDtcXG4gIHRoaXMuX19kYXRhX18gPSB7XFxuICAgICdoYXNoJzogbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgJ21hcCc6IG5ldyAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gfHwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19MaXN0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICAnc3RyaW5nJzogbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fSGFzaF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXVxcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwQ2FjaGVDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogOTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2hhc2hDbGVhcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc2hEZWxldGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19oYXNoR2V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faGFzaEhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2hhc2hTZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTA4KTtcXG5cXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBjb25zdHJ1Y3RvclxcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxcbiAqL1xcbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xcblxcbiAgdGhpcy5jbGVhcigpO1xcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XFxuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XFxuICB9XFxufVxcblxcbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faGFzaENsZWFyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faGFzaERlbGV0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5IYXNoLnByb3RvdHlwZS5nZXQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc2hHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuSGFzaC5wcm90b3R5cGUuaGFzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19oYXNoSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbkhhc2gucHJvdG90eXBlLnNldCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faGFzaFNldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChIYXNoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMDAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNyk7XFxuXFxuXFxuLyoqXFxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqL1xcbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcXG4gIHRoaXMuX19kYXRhX18gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkobnVsbCkgOiB7fTtcXG4gIHRoaXMuc2l6ZSA9IDA7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0Z1bmN0aW9uX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc01hc2tlZF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvU291cmNlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUzKTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXFxuICovXFxudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXFxcXFxeJC4qKz8oKVtcXFxcXXt9fF0vZztcXG5cXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXFxudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxcXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXFxcXSQvO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xcbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXFxcXFwkJicpXFxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXFxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcXG4pO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXFxuICogIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc01hc2tlZF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG4gIHZhciBwYXR0ZXJuID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcXG4gIHJldHVybiBwYXR0ZXJuLnRlc3QoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJc05hdGl2ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3JlSnNEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwMyk7XFxuXFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcXG4gIHZhciB1aWQgPSAvW14uXSskLy5leGVjKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29yZUpzRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ua2V5cyAmJiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvcmVKc0RhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ua2V5cy5JRV9QUk9UTyB8fCAnJyk7XFxuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XFxufSgpKTtcXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBmdW5jYCBpcyBtYXNrZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XFxuICByZXR1cm4gISFtYXNrU3JjS2V5ICYmIChtYXNrU3JjS2V5IGluIGZ1bmMpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc01hc2tlZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTAzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cXG52YXIgY29yZUpzRGF0YSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXVsnX19jb3JlLWpzX3NoYXJlZF9fJ107XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY29yZUpzRGF0YSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTA0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5KSB7XFxuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0VmFsdWUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGhhc2guXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBIYXNoXFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoRGVsZXRlKGtleSkge1xcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcXG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hEZWxldGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIEdldHMgdGhlIGhhc2ggdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgSGFzaFxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xcbiAgaWYgKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSB7XFxuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XFxuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xcbiAgfVxcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzaEdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTA3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcpO1xcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xcblxcbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaGFzaEhhcyhrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX25hdGl2ZUNyZWF0ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fbmF0aXZlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3KTtcXG5cXG5cXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXFxudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xcblxcbi8qKlxcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgc2V0XFxuICogQG1lbWJlck9mIEhhc2hcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIHRoaXMuc2l6ZSArPSB0aGlzLmhhcyhrZXkpID8gMCA6IDE7XFxuICBkYXRhW2tleV0gPSAoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19uYXRpdmVDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCkgPyBIQVNIX1VOREVGSU5FRCA6IHZhbHVlO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhc2hTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEwOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgY2xlYXJcXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gW107XFxuICB0aGlzLnNpemUgPSAwO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19hc3NvY0luZGV4T2ZfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkpO1xcblxcblxcbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XFxuXFxuLyoqXFxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgaWYgKGluZGV4IDwgMCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xcbiAgICBkYXRhLnBvcCgpO1xcbiAgfSBlbHNlIHtcXG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xcbiAgfVxcbiAgLS10aGlzLnNpemU7XFxuICByZXR1cm4gdHJ1ZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobGlzdENhY2hlRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOSk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGdldFxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc29jSW5kZXhPZl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChsaXN0Q2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5KTtcXG5cXG5cXG4vKipcXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxcbiAgICAgIGluZGV4ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzb2NJbmRleE9mX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShkYXRhLCBrZXkpO1xcblxcbiAgaWYgKGluZGV4IDwgMCkge1xcbiAgICArK3RoaXMuc2l6ZTtcXG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XFxuICB9IGVsc2Uge1xcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xcbiAgfVxcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGxpc3RDYWNoZVNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwKTtcXG5cXG5cXG4vKipcXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBkZWxldGVcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XFxuICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KVsnZGVsZXRlJ10oa2V5KTtcXG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlRGVsZXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XFxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcXG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXFxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcXG4gICAgOiAodmFsdWUgPT09IG51bGwpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0tleWFibGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgZ2V0XFxuICogQG1lbWJlck9mIE1hcENhY2hlXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXFxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIGtleSkuZ2V0KGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlR2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE1hcERhdGFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjApO1xcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBoYXNcXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywga2V5KS5oYXMoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwQ2FjaGVIYXMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDExOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TWFwRGF0YV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMCk7XFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIHNldFxcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBtYXAgY2FjaGUgaW5zdGFuY2UuXFxuICovXFxuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xcbiAgdmFyIGRhdGEgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRNYXBEYXRhX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBrZXkpLFxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XFxuXFxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcXG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xcbiAgcmV0dXJuIHRoaXM7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG1hcENhY2hlU2V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlNYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUpO1xcblxcblxcblxcblxcblxcbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xcbnZhciBJTkZJTklUWSA9IDEgLyAwO1xcblxcbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xcbnZhciBzeW1ib2xQcm90byA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ucHJvdG90eXBlIDogdW5kZWZpbmVkLFxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXFxuICogdmFsdWVzIHRvIGVtcHR5IHN0cmluZ3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXFxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VUb1N0cmluZyh2YWx1ZSkge1xcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXJyYXlNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLCBiYXNlVG9TdHJpbmcpICsgJyc7XFxuICB9XFxuICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNTeW1ib2xfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSkge1xcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xcbiAgfVxcbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcXG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21lcmdlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19ob2lzdF9ub25fcmVhY3Rfc3RhdGljc19fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX2hvaXN0X25vbl9yZWFjdF9zdGF0aWNzX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfaXNfcHJvbWlzZV9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X191dGlsX2dldERpc3BsYXlOYW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2V2ZW50c19zaWxlbmNlRXZlbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19ldmVudHNfc2lsZW5jZUV2ZW50c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMTUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX19hc3luY1ZhbGlkYXRpb25fXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjE3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fZGVmYXVsdFNob3VsZFZhbGlkYXRlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNl9fZ2VuZXJhdGVWYWxpZGF0b3JfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjI1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xN19fc2VsZWN0b3JzX2lzVmFsaWRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDcpO1xcblxcblxcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcXFwiZnVuY3Rpb25cXFwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFxcXCJzeW1ib2xcXFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcXFwiZnVuY3Rpb25cXFwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFxcXCJzeW1ib2xcXFwiIDogdHlwZW9mIG9iajsgfTtcXG5cXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciBpc0NsYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24gaXNDbGFzc0NvbXBvbmVudChDb21wb25lbnQpIHtcXG4gIHJldHVybiBCb29sZWFuKENvbXBvbmVudCAmJiBDb21wb25lbnQucHJvdG90eXBlICYmIF90eXBlb2YoQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KSA9PT0gJ29iamVjdCcpO1xcbn07XFxuXFxuLy8gZXh0cmFjdCBmaWVsZC1zcGVjaWZpYyBhY3Rpb25zXFxuXFxudmFyIGFycmF5SW5zZXJ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5SW5zZXJ0XFxcIl0sXFxuICAgIGFycmF5TW92ZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheU1vdmVcXFwiXSxcXG4gICAgYXJyYXlQb3AgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlQb3BcXFwiXSxcXG4gICAgYXJyYXlQdXNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5UHVzaFxcXCJdLFxcbiAgICBhcnJheVJlbW92ZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVJlbW92ZVxcXCJdLFxcbiAgICBhcnJheVJlbW92ZUFsbCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fW1xcXCJhcnJheVJlbW92ZUFsbFxcXCJdLFxcbiAgICBhcnJheVNoaWZ0ID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U2hpZnRcXFwiXSxcXG4gICAgYXJyYXlTcGxpY2UgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlTcGxpY2VcXFwiXSxcXG4gICAgYXJyYXlTd2FwID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImFycmF5U3dhcFxcXCJdLFxcbiAgICBhcnJheVVuc2hpZnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYXJyYXlVbnNoaWZ0XFxcIl0sXFxuICAgIGJsdXIgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiYmx1clxcXCJdLFxcbiAgICBjaGFuZ2UgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfX1tcXFwiY2hhbmdlXFxcIl0sXFxuICAgIGZvY3VzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV84X19hY3Rpb25zX19bXFxcImZvY3VzXFxcIl0sXFxuICAgIGZvcm1BY3Rpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fYWN0aW9uc19fLCBbJ2FycmF5SW5zZXJ0JywgJ2FycmF5TW92ZScsICdhcnJheVBvcCcsICdhcnJheVB1c2gnLCAnYXJyYXlSZW1vdmUnLCAnYXJyYXlSZW1vdmVBbGwnLCAnYXJyYXlTaGlmdCcsICdhcnJheVNwbGljZScsICdhcnJheVN3YXAnLCAnYXJyYXlVbnNoaWZ0JywgJ2JsdXInLCAnY2hhbmdlJywgJ2ZvY3VzJ10pO1xcblxcbnZhciBhcnJheUFjdGlvbnMgPSB7XFxuICBhcnJheUluc2VydDogYXJyYXlJbnNlcnQsXFxuICBhcnJheU1vdmU6IGFycmF5TW92ZSxcXG4gIGFycmF5UG9wOiBhcnJheVBvcCxcXG4gIGFycmF5UHVzaDogYXJyYXlQdXNoLFxcbiAgYXJyYXlSZW1vdmU6IGFycmF5UmVtb3ZlLFxcbiAgYXJyYXlSZW1vdmVBbGw6IGFycmF5UmVtb3ZlQWxsLFxcbiAgYXJyYXlTaGlmdDogYXJyYXlTaGlmdCxcXG4gIGFycmF5U3BsaWNlOiBhcnJheVNwbGljZSxcXG4gIGFycmF5U3dhcDogYXJyYXlTd2FwLFxcbiAgYXJyYXlVbnNoaWZ0OiBhcnJheVVuc2hpZnRcXG59O1xcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShPYmplY3Qua2V5cyhfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX2FjdGlvbnNfXykpLCBbJ2FycmF5JywgJ2FzeW5jRXJyb3JzJywgJ2luaXRpYWxpemVkJywgJ2luaXRpYWxWYWx1ZXMnLCAnc3luY0Vycm9ycycsICdzeW5jV2FybmluZ3MnLCAndmFsdWVzJywgJ3JlZ2lzdGVyZWRGaWVsZHMnXSk7XFxuXFxudmFyIGNoZWNrU3VibWl0ID0gZnVuY3Rpb24gY2hlY2tTdWJtaXQoc3VibWl0KSB7XFxuICBpZiAoIXN1Ym1pdCB8fCB0eXBlb2Ygc3VibWl0ICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignWW91IG11c3QgZWl0aGVyIHBhc3MgaGFuZGxlU3VibWl0KCkgYW4gb25TdWJtaXQgZnVuY3Rpb24gb3IgcGFzcyBvblN1Ym1pdCBhcyBhIHByb3AnKTtcXG4gIH1cXG4gIHJldHVybiBzdWJtaXQ7XFxufTtcXG5cXG4vKipcXG4gKiBUaGUgZGVjb3JhdG9yIHRoYXQgaXMgdGhlIG1haW4gQVBJIHRvIHJlZHV4LWZvcm1cXG4gKi9cXG52YXIgY3JlYXRlUmVkdXhGb3JtID0gZnVuY3Rpb24gY3JlYXRlUmVkdXhGb3JtKHN0cnVjdHVyZSkge1xcbiAgdmFyIGRlZXBFcXVhbCA9IHN0cnVjdHVyZS5kZWVwRXF1YWwsXFxuICAgICAgZW1wdHkgPSBzdHJ1Y3R1cmUuZW1wdHksXFxuICAgICAgZ2V0SW4gPSBzdHJ1Y3R1cmUuZ2V0SW4sXFxuICAgICAgc2V0SW4gPSBzdHJ1Y3R1cmUuc2V0SW4sXFxuICAgICAga2V5cyA9IHN0cnVjdHVyZS5rZXlzLFxcbiAgICAgIGZyb21KUyA9IHN0cnVjdHVyZS5mcm9tSlM7XFxuXFxuICB2YXIgaXNWYWxpZCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19zZWxlY3RvcnNfaXNWYWxpZF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RydWN0dXJlKTtcXG4gIHJldHVybiBmdW5jdGlvbiAoaW5pdGlhbENvbmZpZykge1xcbiAgICB2YXIgY29uZmlnID0gX2V4dGVuZHMoe1xcbiAgICAgIHRvdWNoT25CbHVyOiB0cnVlLFxcbiAgICAgIHRvdWNoT25DaGFuZ2U6IGZhbHNlLFxcbiAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnM6IGZhbHNlLFxcbiAgICAgIGRlc3Ryb3lPblVubW91bnQ6IHRydWUsXFxuICAgICAgc2hvdWxkQXN5bmNWYWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sXFxuICAgICAgc2hvdWxkVmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX2RlZmF1bHRTaG91bGRWYWxpZGF0ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSxcXG4gICAgICBlbmFibGVSZWluaXRpYWxpemU6IGZhbHNlLFxcbiAgICAgIGtlZXBEaXJ0eU9uUmVpbml0aWFsaXplOiBmYWxzZSxcXG4gICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICAgIH0sXFxuICAgICAgcHVyZTogdHJ1ZSxcXG4gICAgICBmb3JjZVVucmVnaXN0ZXJPblVubW91bnQ6IGZhbHNlXFxuICAgIH0sIGluaXRpYWxDb25maWcpO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gKFdyYXBwZWRDb21wb25lbnQpIHtcXG4gICAgICB2YXIgRm9ybSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgICAgICBfaW5oZXJpdHMoRm9ybSwgX0NvbXBvbmVudCk7XFxuXFxuICAgICAgICBmdW5jdGlvbiBGb3JtKHByb3BzKSB7XFxuICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtKTtcXG5cXG4gICAgICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZvcm0uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xcblxcbiAgICAgICAgICBfdGhpcy5zdWJtaXQgPSBfdGhpcy5zdWJtaXQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnJlc2V0ID0gX3RoaXMucmVzZXQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLmFzeW5jVmFsaWRhdGUgPSBfdGhpcy5hc3luY1ZhbGlkYXRlLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5nZXRWYWx1ZXMgPSBfdGhpcy5nZXRWYWx1ZXMuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnJlZ2lzdGVyID0gX3RoaXMucmVnaXN0ZXIuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnVucmVnaXN0ZXIgPSBfdGhpcy51bnJlZ2lzdGVyLmJpbmQoX3RoaXMpO1xcbiAgICAgICAgICBfdGhpcy5zdWJtaXRDb21wbGV0ZWQgPSBfdGhpcy5zdWJtaXRDb21wbGV0ZWQuYmluZChfdGhpcyk7XFxuICAgICAgICAgIF90aGlzLnN1Ym1pdEZhaWxlZCA9IF90aGlzLnN1Ym1pdEZhaWxlZC5iaW5kKF90aGlzKTtcXG4gICAgICAgICAgX3RoaXMuZmllbGRWYWxpZGF0b3JzID0ge307XFxuICAgICAgICAgIF90aGlzLmxhc3RGaWVsZFZhbGlkYXRvcktleXMgPSBbXTtcXG4gICAgICAgICAgX3RoaXMuZmllbGRXYXJuZXJzID0ge307XFxuICAgICAgICAgIF90aGlzLmxhc3RGaWVsZFdhcm5lcktleXMgPSBbXTtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgX2NyZWF0ZUNsYXNzKEZvcm0sIFt7XFxuICAgICAgICAgIGtleTogJ2dldENoaWxkQ29udGV4dCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgIF9yZWR1eEZvcm06IF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCB7XFxuICAgICAgICAgICAgICAgIGdldEZvcm1TdGF0ZTogZnVuY3Rpb24gZ2V0Rm9ybVN0YXRlKHN0YXRlKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEluKF90aGlzMi5wcm9wcy5nZXRGb3JtU3RhdGUoc3RhdGUpLCBfdGhpczIucHJvcHMuZm9ybSk7XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGU6IHRoaXMuYXN5bmNWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgZ2V0VmFsdWVzOiB0aGlzLmdldFZhbHVlcyxcXG4gICAgICAgICAgICAgICAgc2VjdGlvblByZWZpeDogdW5kZWZpbmVkLFxcbiAgICAgICAgICAgICAgICByZWdpc3RlcjogdGhpcy5yZWdpc3RlcixcXG4gICAgICAgICAgICAgICAgdW5yZWdpc3RlcjogdGhpcy51bnJlZ2lzdGVyLFxcbiAgICAgICAgICAgICAgICByZWdpc3RlcklubmVyT25TdWJtaXQ6IGZ1bmN0aW9uIHJlZ2lzdGVySW5uZXJPblN1Ym1pdChpbm5lck9uU3VibWl0KSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5pbm5lck9uU3VibWl0ID0gaW5uZXJPblN1Ym1pdDtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2luaXRJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0SWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIGVuYWJsZVJlaW5pdGlhbGl6ZSA9IHRoaXMucHJvcHMuZW5hYmxlUmVpbml0aWFsaXplO1xcblxcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICAgIGlmICgoZW5hYmxlUmVpbml0aWFsaXplIHx8ICFuZXh0UHJvcHMuaW5pdGlhbGl6ZWQpICYmICFkZWVwRXF1YWwodGhpcy5wcm9wcy5pbml0aWFsVmFsdWVzLCBuZXh0UHJvcHMuaW5pdGlhbFZhbHVlcykpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGtlZXBEaXJ0eSA9IG5leHRQcm9wcy5pbml0aWFsaXplZCAmJiB0aGlzLnByb3BzLmtlZXBEaXJ0eU9uUmVpbml0aWFsaXplO1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmluaXRpYWxpemUobmV4dFByb3BzLmluaXRpYWxWYWx1ZXMsIGtlZXBEaXJ0eSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMgJiYgKCF0aGlzLnByb3BzLmluaXRpYWxpemVkIHx8IGVuYWJsZVJlaW5pdGlhbGl6ZSkpIHtcXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuaW5pdGlhbGl6ZSh0aGlzLnByb3BzLmluaXRpYWxWYWx1ZXMsIHRoaXMucHJvcHMua2VlcERpcnR5T25SZWluaXRpYWxpemUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd1cGRhdGVTeW5jRXJyb3JzSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdXBkYXRlU3luY0Vycm9yc0lmTmVlZGVkKG5leHRTeW5jRXJyb3JzLCBuZXh0RXJyb3IpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBfcHJvcHMuZXJyb3IsXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHMuc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyA9IF9wcm9wcy51cGRhdGVTeW5jRXJyb3JzO1xcblxcbiAgICAgICAgICAgIHZhciBub0Vycm9ycyA9ICghc3luY0Vycm9ycyB8fCAhT2JqZWN0LmtleXMoc3luY0Vycm9ycykubGVuZ3RoKSAmJiAhZXJyb3I7XFxuICAgICAgICAgICAgdmFyIG5leHROb0Vycm9ycyA9ICghbmV4dFN5bmNFcnJvcnMgfHwgIU9iamVjdC5rZXlzKG5leHRTeW5jRXJyb3JzKS5sZW5ndGgpICYmICFuZXh0RXJyb3I7XFxuICAgICAgICAgICAgaWYgKCEobm9FcnJvcnMgJiYgbmV4dE5vRXJyb3JzKSAmJiAoIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwoc3luY0Vycm9ycywgbmV4dFN5bmNFcnJvcnMpIHx8ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKGVycm9yLCBuZXh0RXJyb3IpKSkge1xcbiAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyhuZXh0U3luY0Vycm9ycywgbmV4dEVycm9yKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY2xlYXJTdWJtaXRQcm9taXNlSWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXJTdWJtaXRQcm9taXNlSWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSB0aGlzLnByb3BzLnN1Ym1pdHRpbmc7XFxuXFxuICAgICAgICAgICAgaWYgKHRoaXMuc3VibWl0UHJvbWlzZSAmJiBzdWJtaXR0aW5nICYmICFuZXh0UHJvcHMuc3VibWl0dGluZykge1xcbiAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3VibWl0UHJvbWlzZTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0SWZOZWVkZWQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0SWZOZWVkZWQobmV4dFByb3BzKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczIgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBjbGVhclN1Ym1pdCA9IF9wcm9wczIuY2xlYXJTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHRyaWdnZXJTdWJtaXQgPSBfcHJvcHMyLnRyaWdnZXJTdWJtaXQ7XFxuXFxuICAgICAgICAgICAgaWYgKCF0cmlnZ2VyU3VibWl0ICYmIG5leHRQcm9wcy50cmlnZ2VyU3VibWl0KSB7XFxuICAgICAgICAgICAgICBjbGVhclN1Ym1pdCgpO1xcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAndmFsaWRhdGVJZk5lZWRlZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWxpZGF0ZUlmTmVlZGVkKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICAgICAgc2hvdWxkVmFsaWRhdGUgPSBfcHJvcHMzLnNob3VsZFZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZSA9IF9wcm9wczMudmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHZhbHVlcyA9IF9wcm9wczMudmFsdWVzO1xcblxcbiAgICAgICAgICAgIHZhciBmaWVsZExldmVsVmFsaWRhdGUgPSB0aGlzLmdlbmVyYXRlVmFsaWRhdG9yKCk7XFxuICAgICAgICAgICAgaWYgKHZhbGlkYXRlIHx8IGZpZWxkTGV2ZWxWYWxpZGF0ZSkge1xcbiAgICAgICAgICAgICAgdmFyIGluaXRpYWxSZW5kZXIgPSBuZXh0UHJvcHMgPT09IHVuZGVmaW5lZDtcXG4gICAgICAgICAgICAgIHZhciBmaWVsZFZhbGlkYXRvcktleXMgPSBPYmplY3Qua2V5cyh0aGlzLmdldFZhbGlkYXRvcnMoKSk7XFxuICAgICAgICAgICAgICB2YXIgc2hvdWxkVmFsaWRhdGVSZXN1bHQgPSBzaG91bGRWYWxpZGF0ZSh7XFxuICAgICAgICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHM6IG5leHRQcm9wcyxcXG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxSZW5kZXI6IGluaXRpYWxSZW5kZXIsXFxuICAgICAgICAgICAgICAgIGxhc3RGaWVsZFZhbGlkYXRvcktleXM6IHRoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyxcXG4gICAgICAgICAgICAgICAgZmllbGRWYWxpZGF0b3JLZXlzOiBmaWVsZFZhbGlkYXRvcktleXMsXFxuICAgICAgICAgICAgICAgIHN0cnVjdHVyZTogc3RydWN0dXJlXFxuICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgIGlmIChzaG91bGRWYWxpZGF0ZVJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHNUb1ZhbGlkYXRlID0gaW5pdGlhbFJlbmRlciA/IHRoaXMucHJvcHMgOiBuZXh0UHJvcHM7XFxuXFxuICAgICAgICAgICAgICAgIHZhciBfbWVyZ2UyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWVyZ2VfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbGlkYXRlID8gdmFsaWRhdGUocHJvcHNUb1ZhbGlkYXRlLnZhbHVlcywgcHJvcHNUb1ZhbGlkYXRlKSB8fCB7fSA6IHt9LCBmaWVsZExldmVsVmFsaWRhdGUgPyBmaWVsZExldmVsVmFsaWRhdGUocHJvcHNUb1ZhbGlkYXRlLnZhbHVlcywgcHJvcHNUb1ZhbGlkYXRlKSB8fCB7fSA6IHt9KSxcXG4gICAgICAgICAgICAgICAgICAgIF9lcnJvciA9IF9tZXJnZTIuX2Vycm9yLFxcbiAgICAgICAgICAgICAgICAgICAgbmV4dFN5bmNFcnJvcnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX21lcmdlMiwgWydfZXJyb3InXSk7XFxuXFxuICAgICAgICAgICAgICAgIHRoaXMubGFzdEZpZWxkVmFsaWRhdG9yS2V5cyA9IGZpZWxkVmFsaWRhdG9yS2V5cztcXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTeW5jRXJyb3JzSWZOZWVkZWQobmV4dFN5bmNFcnJvcnMsIF9lcnJvcik7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3VwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkKG5leHRTeW5jV2FybmluZ3MsIG5leHRXYXJuaW5nKSB7XFxuICAgICAgICAgICAgdmFyIF9wcm9wczQgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICB3YXJuaW5nID0gX3Byb3BzNC53YXJuaW5nLFxcbiAgICAgICAgICAgICAgICBzeW5jV2FybmluZ3MgPSBfcHJvcHM0LnN5bmNXYXJuaW5ncyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzID0gX3Byb3BzNC51cGRhdGVTeW5jV2FybmluZ3M7XFxuXFxuICAgICAgICAgICAgdmFyIG5vV2FybmluZ3MgPSAoIXN5bmNXYXJuaW5ncyB8fCAhT2JqZWN0LmtleXMoc3luY1dhcm5pbmdzKS5sZW5ndGgpICYmICF3YXJuaW5nO1xcbiAgICAgICAgICAgIHZhciBuZXh0Tm9XYXJuaW5ncyA9ICghbmV4dFN5bmNXYXJuaW5ncyB8fCAhT2JqZWN0LmtleXMobmV4dFN5bmNXYXJuaW5ncykubGVuZ3RoKSAmJiAhbmV4dFdhcm5pbmc7XFxuICAgICAgICAgICAgaWYgKCEobm9XYXJuaW5ncyAmJiBuZXh0Tm9XYXJuaW5ncykgJiYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uZGVlcEVxdWFsKHN5bmNXYXJuaW5ncywgbmV4dFN5bmNXYXJuaW5ncykgfHwgIV9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwod2FybmluZywgbmV4dFdhcm5pbmcpKSkge1xcbiAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzKG5leHRTeW5jV2FybmluZ3MsIG5leHRXYXJuaW5nKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnd2FybklmTmVlZGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHdhcm5JZk5lZWRlZChuZXh0UHJvcHMpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzNSA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzNS5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgd2FybiA9IF9wcm9wczUud2FybixcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzNS52YWx1ZXM7XFxuXFxuICAgICAgICAgICAgdmFyIGZpZWxkTGV2ZWxXYXJuID0gdGhpcy5nZW5lcmF0ZVdhcm5lcigpO1xcbiAgICAgICAgICAgIGlmICh3YXJuIHx8IGZpZWxkTGV2ZWxXYXJuKSB7XFxuICAgICAgICAgICAgICB2YXIgaW5pdGlhbFJlbmRlciA9IG5leHRQcm9wcyA9PT0gdW5kZWZpbmVkO1xcbiAgICAgICAgICAgICAgdmFyIGZpZWxkV2FybmVyS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuZ2V0V2FybmVycygpKTtcXG4gICAgICAgICAgICAgIHZhciBzaG91bGRXYXJuUmVzdWx0ID0gc2hvdWxkVmFsaWRhdGUoe1xcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHZhbHVlcyxcXG4gICAgICAgICAgICAgICAgbmV4dFByb3BzOiBuZXh0UHJvcHMsXFxuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsUmVuZGVyOiBpbml0aWFsUmVuZGVyLFxcbiAgICAgICAgICAgICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzOiB0aGlzLmxhc3RGaWVsZFdhcm5lcktleXMsXFxuICAgICAgICAgICAgICAgIGZpZWxkVmFsaWRhdG9yS2V5czogZmllbGRXYXJuZXJLZXlzLFxcbiAgICAgICAgICAgICAgICBzdHJ1Y3R1cmU6IHN0cnVjdHVyZVxcbiAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICBpZiAoc2hvdWxkV2FyblJlc3VsdCkge1xcbiAgICAgICAgICAgICAgICB2YXIgcHJvcHNUb1dhcm4gPSBpbml0aWFsUmVuZGVyID8gdGhpcy5wcm9wcyA6IG5leHRQcm9wcztcXG5cXG4gICAgICAgICAgICAgICAgdmFyIF9tZXJnZTMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19tZXJnZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybiA/IHdhcm4ocHJvcHNUb1dhcm4udmFsdWVzLCBwcm9wc1RvV2FybikgOiB7fSwgZmllbGRMZXZlbFdhcm4gPyBmaWVsZExldmVsV2Fybihwcm9wc1RvV2Fybi52YWx1ZXMsIHByb3BzVG9XYXJuKSA6IHt9KSxcXG4gICAgICAgICAgICAgICAgICAgIF93YXJuaW5nID0gX21lcmdlMy5fd2FybmluZyxcXG4gICAgICAgICAgICAgICAgICAgIG5leHRTeW5jV2FybmluZ3MgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX21lcmdlMywgWydfd2FybmluZyddKTtcXG5cXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RmllbGRXYXJuZXJLZXlzID0gZmllbGRXYXJuZXJLZXlzO1xcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN5bmNXYXJuaW5nc0lmTmVlZGVkKG5leHRTeW5jV2FybmluZ3MsIF93YXJuaW5nKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgICAgICB0aGlzLmluaXRJZk5lZWRlZCgpO1xcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVJZk5lZWRlZCgpO1xcbiAgICAgICAgICAgIHRoaXMud2FybklmTmVlZGVkKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHRoaXMuaW5pdElmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUlmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy53YXJuSWZOZWVkZWQobmV4dFByb3BzKTtcXG4gICAgICAgICAgICB0aGlzLmNsZWFyU3VibWl0UHJvbWlzZUlmTmVlZGVkKG5leHRQcm9wcyk7XFxuICAgICAgICAgICAgdGhpcy5zdWJtaXRJZk5lZWRlZChuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcHMub25DaGFuZ2UpIHtcXG4gICAgICAgICAgICAgIGlmICghZGVlcEVxdWFsKG5leHRQcm9wcy52YWx1ZXMsIHRoaXMucHJvcHMudmFsdWVzKSkge1xcbiAgICAgICAgICAgICAgICBuZXh0UHJvcHMub25DaGFuZ2UobmV4dFByb3BzLnZhbHVlcywgbmV4dFByb3BzLmRpc3BhdGNoLCBuZXh0UHJvcHMpO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIGlmICghdGhpcy5wcm9wcy5wdXJlKSByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMobmV4dFByb3BzKS5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgICAgICAvLyB1c2VmdWwgdG8gZGVidWcgcmVyZW5kZXJzXFxuICAgICAgICAgICAgICAvLyBpZiAoIXBsYWluLmRlZXBFcXVhbCh0aGlzLnByb3BzWyBwcm9wIF0sIG5leHRQcm9wc1sgcHJvcCBdKSkge1xcbiAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmluZm8ocHJvcCwgJ2NoYW5nZWQnLCB0aGlzLnByb3BzWyBwcm9wIF0sICc9PT4nLCBuZXh0UHJvcHNbIHByb3AgXSlcXG4gICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgIHJldHVybiAhfnByb3BzVG9Ob3RVcGRhdGVGb3IuaW5kZXhPZihwcm9wKSAmJiAhZGVlcEVxdWFsKF90aGlzMy5wcm9wc1twcm9wXSwgbmV4dFByb3BzW3Byb3BdKTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcXG4gICAgICAgICAgICB2YXIgX3Byb3BzNiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3lPblVubW91bnQgPSBfcHJvcHM2LmRlc3Ryb3lPblVubW91bnQsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfcHJvcHM2LmRlc3Ryb3k7XFxuXFxuICAgICAgICAgICAgaWYgKGRlc3Ryb3lPblVubW91bnQpIHtcXG4gICAgICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcXG4gICAgICAgICAgICAgIGRlc3Ryb3koKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2V0VmFsdWVzJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlcygpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZXM7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnaXNWYWxpZCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1ZhbGlkKCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3BzLnZhbGlkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2lzUHJpc3RpbmUnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNQcmlzdGluZSgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZWdpc3RlcicsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWdpc3RlcihuYW1lLCB0eXBlLCBnZXRWYWxpZGF0b3IsIGdldFdhcm5lcikge1xcbiAgICAgICAgICAgIHRoaXMucHJvcHMucmVnaXN0ZXJGaWVsZChuYW1lLCB0eXBlKTtcXG4gICAgICAgICAgICBpZiAoZ2V0VmFsaWRhdG9yKSB7XFxuICAgICAgICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdG9yc1tuYW1lXSA9IGdldFZhbGlkYXRvcjtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGdldFdhcm5lcikge1xcbiAgICAgICAgICAgICAgdGhpcy5maWVsZFdhcm5lcnNbbmFtZV0gPSBnZXRXYXJuZXI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3VucmVnaXN0ZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdW5yZWdpc3RlcihuYW1lKSB7XFxuICAgICAgICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xcbiAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVzdHJveU9uVW5tb3VudCB8fCB0aGlzLnByb3BzLmZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCkge1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnVucmVnaXN0ZXJGaWVsZChuYW1lKTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuZmllbGRWYWxpZGF0b3JzW25hbWVdO1xcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5maWVsZFdhcm5lcnNbbmFtZV07XFxuICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICB0aGlzLnByb3BzLnVucmVnaXN0ZXJGaWVsZChuYW1lLCBmYWxzZSk7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldEZpZWxkTGlzdCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGaWVsZExpc3Qob3B0aW9ucykge1xcbiAgICAgICAgICAgIHZhciByZWdpc3RlcmVkRmllbGRzID0gdGhpcy5wcm9wcy5yZWdpc3RlcmVkRmllbGRzO1xcbiAgICAgICAgICAgIHZhciBsaXN0ID0gW107XFxuICAgICAgICAgICAgaWYgKCFyZWdpc3RlcmVkRmllbGRzKSB7XFxuICAgICAgICAgICAgICByZXR1cm4gbGlzdDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIGtleVNlcSA9IGtleXMocmVnaXN0ZXJlZEZpZWxkcyk7XFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5leGNsdWRlRmllbGRBcnJheSkge1xcbiAgICAgICAgICAgICAga2V5U2VxID0ga2V5U2VxLmZpbHRlcihmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SW4ocmVnaXN0ZXJlZEZpZWxkcywgJ1tcXFxcJycgKyBuYW1lICsgJ1xcXFwnXS50eXBlJykgIT09ICdGaWVsZEFycmF5JztcXG4gICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gZnJvbUpTKGtleVNlcS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywga2V5KSB7XFxuICAgICAgICAgICAgICBhY2MucHVzaChrZXkpO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcXG4gICAgICAgICAgICB9LCBsaXN0KSk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2V0VmFsaWRhdG9ycycsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRWYWxpZGF0b3JzKCkge1xcbiAgICAgICAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xcblxcbiAgICAgICAgICAgIHZhciB2YWxpZGF0b3JzID0ge307XFxuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5maWVsZFZhbGlkYXRvcnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICAgIHZhciB2YWxpZGF0b3IgPSBfdGhpczQuZmllbGRWYWxpZGF0b3JzW25hbWVdKCk7XFxuICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKSB7XFxuICAgICAgICAgICAgICAgIHZhbGlkYXRvcnNbbmFtZV0gPSB2YWxpZGF0b3I7XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRvcnM7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZ2VuZXJhdGVWYWxpZGF0b3InLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2VuZXJhdGVWYWxpZGF0b3IoKSB7XFxuICAgICAgICAgICAgdmFyIHZhbGlkYXRvcnMgPSB0aGlzLmdldFZhbGlkYXRvcnMoKTtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModmFsaWRhdG9ycykubGVuZ3RoID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfX2dlbmVyYXRlVmFsaWRhdG9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWxpZGF0b3JzLCBzdHJ1Y3R1cmUpIDogdW5kZWZpbmVkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dldFdhcm5lcnMnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0V2FybmVycygpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM1ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgd2FybmVycyA9IHt9O1xcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZmllbGRXYXJuZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgICAgICB2YXIgd2FybmVyID0gX3RoaXM1LmZpZWxkV2FybmVyc1tuYW1lXSgpO1xcbiAgICAgICAgICAgICAgaWYgKHdhcm5lcikge1xcbiAgICAgICAgICAgICAgICB3YXJuZXJzW25hbWVdID0gd2FybmVyO1xcbiAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiB3YXJuZXJzO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ2dlbmVyYXRlV2FybmVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdlbmVyYXRlV2FybmVyKCkge1xcbiAgICAgICAgICAgIHZhciB3YXJuZXJzID0gdGhpcy5nZXRXYXJuZXJzKCk7XFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHdhcm5lcnMpLmxlbmd0aCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19nZW5lcmF0ZVZhbGlkYXRvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkod2FybmVycywgc3RydWN0dXJlKSA6IHVuZGVmaW5lZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdhc3luY1ZhbGlkYXRlJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFzeW5jVmFsaWRhdGUobmFtZSwgdmFsdWUpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM2ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgX3Byb3BzNyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGFzeW5jQmx1ckZpZWxkcyA9IF9wcm9wczcuYXN5bmNCbHVyRmllbGRzLFxcbiAgICAgICAgICAgICAgICBhc3luY0Vycm9ycyA9IF9wcm9wczcuYXN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIGFzeW5jVmFsaWRhdGUgPSBfcHJvcHM3LmFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzNy5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBfcHJvcHM3LmluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICBwcmlzdGluZSA9IF9wcm9wczcucHJpc3RpbmUsXFxuICAgICAgICAgICAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGUgPSBfcHJvcHM3LnNob3VsZEFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHN0YXJ0QXN5bmNWYWxpZGF0aW9uID0gX3Byb3BzNy5zdGFydEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3RvcEFzeW5jVmFsaWRhdGlvbiA9IF9wcm9wczcuc3RvcEFzeW5jVmFsaWRhdGlvbixcXG4gICAgICAgICAgICAgICAgc3luY0Vycm9ycyA9IF9wcm9wczcuc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gX3Byb3BzNy52YWx1ZXM7XFxuXFxuICAgICAgICAgICAgdmFyIHN1Ym1pdHRpbmcgPSAhbmFtZTtcXG4gICAgICAgICAgICBpZiAoYXN5bmNWYWxpZGF0ZSkge1xcbiAgICAgICAgICAgICAgdmFyIHZhbHVlc1RvVmFsaWRhdGUgPSBzdWJtaXR0aW5nID8gdmFsdWVzIDogc2V0SW4odmFsdWVzLCBuYW1lLCB2YWx1ZSk7XFxuICAgICAgICAgICAgICB2YXIgc3luY1ZhbGlkYXRpb25QYXNzZXMgPSBzdWJtaXR0aW5nIHx8ICFnZXRJbihzeW5jRXJyb3JzLCBuYW1lKTtcXG4gICAgICAgICAgICAgIHZhciBpc0JsdXJyZWRGaWVsZCA9ICFzdWJtaXR0aW5nICYmICghYXN5bmNCbHVyRmllbGRzIHx8IH5hc3luY0JsdXJGaWVsZHMuaW5kZXhPZihuYW1lLnJlcGxhY2UoL1xcXFxbWzAtOV0rXFxcXF0vZywgJ1tdJykpKTtcXG4gICAgICAgICAgICAgIGlmICgoaXNCbHVycmVkRmllbGQgfHwgc3VibWl0dGluZykgJiYgc2hvdWxkQXN5bmNWYWxpZGF0ZSh7XFxuICAgICAgICAgICAgICAgIGFzeW5jRXJyb3JzOiBhc3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICB0cmlnZ2VyOiBzdWJtaXR0aW5nID8gJ3N1Ym1pdCcgOiAnYmx1cicsXFxuICAgICAgICAgICAgICAgIGJsdXJyZWRGaWVsZDogbmFtZSxcXG4gICAgICAgICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICAgICAgICBzeW5jVmFsaWRhdGlvblBhc3Nlczogc3luY1ZhbGlkYXRpb25QYXNzZXNcXG4gICAgICAgICAgICAgIH0pKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fYXN5bmNWYWxpZGF0aW9uX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jVmFsaWRhdGUodmFsdWVzVG9WYWxpZGF0ZSwgZGlzcGF0Y2gsIF90aGlzNi5wcm9wcywgbmFtZSk7XFxuICAgICAgICAgICAgICAgIH0sIHN0YXJ0QXN5bmNWYWxpZGF0aW9uLCBzdG9wQXN5bmNWYWxpZGF0aW9uLCBuYW1lKTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0Q29tcGxldGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdENvbXBsZXRlZChyZXN1bHQpIHtcXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5zdWJtaXRQcm9taXNlO1xcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnc3VibWl0RmFpbGVkJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN1Ym1pdEZhaWxlZChlcnJvcikge1xcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN1Ym1pdFByb21pc2U7XFxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnbGlzdGVuVG9TdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbGlzdGVuVG9TdWJtaXQocHJvbWlzZSkge1xcbiAgICAgICAgICAgIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X2lzX3Byb21pc2VfX19kZWZhdWx0KCkocHJvbWlzZSkpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0aGlzLnN1Ym1pdFByb21pc2UgPSBwcm9taXNlO1xcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlLnRoZW4odGhpcy5zdWJtaXRDb21wbGV0ZWQsIHRoaXMuc3VibWl0RmFpbGVkKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdzdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0KHN1Ym1pdE9yRXZlbnQpIHtcXG4gICAgICAgICAgICB2YXIgX3RoaXM3ID0gdGhpcztcXG5cXG4gICAgICAgICAgICB2YXIgX3Byb3BzOCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIG9uU3VibWl0ID0gX3Byb3BzOC5vblN1Ym1pdCxcXG4gICAgICAgICAgICAgICAgYmx1ciA9IF9wcm9wczguYmx1cixcXG4gICAgICAgICAgICAgICAgY2hhbmdlID0gX3Byb3BzOC5jaGFuZ2UsXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzOC5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgdmFsaWRFeGNlcHRTdWJtaXQgPSBfcHJvcHM4LnZhbGlkRXhjZXB0U3VibWl0O1xcblxcblxcbiAgICAgICAgICAgIGlmICghc3VibWl0T3JFdmVudCB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fZXZlbnRzX3NpbGVuY2VFdmVudF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3VibWl0T3JFdmVudCkpIHtcXG4gICAgICAgICAgICAgIC8vIHN1Ym1pdE9yRXZlbnQgaXMgYW4gZXZlbnQ6IGZpcmUgc3VibWl0IGlmIG5vdCBhbHJlYWR5IHN1Ym1pdHRpbmdcXG4gICAgICAgICAgICAgIGlmICghdGhpcy5zdWJtaXRQcm9taXNlKSB7XFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlubmVyT25TdWJtaXQpIHtcXG4gICAgICAgICAgICAgICAgICAvLyB3aWxsIGNhbGwgXFxcInN1Ym1pdE9yRXZlbnQgaXMgdGhlIHN1Ym1pdCBmdW5jdGlvblxcXCIgYmxvY2sgYmVsb3dcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbm5lck9uU3VibWl0KCk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlzdGVuVG9TdWJtaXQoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faGFuZGxlU3VibWl0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjaGVja1N1Ym1pdChvblN1Ym1pdCksIF9leHRlbmRzKHt9LCB0aGlzLnByb3BzLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpKSwgdmFsaWRFeGNlcHRTdWJtaXQsIHRoaXMuYXN5bmNWYWxpZGF0ZSwgdGhpcy5nZXRGaWVsZExpc3QoeyBleGNsdWRlRmllbGRBcnJheTogdHJ1ZSB9KSkpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgIC8vIHN1Ym1pdE9yRXZlbnQgaXMgdGhlIHN1Ym1pdCBmdW5jdGlvbjogcmV0dXJuIGRlZmVycmVkIHN1Ym1pdCB0aHVua1xcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzExX19ldmVudHNfc2lsZW5jZUV2ZW50c19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gIV90aGlzNy5zdWJtaXRQcm9taXNlICYmIF90aGlzNy5saXN0ZW5Ub1N1Ym1pdChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV85X19oYW5kbGVTdWJtaXRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGNoZWNrU3VibWl0KHN1Ym1pdE9yRXZlbnQpLCBfZXh0ZW5kcyh7fSwgX3RoaXM3LnByb3BzLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpKSwgdmFsaWRFeGNlcHRTdWJtaXQsIF90aGlzNy5hc3luY1ZhbGlkYXRlLCBfdGhpczcuZ2V0RmllbGRMaXN0KHsgZXhjbHVkZUZpZWxkQXJyYXk6IHRydWUgfSkpKTtcXG4gICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZXNldCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcXG4gICAgICAgICAgICB0aGlzLnByb3BzLnJlc2V0KCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgICAgICAvLyByZW1vdmUgc29tZSByZWR1eC1mb3JtIGNvbmZpZy1vbmx5IHByb3BzXFxuICAgICAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cXG4gICAgICAgICAgICB2YXIgX3Byb3BzOSA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGFueVRvdWNoZWQgPSBfcHJvcHM5LmFueVRvdWNoZWQsXFxuICAgICAgICAgICAgICAgIGFycmF5SW5zZXJ0ID0gX3Byb3BzOS5hcnJheUluc2VydCxcXG4gICAgICAgICAgICAgICAgYXJyYXlNb3ZlID0gX3Byb3BzOS5hcnJheU1vdmUsXFxuICAgICAgICAgICAgICAgIGFycmF5UG9wID0gX3Byb3BzOS5hcnJheVBvcCxcXG4gICAgICAgICAgICAgICAgYXJyYXlQdXNoID0gX3Byb3BzOS5hcnJheVB1c2gsXFxuICAgICAgICAgICAgICAgIGFycmF5UmVtb3ZlID0gX3Byb3BzOS5hcnJheVJlbW92ZSxcXG4gICAgICAgICAgICAgICAgYXJyYXlSZW1vdmVBbGwgPSBfcHJvcHM5LmFycmF5UmVtb3ZlQWxsLFxcbiAgICAgICAgICAgICAgICBhcnJheVNoaWZ0ID0gX3Byb3BzOS5hcnJheVNoaWZ0LFxcbiAgICAgICAgICAgICAgICBhcnJheVNwbGljZSA9IF9wcm9wczkuYXJyYXlTcGxpY2UsXFxuICAgICAgICAgICAgICAgIGFycmF5U3dhcCA9IF9wcm9wczkuYXJyYXlTd2FwLFxcbiAgICAgICAgICAgICAgICBhcnJheVVuc2hpZnQgPSBfcHJvcHM5LmFycmF5VW5zaGlmdCxcXG4gICAgICAgICAgICAgICAgYXN5bmNFcnJvcnMgPSBfcHJvcHM5LmFzeW5jRXJyb3JzLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRlID0gX3Byb3BzOS5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgICBhc3luY1ZhbGlkYXRpbmcgPSBfcHJvcHM5LmFzeW5jVmFsaWRhdGluZyxcXG4gICAgICAgICAgICAgICAgYmx1ciA9IF9wcm9wczkuYmx1cixcXG4gICAgICAgICAgICAgICAgY2hhbmdlID0gX3Byb3BzOS5jaGFuZ2UsXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfcHJvcHM5LmRlc3Ryb3ksXFxuICAgICAgICAgICAgICAgIGRlc3Ryb3lPblVubW91bnQgPSBfcHJvcHM5LmRlc3Ryb3lPblVubW91bnQsXFxuICAgICAgICAgICAgICAgIGZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCA9IF9wcm9wczkuZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50LFxcbiAgICAgICAgICAgICAgICBkaXJ0eSA9IF9wcm9wczkuZGlydHksXFxuICAgICAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzOS5kaXNwYXRjaCxcXG4gICAgICAgICAgICAgICAgZW5hYmxlUmVpbml0aWFsaXplID0gX3Byb3BzOS5lbmFibGVSZWluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIGVycm9yID0gX3Byb3BzOS5lcnJvcixcXG4gICAgICAgICAgICAgICAgZm9jdXMgPSBfcHJvcHM5LmZvY3VzLFxcbiAgICAgICAgICAgICAgICBmb3JtID0gX3Byb3BzOS5mb3JtLFxcbiAgICAgICAgICAgICAgICBnZXRGb3JtU3RhdGUgPSBfcHJvcHM5LmdldEZvcm1TdGF0ZSxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSA9IF9wcm9wczkuaW5pdGlhbGl6ZSxcXG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSBfcHJvcHM5LmluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gX3Byb3BzOS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgICAgICAgICBpbnZhbGlkID0gX3Byb3BzOS5pbnZhbGlkLFxcbiAgICAgICAgICAgICAgICBrZWVwRGlydHlPblJlaW5pdGlhbGl6ZSA9IF9wcm9wczkua2VlcERpcnR5T25SZWluaXRpYWxpemUsXFxuICAgICAgICAgICAgICAgIHByaXN0aW5lID0gX3Byb3BzOS5wcmlzdGluZSxcXG4gICAgICAgICAgICAgICAgcHJvcE5hbWVzcGFjZSA9IF9wcm9wczkucHJvcE5hbWVzcGFjZSxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJlZEZpZWxkcyA9IF9wcm9wczkucmVnaXN0ZXJlZEZpZWxkcyxcXG4gICAgICAgICAgICAgICAgcmVnaXN0ZXJGaWVsZCA9IF9wcm9wczkucmVnaXN0ZXJGaWVsZCxcXG4gICAgICAgICAgICAgICAgcmVzZXQgPSBfcHJvcHM5LnJlc2V0LFxcbiAgICAgICAgICAgICAgICBzZXRTdWJtaXRGYWlsZWQgPSBfcHJvcHM5LnNldFN1Ym1pdEZhaWxlZCxcXG4gICAgICAgICAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkID0gX3Byb3BzOS5zZXRTdWJtaXRTdWNjZWVkZWQsXFxuICAgICAgICAgICAgICAgIHNob3VsZEFzeW5jVmFsaWRhdGUgPSBfcHJvcHM5LnNob3VsZEFzeW5jVmFsaWRhdGUsXFxuICAgICAgICAgICAgICAgIHNob3VsZFZhbGlkYXRlID0gX3Byb3BzOS5zaG91bGRWYWxpZGF0ZSxcXG4gICAgICAgICAgICAgICAgc3RhcnRBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM5LnN0YXJ0QXN5bmNWYWxpZGF0aW9uLFxcbiAgICAgICAgICAgICAgICBzdGFydFN1Ym1pdCA9IF9wcm9wczkuc3RhcnRTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHN0b3BBc3luY1ZhbGlkYXRpb24gPSBfcHJvcHM5LnN0b3BBc3luY1ZhbGlkYXRpb24sXFxuICAgICAgICAgICAgICAgIHN0b3BTdWJtaXQgPSBfcHJvcHM5LnN0b3BTdWJtaXQsXFxuICAgICAgICAgICAgICAgIHN1Ym1pdHRpbmcgPSBfcHJvcHM5LnN1Ym1pdHRpbmcsXFxuICAgICAgICAgICAgICAgIHN1Ym1pdEZhaWxlZCA9IF9wcm9wczkuc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQgPSBfcHJvcHM5LnN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgICAgICAgdG91Y2ggPSBfcHJvcHM5LnRvdWNoLFxcbiAgICAgICAgICAgICAgICB0b3VjaE9uQmx1ciA9IF9wcm9wczkudG91Y2hPbkJsdXIsXFxuICAgICAgICAgICAgICAgIHRvdWNoT25DaGFuZ2UgPSBfcHJvcHM5LnRvdWNoT25DaGFuZ2UsXFxuICAgICAgICAgICAgICAgIHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMgPSBfcHJvcHM5LnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHN5bmNFcnJvcnMgPSBfcHJvcHM5LnN5bmNFcnJvcnMsXFxuICAgICAgICAgICAgICAgIHN5bmNXYXJuaW5ncyA9IF9wcm9wczkuc3luY1dhcm5pbmdzLFxcbiAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyRmllbGQgPSBfcHJvcHM5LnVucmVnaXN0ZXJGaWVsZCxcXG4gICAgICAgICAgICAgICAgdW50b3VjaCA9IF9wcm9wczkudW50b3VjaCxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY0Vycm9ycyA9IF9wcm9wczkudXBkYXRlU3luY0Vycm9ycyxcXG4gICAgICAgICAgICAgICAgdXBkYXRlU3luY1dhcm5pbmdzID0gX3Byb3BzOS51cGRhdGVTeW5jV2FybmluZ3MsXFxuICAgICAgICAgICAgICAgIHZhbGlkID0gX3Byb3BzOS52YWxpZCxcXG4gICAgICAgICAgICAgICAgdmFsaWRFeGNlcHRTdWJtaXQgPSBfcHJvcHM5LnZhbGlkRXhjZXB0U3VibWl0LFxcbiAgICAgICAgICAgICAgICB2YWx1ZXMgPSBfcHJvcHM5LnZhbHVlcyxcXG4gICAgICAgICAgICAgICAgd2FybmluZyA9IF9wcm9wczkud2FybmluZyxcXG4gICAgICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHM5LCBbJ2FueVRvdWNoZWQnLCAnYXJyYXlJbnNlcnQnLCAnYXJyYXlNb3ZlJywgJ2FycmF5UG9wJywgJ2FycmF5UHVzaCcsICdhcnJheVJlbW92ZScsICdhcnJheVJlbW92ZUFsbCcsICdhcnJheVNoaWZ0JywgJ2FycmF5U3BsaWNlJywgJ2FycmF5U3dhcCcsICdhcnJheVVuc2hpZnQnLCAnYXN5bmNFcnJvcnMnLCAnYXN5bmNWYWxpZGF0ZScsICdhc3luY1ZhbGlkYXRpbmcnLCAnYmx1cicsICdjaGFuZ2UnLCAnZGVzdHJveScsICdkZXN0cm95T25Vbm1vdW50JywgJ2ZvcmNlVW5yZWdpc3Rlck9uVW5tb3VudCcsICdkaXJ0eScsICdkaXNwYXRjaCcsICdlbmFibGVSZWluaXRpYWxpemUnLCAnZXJyb3InLCAnZm9jdXMnLCAnZm9ybScsICdnZXRGb3JtU3RhdGUnLCAnaW5pdGlhbGl6ZScsICdpbml0aWFsaXplZCcsICdpbml0aWFsVmFsdWVzJywgJ2ludmFsaWQnLCAna2VlcERpcnR5T25SZWluaXRpYWxpemUnLCAncHJpc3RpbmUnLCAncHJvcE5hbWVzcGFjZScsICdyZWdpc3RlcmVkRmllbGRzJywgJ3JlZ2lzdGVyRmllbGQnLCAncmVzZXQnLCAnc2V0U3VibWl0RmFpbGVkJywgJ3NldFN1Ym1pdFN1Y2NlZWRlZCcsICdzaG91bGRBc3luY1ZhbGlkYXRlJywgJ3Nob3VsZFZhbGlkYXRlJywgJ3N0YXJ0QXN5bmNWYWxpZGF0aW9uJywgJ3N0YXJ0U3VibWl0JywgJ3N0b3BBc3luY1ZhbGlkYXRpb24nLCAnc3RvcFN1Ym1pdCcsICdzdWJtaXR0aW5nJywgJ3N1Ym1pdEZhaWxlZCcsICdzdWJtaXRTdWNjZWVkZWQnLCAndG91Y2gnLCAndG91Y2hPbkJsdXInLCAndG91Y2hPbkNoYW5nZScsICdwZXJzaXN0ZW50U3VibWl0RXJyb3JzJywgJ3N5bmNFcnJvcnMnLCAnc3luY1dhcm5pbmdzJywgJ3VucmVnaXN0ZXJGaWVsZCcsICd1bnRvdWNoJywgJ3VwZGF0ZVN5bmNFcnJvcnMnLCAndXBkYXRlU3luY1dhcm5pbmdzJywgJ3ZhbGlkJywgJ3ZhbGlkRXhjZXB0U3VibWl0JywgJ3ZhbHVlcycsICd3YXJuaW5nJ10pO1xcbiAgICAgICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cXG5cXG5cXG4gICAgICAgICAgICB2YXIgcmVkdXhGb3JtUHJvcHMgPSBfZXh0ZW5kcyh7XFxuICAgICAgICAgICAgICBhbnlUb3VjaGVkOiBhbnlUb3VjaGVkLFxcbiAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0ZTogdGhpcy5hc3luY1ZhbGlkYXRlLFxcbiAgICAgICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBhc3luY1ZhbGlkYXRpbmdcXG4gICAgICAgICAgICB9LCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKHsgYmx1cjogYmx1ciwgY2hhbmdlOiBjaGFuZ2UgfSwgZGlzcGF0Y2gpLCB7XFxuICAgICAgICAgICAgICBkZXN0cm95OiBkZXN0cm95LFxcbiAgICAgICAgICAgICAgZGlydHk6IGRpcnR5LFxcbiAgICAgICAgICAgICAgZGlzcGF0Y2g6IGRpc3BhdGNoLFxcbiAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxcbiAgICAgICAgICAgICAgZm9ybTogZm9ybSxcXG4gICAgICAgICAgICAgIGhhbmRsZVN1Ym1pdDogdGhpcy5zdWJtaXQsXFxuICAgICAgICAgICAgICBpbml0aWFsaXplOiBpbml0aWFsaXplLFxcbiAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGluaXRpYWxpemVkLFxcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlczogaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICAgIGludmFsaWQ6IGludmFsaWQsXFxuICAgICAgICAgICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgICAgICAgICByZXNldDogcmVzZXQsXFxuICAgICAgICAgICAgICBzdWJtaXR0aW5nOiBzdWJtaXR0aW5nLFxcbiAgICAgICAgICAgICAgc3VibWl0RmFpbGVkOiBzdWJtaXRGYWlsZWQsXFxuICAgICAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgICAgIHRvdWNoOiB0b3VjaCxcXG4gICAgICAgICAgICAgIHVudG91Y2g6IHVudG91Y2gsXFxuICAgICAgICAgICAgICB2YWxpZDogdmFsaWQsXFxuICAgICAgICAgICAgICB3YXJuaW5nOiB3YXJuaW5nXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgdmFyIHByb3BzVG9QYXNzID0gX2V4dGVuZHMoe30sIHByb3BOYW1lc3BhY2UgPyBfZGVmaW5lUHJvcGVydHkoe30sIHByb3BOYW1lc3BhY2UsIHJlZHV4Rm9ybVByb3BzKSA6IHJlZHV4Rm9ybVByb3BzLCByZXN0KTtcXG4gICAgICAgICAgICBpZiAoaXNDbGFzc0NvbXBvbmVudChXcmFwcGVkQ29tcG9uZW50KSkge1xcbiAgICAgICAgICAgICAgcHJvcHNUb1Bhc3MucmVmID0gJ3dyYXBwZWQnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKFdyYXBwZWRDb21wb25lbnQsIHByb3BzVG9QYXNzKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfV0pO1xcblxcbiAgICAgICAgcmV0dXJuIEZvcm07XFxuICAgICAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgICAgIEZvcm0uZGlzcGxheU5hbWUgPSAnRm9ybSgnICsgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19fdXRpbF9nZXREaXNwbGF5TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoV3JhcHBlZENvbXBvbmVudCkgKyAnKSc7XFxuICAgICAgRm9ybS5XcmFwcGVkQ29tcG9uZW50ID0gV3JhcHBlZENvbXBvbmVudDtcXG4gICAgICBGb3JtLmNoaWxkQ29udGV4dFR5cGVzID0ge1xcbiAgICAgICAgX3JlZHV4Rm9ybTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdC5pc1JlcXVpcmVkXFxuICAgICAgfTtcXG4gICAgICBGb3JtLnByb3BUeXBlcyA9IHtcXG4gICAgICAgIGRlc3Ryb3lPblVubW91bnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgZm9yY2VVbnJlZ2lzdGVyT25Vbm1vdW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIGZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QsXFxuICAgICAgICBnZXRGb3JtU3RhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgb25TdWJtaXRGYWlsOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgICAgIG9uU3VibWl0U3VjY2VzczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICBwcm9wTmFtZVNwYWNlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nLFxcbiAgICAgICAgdmFsaWRhdGU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICAgICAgd2FybjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgICAgICB0b3VjaE9uQmx1cjogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICB0b3VjaE9uQ2hhbmdlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbCxcXG4gICAgICAgIHRyaWdnZXJTdWJtaXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sLFxcbiAgICAgICAgcGVyc2lzdGVudFN1Ym1pdEVycm9yczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgICAgICByZWdpc3RlcmVkRmllbGRzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYW55XFxuICAgICAgfTtcXG5cXG4gICAgICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBwcm9wcykge1xcbiAgICAgICAgdmFyIGZvcm0gPSBwcm9wcy5mb3JtLFxcbiAgICAgICAgICAgIGdldEZvcm1TdGF0ZSA9IHByb3BzLmdldEZvcm1TdGF0ZSxcXG4gICAgICAgICAgICBpbml0aWFsVmFsdWVzID0gcHJvcHMuaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgICAgICBlbmFibGVSZWluaXRpYWxpemUgPSBwcm9wcy5lbmFibGVSZWluaXRpYWxpemUsXFxuICAgICAgICAgICAga2VlcERpcnR5T25SZWluaXRpYWxpemUgPSBwcm9wcy5rZWVwRGlydHlPblJlaW5pdGlhbGl6ZTtcXG5cXG4gICAgICAgIHZhciBmb3JtU3RhdGUgPSBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpIHx8IGVtcHR5LCBmb3JtKSB8fCBlbXB0eTtcXG4gICAgICAgIHZhciBzdGF0ZUluaXRpYWwgPSBnZXRJbihmb3JtU3RhdGUsICdpbml0aWFsJyk7XFxuICAgICAgICB2YXIgaW5pdGlhbGl6ZWQgPSAhIXN0YXRlSW5pdGlhbDtcXG5cXG4gICAgICAgIHZhciBzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzID0gZW5hYmxlUmVpbml0aWFsaXplICYmIGluaXRpYWxpemVkICYmICFkZWVwRXF1YWwoaW5pdGlhbFZhbHVlcywgc3RhdGVJbml0aWFsKTtcXG4gICAgICAgIHZhciBzaG91bGRSZXNldFZhbHVlcyA9IHNob3VsZFVwZGF0ZUluaXRpYWxWYWx1ZXMgJiYgIWtlZXBEaXJ0eU9uUmVpbml0aWFsaXplO1xcblxcbiAgICAgICAgdmFyIGluaXRpYWwgPSBpbml0aWFsVmFsdWVzIHx8IHN0YXRlSW5pdGlhbCB8fCBlbXB0eTtcXG5cXG4gICAgICAgIGlmIChzaG91bGRVcGRhdGVJbml0aWFsVmFsdWVzKSB7XFxuICAgICAgICAgIGluaXRpYWwgPSBzdGF0ZUluaXRpYWwgfHwgZW1wdHk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgdmFsdWVzID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzJykgfHwgaW5pdGlhbDtcXG5cXG4gICAgICAgIGlmIChzaG91bGRSZXNldFZhbHVlcykge1xcbiAgICAgICAgICB2YWx1ZXMgPSBpbml0aWFsO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIHByaXN0aW5lID0gc2hvdWxkUmVzZXRWYWx1ZXMgfHwgZGVlcEVxdWFsKGluaXRpYWwsIHZhbHVlcyk7XFxuICAgICAgICB2YXIgYXN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsICdhc3luY0Vycm9ycycpO1xcbiAgICAgICAgdmFyIHN5bmNFcnJvcnMgPSBnZXRJbihmb3JtU3RhdGUsICdzeW5jRXJyb3JzJykgfHwge307XFxuICAgICAgICB2YXIgc3luY1dhcm5pbmdzID0gZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJykgfHwge307XFxuICAgICAgICB2YXIgcmVnaXN0ZXJlZEZpZWxkcyA9IGdldEluKGZvcm1TdGF0ZSwgJ3JlZ2lzdGVyZWRGaWVsZHMnKTtcXG4gICAgICAgIHZhciB2YWxpZCA9IGlzVmFsaWQoZm9ybSwgZ2V0Rm9ybVN0YXRlLCBmYWxzZSkoc3RhdGUpO1xcbiAgICAgICAgdmFyIHZhbGlkRXhjZXB0U3VibWl0ID0gaXNWYWxpZChmb3JtLCBnZXRGb3JtU3RhdGUsIHRydWUpKHN0YXRlKTtcXG4gICAgICAgIHZhciBhbnlUb3VjaGVkID0gISFnZXRJbihmb3JtU3RhdGUsICdhbnlUb3VjaGVkJyk7XFxuICAgICAgICB2YXIgc3VibWl0dGluZyA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0dGluZycpO1xcbiAgICAgICAgdmFyIHN1Ym1pdEZhaWxlZCA9ICEhZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyk7XFxuICAgICAgICB2YXIgc3VibWl0U3VjY2VlZGVkID0gISFnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRTdWNjZWVkZWQnKTtcXG4gICAgICAgIHZhciBlcnJvciA9IGdldEluKGZvcm1TdGF0ZSwgJ2Vycm9yJyk7XFxuICAgICAgICB2YXIgd2FybmluZyA9IGdldEluKGZvcm1TdGF0ZSwgJ3dhcm5pbmcnKTtcXG4gICAgICAgIHZhciB0cmlnZ2VyU3VibWl0ID0gZ2V0SW4oZm9ybVN0YXRlLCAndHJpZ2dlclN1Ym1pdCcpO1xcbiAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgYW55VG91Y2hlZDogYW55VG91Y2hlZCxcXG4gICAgICAgICAgYXN5bmNFcnJvcnM6IGFzeW5jRXJyb3JzLFxcbiAgICAgICAgICBhc3luY1ZhbGlkYXRpbmc6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycpIHx8IGZhbHNlLFxcbiAgICAgICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgICAgICBlcnJvcjogZXJyb3IsXFxuICAgICAgICAgIGluaXRpYWxpemVkOiBpbml0aWFsaXplZCxcXG4gICAgICAgICAgaW52YWxpZDogIXZhbGlkLFxcbiAgICAgICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgICAgIHJlZ2lzdGVyZWRGaWVsZHM6IHJlZ2lzdGVyZWRGaWVsZHMsXFxuICAgICAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgICAgIHN1Ym1pdEZhaWxlZDogc3VibWl0RmFpbGVkLFxcbiAgICAgICAgICBzdWJtaXRTdWNjZWVkZWQ6IHN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICAgICAgc3luY0Vycm9yczogc3luY0Vycm9ycyxcXG4gICAgICAgICAgc3luY1dhcm5pbmdzOiBzeW5jV2FybmluZ3MsXFxuICAgICAgICAgIHRyaWdnZXJTdWJtaXQ6IHRyaWdnZXJTdWJtaXQsXFxuICAgICAgICAgIHZhbHVlczogdmFsdWVzLFxcbiAgICAgICAgICB2YWxpZDogdmFsaWQsXFxuICAgICAgICAgIHZhbGlkRXhjZXB0U3VibWl0OiB2YWxpZEV4Y2VwdFN1Ym1pdCxcXG4gICAgICAgICAgd2FybmluZzogd2FybmluZ1xcbiAgICAgICAgfTtcXG4gICAgICB9LCBmdW5jdGlvbiAoZGlzcGF0Y2gsIGluaXRpYWxQcm9wcykge1xcbiAgICAgICAgdmFyIGJpbmRGb3JtID0gZnVuY3Rpb24gYmluZEZvcm0oYWN0aW9uQ3JlYXRvcikge1xcbiAgICAgICAgICByZXR1cm4gYWN0aW9uQ3JlYXRvci5iaW5kKG51bGwsIGluaXRpYWxQcm9wcy5mb3JtKTtcXG4gICAgICAgIH07XFxuXFxuICAgICAgICAvLyBCaW5kIHRoZSBmaXJzdCBwYXJhbWV0ZXIgb24gYHByb3BzLmZvcm1gXFxuICAgICAgICB2YXIgYm91bmRGb3JtQUNzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmb3JtQWN0aW9ucywgYmluZEZvcm0pO1xcbiAgICAgICAgdmFyIGJvdW5kQXJyYXlBQ3MgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2xvZGFzaF9lc19tYXBWYWx1ZXNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGFycmF5QWN0aW9ucywgYmluZEZvcm0pO1xcbiAgICAgICAgdmFyIGJvdW5kQmx1ciA9IGZ1bmN0aW9uIGJvdW5kQmx1cihmaWVsZCwgdmFsdWUpIHtcXG4gICAgICAgICAgcmV0dXJuIGJsdXIoaW5pdGlhbFByb3BzLmZvcm0sIGZpZWxkLCB2YWx1ZSwgISFpbml0aWFsUHJvcHMudG91Y2hPbkJsdXIpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBib3VuZENoYW5nZSA9IGZ1bmN0aW9uIGJvdW5kQ2hhbmdlKGZpZWxkLCB2YWx1ZSkge1xcbiAgICAgICAgICByZXR1cm4gY2hhbmdlKGluaXRpYWxQcm9wcy5mb3JtLCBmaWVsZCwgdmFsdWUsICEhaW5pdGlhbFByb3BzLnRvdWNoT25DaGFuZ2UsICEhaW5pdGlhbFByb3BzLnBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHZhciBib3VuZEZvY3VzID0gYmluZEZvcm0oZm9jdXMpO1xcblxcbiAgICAgICAgLy8gV3JhcCBhY3Rpb24gY3JlYXRvcnMgd2l0aCBgZGlzcGF0Y2hgXFxuICAgICAgICB2YXIgY29ubmVjdGVkRm9ybUFDcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRGb3JtQUNzLCBkaXNwYXRjaCk7XFxuICAgICAgICB2YXIgY29ubmVjdGVkQXJyYXlBQ3MgPSB7XFxuICAgICAgICAgIGluc2VydDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5SW5zZXJ0LCBkaXNwYXRjaCksXFxuICAgICAgICAgIG1vdmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheU1vdmUsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcG9wOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlQb3AsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgcHVzaDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5UHVzaCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICByZW1vdmU6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVJlbW92ZSwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICByZW1vdmVBbGw6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYm91bmRBcnJheUFDcy5hcnJheVJlbW92ZUFsbCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICBzaGlmdDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U2hpZnQsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc3BsaWNlOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlTcGxpY2UsIGRpc3BhdGNoKSxcXG4gICAgICAgICAgc3dhcDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9yZWR1eF9fW1xcXCJhXFxcIiAvKiBiaW5kQWN0aW9uQ3JlYXRvcnMgKi9dKShib3VuZEFycmF5QUNzLmFycmF5U3dhcCwgZGlzcGF0Y2gpLFxcbiAgICAgICAgICB1bnNoaWZ0OiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X3JlZHV4X19bXFxcImFcXFwiIC8qIGJpbmRBY3Rpb25DcmVhdG9ycyAqL10pKGJvdW5kQXJyYXlBQ3MuYXJyYXlVbnNoaWZ0LCBkaXNwYXRjaClcXG4gICAgICAgIH07XFxuXFxuICAgICAgICB2YXIgY29tcHV0ZWRBY3Rpb25zID0gX2V4dGVuZHMoe30sIGNvbm5lY3RlZEZvcm1BQ3MsIGJvdW5kQXJyYXlBQ3MsIHtcXG4gICAgICAgICAgYmx1cjogYm91bmRCbHVyLFxcbiAgICAgICAgICBjaGFuZ2U6IGJvdW5kQ2hhbmdlLFxcbiAgICAgICAgICBhcnJheTogY29ubmVjdGVkQXJyYXlBQ3MsXFxuICAgICAgICAgIGZvY3VzOiBib3VuZEZvY3VzLFxcbiAgICAgICAgICBkaXNwYXRjaDogZGlzcGF0Y2hcXG4gICAgICAgIH0pO1xcblxcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNvbXB1dGVkQWN0aW9ucztcXG4gICAgICAgIH07XFxuICAgICAgfSwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICAgICAgdmFyIENvbm5lY3RlZEZvcm0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfaG9pc3Rfbm9uX3JlYWN0X3N0YXRpY3NfX19kZWZhdWx0KCkoY29ubmVjdG9yKEZvcm0pLCBXcmFwcGVkQ29tcG9uZW50KTtcXG4gICAgICBDb25uZWN0ZWRGb3JtLmRlZmF1bHRQcm9wcyA9IGNvbmZpZztcXG5cXG4gICAgICAvLyBidWlsZCBvdXRlciBjb21wb25lbnQgdG8gZXhwb3NlIGluc3RhbmNlIGFwaVxcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoX0NvbXBvbmVudDIpIHtcXG4gICAgICAgIF9pbmhlcml0cyhSZWR1eEZvcm0sIF9Db21wb25lbnQyKTtcXG5cXG4gICAgICAgIGZ1bmN0aW9uIFJlZHV4Rm9ybSgpIHtcXG4gICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlZHV4Rm9ybSk7XFxuXFxuICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoUmVkdXhGb3JtLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoUmVkdXhGb3JtKSkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBfY3JlYXRlQ2xhc3MoUmVkdXhGb3JtLCBbe1xcbiAgICAgICAgICBrZXk6ICdzdWJtaXQnLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3VibWl0KCkge1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnMud3JhcHBlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5zdWJtaXQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZXNldCcsXFxuICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkucmVzZXQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgICAgIHZhciBfcHJvcHMxMCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfcHJvcHMxMC5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczEwLCBbJ2luaXRpYWxWYWx1ZXMnXSk7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShDb25uZWN0ZWRGb3JtLCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgICAgICAgcmVmOiAnd3JhcHBlZCcsXFxuICAgICAgICAgICAgICAvLyBjb252ZXJ0IGluaXRpYWxWYWx1ZXMgaWYgbmVlZCB0b1xcbiAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlczogZnJvbUpTKGluaXRpYWxWYWx1ZXMpXFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ZhbGlkJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzVmFsaWQoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdpbnZhbGlkJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLnZhbGlkO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5wcmlzdGluZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICBrZXk6ICd2YWx1ZXMnLFxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWZzLndyYXBwZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0VmFsdWVzKCk7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAga2V5OiAnZmllbGRMaXN0JyxcXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICAgICAgLy8gbWFpbmx5IHByb3ZpZGVkIGZvciB0ZXN0aW5nXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldEZpZWxkTGlzdCgpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgIGtleTogJ3dyYXBwZWRJbnN0YW5jZScsXFxuICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgICAgIC8vIGZvciB0ZXN0aW5lXFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVmcy53cmFwcGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLnJlZnMud3JhcHBlZDtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfV0pO1xcblxcbiAgICAgICAgcmV0dXJuIFJlZHV4Rm9ybTtcXG4gICAgICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlUmVkdXhGb3JtKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAxMjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNZXJnZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NyZWF0ZUFzc2lnbmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Nyk7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhpcyBtZXRob2QgaXMgbGlrZSBgXy5hc3NpZ25gIGV4Y2VwdCB0aGF0IGl0IHJlY3Vyc2l2ZWx5IG1lcmdlcyBvd24gYW5kXFxuICogaW5oZXJpdGVkIGVudW1lcmFibGUgc3RyaW5nIGtleWVkIHByb3BlcnRpZXMgb2Ygc291cmNlIG9iamVjdHMgaW50byB0aGVcXG4gKiBkZXN0aW5hdGlvbiBvYmplY3QuIFNvdXJjZSBwcm9wZXJ0aWVzIHRoYXQgcmVzb2x2ZSB0byBgdW5kZWZpbmVkYCBhcmVcXG4gKiBza2lwcGVkIGlmIGEgZGVzdGluYXRpb24gdmFsdWUgZXhpc3RzLiBBcnJheSBhbmQgcGxhaW4gb2JqZWN0IHByb3BlcnRpZXNcXG4gKiBhcmUgbWVyZ2VkIHJlY3Vyc2l2ZWx5LiBPdGhlciBvYmplY3RzIGFuZCB2YWx1ZSB0eXBlcyBhcmUgb3ZlcnJpZGRlbiBieVxcbiAqIGFzc2lnbm1lbnQuIFNvdXJjZSBvYmplY3RzIGFyZSBhcHBsaWVkIGZyb20gbGVmdCB0byByaWdodC4gU3Vic2VxdWVudFxcbiAqIHNvdXJjZXMgb3ZlcndyaXRlIHByb3BlcnR5IGFzc2lnbm1lbnRzIG9mIHByZXZpb3VzIHNvdXJjZXMuXFxuICpcXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgbXV0YXRlcyBgb2JqZWN0YC5cXG4gKlxcbiAqIEBzdGF0aWNcXG4gKiBAbWVtYmVyT2YgX1xcbiAqIEBzaW5jZSAwLjUuMFxcbiAqIEBjYXRlZ29yeSBPYmplY3RcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXFxuICogQHBhcmFtIHsuLi5PYmplY3R9IFtzb3VyY2VzXSBUaGUgc291cmNlIG9iamVjdHMuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIG9iamVjdCA9IHtcXG4gKiAgICdhJzogW3sgJ2InOiAyIH0sIHsgJ2QnOiA0IH1dXFxuICogfTtcXG4gKlxcbiAqIHZhciBvdGhlciA9IHtcXG4gKiAgICdhJzogW3sgJ2MnOiAzIH0sIHsgJ2UnOiA1IH1dXFxuICogfTtcXG4gKlxcbiAqIF8ubWVyZ2Uob2JqZWN0LCBvdGhlcik7XFxuICogLy8gPT4geyAnYSc6IFt7ICdiJzogMiwgJ2MnOiAzIH0sIHsgJ2QnOiA0LCAnZSc6IDUgfV0gfVxcbiAqL1xcbnZhciBtZXJnZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2NyZWF0ZUFzc2lnbmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jdGlvbihvYmplY3QsIHNvdXJjZSwgc3JjSW5kZXgpIHtcXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNZXJnZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4KTtcXG59KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChtZXJnZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fYmFzZUZvcl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Nyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fYmFzZU1lcmdlRGVlcF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMjkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fc2FmZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2MSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWVyZ2VgIHdpdGhvdXQgc3VwcG9ydCBmb3IgbXVsdGlwbGUgc291cmNlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgZGVzdGluYXRpb24gb2JqZWN0LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIHNvdXJjZSBvYmplY3QuXFxuICogQHBhcmFtIHtudW1iZXJ9IHNyY0luZGV4IFRoZSBpbmRleCBvZiBgc291cmNlYC5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBtZXJnZWQgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXFxuICogIGNvdW50ZXJwYXJ0cy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWVyZ2Uob2JqZWN0LCBzb3VyY2UsIHNyY0luZGV4LCBjdXN0b21pemVyLCBzdGFjaykge1xcbiAgaWYgKG9iamVjdCA9PT0gc291cmNlKSB7XFxuICAgIHJldHVybjtcXG4gIH1cXG4gIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2Jhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSwgZnVuY3Rpb24oc3JjVmFsdWUsIGtleSkge1xcbiAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSkge1xcbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKTtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19iYXNlTWVyZ2VEZWVwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHNvdXJjZSwga2V5LCBzcmNJbmRleCwgYmFzZU1lcmdlLCBjdXN0b21pemVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxcbiAgICAgICAgPyBjdXN0b21pemVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5KSwgc3JjVmFsdWUsIChrZXkgKyAnJyksIG9iamVjdCwgc291cmNlLCBzdGFjaylcXG4gICAgICAgIDogdW5kZWZpbmVkO1xcblxcbiAgICAgIGlmIChuZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IHNyY1ZhbHVlO1xcbiAgICAgIH1cXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19hc3NpZ25NZXJnZVZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9XFxuICB9LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2tleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNZXJnZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTIzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgpO1xcblxcblxcbi8qKlxcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBjbGVhclxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XFxuICB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTGlzdENhY2hlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcbiAgdGhpcy5zaXplID0gMDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tDbGVhcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTI0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGRlbGV0ZVxcbiAqIEBtZW1iZXJPZiBTdGFja1xcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xcblxcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tEZWxldGUpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAbmFtZSBnZXRcXG4gKiBAbWVtYmVyT2YgU3RhY2tcXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXFxuICovXFxuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XFxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tHZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgaGFzXFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHN0YWNrSGFzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX0xpc3RDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19NYXBDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XFxuXFxuXFxuXFxuXFxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXFxudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XFxuXFxuLyoqXFxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgc2V0XFxuICogQG1lbWJlck9mIFN0YWNrXFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxcbiAqL1xcbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcXG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcXG4gIGlmIChkYXRhIGluc3RhbmNlb2YgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19MaXN0Q2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pIHtcXG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcXG4gICAgaWYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XFxuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xcbiAgICAgIHJldHVybiB0aGlzO1xcbiAgICB9XFxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ocGFpcnMpO1xcbiAgfVxcbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XFxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XFxuICByZXR1cm4gdGhpcztcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3RhY2tTZXQpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QsIGl0ZXJhdGVlLCBrZXlzRnVuYykge1xcbiAgICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXFxuICAgICAgICBwcm9wcyA9IGtleXNGdW5jKG9iamVjdCksXFxuICAgICAgICBsZW5ndGggPSBwcm9wcy5sZW5ndGg7XFxuXFxuICAgIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICAgIHZhciBrZXkgPSBwcm9wc1tmcm9tUmlnaHQgPyBsZW5ndGggOiArK2luZGV4XTtcXG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XFxuICAgICAgICBicmVhaztcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdDtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUJhc2VGb3IpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY2xvbmVCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19jbG9uZVR5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19jb3B5QXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2luaXRDbG9uZU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2lzQXJndW1lbnRzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzQXJyYXlMaWtlT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faXNCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX2lzRnVuY3Rpb25fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9faXNQbGFpbk9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfX2lzVHlwZWRBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE0X190b1BsYWluT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0MSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlTWVyZ2VgIGZvciBhcnJheXMgYW5kIG9iamVjdHMgd2hpY2ggcGVyZm9ybXNcXG4gKiBkZWVwIG1lcmdlcyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxcbiAqIHJlZmVyZW5jZXMgdG8gYmUgbWVyZ2VkLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBkZXN0aW5hdGlvbiBvYmplY3QuXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgc291cmNlIG9iamVjdC5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIG1lcmdlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBzcmNJbmRleCBUaGUgaW5kZXggb2YgYHNvdXJjZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gbWVyZ2VGdW5jIFRoZSBmdW5jdGlvbiB0byBtZXJnZSB2YWx1ZXMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgYXNzaWduZWQgdmFsdWVzLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgc291cmNlIHZhbHVlcyBhbmQgdGhlaXIgbWVyZ2VkXFxuICogIGNvdW50ZXJwYXJ0cy5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWVyZ2VEZWVwKG9iamVjdCwgc291cmNlLCBrZXksIHNyY0luZGV4LCBtZXJnZUZ1bmMsIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XFxuICB2YXIgb2JqVmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fc2FmZUdldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXkpLFxcbiAgICAgIHNyY1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX3NhZmVHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSwga2V5KSxcXG4gICAgICBzdGFja2VkID0gc3RhY2suZ2V0KHNyY1ZhbHVlKTtcXG5cXG4gIGlmIChzdGFja2VkKSB7XFxuICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnbk1lcmdlVmFsdWVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwga2V5LCBzdGFja2VkKTtcXG4gICAgcmV0dXJuO1xcbiAgfVxcbiAgdmFyIG5ld1ZhbHVlID0gY3VzdG9taXplclxcbiAgICA/IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCAoa2V5ICsgJycpLCBvYmplY3QsIHNvdXJjZSwgc3RhY2spXFxuICAgIDogdW5kZWZpbmVkO1xcblxcbiAgdmFyIGlzQ29tbW9uID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZDtcXG5cXG4gIGlmIChpc0NvbW1vbikge1xcbiAgICB2YXIgaXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSksXFxuICAgICAgICBpc0J1ZmYgPSAhaXNBcnIgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9faXNCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSxcXG4gICAgICAgIGlzVHlwZWQgPSAhaXNBcnIgJiYgIWlzQnVmZiAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9faXNUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSk7XFxuXFxuICAgIG5ld1ZhbHVlID0gc3JjVmFsdWU7XFxuICAgIGlmIChpc0FyciB8fCBpc0J1ZmYgfHwgaXNUeXBlZCkge1xcbiAgICAgIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gb2JqVmFsdWU7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfX2lzQXJyYXlMaWtlT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkpIHtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fY29weUFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2UgaWYgKGlzQnVmZikge1xcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fY2xvbmVCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlLCB0cnVlKTtcXG4gICAgICB9XFxuICAgICAgZWxzZSBpZiAoaXNUeXBlZCkge1xcbiAgICAgICAgaXNDb21tb24gPSBmYWxzZTtcXG4gICAgICAgIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY2xvbmVUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgdHJ1ZSk7XFxuICAgICAgfVxcbiAgICAgIGVsc2Uge1xcbiAgICAgICAgbmV3VmFsdWUgPSBbXTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgZWxzZSBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX2lzUGxhaW5PYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNyY1ZhbHVlKSB8fCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FyZ3VtZW50c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpKSB7XFxuICAgICAgbmV3VmFsdWUgPSBvYmpWYWx1ZTtcXG4gICAgICBpZiAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcmd1bWVudHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlKSkge1xcbiAgICAgICAgbmV3VmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fdG9QbGFpbk9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgICBlbHNlIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTBfX2lzT2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmpWYWx1ZSkgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOV9faXNGdW5jdGlvbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqVmFsdWUpKSB7XFxuICAgICAgICBuZXdWYWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2luaXRDbG9uZU9iamVjdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICBpc0NvbW1vbiA9IGZhbHNlO1xcbiAgICB9XFxuICB9XFxuICBpZiAoaXNDb21tb24pIHtcXG4gICAgLy8gUmVjdXJzaXZlbHkgbWVyZ2Ugb2JqZWN0cyBhbmQgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIHN0YWNrLnNldChzcmNWYWx1ZSwgbmV3VmFsdWUpO1xcbiAgICBtZXJnZUZ1bmMobmV3VmFsdWUsIHNyY1ZhbHVlLCBzcmNJbmRleCwgY3VzdG9taXplciwgc3RhY2spO1xcbiAgICBzdGFja1snZGVsZXRlJ10oc3JjVmFsdWUpO1xcbiAgfVxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXNzaWduTWVyZ2VWYWx1ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBrZXksIG5ld1ZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZU1lcmdlRGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xcbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXFxudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcXG5cXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xcbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLkJ1ZmZlciA6IHVuZGVmaW5lZCxcXG4gICAgYWxsb2NVbnNhZmUgPSBCdWZmZXIgPyBCdWZmZXIuYWxsb2NVbnNhZmUgOiB1bmRlZmluZWQ7XFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGNsb25lIG9mICBgYnVmZmVyYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlciBUaGUgYnVmZmVyIHRvIGNsb25lLlxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzRGVlcF0gU3BlY2lmeSBhIGRlZXAgY2xvbmUuXFxuICogQHJldHVybnMge0J1ZmZlcn0gUmV0dXJucyB0aGUgY2xvbmVkIGJ1ZmZlci5cXG4gKi9cXG5mdW5jdGlvbiBjbG9uZUJ1ZmZlcihidWZmZXIsIGlzRGVlcCkge1xcbiAgaWYgKGlzRGVlcCkge1xcbiAgICByZXR1cm4gYnVmZmVyLnNsaWNlKCk7XFxuICB9XFxuICB2YXIgbGVuZ3RoID0gYnVmZmVyLmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBhbGxvY1Vuc2FmZSA/IGFsbG9jVW5zYWZlKGxlbmd0aCkgOiBuZXcgYnVmZmVyLmNvbnN0cnVjdG9yKGxlbmd0aCk7XFxuXFxuICBidWZmZXIuY29weShyZXN1bHQpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2xvbmVCdWZmZXIpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxMzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nsb25lQXJyYXlCdWZmZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTMyKTtcXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHR5cGVkQXJyYXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gdHlwZWRBcnJheSBUaGUgdHlwZWQgYXJyYXkgdG8gY2xvbmUuXFxuICogQHBhcmFtIHtib29sZWFufSBbaXNEZWVwXSBTcGVjaWZ5IGEgZGVlcCBjbG9uZS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjbG9uZWQgdHlwZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVUeXBlZEFycmF5KHR5cGVkQXJyYXksIGlzRGVlcCkge1xcbiAgdmFyIGJ1ZmZlciA9IGlzRGVlcCA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nsb25lQXJyYXlCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHR5cGVkQXJyYXkuYnVmZmVyKSA6IHR5cGVkQXJyYXkuYnVmZmVyO1xcbiAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlciwgdHlwZWRBcnJheS5ieXRlT2Zmc2V0LCB0eXBlZEFycmF5Lmxlbmd0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNsb25lVHlwZWRBcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19VaW50OEFycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU4KTtcXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYGFycmF5QnVmZmVyYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheUJ1ZmZlcn0gYXJyYXlCdWZmZXIgVGhlIGFycmF5IGJ1ZmZlciB0byBjbG9uZS5cXG4gKiBAcmV0dXJucyB7QXJyYXlCdWZmZXJ9IFJldHVybnMgdGhlIGNsb25lZCBhcnJheSBidWZmZXIuXFxuICovXFxuZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikge1xcbiAgdmFyIHJlc3VsdCA9IG5ldyBhcnJheUJ1ZmZlci5jb25zdHJ1Y3RvcihhcnJheUJ1ZmZlci5ieXRlTGVuZ3RoKTtcXG4gIG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ocmVzdWx0KS5zZXQobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fVWludDhBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShhcnJheUJ1ZmZlcikpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY2xvbmVBcnJheUJ1ZmZlcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTMzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlQ3JlYXRlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0UHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc1Byb3RvdHlwZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMyk7XFxuXFxuXFxuXFxuXFxuLyoqXFxuICogSW5pdGlhbGl6ZXMgYW4gb2JqZWN0IGNsb25lLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2xvbmUuXFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaW5pdGlhbGl6ZWQgY2xvbmUuXFxuICovXFxuZnVuY3Rpb24gaW5pdENsb25lT2JqZWN0KG9iamVjdCkge1xcbiAgcmV0dXJuICh0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgIU9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzUHJvdG90eXBlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKVxcbiAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VDcmVhdGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFByb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSlcXG4gICAgOiB7fTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaW5pdENsb25lT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcblxcblxcbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXFxuICovXFxudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XFxuICBmdW5jdGlvbiBvYmplY3QoKSB7fVxcbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XFxuICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHByb3RvKSkge1xcbiAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbiAgICBpZiAob2JqZWN0Q3JlYXRlKSB7XFxuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XFxuICAgIH1cXG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHByb3RvO1xcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcXG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlQ3JlYXRlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNPYmplY3RMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDUpO1xcblxcblxcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LFxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSA9PSBhcmdzVGFnO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNBcmd1bWVudHMpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDEzNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNBcnJheUxpa2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmlzQXJyYXlMaWtlYCBleGNlcHQgdGhhdCBpdCBhbHNvIGNoZWNrcyBpZiBgdmFsdWVgXFxuICogaXMgYW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDQuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheS1saWtlIG9iamVjdCxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KFsxLCAyLCAzXSk7XFxuICogLy8gPT4gdHJ1ZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmlzQXJyYXlMaWtlT2JqZWN0KCdhYmMnKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqXFxuICogXy5pc0FycmF5TGlrZU9iamVjdChfLm5vb3ApO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gaXNBcnJheUxpa2VPYmplY3QodmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc09iamVjdExpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKSAmJiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0FycmF5TGlrZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0FycmF5TGlrZU9iamVjdCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4xMy4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcXG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxcbiAqL1xcbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoc3R1YkZhbHNlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lzT2JqZWN0TGlrZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1KTtcXG5cXG5cXG5cXG5cXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXFxudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xcblxcbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcXG5cXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXFxudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XFxudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cXG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XFxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cXG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XFxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxcbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cXG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNPYmplY3RMaWtlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkgJiZcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSldO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNUeXBlZEFycmF5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XFxuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VVbmFyeSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlKSB7LyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1MSk7XFxuXFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XFxuXFxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xcbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XFxuXFxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcXG5cXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZnJlZUdsb2JhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5wcm9jZXNzO1xcblxcbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xcbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcXG4gIHRyeSB7XFxuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxcbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcXG5cXG4gICAgaWYgKHR5cGVzKSB7XFxuICAgICAgcmV0dXJuIHR5cGVzO1xcbiAgICB9XFxuXFxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXFxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcXG4gIH0gY2F0Y2ggKGUpIHt9XFxufSgpKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChub2RlVXRpbCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjIpKG1vZHVsZSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE0MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29weU9iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNJbl9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Mik7XFxuXFxuXFxuXFxuLyoqXFxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHBsYWluIG9iamVjdCBmbGF0dGVuaW5nIGluaGVyaXRlZCBlbnVtZXJhYmxlIHN0cmluZ1xcbiAqIGtleWVkIHByb3BlcnRpZXMgb2YgYHZhbHVlYCB0byBvd24gcHJvcGVydGllcyBvZiB0aGUgcGxhaW4gb2JqZWN0LlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDMuMC4wXFxuICogQGNhdGVnb3J5IExhbmdcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBwbGFpbiBvYmplY3QuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIGZ1bmN0aW9uIEZvbygpIHtcXG4gKiAgIHRoaXMuYiA9IDI7XFxuICogfVxcbiAqXFxuICogRm9vLnByb3RvdHlwZS5jID0gMztcXG4gKlxcbiAqIF8uYXNzaWduKHsgJ2EnOiAxIH0sIG5ldyBGb28pO1xcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxcbiAqXFxuICogXy5hc3NpZ24oeyAnYSc6IDEgfSwgXy50b1BsYWluT2JqZWN0KG5ldyBGb28pKTtcXG4gKiAvLyA9PiB7ICdhJzogMSwgJ2InOiAyLCAnYyc6IDMgfVxcbiAqL1xcbmZ1bmN0aW9uIHRvUGxhaW5PYmplY3QodmFsdWUpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb3B5T2JqZWN0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c0luX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9ICh0b1BsYWluT2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUFzc2lnblZhbHVlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBDb3BpZXMgcHJvcGVydGllcyBvZiBgc291cmNlYCB0byBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tLlxcbiAqIEBwYXJhbSB7QXJyYXl9IHByb3BzIFRoZSBwcm9wZXJ0eSBpZGVudGlmaWVycyB0byBjb3B5LlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0PXt9XSBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyB0by5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb3BpZWQgdmFsdWVzLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gY29weU9iamVjdChzb3VyY2UsIHByb3BzLCBvYmplY3QsIGN1c3RvbWl6ZXIpIHtcXG4gIHZhciBpc05ldyA9ICFvYmplY3Q7XFxuICBvYmplY3QgfHwgKG9iamVjdCA9IHt9KTtcXG5cXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBrZXkgPSBwcm9wc1tpbmRleF07XFxuXFxuICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXJcXG4gICAgICA/IGN1c3RvbWl6ZXIob2JqZWN0W2tleV0sIHNvdXJjZVtrZXldLCBrZXksIG9iamVjdCwgc291cmNlKVxcbiAgICAgIDogdW5kZWZpbmVkO1xcblxcbiAgICBpZiAobmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xcbiAgICAgIG5ld1ZhbHVlID0gc291cmNlW2tleV07XFxuICAgIH1cXG4gICAgaWYgKGlzTmV3KSB7XFxuICAgICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Fzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgbmV3VmFsdWUpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gb2JqZWN0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb3B5T2JqZWN0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VBc3NpZ25WYWx1ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oOSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQXNzaWducyBgdmFsdWVgIHRvIGBrZXlgIG9mIGBvYmplY3RgIGlmIHRoZSBleGlzdGluZyB2YWx1ZSBpcyBub3QgZXF1aXZhbGVudFxcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXFxuICogZm9yIGVxdWFsaXR5IGNvbXBhcmlzb25zLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gYXNzaWduLlxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGFzc2lnbi5cXG4gKi9cXG5mdW5jdGlvbiBhc3NpZ25WYWx1ZShvYmplY3QsIGtleSwgdmFsdWUpIHtcXG4gIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xcbiAgaWYgKCEoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9ialZhbHVlLCB2YWx1ZSkpIHx8XFxuICAgICAgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkpIHtcXG4gICAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUFzc2lnblZhbHVlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIGtleSwgdmFsdWUpO1xcbiAgfVxcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhc3NpZ25WYWx1ZSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXFxuICogb3IgbWF4IGFycmF5IGxlbmd0aCBjaGVja3MuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gaW52b2tlIGBpdGVyYXRlZWAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXFxuICovXFxuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSBBcnJheShuKTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xcbiAgICByZXN1bHRbaW5kZXhdID0gaXRlcmF0ZWUoaW5kZXgpO1xcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVRpbWVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNDUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzT2JqZWN0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzUHJvdG90eXBlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19uYXRpdmVLZXlzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ2KTtcXG5cXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzSW5gIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gYmFzZUtleXNJbihvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX25hdGl2ZUtleXNJbl9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG4gIH1cXG4gIHZhciBpc1Byb3RvID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNQcm90b3R5cGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgcmVzdWx0ID0gW107XFxuXFxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XFxuICAgIGlmICghKGtleSA9PSAnY29uc3RydWN0b3InICYmIChpc1Byb3RvIHx8ICFoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkpKSB7XFxuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VcXG4gKiBbYE9iamVjdC5rZXlzYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXFxuICogZXhjZXB0IHRoYXQgaXQgaW5jbHVkZXMgaW5oZXJpdGVkIGVudW1lcmFibGUgcHJvcGVydGllcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXFxuICovXFxuZnVuY3Rpb24gbmF0aXZlS2V5c0luKG9iamVjdCkge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKG9iamVjdCAhPSBudWxsKSB7XFxuICAgIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKG5hdGl2ZUtleXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUmVzdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzSXRlcmF0ZWVDYWxsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NSk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIGxpa2UgYF8uYXNzaWduYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYXNzaWduZXIgVGhlIGZ1bmN0aW9uIHRvIGFzc2lnbiB2YWx1ZXMuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYXNzaWduZXIgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gY3JlYXRlQXNzaWduZXIoYXNzaWduZXIpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUmVzdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZnVuY3Rpb24ob2JqZWN0LCBzb3VyY2VzKSB7XFxuICAgIHZhciBpbmRleCA9IC0xLFxcbiAgICAgICAgbGVuZ3RoID0gc291cmNlcy5sZW5ndGgsXFxuICAgICAgICBjdXN0b21pemVyID0gbGVuZ3RoID4gMSA/IHNvdXJjZXNbbGVuZ3RoIC0gMV0gOiB1bmRlZmluZWQsXFxuICAgICAgICBndWFyZCA9IGxlbmd0aCA+IDIgPyBzb3VyY2VzWzJdIDogdW5kZWZpbmVkO1xcblxcbiAgICBjdXN0b21pemVyID0gKGFzc2lnbmVyLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGN1c3RvbWl6ZXIgPT0gJ2Z1bmN0aW9uJylcXG4gICAgICA/IChsZW5ndGgtLSwgY3VzdG9taXplcilcXG4gICAgICA6IHVuZGVmaW5lZDtcXG5cXG4gICAgaWYgKGd1YXJkICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzSXRlcmF0ZWVDYWxsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzb3VyY2VzWzBdLCBzb3VyY2VzWzFdLCBndWFyZCkpIHtcXG4gICAgICBjdXN0b21pemVyID0gbGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IGN1c3RvbWl6ZXI7XFxuICAgICAgbGVuZ3RoID0gMTtcXG4gICAgfVxcbiAgICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcXG4gICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgICB2YXIgc291cmNlID0gc291cmNlc1tpbmRleF07XFxuICAgICAgaWYgKHNvdXJjZSkge1xcbiAgICAgICAgYXNzaWduZXIob2JqZWN0LCBzb3VyY2UsIGluZGV4LCBjdXN0b21pemVyKTtcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIG9iamVjdDtcXG4gIH0pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVBc3NpZ25lcik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTQ4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pZGVudGl0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fb3ZlclJlc3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQ5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTEpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnJlc3RgIHdoaWNoIGRvZXNuJ3QgdmFsaWRhdGUgb3IgY29lcmNlIGFyZ3VtZW50cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRUb1N0cmluZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fb3ZlclJlc3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZ1bmMsIHN0YXJ0LCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lkZW50aXR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSwgZnVuYyArICcnKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVJlc3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE0OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXBwbHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTUwKTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xcblxcbi8qKlxcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVJlc3RgIHdoaWNoIHRyYW5zZm9ybXMgdGhlIHJlc3QgYXJyYXkuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD1mdW5jLmxlbmd0aC0xXSBUaGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHJlc3QgcGFyYW1ldGVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xcbiAgc3RhcnQgPSBuYXRpdmVNYXgoc3RhcnQgPT09IHVuZGVmaW5lZCA/IChmdW5jLmxlbmd0aCAtIDEpIDogc3RhcnQsIDApO1xcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcXG4gICAgICAgIGluZGV4ID0gLTEsXFxuICAgICAgICBsZW5ndGggPSBuYXRpdmVNYXgoYXJncy5sZW5ndGggLSBzdGFydCwgMCksXFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XFxuXFxuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcXG4gICAgfVxcbiAgICBpbmRleCA9IC0xO1xcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcXG4gICAgd2hpbGUgKCsraW5kZXggPCBzdGFydCkge1xcbiAgICAgIG90aGVyQXJnc1tpbmRleF0gPSBhcmdzW2luZGV4XTtcXG4gICAgfVxcbiAgICBvdGhlckFyZ3Nbc3RhcnRdID0gdHJhbnNmb3JtKGFycmF5KTtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FwcGx5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAob3ZlclJlc3QpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQSBmYXN0ZXIgYWx0ZXJuYXRpdmUgdG8gYEZ1bmN0aW9uI2FwcGx5YCwgdGhpcyBmdW5jdGlvbiBpbnZva2VzIGBmdW5jYFxcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzIFRoZSBhcmd1bWVudHMgdG8gaW52b2tlIGBmdW5jYCB3aXRoLlxcbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxcbiAqL1xcbmZ1bmN0aW9uIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpIHtcXG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcXG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSk7XFxuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcXG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xcbiAgfVxcbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFwcGx5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VTZXRUb1N0cmluZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Nob3J0T3V0X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1NCk7XFxuXFxuXFxuXFxuLyoqXFxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cXG4gKi9cXG52YXIgc2V0VG9TdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zaG9ydE91dF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlU2V0VG9TdHJpbmdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNldFRvU3RyaW5nKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbnN0YW50X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE1Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZGVmaW5lUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0VG9TdHJpbmdgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaG90IGxvb3Agc2hvcnRpbmcuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzdHJpbmcgVGhlIGB0b1N0cmluZ2AgcmVzdWx0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXFxuICovXFxudmFyIGJhc2VTZXRUb1N0cmluZyA9ICFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pZGVudGl0eV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2RlZmluZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShmdW5jLCAndG9TdHJpbmcnLCB7XFxuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxcbiAgICAnZW51bWVyYWJsZSc6IGZhbHNlLFxcbiAgICAndmFsdWUnOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb25zdGFudF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3RyaW5nKSxcXG4gICAgJ3dyaXRhYmxlJzogdHJ1ZVxcbiAgfSk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlU2V0VG9TdHJpbmcpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdmFsdWVgLlxcbiAqXFxuICogQHN0YXRpY1xcbiAqIEBtZW1iZXJPZiBfXFxuICogQHNpbmNlIDIuNC4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB0aGUgbmV3IGZ1bmN0aW9uLlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxcbiAqIEBleGFtcGxlXFxuICpcXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XFxuICpcXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzKTtcXG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cXG4gKlxcbiAqIGNvbnNvbGUubG9nKG9iamVjdHNbMF0gPT09IG9iamVjdHNbMV0pO1xcbiAqIC8vID0+IHRydWVcXG4gKi9cXG5mdW5jdGlvbiBjb25zdGFudCh2YWx1ZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xcbiAgICByZXR1cm4gdmFsdWU7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjb25zdGFudCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiogVXNlZCB0byBkZXRlY3QgaG90IGZ1bmN0aW9ucyBieSBudW1iZXIgb2YgY2FsbHMgd2l0aGluIGEgc3BhbiBvZiBtaWxsaXNlY29uZHMuICovXFxudmFyIEhPVF9DT1VOVCA9IDgwMCxcXG4gICAgSE9UX1NQQU4gPSAxNjtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxcbiAqIG9mIGBmdW5jYCB3aGVuIGl0J3MgY2FsbGVkIGBIT1RfQ09VTlRgIG9yIG1vcmUgdGltZXMgaW4gYEhPVF9TUEFOYFxcbiAqIG1pbGxpc2Vjb25kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcXG4gIHZhciBjb3VudCA9IDAsXFxuICAgICAgbGFzdENhbGxlZCA9IDA7XFxuXFxuICByZXR1cm4gZnVuY3Rpb24oKSB7XFxuICAgIHZhciBzdGFtcCA9IG5hdGl2ZU5vdygpLFxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcXG5cXG4gICAgbGFzdENhbGxlZCA9IHN0YW1wO1xcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xcbiAgICAgICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcXG4gICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgY291bnQgPSAwO1xcbiAgICB9XFxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNob3J0T3V0KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlMaWtlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc09iamVjdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0KTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSBwb3RlbnRpYWwgaXRlcmF0ZWUgdmFsdWUgYXJndW1lbnQuXFxuICogQHBhcmFtIHsqfSBpbmRleCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIGluZGV4IG9yIGtleSBhcmd1bWVudC5cXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFyZ3VtZW50cyBhcmUgZnJvbSBhbiBpdGVyYXRlZSBjYWxsLFxcbiAqICBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gaXNJdGVyYXRlZUNhbGwodmFsdWUsIGluZGV4LCBvYmplY3QpIHtcXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNPYmplY3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XFxuICBpZiAodHlwZSA9PSAnbnVtYmVyJ1xcbiAgICAgICAgPyAoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9faXNBcnJheUxpa2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNJbmRleF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5kZXgsIG9iamVjdC5sZW5ndGgpKVxcbiAgICAgICAgOiAodHlwZSA9PSAnc3RyaW5nJyAmJiBpbmRleCBpbiBvYmplY3QpXFxuICAgICAgKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19lcV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0W2luZGV4XSwgdmFsdWUpO1xcbiAgfVxcbiAgcmV0dXJuIGZhbHNlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChpc0l0ZXJhdGVlQ2FsbCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlRm9yX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDU3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19rZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQwKTtcXG5cXG5cXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5mb3JPd25gIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gYmFzZUZvck93bihvYmplY3QsIGl0ZXJhdGVlKSB7XFxuICByZXR1cm4gb2JqZWN0ICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VGb3JfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgaXRlcmF0ZWUsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VGb3JPd24pO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE1NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNQcm90b3R5cGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX25hdGl2ZUtleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTU4KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xcbiAgaWYgKCFPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1Byb3RvdHlwZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fbmF0aXZlS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KTtcXG4gIH1cXG4gIHZhciByZXN1bHQgPSBbXTtcXG4gIGZvciAodmFyIGtleSBpbiBPYmplY3Qob2JqZWN0KSkge1xcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcXG4gICAgICByZXN1bHQucHVzaChrZXkpO1xcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTU4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYwKTtcXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUtleXMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19vdmVyQXJnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3Qua2V5cywgT2JqZWN0KTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChuYXRpdmVLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNYXRjaGVzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZU1hdGNoZXNQcm9wZXJ0eV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2lkZW50aXR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3Byb3BlcnR5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OSk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIGl0ZXJhdGVlLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xcbiAgLy8gRG9uJ3Qgc3RvcmUgdGhlIGB0eXBlb2ZgIHJlc3VsdCBpbiBhIHZhcmlhYmxlIHRvIGF2b2lkIGEgSklUIGJ1ZyBpbiBTYWZhcmkgOS5cXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcXG4gICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faWRlbnRpdHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICB9XFxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSlcXG4gICAgICA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2Jhc2VNYXRjaGVzUHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlWzBdLCB2YWx1ZVsxXSlcXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VNYXRjaGVzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh2YWx1ZSk7XFxuICB9XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fcHJvcGVydHlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUl0ZXJhdGVlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc01hdGNoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0TWF0Y2hEYXRhX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xcblxcblxcblxcblxcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcXG4gIHZhciBtYXRjaERhdGEgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19nZXRNYXRjaERhdGFfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHNvdXJjZSk7XFxuICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc01hdGNoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VNYXRjaGVzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N0YWNrX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlSXNFcXVhbF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MSk7XFxuXFxuXFxuXFxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXFxudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXRjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxcbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cXG4gKi9cXG5mdW5jdGlvbiBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhLCBjdXN0b21pemVyKSB7XFxuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxcbiAgICAgIG5vQ3VzdG9taXplciA9ICFjdXN0b21pemVyO1xcblxcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XFxuICAgIHJldHVybiAhbGVuZ3RoO1xcbiAgfVxcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICB3aGlsZSAoaW5kZXgtLSkge1xcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XFxuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXFxuICAgICAgICAgID8gZGF0YVsxXSAhPT0gb2JqZWN0W2RhdGFbMF1dXFxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcXG4gICAgICAgICkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XFxuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxcbiAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcXG5cXG4gICAgaWYgKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKSB7XFxuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICB2YXIgc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXTtcXG4gICAgICBpZiAoY3VzdG9taXplcikge1xcbiAgICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjayk7XFxuICAgICAgfVxcbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXFxuICAgICAgICAgICAgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlSXNFcXVhbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxcbiAgICAgICAgICAgIDogcmVzdWx0XFxuICAgICAgICAgICkpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiB0cnVlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlSXNNYXRjaCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXF1YWxBcnJheXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2VxdWFsQnlUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19lcXVhbE9iamVjdHNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTcxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19pc1R5cGVkQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzcpO1xcblxcblxcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xcbiAqIGRlZXAgY29tcGFyaXNvbnMgYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cyBlbmFibGluZyBvYmplY3RzIHdpdGggY2lyY3VsYXJcXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXFxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VJc0VxdWFsRGVlcChvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgb2JqSXNBcnIgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpLFxcbiAgICAgIG90aElzQXJyID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9faXNBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpLFxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19nZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2dldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob3RoZXIpO1xcblxcbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XFxuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcXG5cXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxcbiAgICAgIGlzU2FtZVRhZyA9IG9ialRhZyA9PSBvdGhUYWc7XFxuXFxuICBpZiAoaXNTYW1lVGFnICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX2lzQnVmZmVyX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKSB7XFxuICAgIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9faXNCdWZmZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG90aGVyKSkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICBvYmpJc0FyciA9IHRydWU7XFxuICAgIG9iaklzT2JqID0gZmFsc2U7XFxuICB9XFxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xcbiAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TdGFja19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuICAgIHJldHVybiAob2JqSXNBcnIgfHwgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfN19faXNUeXBlZEFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKVxcbiAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZXF1YWxBcnJheXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spXFxuICAgICAgOiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcXVhbEJ5VGFnX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xcbiAgfVxcbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxcbiAgICAgICAgb3RoSXNXcmFwcGVkID0gb3RoSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvdGhlciwgJ19fd3JhcHBlZF9fJyk7XFxuXFxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XFxuICAgICAgdmFyIG9ialVud3JhcHBlZCA9IG9iaklzV3JhcHBlZCA/IG9iamVjdC52YWx1ZSgpIDogb2JqZWN0LFxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XFxuXFxuICAgICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgICAgIHJldHVybiBlcXVhbEZ1bmMob2JqVW53cmFwcGVkLCBvdGhVbndyYXBwZWQsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKTtcXG4gICAgfVxcbiAgfVxcbiAgaWYgKCFpc1NhbWVUYWcpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3RhY2tfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbiAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsT2JqZWN0c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGJhc2VJc0VxdWFsRGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTYzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19NYXBDYWNoZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc2V0Q2FjaGVBZGRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTY0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19zZXRDYWNoZUhhc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNjUpO1xcblxcblxcblxcblxcbi8qKlxcbiAqXFxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQGNvbnN0cnVjdG9yXFxuICogQHBhcmFtIHtBcnJheX0gW3ZhbHVlc10gVGhlIHZhbHVlcyB0byBjYWNoZS5cXG4gKi9cXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcXG4gIHZhciBpbmRleCA9IC0xLFxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XFxuXFxuICB0aGlzLl9fZGF0YV9fID0gbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fTWFwQ2FjaGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcXG4gIH1cXG59XFxuXFxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cXG5TZXRDYWNoZS5wcm90b3R5cGUuYWRkID0gU2V0Q2FjaGUucHJvdG90eXBlLnB1c2ggPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3NldENhY2hlQWRkX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblNldENhY2hlLnByb3RvdHlwZS5oYXMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3NldENhY2hlSGFzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFNldENhY2hlKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XFxuXFxuLyoqXFxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQG5hbWUgYWRkXFxuICogQG1lbWJlck9mIFNldENhY2hlXFxuICogQGFsaWFzIHB1c2hcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cXG4gKi9cXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcXG4gIHJldHVybiB0aGlzO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRDYWNoZUFkZCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBpbiB0aGUgYXJyYXkgY2FjaGUuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBuYW1lIGhhc1xcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXFxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XFxuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModmFsdWUpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRDYWNoZUhhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uc29tZWAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlXFxuICogc2hvcnRoYW5kcy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbnkgZWxlbWVudCBwYXNzZXMgdGhlIHByZWRpY2F0ZSBjaGVjayxcXG4gKiAgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGFycmF5U29tZShhcnJheSwgcHJlZGljYXRlKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiBmYWxzZTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYXJyYXlTb21lKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENoZWNrcyBpZiBhIGBjYWNoZWAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IGNhY2hlIFRoZSBjYWNoZSB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICovXFxuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjYWNoZUhhcyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTY4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19TeW1ib2xfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNTgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2VxX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDkpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsQXJyYXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY1KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tYXBUb0FycmF5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE2OSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2V0VG9BcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzApO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xcblxcbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xcblxcbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcXG5cXG4vKiogVXNlZCB0byBjb252ZXJ0IHN5bWJvbHMgdG8gcHJpbWl0aXZlcyBhbmQgc3RyaW5ncy4gKi9cXG52YXIgc3ltYm9sUHJvdG8gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX1N5bWJvbF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fU3ltYm9sX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcXG4gICAgc3ltYm9sVmFsdWVPZiA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udmFsdWVPZiA6IHVuZGVmaW5lZDtcXG5cXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGNvbXBhcmluZyBvYmplY3RzIG9mXFxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cXG4gKlxcbiAqICoqTm90ZToqKiBUaGlzIGZ1bmN0aW9uIG9ubHkgc3VwcG9ydHMgY29tcGFyaW5nIHZhbHVlcyB3aXRoIHRhZ3Mgb2ZcXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBgdG9TdHJpbmdUYWdgIG9mIHRoZSBvYmplY3RzIHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICBzd2l0Y2ggKHRhZykge1xcbiAgICBjYXNlIGRhdGFWaWV3VGFnOlxcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcXG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XFxuICAgICAgb3RoZXIgPSBvdGhlci5idWZmZXI7XFxuXFxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XFxuICAgICAgaWYgKChvYmplY3QuYnl0ZUxlbmd0aCAhPSBvdGhlci5ieXRlTGVuZ3RoKSB8fFxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1VpbnQ4QXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10ob2JqZWN0KSwgbmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fVWludDhBcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXShvdGhlcikpKSB7XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgfVxcbiAgICAgIHJldHVybiB0cnVlO1xcblxcbiAgICBjYXNlIGJvb2xUYWc6XFxuICAgIGNhc2UgZGF0ZVRhZzpcXG4gICAgY2FzZSBudW1iZXJUYWc6XFxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19lcV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoK29iamVjdCwgK290aGVyKTtcXG5cXG4gICAgY2FzZSBlcnJvclRhZzpcXG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xcblxcbiAgICBjYXNlIHJlZ2V4cFRhZzpcXG4gICAgY2FzZSBzdHJpbmdUYWc6XFxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcXG4gICAgICAvLyBhcyBlcXVhbC4gU2VlIGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXFxuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcXG5cXG4gICAgY2FzZSBtYXBUYWc6XFxuICAgICAgdmFyIGNvbnZlcnQgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21hcFRvQXJyYXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuICAgIGNhc2Ugc2V0VGFnOlxcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XFxuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2V0VG9BcnJheV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuICAgICAgaWYgKG9iamVjdC5zaXplICE9IG90aGVyLnNpemUgJiYgIWlzUGFydGlhbCkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICAgIH1cXG4gICAgICAvLyBBc3N1bWUgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXFxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcXG4gICAgICBpZiAoc3RhY2tlZCkge1xcbiAgICAgICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICAgICAgfVxcbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcXG5cXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XFxuICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX2VxdWFsQXJyYXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcXG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcXG4gICAgICByZXR1cm4gcmVzdWx0O1xcblxcbiAgICBjYXNlIHN5bWJvbFRhZzpcXG4gICAgICBpZiAoc3ltYm9sVmFsdWVPZikge1xcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XFxuICAgICAgfVxcbiAgfVxcbiAgcmV0dXJuIGZhbHNlO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChlcXVhbEJ5VGFnKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIENvbnZlcnRzIGBtYXBgIHRvIGl0cyBrZXktdmFsdWUgcGFpcnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXAgVGhlIG1hcCB0byBjb252ZXJ0LlxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxcbiAqL1xcbmZ1bmN0aW9uIG1hcFRvQXJyYXkobWFwKSB7XFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XFxuXFxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XFxuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcXG4gIH0pO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAobWFwVG9BcnJheSk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTcwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cXG4gKi9cXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgcmVzdWx0ID0gQXJyYXkoc2V0LnNpemUpO1xcblxcbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcXG4gICAgcmVzdWx0WysraW5kZXhdID0gdmFsdWU7XFxuICB9KTtcXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHNldFRvQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzIpO1xcblxcblxcbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xcbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XFxuXFxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xcbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XFxuXFxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXFxudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXFxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XFxuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxcbiAgICAgIG9ialByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0QWxsS2V5c19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkob2JqZWN0KSxcXG4gICAgICBvYmpMZW5ndGggPSBvYmpQcm9wcy5sZW5ndGgsXFxuICAgICAgb3RoUHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXRBbGxLZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvdGhlciksXFxuICAgICAgb3RoTGVuZ3RoID0gb3RoUHJvcHMubGVuZ3RoO1xcblxcbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xcbiAgICByZXR1cm4gZmFsc2U7XFxuICB9XFxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XFxuICB3aGlsZSAoaW5kZXgtLSkge1xcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxcbiAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcXG4gIGlmIChzdGFja2VkICYmIHN0YWNrLmdldChvdGhlcikpIHtcXG4gICAgcmV0dXJuIHN0YWNrZWQgPT0gb3RoZXI7XFxuICB9XFxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcXG4gIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcXG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcXG5cXG4gIHZhciBza2lwQ3RvciA9IGlzUGFydGlhbDtcXG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XFxuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcXG4gICAgdmFyIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XFxuXFxuICAgIGlmIChjdXN0b21pemVyKSB7XFxuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxcbiAgICAgICAgOiBjdXN0b21pemVyKG9ialZhbHVlLCBvdGhWYWx1ZSwga2V5LCBvYmplY3QsIG90aGVyLCBzdGFjayk7XFxuICAgIH1cXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXFxuICAgIGlmICghKGNvbXBhcmVkID09PSB1bmRlZmluZWRcXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcXG4gICAgICAgICAgOiBjb21wYXJlZFxcbiAgICAgICAgKSkge1xcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xcbiAgICAgIGJyZWFrO1xcbiAgICB9XFxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcXG4gIH1cXG4gIGlmIChyZXN1bHQgJiYgIXNraXBDdG9yKSB7XFxuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xcblxcbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxcbiAgICAgICAgKCdjb25zdHJ1Y3RvcicgaW4gb2JqZWN0ICYmICdjb25zdHJ1Y3RvcicgaW4gb3RoZXIpICYmXFxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG4gICAgfVxcbiAgfVxcbiAgc3RhY2tbJ2RlbGV0ZSddKG9iamVjdCk7XFxuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xcbiAgcmV0dXJuIHJlc3VsdDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZXF1YWxPYmplY3RzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRBbGxLZXlzX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE3Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0U3ltYm9sc19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2tleXNfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDApO1xcblxcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxcbiAqL1xcbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldEFsbEtleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19rZXlzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldFN5bWJvbHNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRBbGxLZXlzKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2FycmF5UHVzaF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMik7XFxuXFxuXFxuXFxuLyoqXFxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXFxuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXFxuICogc3ltYm9scyBvZiBgb2JqZWN0YC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzIGFuZCBzeW1ib2xzLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XFxuICB2YXIgcmVzdWx0ID0ga2V5c0Z1bmMob2JqZWN0KTtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpID8gcmVzdWx0IDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlQdXNoX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShyZXN1bHQsIHN5bWJvbHNGdW5jKG9iamVjdCkpO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlR2V0QWxsS2V5cyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBcHBlbmRzIHRoZSBlbGVtZW50cyBvZiBgdmFsdWVzYCB0byBgYXJyYXlgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gbW9kaWZ5LlxcbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cXG4gKi9cXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gdmFsdWVzLmxlbmd0aCxcXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XFxuXFxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xcbiAgfVxcbiAgcmV0dXJuIGFycmF5O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChhcnJheVB1c2gpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3NSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlGaWx0ZXJfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19zdHViQXJyYXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc3KTtcXG5cXG5cXG5cXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXFxudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcXG5cXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXFxudmFyIG5hdGl2ZUdldFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcblxcbi8qKlxcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHN5bWJvbHMgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXFxuICovXFxudmFyIGdldFN5bWJvbHMgPSAhbmF0aXZlR2V0U3ltYm9scyA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3R1YkFycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogZnVuY3Rpb24ob2JqZWN0KSB7XFxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcXG4gICAgcmV0dXJuIFtdO1xcbiAgfVxcbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYXJyYXlGaWx0ZXJfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XFxuICAgIHJldHVybiBwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgc3ltYm9sKTtcXG4gIH0pO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0U3ltYm9scyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXFxuICovXFxuZnVuY3Rpb24gYXJyYXlGaWx0ZXIoYXJyYXksIHByZWRpY2F0ZSkge1xcbiAgdmFyIGluZGV4ID0gLTEsXFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXFxuICAgICAgcmVzSW5kZXggPSAwLFxcbiAgICAgIHJlc3VsdCA9IFtdO1xcblxcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcXG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XFxuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gdmFsdWU7XFxuICAgIH1cXG4gIH1cXG4gIHJldHVybiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFycmF5RmlsdGVyKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxNzcgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSBuZXcgZW1wdHkgYXJyYXkuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4xMy4wXFxuICogQGNhdGVnb3J5IFV0aWxcXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBlbXB0eSBhcnJheS5cXG4gKiBAZXhhbXBsZVxcbiAqXFxuICogdmFyIGFycmF5cyA9IF8udGltZXMoMiwgXy5zdHViQXJyYXkpO1xcbiAqXFxuICogY29uc29sZS5sb2coYXJyYXlzKTtcXG4gKiAvLyA9PiBbW10sIFtdXVxcbiAqXFxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xcbiAqIC8vID0+IGZhbHNlXFxuICovXFxuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xcbiAgcmV0dXJuIFtdO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzdHViQXJyYXkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE3OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19NYXBfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19TZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTgxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19XZWFrTWFwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Mik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFzZUdldFRhZ19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg1Myk7XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xcbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXFxuICAgIHByb21pc2VUYWcgPSAnW29iamVjdCBQcm9taXNlXScsXFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xcblxcbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XFxuXFxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1hcHMsIHNldHMsIGFuZCB3ZWFrbWFwcy4gKi9cXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pLFxcbiAgICBtYXBDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgcHJvbWlzZUN0b3JTdHJpbmcgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b1NvdXJjZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Qcm9taXNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSxcXG4gICAgc2V0Q3RvclN0cmluZyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvU291cmNlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSksXFxuICAgIHdlYWtNYXBDdG9yU3RyaW5nID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fV2Vha01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSk7XFxuXFxuLyoqXFxuICogR2V0cyB0aGUgYHRvU3RyaW5nVGFnYCBvZiBgdmFsdWVgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBgdG9TdHJpbmdUYWdgLlxcbiAqL1xcbnZhciBnZXRUYWcgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX2Jhc2VHZXRUYWdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL107XFxuXFxuLy8gRmFsbGJhY2sgZm9yIGRhdGEgdmlld3MsIG1hcHMsIHNldHMsIGFuZCB3ZWFrIG1hcHMgaW4gSUUgMTEgYW5kIHByb21pc2VzIGluIE5vZGUuanMgPCA2LlxcbmlmICgoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19EYXRhVmlld19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fRGF0YVZpZXdfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10obmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX01hcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fTWFwX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSBtYXBUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX1Byb21pc2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fUHJvbWlzZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX1NldF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSAmJiBnZXRUYWcobmV3IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fU2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSAhPSBzZXRUYWcpIHx8XFxuICAgIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gJiYgZ2V0VGFnKG5ldyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX1dlYWtNYXBfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pICE9IHdlYWtNYXBUYWcpKSB7XFxuICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZSkge1xcbiAgICB2YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fYmFzZUdldFRhZ19qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodmFsdWUpLFxcbiAgICAgICAgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZS5jb25zdHJ1Y3RvciA6IHVuZGVmaW5lZCxcXG4gICAgICAgIGN0b3JTdHJpbmcgPSBDdG9yID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNl9fdG9Tb3VyY2VfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKEN0b3IpIDogJyc7XFxuXFxuICAgIGlmIChjdG9yU3RyaW5nKSB7XFxuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XFxuICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzogcmV0dXJuIGRhdGFWaWV3VGFnO1xcbiAgICAgICAgY2FzZSBtYXBDdG9yU3RyaW5nOiByZXR1cm4gbWFwVGFnO1xcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XFxuICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6IHJldHVybiBzZXRUYWc7XFxuICAgICAgICBjYXNlIHdlYWtNYXBDdG9yU3RyaW5nOiByZXR1cm4gd2Vha01hcFRhZztcXG4gICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH07XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFRhZyk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTc5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIERhdGFWaWV3ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10sICdEYXRhVmlldycpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKERhdGFWaWV3KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDMpO1xcblxcblxcblxcbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cXG52YXIgUHJvbWlzZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2dldE5hdGl2ZV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19yb290X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLCAnUHJvbWlzZScpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFByb21pc2UpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fZ2V0TmF0aXZlX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDYpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3Jvb3RfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMyk7XFxuXFxuXFxuXFxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xcbnZhciBTZXQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1NldCcpO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFNldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTgyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzKTtcXG5cXG5cXG5cXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXFxudmFyIFdlYWtNYXAgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19nZXROYXRpdmVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fcm9vdF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSwgJ1dlYWtNYXAnKTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChXZWFrTWFwKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fa2V5c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0MCk7XFxuXFxuXFxuXFxuLyoqXFxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXFxuICovXFxuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xcbiAgdmFyIHJlc3VsdCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2tleXNfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCksXFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcXG5cXG4gIHdoaWxlIChsZW5ndGgtLSkge1xcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xcblxcbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1N0cmljdENvbXBhcmFibGVfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHZhbHVlKV07XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRNYXRjaERhdGEpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE4NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUlzRXF1YWxfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2dldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxODUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2hhc0luX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2lzU3RyaWN0Q29tcGFyYWJsZV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGVfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjcpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcXG5cXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cXG4gKlxcbiAqIEBwcml2YXRlXFxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VNYXRjaGVzUHJvcGVydHkocGF0aCwgc3JjVmFsdWUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSkpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCksIHNyY1ZhbHVlKTtcXG4gIH1cXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgdmFyIG9ialZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fZ2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxcbiAgICAgID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faGFzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aClcXG4gICAgICA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VJc0VxdWFsX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRyk7XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlTWF0Y2hlc1Byb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNjgpO1xcblxcblxcbi8qKlxcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBgb2JqZWN0YC4gSWYgdGhlIHJlc29sdmVkIHZhbHVlIGlzXFxuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMy43LjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSBUaGUgdmFsdWUgcmV0dXJuZWQgZm9yIGB1bmRlZmluZWRgIHJlc29sdmVkIHZhbHVlcy5cXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XFxuICpcXG4gKiBfLmdldChvYmplY3QsICdhWzBdLmIuYycpO1xcbiAqIC8vID0+IDNcXG4gKlxcbiAqIF8uZ2V0KG9iamVjdCwgWydhJywgJzAnLCAnYicsICdjJ10pO1xcbiAqIC8vID0+IDNcXG4gKlxcbiAqIF8uZ2V0KG9iamVjdCwgJ2EuYi5jJywgJ2RlZmF1bHQnKTtcXG4gKiAvLyA9PiAnZGVmYXVsdCdcXG4gKi9cXG5mdW5jdGlvbiBnZXQob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpIHtcXG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Jhc2VHZXRfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aCk7XFxuICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiByZXN1bHQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSGFzSW5fanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTg3KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19oYXNQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE4OCk7XFxuXFxuXFxuXFxuLyoqXFxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgNC4wLjBcXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xcbiAqIC8vID0+IHRydWVcXG4gKlxcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcXG4gKiAvLyA9PiB0cnVlXFxuICpcXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcXG4gKiAvLyA9PiBmYWxzZVxcbiAqL1xcbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2hhc1BhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG9iamVjdCwgcGF0aCwgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlSGFzSW5fanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pO1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChoYXNJbik7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZUhhc0luKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxODggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2Nhc3RQYXRoX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDY5KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19pc0FyZ3VtZW50c19qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNBcnJheV9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19pc0luZGV4X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19pc0xlbmd0aF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdG9LZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTApO1xcblxcblxcblxcblxcblxcblxcblxcbi8qKlxcbiAqIENoZWNrcyBpZiBgcGF0aGAgZXhpc3RzIG9uIGBvYmplY3RgLlxcbiAqXFxuICogQHByaXZhdGVcXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXFxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxcbiAqL1xcbmZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XFxuICBwYXRoID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY2FzdFBhdGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgsIG9iamVjdCk7XFxuXFxuICB2YXIgaW5kZXggPSAtMSxcXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcXG4gICAgICByZXN1bHQgPSBmYWxzZTtcXG5cXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XFxuICAgIHZhciBrZXkgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aFtpbmRleF0pO1xcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcXG4gICAgICBicmVhaztcXG4gICAgfVxcbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcXG4gIH1cXG4gIGlmIChyZXN1bHQgfHwgKytpbmRleCAhPSBsZW5ndGgpIHtcXG4gICAgcmV0dXJuIHJlc3VsdDtcXG4gIH1cXG4gIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IG9iamVjdC5sZW5ndGg7XFxuICByZXR1cm4gISFsZW5ndGggJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9faXNMZW5ndGhfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGxlbmd0aCkgJiYgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19faXNJbmRleF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoa2V5LCBsZW5ndGgpICYmXFxuICAgIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19pc0FycmF5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpIHx8IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX2lzQXJndW1lbnRzX2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QpKTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoaGFzUGF0aCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTg5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlUHJvcGVydHlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTkwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19iYXNlUHJvcGVydHlEZWVwX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE5MSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNLZXlfanNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3RvS2V5X2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEwKTtcXG5cXG5cXG5cXG5cXG5cXG4vKipcXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXFxuICpcXG4gKiBAc3RhdGljXFxuICogQG1lbWJlck9mIF9cXG4gKiBAc2luY2UgMi40LjBcXG4gKiBAY2F0ZWdvcnkgVXRpbFxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXFxuICogQGV4YW1wbGVcXG4gKlxcbiAqIHZhciBvYmplY3RzID0gW1xcbiAqICAgeyAnYSc6IHsgJ2InOiAyIH0gfSxcXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cXG4gKiBdO1xcbiAqXFxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xcbiAqIC8vID0+IFsyLCAxXVxcbiAqXFxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcXG4gKiAvLyA9PiBbMSwgMl1cXG4gKi9cXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XFxuICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9faXNLZXlfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHBhdGgpID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZVByb3BlcnR5X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX190b0tleV9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCkpIDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fYmFzZVByb3BlcnR5RGVlcF9qc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkocGF0aCk7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHByb3BlcnR5KTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qKlxcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcXG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcXG4gICAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XFxuICB9O1xcbn1cXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChiYXNlUHJvcGVydHkpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDE5MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fYmFzZUdldF9qc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2OCk7XFxuXFxuXFxuLyoqXFxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUHJvcGVydHlgIHdoaWNoIHN1cHBvcnRzIGRlZXAgcGF0aHMuXFxuICpcXG4gKiBAcHJpdmF0ZVxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXFxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXFxuICovXFxuZnVuY3Rpb24gYmFzZVByb3BlcnR5RGVlcChwYXRoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19iYXNlR2V0X2pzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShvYmplY3QsIHBhdGgpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoYmFzZVByb3BlcnR5RGVlcCk7XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXFxuICovXFxuXFxuXFxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XFxuICAgIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXFxuICAgIGRlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZGlzcGxheU5hbWU6IHRydWUsXFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgbWl4aW5zOiB0cnVlLFxcbiAgICBwcm9wVHlwZXM6IHRydWUsXFxuICAgIHR5cGU6IHRydWVcXG59O1xcblxcbnZhciBLTk9XTl9TVEFUSUNTID0ge1xcbiAgICBuYW1lOiB0cnVlLFxcbiAgICBsZW5ndGg6IHRydWUsXFxuICAgIHByb3RvdHlwZTogdHJ1ZSxcXG4gICAgY2FsbGVyOiB0cnVlLFxcbiAgICBhcmd1bWVudHM6IHRydWUsXFxuICAgIGFyaXR5OiB0cnVlXFxufTtcXG5cXG52YXIgaXNHZXRPd25Qcm9wZXJ0eVN5bWJvbHNBdmFpbGFibGUgPSB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJztcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBjdXN0b21TdGF0aWNzKSB7XFxuICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykgeyAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VDb21wb25lbnQpO1xcblxcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cXG4gICAgICAgIGlmIChpc0dldE93blByb3BlcnR5U3ltYm9sc0F2YWlsYWJsZSkge1xcbiAgICAgICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleXNbaV1dICYmICFLTk9XTl9TVEFUSUNTW2tleXNbaV1dICYmICghY3VzdG9tU3RhdGljcyB8fCAhY3VzdG9tU3RhdGljc1trZXlzW2ldXSkpIHtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldENvbXBvbmVudFtrZXlzW2ldXSA9IHNvdXJjZUNvbXBvbmVudFtrZXlzW2ldXTtcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcXG5cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICByZXR1cm4gdGFyZ2V0Q29tcG9uZW50O1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTkzICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBjcmVhdGVQcm92aWRlciAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3MCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcHJvcF90eXBlc19fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxzX3dhcm5pbmdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDQpO1xcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlID0gZmFsc2U7XFxuZnVuY3Rpb24gd2FybkFib3V0UmVjZWl2aW5nU3RvcmUoKSB7XFxuICBpZiAoZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUpIHtcXG4gICAgcmV0dXJuO1xcbiAgfVxcbiAgZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUgPSB0cnVlO1xcblxcbiAgT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbHNfd2FybmluZ19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoJzxQcm92aWRlcj4gZG9lcyBub3Qgc3VwcG9ydCBjaGFuZ2luZyBgc3RvcmVgIG9uIHRoZSBmbHkuICcgKyAnSXQgaXMgbW9zdCBsaWtlbHkgdGhhdCB5b3Ugc2VlIHRoaXMgZXJyb3IgYmVjYXVzZSB5b3UgdXBkYXRlZCB0byAnICsgJ1JlZHV4IDIueCBhbmQgUmVhY3QgUmVkdXggMi54IHdoaWNoIG5vIGxvbmdlciBob3QgcmVsb2FkIHJlZHVjZXJzICcgKyAnYXV0b21hdGljYWxseS4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXJlZHV4L3JlbGVhc2VzLycgKyAndGFnL3YyLjAuMCBmb3IgdGhlIG1pZ3JhdGlvbiBpbnN0cnVjdGlvbnMuJyk7XFxufVxcblxcbmZ1bmN0aW9uIGNyZWF0ZVByb3ZpZGVyKCkge1xcbiAgdmFyIF9Qcm92aWRlciRjaGlsZENvbnRleDtcXG5cXG4gIHZhciBzdG9yZUtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJ3N0b3JlJztcXG4gIHZhciBzdWJLZXkgPSBhcmd1bWVudHNbMV07XFxuXFxuICB2YXIgc3Vic2NyaXB0aW9uS2V5ID0gc3ViS2V5IHx8IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XFxuXFxuICB2YXIgUHJvdmlkZXIgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgICBfaW5oZXJpdHMoUHJvdmlkZXIsIF9Db21wb25lbnQpO1xcblxcbiAgICBQcm92aWRlci5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xcbiAgICAgIHZhciBfcmVmO1xcblxcbiAgICAgIHJldHVybiBfcmVmID0ge30sIF9yZWZbc3RvcmVLZXldID0gdGhpc1tzdG9yZUtleV0sIF9yZWZbc3Vic2NyaXB0aW9uS2V5XSA9IG51bGwsIF9yZWY7XFxuICAgIH07XFxuXFxuICAgIGZ1bmN0aW9uIFByb3ZpZGVyKHByb3BzLCBjb250ZXh0KSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFByb3ZpZGVyKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcXG5cXG4gICAgICBfdGhpc1tzdG9yZUtleV0gPSBwcm9wcy5zdG9yZTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNoaWxkcmVuXFxcIl0ub25seSh0aGlzLnByb3BzLmNoaWxkcmVuKTtcXG4gICAgfTtcXG5cXG4gICAgcmV0dXJuIFByb3ZpZGVyO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiAobmV4dFByb3BzKSB7XFxuICAgICAgaWYgKHRoaXNbc3RvcmVLZXldICE9PSBuZXh0UHJvcHMuc3RvcmUpIHtcXG4gICAgICAgIHdhcm5BYm91dFJlY2VpdmluZ1N0b3JlKCk7XFxuICAgICAgfVxcbiAgICB9O1xcbiAgfVxcblxcbiAgUHJvdmlkZXIucHJvcFR5cGVzID0ge1xcbiAgICBzdG9yZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogc3RvcmVTaGFwZSAqL10uaXNSZXF1aXJlZCxcXG4gICAgY2hpbGRyZW46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9wcm9wX3R5cGVzX19fZGVmYXVsdC5hLmVsZW1lbnQuaXNSZXF1aXJlZFxcbiAgfTtcXG4gIFByb3ZpZGVyLmNoaWxkQ29udGV4dFR5cGVzID0gKF9Qcm92aWRlciRjaGlsZENvbnRleCA9IHt9LCBfUHJvdmlkZXIkY2hpbGRDb250ZXhbc3RvcmVLZXldID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc19Qcm9wVHlwZXNfX1tcXFwiYVxcXCIgLyogc3RvcmVTaGFwZSAqL10uaXNSZXF1aXJlZCwgX1Byb3ZpZGVyJGNoaWxkQ29udGV4W3N1YnNjcmlwdGlvbktleV0gPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxzX1Byb3BUeXBlc19fW1xcXCJiXFxcIiAvKiBzdWJzY3JpcHRpb25TaGFwZSAqL10sIF9Qcm92aWRlciRjaGlsZENvbnRleCk7XFxuXFxuICByZXR1cm4gUHJvdmlkZXI7XFxufVxcblxcbi8qIHVudXNlZCBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIHZhciBfdW51c2VkX3dlYnBhY2tfZGVmYXVsdF9leHBvcnQgPSAoY3JlYXRlUHJvdmlkZXIoKSk7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE5NCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKipcXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cXG4gKlxcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cXG4gKi9cXG5cXG5cXG5cXG52YXIgYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygxOTUpO1xcblxcbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IF9fd2VicGFja19yZXF1aXJlX18oNDMpO1xcbnZhciBjaGVja1Byb3BUeXBlcyA9IF9fd2VicGFja19yZXF1aXJlX18oMTk2KTtcXG5cXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcXG5cXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcXG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXFxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXFxuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXFxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xcbiAgICB9IGNhdGNoICh4KSB7fVxcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcXG4gIHJldHVybiBudWxsO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGlzVmFsaWRFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKSB7XFxuICAvKiBnbG9iYWwgU3ltYm9sICovXFxuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XFxuICB2YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cXG5cXG4gIC8qKlxcbiAgICogUmV0dXJucyB0aGUgaXRlcmF0b3IgbWV0aG9kIGZ1bmN0aW9uIGNvbnRhaW5lZCBvbiB0aGUgaXRlcmFibGUgb2JqZWN0LlxcbiAgICpcXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxcbiAgICpcXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XFxuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcXG4gICAqICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChteUl0ZXJhYmxlKTtcXG4gICAqICAgICAgIC4uLlxcbiAgICogICAgIH1cXG4gICAqXFxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cXG4gICAqL1xcbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XFxuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XFxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xcbiAgICB9XFxuICB9XFxuXFxuICAvKipcXG4gICAqIENvbGxlY3Rpb24gb2YgbWV0aG9kcyB0aGF0IGFsbG93IGRlY2xhcmF0aW9uIGFuZCB2YWxpZGF0aW9uIG9mIHByb3BzIHRoYXQgYXJlXFxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxcbiAgICpcXG4gICAqICAgdmFyIFByb3BzID0gcmVxdWlyZSgnUmVhY3RQcm9wVHlwZXMnKTtcXG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcXG4gICAqICAgICBwcm9wVHlwZXM6IHtcXG4gICAqICAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBwcm9wIG5hbWVkIFxcXCJkZXNjcmlwdGlvblxcXCIuXFxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxcbiAgICpcXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFxcXCJjYXRlZ29yeVxcXCIuXFxuICAgKiAgICAgICBjYXRlZ29yeTogUHJvcHMub25lT2YoWydOZXdzJywnUGhvdG9zJ10pLmlzUmVxdWlyZWQsXFxuICAgKlxcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFxcXCJkaWFsb2dcXFwiIHRoYXQgcmVxdWlyZXMgYW4gaW5zdGFuY2Ugb2YgRGlhbG9nLlxcbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxcbiAgICogICAgIH0sXFxuICAgKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHsgLi4uIH1cXG4gICAqICAgfSk7XFxuICAgKlxcbiAgICogQSBtb3JlIGZvcm1hbCBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGVzZSBtZXRob2RzIGFyZSB1c2VkOlxcbiAgICpcXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxcbiAgICogICBkZWNsIDo9IFJlYWN0UHJvcFR5cGVzLnt0eXBlfSguaXNSZXF1aXJlZCk/XFxuICAgKlxcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xcbiAgICogYWxsb3dzIHRoZSBjcmVhdGlvbiBvZiBjdXN0b20gdmFsaWRhdGlvbiBmdW5jdGlvbnMuIEZvciBleGFtcGxlOlxcbiAgICpcXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xcbiAgICogICAgcHJvcFR5cGVzOiB7XFxuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcXFwiaHJlZlxcXCIuXFxuICAgKiAgICAgIGhyZWY6IGZ1bmN0aW9uKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXFxuICAgKiAgICAgICAgICAgICEocHJvcFZhbHVlIGluc3RhbmNlb2YgVVJJKSkge1xcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcXG4gICAqICAgICAgICAgICAgY29tcG9uZW50TmFtZVxcbiAgICogICAgICAgICAgKTtcXG4gICAqICAgICAgICB9XFxuICAgKiAgICAgIH1cXG4gICAqICAgIH0sXFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cXG4gICAqICB9KTtcXG4gICAqXFxuICAgKiBAaW50ZXJuYWxcXG4gICAqL1xcblxcbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcXG5cXG4gIC8vIEltcG9ydGFudCFcXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cXG4gIHZhciBSZWFjdFByb3BUeXBlcyA9IHtcXG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxcbiAgICBmdW5jOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignZnVuY3Rpb24nKSxcXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxcbiAgICBzdHJpbmc6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdzdHJpbmcnKSxcXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXFxuXFxuICAgIGFueTogY3JlYXRlQW55VHlwZUNoZWNrZXIoKSxcXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIsXFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxcbiAgfTtcXG5cXG4gIC8qKlxcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2lzXFxuICAgKi9cXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cXG4gIGZ1bmN0aW9uIGlzKHgsIHkpIHtcXG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxcbiAgICBpZiAoeCA9PT0geSkge1xcbiAgICAgIC8vIFN0ZXBzIDEtNSwgNy0xMFxcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXFxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcXG4gICAgfVxcbiAgfVxcbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXFxuXFxuICAvKipcXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcXG4gICAqIFByb3BUeXBlcyBkaXJlY3RseSBhbmQgaW5zcGVjdCB0aGVpciBvdXRwdXQuIEhvd2V2ZXIsIHdlIGRvbid0IHVzZSByZWFsXFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXFxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XFxuICAgKiBoYXBwZW5zIGluIG9uZU9mVHlwZSgpIGZvciBhbnkgdHlwZSBiZWZvcmUgdGhlIG9uZSB0aGF0IG1hdGNoZWQuXFxuICAgKi9cXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xcbiAgICB0aGlzLnN0YWNrID0gJyc7XFxuICB9XFxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXFxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XFxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XFxuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcXG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XFxuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xcblxcbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XFxuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXFxuICAgICAgICAgICAgJ1VzZSBgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKClgIHRvIGNhbGwgdGhlbS4gJyArXFxuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXFxuICAgICAgICAgICk7XFxuICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICAgICAgICB0aHJvdyBlcnI7XFxuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XFxuICAgICAgICAgIGlmIChcXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXFxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXFxuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXFxuICAgICAgICAgICkge1xcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcXG4gICAgICAgICAgICAgICdmdW5jdGlvbiBmb3IgdGhlIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgcHJvcCBvbiBgJyArIGNvbXBvbmVudE5hbWUgICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXFxuICAgICAgICAgICAgICAnWW91IG1heSBiZSBzZWVpbmcgdGhpcyB3YXJuaW5nIGR1ZSB0byBhIHRoaXJkLXBhcnR5IFByb3BUeXBlcyAnICtcXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXFxuICAgICAgICAgICAgKTtcXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XFxuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xcbiAgICAgICAgICB9XFxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG51bGw7XFxuICAgICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcXG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XFxuXFxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XFxuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxcbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxcbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcXG5cXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCk7XFxuICB9XFxuXFxuICBmdW5jdGlvbiBjcmVhdGVBcnJheU9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgYXJyYXlPZi4nKTtcXG4gICAgICB9XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcXG4gICAgICB9XFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XFxuICAgICAgICAgIHJldHVybiBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcXG4gICAgICBpZiAoIWlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICghKHByb3BzW3Byb3BOYW1lXSBpbnN0YW5jZW9mIGV4cGVjdGVkQ2xhc3MpKSB7XFxuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgYWN0dWFsQ2xhc3NOYW1lICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdpbnN0YW5jZSBvZiBgJyArIGV4cGVjdGVkQ2xhc3NOYW1lICsgJ2AuJykpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XFxuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBpbnN0YW5jZSBvZiBhcnJheS4nKSA6IHZvaWQgMDtcXG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xcbiAgICAgICAgICByZXR1cm4gbnVsbDtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuXFxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzKTtcXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgcHJvcFZhbHVlICsgJ2AgJyArICgnc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIG9uZSBvZiAnICsgdmFsdWVzU3RyaW5nICsgJy4nKSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XFxuICAgICAgfVxcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xcbiAgICAgIH1cXG4gICAgICBmb3IgKHZhciBrZXkgaW4gcHJvcFZhbHVlKSB7XFxuICAgICAgICBpZiAocHJvcFZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHtcXG4gICAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcXG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcXG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XFxuICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXlPZlR5cGVDaGVja2VycykpIHtcXG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XFxuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XFxuICAgIH1cXG5cXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgdmFyIGNoZWNrZXIgPSBhcnJheU9mVHlwZUNoZWNrZXJzW2ldO1xcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUuIEV4cGVjdGVkIGFuIGFycmF5IG9mIGNoZWNrIGZ1bmN0aW9ucywgYnV0ICcgK1xcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcXG4gICAgICAgICk7XFxuICAgICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcXG4gICAgICB9XFxuICAgIH1cXG5cXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XFxuICAgICAgICBpZiAoY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KSA9PSBudWxsKSB7XFxuICAgICAgICAgIHJldHVybiBudWxsO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG5cXG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLicpKTtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIGlmICghaXNOb2RlKHByb3BzW3Byb3BOYW1lXSkpIHtcXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIG51bGw7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXIoc2hhcGVUeXBlcykge1xcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcXG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XFxuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xcbiAgICAgIH1cXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XFxuICAgICAgICBpZiAoIWNoZWNrZXIpIHtcXG4gICAgICAgICAgY29udGludWU7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XFxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XFxuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgICBpZiAocHJvcFR5cGUgIT09ICdvYmplY3QnKSB7XFxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XFxuICAgICAgfVxcbiAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgYWxsIGtleXMgaW4gY2FzZSBzb21lIGFyZSByZXF1aXJlZCBidXQgbWlzc2luZyBmcm9tXFxuICAgICAgLy8gcHJvcHMuXFxuICAgICAgdmFyIGFsbEtleXMgPSBhc3NpZ24oe30sIHByb3BzW3Byb3BOYW1lXSwgc2hhcGVUeXBlcyk7XFxuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcXG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xcbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XFxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcXG4gICAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Aga2V5IGAnICsga2V5ICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJyArXFxuICAgICAgICAgICAgJ1xcXFxuQmFkIG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KHByb3BzW3Byb3BOYW1lXSwgbnVsbCwgJyAgJykgK1xcbiAgICAgICAgICAgICdcXFxcblZhbGlkIGtleXM6ICcgKyAgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXFxuICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XFxuICAgICAgICBpZiAoZXJyb3IpIHtcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgICByZXR1cm4gbnVsbDtcXG4gICAgfVxcblxcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaXNOb2RlKHByb3BWYWx1ZSkge1xcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcXG4gICAgICBjYXNlICdudW1iZXInOlxcbiAgICAgIGNhc2UgJ3N0cmluZyc6XFxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XFxuICAgICAgY2FzZSAnb2JqZWN0JzpcXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcXG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHByb3BWYWx1ZSA9PT0gbnVsbCB8fCBpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XFxuICAgICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XFxuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwocHJvcFZhbHVlKTtcXG4gICAgICAgICAgdmFyIHN0ZXA7XFxuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xcbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcXG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXFxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcXG4gICAgICAgICAgICAgIGlmIChlbnRyeSkge1xcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiB0cnVlO1xcbiAgICAgIGRlZmF1bHQ6XFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcXG4gICAgLy8gTmF0aXZlIFN5bWJvbC5cXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuXFxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXFxuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcXG4gICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgfVxcblxcbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXFxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xcbiAgICAgIHJldHVybiB0cnVlO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG5cXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XFxuICAgICAgcmV0dXJuICdhcnJheSc7XFxuICAgIH1cXG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cXG4gICAgICByZXR1cm4gJ29iamVjdCc7XFxuICAgIH1cXG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XFxuICAgICAgcmV0dXJuICdzeW1ib2wnO1xcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVHlwZTtcXG4gIH1cXG5cXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxcbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XFxuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcXG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XFxuICAgIH1cXG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcXG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XFxuICAgICAgICByZXR1cm4gJ2RhdGUnO1xcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XFxuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XFxuICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVHlwZTtcXG4gIH1cXG5cXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cXG4gIC8vIEZvciBleGFtcGxlLCBcXFwidW5kZWZpbmVkXFxcIiBvciBcXFwib2YgdHlwZSBhcnJheVxcXCJcXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcXG4gICAgc3dpdGNoICh0eXBlKSB7XFxuICAgICAgY2FzZSAnYXJyYXknOlxcbiAgICAgIGNhc2UgJ29iamVjdCc6XFxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxcbiAgICAgIGNhc2UgJ2RhdGUnOlxcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XFxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XFxuICAgICAgZGVmYXVsdDpcXG4gICAgICAgIHJldHVybiB0eXBlO1xcbiAgICB9XFxuICB9XFxuXFxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxcbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcXG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xcbiAgICB9XFxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcXG4gIH1cXG5cXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XFxuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcXG5cXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcXG59O1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAxOTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qXFxub2JqZWN0LWFzc2lnblxcbihjKSBTaW5kcmUgU29yaHVzXFxuQGxpY2Vuc2UgTUlUXFxuKi9cXG5cXG5cXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XFxudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xcblxcbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xcblxcdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcXG5cXHRcXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xcblxcdH1cXG5cXG5cXHRyZXR1cm4gT2JqZWN0KHZhbCk7XFxufVxcblxcbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcXG5cXHR0cnkge1xcblxcdFxcdGlmICghT2JqZWN0LmFzc2lnbikge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxcblxcblxcdFxcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcXG5cXHRcXHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXFxuXFx0XFx0dGVzdDFbNV0gPSAnZGUnO1xcblxcdFxcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xcblxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxcblxcdFxcdHZhciB0ZXN0MiA9IHt9O1xcblxcdFxcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xcblxcdFxcdFxcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcXG5cXHRcXHR9XFxuXFx0XFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcXG5cXHRcXHRcXHRyZXR1cm4gdGVzdDJbbl07XFxuXFx0XFx0fSk7XFxuXFx0XFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XFxuXFx0XFx0dmFyIHRlc3QzID0ge307XFxuXFx0XFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XFxuXFx0XFx0XFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcXG5cXHRcXHR9KTtcXG5cXHRcXHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cXG5cXHRcXHRcXHRcXHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XFxuXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cXHR9IGNhdGNoIChlcnIpIHtcXG5cXHRcXHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxcblxcdFxcdHJldHVybiBmYWxzZTtcXG5cXHR9XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XFxuXFx0dmFyIGZyb207XFxuXFx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcXG5cXHR2YXIgc3ltYm9scztcXG5cXG5cXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xcblxcdFxcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcXG5cXG5cXHRcXHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xcblxcdFxcdFxcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcXG5cXHRcXHRcXHRcXHR0b1trZXldID0gZnJvbVtrZXldO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xcblxcdFxcdFxcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XFxuXFx0XFx0XFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XFxuXFx0XFx0XFx0XFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xcblxcdFxcdFxcdFxcdFxcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcXG5cXHRcXHRcXHRcXHR9XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9XFxuXFxuXFx0cmV0dXJuIHRvO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qKlxcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxcbiAqXFxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXFxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxcbiAqL1xcblxcblxcblxcbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xcblxcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQzKTtcXG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcXG5cXG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XFxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxcbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcXG4gICAgfSBjYXRjaCAoeCkge31cXG4gIH07XFxufVxcblxcbi8qKlxcbiAqIEFzc2VydCB0aGF0IHRoZSB2YWx1ZXMgbWF0Y2ggd2l0aCB0aGUgdHlwZSBzcGVjcy5cXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cXG4gKlxcbiAqIEBwYXJhbSB7b2JqZWN0fSB0eXBlU3BlY3MgTWFwIG9mIG5hbWUgdG8gYSBSZWFjdFByb3BUeXBlXFxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXFxcInByb3BcXFwiLCBcXFwiY29udGV4dFxcXCIsIFxcXCJjaGlsZCBjb250ZXh0XFxcIlxcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21wb25lbnROYW1lIE5hbWUgb2YgdGhlIGNvbXBvbmVudCBmb3IgZXJyb3IgbWVzc2FnZXMuXFxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cXG4gKiBAcHJpdmF0ZVxcbiAqL1xcbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcXG4gICAgICBpZiAodHlwZVNwZWNzLmhhc093blByb3BlcnR5KHR5cGVTcGVjTmFtZSkpIHtcXG4gICAgICAgIHZhciBlcnJvcjtcXG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXFxuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXFxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxcbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxcbiAgICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICtcXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLidcXG4gICAgICAgICAgICApO1xcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xcbiAgICAgICAgICAgIHRocm93IGVycjtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcXG4gICAgICAgICAgZXJyb3IgPSBleDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XFxuICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xcbiAgICAgICAgICAgICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAnICsgdHlwZW9mIGVycm9yICsgJy4gJyArXFxuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xcbiAgICAgICAgICAgICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJ1xcbiAgICAgICAgICApXFxuXFxuICAgICAgICB9XFxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcXG5cXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XFxuXFxuICAgICAgICAgIHByaW50V2FybmluZyhcXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXFxuICAgICAgICAgICk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxufVxcblxcbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDE5NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyoqXFxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXFxuICpcXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXFxuICovXFxuXFxuXFxuXFxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Myk7XFxuXFxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbigpIHt9XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcXG4gIGZ1bmN0aW9uIHNoaW0ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcXG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcXG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXFxuICAgICAgcmV0dXJuO1xcbiAgICB9XFxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXFxuICAgICAgJ0NhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuICcgK1xcbiAgICAgICdVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiAnICtcXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcXG4gICAgKTtcXG4gICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XFxuICAgIHRocm93IGVycjtcXG4gIH07XFxuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcXG4gICAgcmV0dXJuIHNoaW07XFxuICB9O1xcbiAgLy8gSW1wb3J0YW50IVxcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qc2AuXFxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XFxuICAgIGFycmF5OiBzaGltLFxcbiAgICBib29sOiBzaGltLFxcbiAgICBmdW5jOiBzaGltLFxcbiAgICBudW1iZXI6IHNoaW0sXFxuICAgIG9iamVjdDogc2hpbSxcXG4gICAgc3RyaW5nOiBzaGltLFxcbiAgICBzeW1ib2w6IHNoaW0sXFxuXFxuICAgIGFueTogc2hpbSxcXG4gICAgYXJyYXlPZjogZ2V0U2hpbSxcXG4gICAgZWxlbWVudDogc2hpbSxcXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcXG4gICAgbm9kZTogc2hpbSxcXG4gICAgb2JqZWN0T2Y6IGdldFNoaW0sXFxuICAgIG9uZU9mOiBnZXRTaGltLFxcbiAgICBvbmVPZlR5cGU6IGdldFNoaW0sXFxuICAgIHNoYXBlOiBnZXRTaGltLFxcbiAgICBleGFjdDogZ2V0U2hpbVxcbiAgfTtcXG5cXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZW1wdHlGdW5jdGlvbjtcXG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xcblxcbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xcbn07XFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMTk4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5cXG4vKipcXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXFxuICovXFxudmFyIFJFQUNUX1NUQVRJQ1MgPSB7XFxuICAgIGNoaWxkQ29udGV4dFR5cGVzOiB0cnVlLFxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXFxuICAgIGRlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZGlzcGxheU5hbWU6IHRydWUsXFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcXG4gICAgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiB0cnVlLFxcbiAgICBtaXhpbnM6IHRydWUsXFxuICAgIHByb3BUeXBlczogdHJ1ZSxcXG4gICAgdHlwZTogdHJ1ZVxcbn07XFxuXFxudmFyIEtOT1dOX1NUQVRJQ1MgPSB7XFxuICAgIG5hbWU6IHRydWUsXFxuICAgIGxlbmd0aDogdHJ1ZSxcXG4gICAgcHJvdG90eXBlOiB0cnVlLFxcbiAgICBjYWxsZXI6IHRydWUsXFxuICAgIGNhbGxlZTogdHJ1ZSxcXG4gICAgYXJndW1lbnRzOiB0cnVlLFxcbiAgICBhcml0eTogdHJ1ZVxcbn07XFxuXFxudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XFxudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XFxudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XFxudmFyIGdldFByb3RvdHlwZU9mID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xcbnZhciBvYmplY3RQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZiAmJiBnZXRQcm90b3R5cGVPZihPYmplY3QpO1xcblxcbmZ1bmN0aW9uIGhvaXN0Tm9uUmVhY3RTdGF0aWNzKHRhcmdldENvbXBvbmVudCwgc291cmNlQ29tcG9uZW50LCBibGFja2xpc3QpIHtcXG4gICAgaWYgKHR5cGVvZiBzb3VyY2VDb21wb25lbnQgIT09ICdzdHJpbmcnKSB7IC8vIGRvbid0IGhvaXN0IG92ZXIgc3RyaW5nIChodG1sKSBjb21wb25lbnRzXFxuXFxuICAgICAgICBpZiAob2JqZWN0UHJvdG90eXBlKSB7XFxuICAgICAgICAgICAgdmFyIGluaGVyaXRlZENvbXBvbmVudCA9IGdldFByb3RvdHlwZU9mKHNvdXJjZUNvbXBvbmVudCk7XFxuICAgICAgICAgICAgaWYgKGluaGVyaXRlZENvbXBvbmVudCAmJiBpbmhlcml0ZWRDb21wb25lbnQgIT09IG9iamVjdFByb3RvdHlwZSkge1xcbiAgICAgICAgICAgICAgICBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIGluaGVyaXRlZENvbXBvbmVudCwgYmxhY2tsaXN0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoc291cmNlQ29tcG9uZW50KTtcXG5cXG4gICAgICAgIGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcXG4gICAgICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZUNvbXBvbmVudCkpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XFxuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XFxuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleV0gJiYgIUtOT1dOX1NUQVRJQ1Nba2V5XSAmJiAoIWJsYWNrbGlzdCB8fCAhYmxhY2tsaXN0W2tleV0pKSB7XFxuICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZUNvbXBvbmVudCwga2V5KTtcXG4gICAgICAgICAgICAgICAgdHJ5IHsgLy8gQXZvaWQgZmFpbHVyZXMgZnJvbSByZWFkLW9ubHkgcHJvcGVydGllc1xcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0Q29tcG9uZW50LCBrZXksIGRlc2NyaXB0b3IpO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIHRhcmdldENvbXBvbmVudDtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBob2lzdE5vblJlYWN0U3RhdGljcztcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAxOTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChiaW5kaW5nKSAqLyBfX3dlYnBhY2tfcmVxdWlyZV9fLmQoX193ZWJwYWNrX2V4cG9ydHNfXywgXFxcImFcXFwiLCBmdW5jdGlvbigpIHsgcmV0dXJuIFN1YnNjcmlwdGlvbjsgfSk7XFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuLy8gZW5jYXBzdWxhdGVzIHRoZSBzdWJzY3JpcHRpb24gbG9naWMgZm9yIGNvbm5lY3RpbmcgYSBjb21wb25lbnQgdG8gdGhlIHJlZHV4IHN0b3JlLCBhc1xcbi8vIHdlbGwgYXMgbmVzdGluZyBzdWJzY3JpcHRpb25zIG9mIGRlc2NlbmRhbnQgY29tcG9uZW50cywgc28gdGhhdCB3ZSBjYW4gZW5zdXJlIHRoZVxcbi8vIGFuY2VzdG9yIGNvbXBvbmVudHMgcmUtcmVuZGVyIGJlZm9yZSBkZXNjZW5kYW50c1xcblxcbnZhciBDTEVBUkVEID0gbnVsbDtcXG52YXIgbnVsbExpc3RlbmVycyA9IHtcXG4gIG5vdGlmeTogZnVuY3Rpb24gbm90aWZ5KCkge31cXG59O1xcblxcbmZ1bmN0aW9uIGNyZWF0ZUxpc3RlbmVyQ29sbGVjdGlvbigpIHtcXG4gIC8vIHRoZSBjdXJyZW50L25leHQgcGF0dGVybiBpcyBjb3BpZWQgZnJvbSByZWR1eCdzIGNyZWF0ZVN0b3JlIGNvZGUuXFxuICAvLyBUT0RPOiByZWZhY3RvcitleHBvc2UgdGhhdCBjb2RlIHRvIGJlIHJldXNhYmxlIGhlcmU/XFxuICB2YXIgY3VycmVudCA9IFtdO1xcbiAgdmFyIG5leHQgPSBbXTtcXG5cXG4gIHJldHVybiB7XFxuICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcXG4gICAgICBuZXh0ID0gQ0xFQVJFRDtcXG4gICAgICBjdXJyZW50ID0gQ0xFQVJFRDtcXG4gICAgfSxcXG4gICAgbm90aWZ5OiBmdW5jdGlvbiBub3RpZnkoKSB7XFxuICAgICAgdmFyIGxpc3RlbmVycyA9IGN1cnJlbnQgPSBuZXh0O1xcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBsaXN0ZW5lcnNbaV0oKTtcXG4gICAgICB9XFxuICAgIH0sXFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgIHJldHVybiBuZXh0O1xcbiAgICB9LFxcbiAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xcbiAgICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xcbiAgICAgIGlmIChuZXh0ID09PSBjdXJyZW50KSBuZXh0ID0gY3VycmVudC5zbGljZSgpO1xcbiAgICAgIG5leHQucHVzaChsaXN0ZW5lcik7XFxuXFxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xcbiAgICAgICAgaWYgKCFpc1N1YnNjcmliZWQgfHwgY3VycmVudCA9PT0gQ0xFQVJFRCkgcmV0dXJuO1xcbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XFxuXFxuICAgICAgICBpZiAobmV4dCA9PT0gY3VycmVudCkgbmV4dCA9IGN1cnJlbnQuc2xpY2UoKTtcXG4gICAgICAgIG5leHQuc3BsaWNlKG5leHQuaW5kZXhPZihsaXN0ZW5lciksIDEpO1xcbiAgICAgIH07XFxuICAgIH1cXG4gIH07XFxufVxcblxcbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoKSB7XFxuICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oc3RvcmUsIHBhcmVudFN1Yiwgb25TdGF0ZUNoYW5nZSkge1xcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3Vic2NyaXB0aW9uKTtcXG5cXG4gICAgdGhpcy5zdG9yZSA9IHN0b3JlO1xcbiAgICB0aGlzLnBhcmVudFN1YiA9IHBhcmVudFN1YjtcXG4gICAgdGhpcy5vblN0YXRlQ2hhbmdlID0gb25TdGF0ZUNoYW5nZTtcXG4gICAgdGhpcy51bnN1YnNjcmliZSA9IG51bGw7XFxuICAgIHRoaXMubGlzdGVuZXJzID0gbnVsbExpc3RlbmVycztcXG4gIH1cXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkTmVzdGVkU3ViID0gZnVuY3Rpb24gYWRkTmVzdGVkU3ViKGxpc3RlbmVyKSB7XFxuICAgIHRoaXMudHJ5U3Vic2NyaWJlKCk7XFxuICAgIHJldHVybiB0aGlzLmxpc3RlbmVycy5zdWJzY3JpYmUobGlzdGVuZXIpO1xcbiAgfTtcXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUubm90aWZ5TmVzdGVkU3VicyA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnMoKSB7XFxuICAgIHRoaXMubGlzdGVuZXJzLm5vdGlmeSgpO1xcbiAgfTtcXG5cXG4gIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuaXNTdWJzY3JpYmVkID0gZnVuY3Rpb24gaXNTdWJzY3JpYmVkKCkge1xcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnVuc3Vic2NyaWJlKTtcXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIHRyeVN1YnNjcmliZSgpIHtcXG4gICAgaWYgKCF0aGlzLnVuc3Vic2NyaWJlKSB7XFxuICAgICAgdGhpcy51bnN1YnNjcmliZSA9IHRoaXMucGFyZW50U3ViID8gdGhpcy5wYXJlbnRTdWIuYWRkTmVzdGVkU3ViKHRoaXMub25TdGF0ZUNoYW5nZSkgOiB0aGlzLnN0b3JlLnN1YnNjcmliZSh0aGlzLm9uU3RhdGVDaGFuZ2UpO1xcblxcbiAgICAgIHRoaXMubGlzdGVuZXJzID0gY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uKCk7XFxuICAgIH1cXG4gIH07XFxuXFxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVVuc3Vic2NyaWJlID0gZnVuY3Rpb24gdHJ5VW5zdWJzY3JpYmUoKSB7XFxuICAgIGlmICh0aGlzLnVuc3Vic2NyaWJlKSB7XFxuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUgPSBudWxsO1xcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNsZWFyKCk7XFxuICAgICAgdGhpcy5saXN0ZW5lcnMgPSBudWxsTGlzdGVuZXJzO1xcbiAgICB9XFxuICB9O1xcblxcbiAgcmV0dXJuIFN1YnNjcmlwdGlvbjtcXG59KCk7XFxuXFxuXFxuXFxuLyoqKi8gfSksXFxuLyogMjAwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgY3JlYXRlQ29ubmVjdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NvbXBvbmVudHNfY29ubmVjdEFkdmFuY2VkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDcyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX191dGlsc19zaGFsbG93RXF1YWxfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAxKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19tYXBEaXNwYXRjaFRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjAyKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19tYXBTdGF0ZVRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjA4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19tZXJnZVByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwOSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fc2VsZWN0b3JGYWN0b3J5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIxMCk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxuLypcXG4gIGNvbm5lY3QgaXMgYSBmYWNhZGUgb3ZlciBjb25uZWN0QWR2YW5jZWQuIEl0IHR1cm5zIGl0cyBhcmdzIGludG8gYSBjb21wYXRpYmxlXFxuICBzZWxlY3RvckZhY3RvcnksIHdoaWNoIGhhcyB0aGUgc2lnbmF0dXJlOlxcblxcbiAgICAoZGlzcGF0Y2gsIG9wdGlvbnMpID0+IChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykgPT4gbmV4dEZpbmFsUHJvcHNcXG4gIFxcbiAgY29ubmVjdCBwYXNzZXMgaXRzIGFyZ3MgdG8gY29ubmVjdEFkdmFuY2VkIGFzIG9wdGlvbnMsIHdoaWNoIHdpbGwgaW4gdHVybiBwYXNzIHRoZW0gdG9cXG4gIHNlbGVjdG9yRmFjdG9yeSBlYWNoIHRpbWUgYSBDb25uZWN0IGNvbXBvbmVudCBpbnN0YW5jZSBpcyBpbnN0YW50aWF0ZWQgb3IgaG90IHJlbG9hZGVkLlxcblxcbiAgc2VsZWN0b3JGYWN0b3J5IHJldHVybnMgYSBmaW5hbCBwcm9wcyBzZWxlY3RvciBmcm9tIGl0cyBtYXBTdGF0ZVRvUHJvcHMsXFxuICBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVzLCBtZXJnZVByb3BzLFxcbiAgbWVyZ2VQcm9wc0ZhY3RvcmllcywgYW5kIHB1cmUgYXJncy5cXG5cXG4gIFRoZSByZXN1bHRpbmcgZmluYWwgcHJvcHMgc2VsZWN0b3IgaXMgY2FsbGVkIGJ5IHRoZSBDb25uZWN0IGNvbXBvbmVudCBpbnN0YW5jZSB3aGVuZXZlclxcbiAgaXQgcmVjZWl2ZXMgbmV3IHByb3BzIG9yIHN0b3JlIHN0YXRlLlxcbiAqL1xcblxcbmZ1bmN0aW9uIG1hdGNoKGFyZywgZmFjdG9yaWVzLCBuYW1lKSB7XFxuICBmb3IgKHZhciBpID0gZmFjdG9yaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XFxuICAgIHZhciByZXN1bHQgPSBmYWN0b3JpZXNbaV0oYXJnKTtcXG4gICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcXG4gIH1cXG5cXG4gIHJldHVybiBmdW5jdGlvbiAoZGlzcGF0Y2gsIG9wdGlvbnMpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIG9mIHR5cGUgJyArIHR5cGVvZiBhcmcgKyAnIGZvciAnICsgbmFtZSArICcgYXJndW1lbnQgd2hlbiBjb25uZWN0aW5nIGNvbXBvbmVudCAnICsgb3B0aW9ucy53cmFwcGVkQ29tcG9uZW50TmFtZSArICcuJyk7XFxuICB9O1xcbn1cXG5cXG5mdW5jdGlvbiBzdHJpY3RFcXVhbChhLCBiKSB7XFxuICByZXR1cm4gYSA9PT0gYjtcXG59XFxuXFxuLy8gY3JlYXRlQ29ubmVjdCB3aXRoIGRlZmF1bHQgYXJncyBidWlsZHMgdGhlICdvZmZpY2lhbCcgY29ubmVjdCBiZWhhdmlvci4gQ2FsbGluZyBpdCB3aXRoXFxuLy8gZGlmZmVyZW50IG9wdGlvbnMgb3BlbnMgdXAgc29tZSB0ZXN0aW5nIGFuZCBleHRlbnNpYmlsaXR5IHNjZW5hcmlvc1xcbmZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3QoKSB7XFxuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXFxuICAgICAgX3JlZiRjb25uZWN0SE9DID0gX3JlZi5jb25uZWN0SE9DLFxcbiAgICAgIGNvbm5lY3RIT0MgPSBfcmVmJGNvbm5lY3RIT0MgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY29tcG9uZW50c19jb25uZWN0QWR2YW5jZWRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJGNvbm5lY3RIT0MsXFxuICAgICAgX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID0gX3JlZi5tYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsXFxuICAgICAgbWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzID0gX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX21hcFN0YXRlVG9Qcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYkbWFwU3RhdGVUb1Byb3BzRixcXG4gICAgICBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPSBfcmVmLm1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyxcXG4gICAgICBtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMgPSBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fbWFwRGlzcGF0Y2hUb1Byb3BzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZiRtYXBEaXNwYXRjaFRvUHJvLFxcbiAgICAgIF9yZWYkbWVyZ2VQcm9wc0ZhY3RvciA9IF9yZWYubWVyZ2VQcm9wc0ZhY3RvcmllcyxcXG4gICAgICBtZXJnZVByb3BzRmFjdG9yaWVzID0gX3JlZiRtZXJnZVByb3BzRmFjdG9yID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX21lcmdlUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJG1lcmdlUHJvcHNGYWN0b3IsXFxuICAgICAgX3JlZiRzZWxlY3RvckZhY3RvcnkgPSBfcmVmLnNlbGVjdG9yRmFjdG9yeSxcXG4gICAgICBzZWxlY3RvckZhY3RvcnkgPSBfcmVmJHNlbGVjdG9yRmFjdG9yeSA9PT0gdW5kZWZpbmVkID8gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X19zZWxlY3RvckZhY3RvcnlfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10gOiBfcmVmJHNlbGVjdG9yRmFjdG9yeTtcXG5cXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzKSB7XFxuICAgIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDoge30sXFxuICAgICAgICBfcmVmMiRwdXJlID0gX3JlZjIucHVyZSxcXG4gICAgICAgIHB1cmUgPSBfcmVmMiRwdXJlID09PSB1bmRlZmluZWQgPyB0cnVlIDogX3JlZjIkcHVyZSxcXG4gICAgICAgIF9yZWYyJGFyZVN0YXRlc0VxdWFsID0gX3JlZjIuYXJlU3RhdGVzRXF1YWwsXFxuICAgICAgICBhcmVTdGF0ZXNFcXVhbCA9IF9yZWYyJGFyZVN0YXRlc0VxdWFsID09PSB1bmRlZmluZWQgPyBzdHJpY3RFcXVhbCA6IF9yZWYyJGFyZVN0YXRlc0VxdWFsLFxcbiAgICAgICAgX3JlZjIkYXJlT3duUHJvcHNFcXVhID0gX3JlZjIuYXJlT3duUHJvcHNFcXVhbCxcXG4gICAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmMiRhcmVPd25Qcm9wc0VxdWEgPT09IHVuZGVmaW5lZCA/IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbHNfc2hhbGxvd0VxdWFsX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dIDogX3JlZjIkYXJlT3duUHJvcHNFcXVhLFxcbiAgICAgICAgX3JlZjIkYXJlU3RhdGVQcm9wc0VxID0gX3JlZjIuYXJlU3RhdGVQcm9wc0VxdWFsLFxcbiAgICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZjIkYXJlU3RhdGVQcm9wc0VxID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZVN0YXRlUHJvcHNFcSxcXG4gICAgICAgIF9yZWYyJGFyZU1lcmdlZFByb3BzRSA9IF9yZWYyLmFyZU1lcmdlZFByb3BzRXF1YWwsXFxuICAgICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsID0gX3JlZjIkYXJlTWVyZ2VkUHJvcHNFID09PSB1bmRlZmluZWQgPyBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxzX3NoYWxsb3dFcXVhbF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA6IF9yZWYyJGFyZU1lcmdlZFByb3BzRSxcXG4gICAgICAgIGV4dHJhT3B0aW9ucyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmMiwgWydwdXJlJywgJ2FyZVN0YXRlc0VxdWFsJywgJ2FyZU93blByb3BzRXF1YWwnLCAnYXJlU3RhdGVQcm9wc0VxdWFsJywgJ2FyZU1lcmdlZFByb3BzRXF1YWwnXSk7XFxuXFxuICAgIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gbWF0Y2gobWFwU3RhdGVUb1Byb3BzLCBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsICdtYXBTdGF0ZVRvUHJvcHMnKTtcXG4gICAgdmFyIGluaXRNYXBEaXNwYXRjaFRvUHJvcHMgPSBtYXRjaChtYXBEaXNwYXRjaFRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcywgJ21hcERpc3BhdGNoVG9Qcm9wcycpO1xcbiAgICB2YXIgaW5pdE1lcmdlUHJvcHMgPSBtYXRjaChtZXJnZVByb3BzLCBtZXJnZVByb3BzRmFjdG9yaWVzLCAnbWVyZ2VQcm9wcycpO1xcblxcbiAgICByZXR1cm4gY29ubmVjdEhPQyhzZWxlY3RvckZhY3RvcnksIF9leHRlbmRzKHtcXG4gICAgICAvLyB1c2VkIGluIGVycm9yIG1lc3NhZ2VzXFxuICAgICAgbWV0aG9kTmFtZTogJ2Nvbm5lY3QnLFxcblxcbiAgICAgIC8vIHVzZWQgdG8gY29tcHV0ZSBDb25uZWN0J3MgZGlzcGxheU5hbWUgZnJvbSB0aGUgd3JhcHBlZCBjb21wb25lbnQncyBkaXNwbGF5TmFtZS5cXG4gICAgICBnZXREaXNwbGF5TmFtZTogZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUobmFtZSkge1xcbiAgICAgICAgcmV0dXJuICdDb25uZWN0KCcgKyBuYW1lICsgJyknO1xcbiAgICAgIH0sXFxuXFxuICAgICAgLy8gaWYgbWFwU3RhdGVUb1Byb3BzIGlzIGZhbHN5LCB0aGUgQ29ubmVjdCBjb21wb25lbnQgZG9lc24ndCBzdWJzY3JpYmUgdG8gc3RvcmUgc3RhdGUgY2hhbmdlc1xcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogQm9vbGVhbihtYXBTdGF0ZVRvUHJvcHMpLFxcblxcbiAgICAgIC8vIHBhc3NlZCB0aHJvdWdoIHRvIHNlbGVjdG9yRmFjdG9yeVxcbiAgICAgIGluaXRNYXBTdGF0ZVRvUHJvcHM6IGluaXRNYXBTdGF0ZVRvUHJvcHMsXFxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wczogaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcXG4gICAgICBpbml0TWVyZ2VQcm9wczogaW5pdE1lcmdlUHJvcHMsXFxuICAgICAgcHVyZTogcHVyZSxcXG4gICAgICBhcmVTdGF0ZXNFcXVhbDogYXJlU3RhdGVzRXF1YWwsXFxuICAgICAgYXJlT3duUHJvcHNFcXVhbDogYXJlT3duUHJvcHNFcXVhbCxcXG4gICAgICBhcmVTdGF0ZVByb3BzRXF1YWw6IGFyZVN0YXRlUHJvcHNFcXVhbCxcXG4gICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsOiBhcmVNZXJnZWRQcm9wc0VxdWFsXFxuXFxuICAgIH0sIGV4dHJhT3B0aW9ucykpO1xcbiAgfTtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdCgpKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHNoYWxsb3dFcXVhbDtcXG52YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcXG5cXG5mdW5jdGlvbiBpcyh4LCB5KSB7XFxuICBpZiAoeCA9PT0geSkge1xcbiAgICByZXR1cm4geCAhPT0gMCB8fCB5ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geTtcXG4gIH0gZWxzZSB7XFxuICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XFxuICBpZiAoaXMob2JqQSwgb2JqQikpIHJldHVybiB0cnVlO1xcblxcbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XFxuICAgIHJldHVybiBmYWxzZTtcXG4gIH1cXG5cXG4gIHZhciBrZXlzQSA9IE9iamVjdC5rZXlzKG9iakEpO1xcbiAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XFxuXFxuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpIHJldHVybiBmYWxzZTtcXG5cXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcXG4gICAgaWYgKCFoYXNPd24uY2FsbChvYmpCLCBrZXlzQVtpXSkgfHwgIWlzKG9iakFba2V5c0FbaV1dLCBvYmpCW2tleXNBW2ldXSkpIHtcXG4gICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gIH1cXG5cXG4gIHJldHVybiB0cnVlO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc09iamVjdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc2KTtcXG5cXG5cXG5cXG5mdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbihtYXBEaXNwYXRjaFRvUHJvcHMpIHtcXG4gIHJldHVybiB0eXBlb2YgbWFwRGlzcGF0Y2hUb1Byb3BzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYlxcXCIgLyogd3JhcE1hcFRvUHJvcHNGdW5jICovXSkobWFwRGlzcGF0Y2hUb1Byb3BzLCAnbWFwRGlzcGF0Y2hUb1Byb3BzJykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc01pc3NpbmcobWFwRGlzcGF0Y2hUb1Byb3BzKSB7XFxuICByZXR1cm4gIW1hcERpc3BhdGNoVG9Qcm9wcyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcXG4gICAgcmV0dXJuIHsgZGlzcGF0Y2g6IGRpc3BhdGNoIH07XFxuICB9KSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuZnVuY3Rpb24gd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzT2JqZWN0KG1hcERpc3BhdGNoVG9Qcm9wcykge1xcbiAgcmV0dXJuIG1hcERpc3BhdGNoVG9Qcm9wcyAmJiB0eXBlb2YgbWFwRGlzcGF0Y2hUb1Byb3BzID09PSAnb2JqZWN0JyA/IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3dyYXBNYXBUb1Byb3BzX19bXFxcImFcXFwiIC8qIHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQgKi9dKShmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcXG4gICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkobWFwRGlzcGF0Y2hUb1Byb3BzLCBkaXNwYXRjaCk7XFxuICB9KSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoW3doZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9uLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNPYmplY3RdKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqLyhmdW5jdGlvbihnbG9iYWwsIG1vZHVsZSkgey8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3BvbnlmaWxsX2pzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIwNCk7XFxuLyogZ2xvYmFsIHdpbmRvdyAqL1xcblxcblxcbnZhciByb290O1xcblxcbmlmICh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSBzZWxmO1xcbn0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcXG4gIHJvb3QgPSB3aW5kb3c7XFxufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xcbiAgcm9vdCA9IGdsb2JhbDtcXG59IGVsc2UgaWYgKHRydWUpIHtcXG4gIHJvb3QgPSBtb2R1bGU7XFxufSBlbHNlIHtcXG4gIHJvb3QgPSBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xcbn1cXG5cXG52YXIgcmVzdWx0ID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fcG9ueWZpbGxfanNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHJvb3QpO1xcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKHJlc3VsdCk7XFxuXFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMjgpLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyKShtb2R1bGUpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMDQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHN5bWJvbE9ic2VydmFibGVQb255ZmlsbDtcXG5mdW5jdGlvbiBzeW1ib2xPYnNlcnZhYmxlUG9ueWZpbGwocm9vdCkge1xcblxcdHZhciByZXN1bHQ7XFxuXFx0dmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xcblxcblxcdGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XFxuXFx0XFx0aWYgKFN5bWJvbC5vYnNlcnZhYmxlKSB7XFxuXFx0XFx0XFx0cmVzdWx0ID0gU3ltYm9sLm9ic2VydmFibGU7XFxuXFx0XFx0fSBlbHNlIHtcXG5cXHRcXHRcXHRyZXN1bHQgPSBTeW1ib2woJ29ic2VydmFibGUnKTtcXG5cXHRcXHRcXHRTeW1ib2wub2JzZXJ2YWJsZSA9IHJlc3VsdDtcXG5cXHRcXHR9XFxuXFx0fSBlbHNlIHtcXG5cXHRcXHRyZXN1bHQgPSAnQEBvYnNlcnZhYmxlJztcXG5cXHR9XFxuXFxuXFx0cmV0dXJuIHJlc3VsdDtcXG59O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDIwNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDczKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2xvZGFzaF9lc19pc1BsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI0KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc0KTtcXG5cXG5cXG5cXG5cXG5mdW5jdGlvbiBnZXRVbmRlZmluZWRTdGF0ZUVycm9yTWVzc2FnZShrZXksIGFjdGlvbikge1xcbiAgdmFyIGFjdGlvblR5cGUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGU7XFxuICB2YXIgYWN0aW9uTmFtZSA9IGFjdGlvblR5cGUgJiYgJ1xcXCInICsgYWN0aW9uVHlwZS50b1N0cmluZygpICsgJ1xcXCInIHx8ICdhbiBhY3Rpb24nO1xcblxcbiAgcmV0dXJuICdHaXZlbiBhY3Rpb24gJyArIGFjdGlvbk5hbWUgKyAnLCByZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkLiAnICsgJ1RvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZS4gJyArICdJZiB5b3Ugd2FudCB0aGlzIHJlZHVjZXIgdG8gaG9sZCBubyB2YWx1ZSwgeW91IGNhbiByZXR1cm4gbnVsbCBpbnN0ZWFkIG9mIHVuZGVmaW5lZC4nO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKGlucHV0U3RhdGUsIHJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSkge1xcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xcbiAgdmFyIGFyZ3VtZW50TmFtZSA9IGFjdGlvbiAmJiBhY3Rpb24udHlwZSA9PT0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jcmVhdGVTdG9yZV9fW1xcXCJhXFxcIiAvKiBBY3Rpb25UeXBlcyAqL10uSU5JVCA/ICdwcmVsb2FkZWRTdGF0ZSBhcmd1bWVudCBwYXNzZWQgdG8gY3JlYXRlU3RvcmUnIDogJ3ByZXZpb3VzIHN0YXRlIHJlY2VpdmVkIGJ5IHRoZSByZWR1Y2VyJztcXG5cXG4gIGlmIChyZWR1Y2VyS2V5cy5sZW5ndGggPT09IDApIHtcXG4gICAgcmV0dXJuICdTdG9yZSBkb2VzIG5vdCBoYXZlIGEgdmFsaWQgcmVkdWNlci4gTWFrZSBzdXJlIHRoZSBhcmd1bWVudCBwYXNzZWQgJyArICd0byBjb21iaW5lUmVkdWNlcnMgaXMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgcmVkdWNlcnMuJztcXG4gIH1cXG5cXG4gIGlmICghT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9sb2Rhc2hfZXNfaXNQbGFpbk9iamVjdF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoaW5wdXRTdGF0ZSkpIHtcXG4gICAgcmV0dXJuICdUaGUgJyArIGFyZ3VtZW50TmFtZSArICcgaGFzIHVuZXhwZWN0ZWQgdHlwZSBvZiBcXFwiJyArIHt9LnRvU3RyaW5nLmNhbGwoaW5wdXRTdGF0ZSkubWF0Y2goL1xcXFxzKFthLXp8QS1aXSspLylbMV0gKyAnXFxcIi4gRXhwZWN0ZWQgYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0IHdpdGggdGhlIGZvbGxvd2luZyAnICsgKCdrZXlzOiBcXFwiJyArIHJlZHVjZXJLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiJyk7XFxuICB9XFxuXFxuICB2YXIgdW5leHBlY3RlZEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dFN0YXRlKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xcbiAgICByZXR1cm4gIXJlZHVjZXJzLmhhc093blByb3BlcnR5KGtleSkgJiYgIXVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldO1xcbiAgfSk7XFxuXFxuICB1bmV4cGVjdGVkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcXG4gICAgdW5leHBlY3RlZEtleUNhY2hlW2tleV0gPSB0cnVlO1xcbiAgfSk7XFxuXFxuICBpZiAodW5leHBlY3RlZEtleXMubGVuZ3RoID4gMCkge1xcbiAgICByZXR1cm4gJ1VuZXhwZWN0ZWQgJyArICh1bmV4cGVjdGVkS2V5cy5sZW5ndGggPiAxID8gJ2tleXMnIDogJ2tleScpICsgJyAnICsgKCdcXFwiJyArIHVuZXhwZWN0ZWRLZXlzLmpvaW4oJ1xcXCIsIFxcXCInKSArICdcXFwiIGZvdW5kIGluICcgKyBhcmd1bWVudE5hbWUgKyAnLiAnKSArICdFeHBlY3RlZCB0byBmaW5kIG9uZSBvZiB0aGUga25vd24gcmVkdWNlciBrZXlzIGluc3RlYWQ6ICcgKyAoJ1xcXCInICsgcmVkdWNlcktleXMuam9pbignXFxcIiwgXFxcIicpICsgJ1xcXCIuIFVuZXhwZWN0ZWQga2V5cyB3aWxsIGJlIGlnbm9yZWQuJyk7XFxuICB9XFxufVxcblxcbmZ1bmN0aW9uIGFzc2VydFJlZHVjZXJTaGFwZShyZWR1Y2Vycykge1xcbiAgT2JqZWN0LmtleXMocmVkdWNlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICB2YXIgcmVkdWNlciA9IHJlZHVjZXJzW2tleV07XFxuICAgIHZhciBpbml0aWFsU3RhdGUgPSByZWR1Y2VyKHVuZGVmaW5lZCwgeyB0eXBlOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2NyZWF0ZVN0b3JlX19bXFxcImFcXFwiIC8qIEFjdGlvblR5cGVzICovXS5JTklUIH0pO1xcblxcbiAgICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgXFxcIicgKyBrZXkgKyAnXFxcIiByZXR1cm5lZCB1bmRlZmluZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiAnICsgJ0lmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlIHJlZHVjZXIgaXMgdW5kZWZpbmVkLCB5b3UgbXVzdCAnICsgJ2V4cGxpY2l0bHkgcmV0dXJuIHRoZSBpbml0aWFsIHN0YXRlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgJyArICdub3QgYmUgdW5kZWZpbmVkLiBJZiB5b3UgZG9uXFxcXCd0IHdhbnQgdG8gc2V0IGEgdmFsdWUgZm9yIHRoaXMgcmVkdWNlciwgJyArICd5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLicpO1xcbiAgICB9XFxuXFxuICAgIHZhciB0eXBlID0gJ0BAcmVkdXgvUFJPQkVfVU5LTk9XTl9BQ1RJT05fJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KS5zcGxpdCgnJykuam9pbignLicpO1xcbiAgICBpZiAodHlwZW9mIHJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6IHR5cGUgfSkgPT09ICd1bmRlZmluZWQnKSB7XFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZWR1Y2VyIFxcXCInICsga2V5ICsgJ1xcXCIgcmV0dXJuZWQgdW5kZWZpbmVkIHdoZW4gcHJvYmVkIHdpdGggYSByYW5kb20gdHlwZS4gJyArICgnRG9uXFxcXCd0IHRyeSB0byBoYW5kbGUgJyArIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fY3JlYXRlU3RvcmVfX1tcXFwiYVxcXCIgLyogQWN0aW9uVHlwZXMgKi9dLklOSVQgKyAnIG9yIG90aGVyIGFjdGlvbnMgaW4gXFxcInJlZHV4LypcXFwiICcpICsgJ25hbWVzcGFjZS4gVGhleSBhcmUgY29uc2lkZXJlZCBwcml2YXRlLiBJbnN0ZWFkLCB5b3UgbXVzdCByZXR1cm4gdGhlICcgKyAnY3VycmVudCBzdGF0ZSBmb3IgYW55IHVua25vd24gYWN0aW9ucywgdW5sZXNzIGl0IGlzIHVuZGVmaW5lZCwgJyArICdpbiB3aGljaCBjYXNlIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgJyArICdhY3Rpb24gdHlwZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5IG5vdCBiZSB1bmRlZmluZWQsIGJ1dCBjYW4gYmUgbnVsbC4nKTtcXG4gICAgfVxcbiAgfSk7XFxufVxcblxcbi8qKlxcbiAqIFR1cm5zIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCByZWR1Y2VyIGZ1bmN0aW9ucywgaW50byBhIHNpbmdsZVxcbiAqIHJlZHVjZXIgZnVuY3Rpb24uIEl0IHdpbGwgY2FsbCBldmVyeSBjaGlsZCByZWR1Y2VyLCBhbmQgZ2F0aGVyIHRoZWlyIHJlc3VsdHNcXG4gKiBpbnRvIGEgc2luZ2xlIHN0YXRlIG9iamVjdCwgd2hvc2Uga2V5cyBjb3JyZXNwb25kIHRvIHRoZSBrZXlzIG9mIHRoZSBwYXNzZWRcXG4gKiByZWR1Y2VyIGZ1bmN0aW9ucy5cXG4gKlxcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWR1Y2VycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGNvcnJlc3BvbmQgdG8gZGlmZmVyZW50XFxuICogcmVkdWNlciBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNvbWJpbmVkIGludG8gb25lLiBPbmUgaGFuZHkgd2F5IHRvIG9idGFpblxcbiAqIGl0IGlzIHRvIHVzZSBFUzYgYGltcG9ydCAqIGFzIHJlZHVjZXJzYCBzeW50YXguIFRoZSByZWR1Y2VycyBtYXkgbmV2ZXIgcmV0dXJuXFxuICogdW5kZWZpbmVkIGZvciBhbnkgYWN0aW9uLiBJbnN0ZWFkLCB0aGV5IHNob3VsZCByZXR1cm4gdGhlaXIgaW5pdGlhbCBzdGF0ZVxcbiAqIGlmIHRoZSBzdGF0ZSBwYXNzZWQgdG8gdGhlbSB3YXMgdW5kZWZpbmVkLCBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgZm9yIGFueVxcbiAqIHVucmVjb2duaXplZCBhY3Rpb24uXFxuICpcXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgcmVkdWNlciBmdW5jdGlvbiB0aGF0IGludm9rZXMgZXZlcnkgcmVkdWNlciBpbnNpZGUgdGhlXFxuICogcGFzc2VkIG9iamVjdCwgYW5kIGJ1aWxkcyBhIHN0YXRlIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlLlxcbiAqL1xcbmZ1bmN0aW9uIGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2Vycykge1xcbiAgdmFyIHJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMocmVkdWNlcnMpO1xcbiAgdmFyIGZpbmFsUmVkdWNlcnMgPSB7fTtcXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmVkdWNlcktleXMubGVuZ3RoOyBpKyspIHtcXG4gICAgdmFyIGtleSA9IHJlZHVjZXJLZXlzW2ldO1xcblxcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICAgIGlmICh0eXBlb2YgcmVkdWNlcnNba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcXG4gICAgICAgIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX3V0aWxzX3dhcm5pbmdfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKCdObyByZWR1Y2VyIHByb3ZpZGVkIGZvciBrZXkgXFxcIicgKyBrZXkgKyAnXFxcIicpO1xcbiAgICAgIH1cXG4gICAgfVxcblxcbiAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09ICdmdW5jdGlvbicpIHtcXG4gICAgICBmaW5hbFJlZHVjZXJzW2tleV0gPSByZWR1Y2Vyc1trZXldO1xcbiAgICB9XFxuICB9XFxuICB2YXIgZmluYWxSZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKGZpbmFsUmVkdWNlcnMpO1xcblxcbiAgdmFyIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHZvaWQgMDtcXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XFxuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZSA9IHt9O1xcbiAgfVxcblxcbiAgdmFyIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSB2b2lkIDA7XFxuICB0cnkge1xcbiAgICBhc3NlcnRSZWR1Y2VyU2hhcGUoZmluYWxSZWR1Y2Vycyk7XFxuICB9IGNhdGNoIChlKSB7XFxuICAgIHNoYXBlQXNzZXJ0aW9uRXJyb3IgPSBlO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbWJpbmF0aW9uKCkge1xcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xcblxcbiAgICBpZiAoc2hhcGVBc3NlcnRpb25FcnJvcikge1xcbiAgICAgIHRocm93IHNoYXBlQXNzZXJ0aW9uRXJyb3I7XFxuICAgIH1cXG5cXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcXG4gICAgICB2YXIgd2FybmluZ01lc3NhZ2UgPSBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKHN0YXRlLCBmaW5hbFJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSk7XFxuICAgICAgaWYgKHdhcm5pbmdNZXNzYWdlKSB7XFxuICAgICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh3YXJuaW5nTWVzc2FnZSk7XFxuICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XFxuICAgIHZhciBuZXh0U3RhdGUgPSB7fTtcXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGZpbmFsUmVkdWNlcktleXMubGVuZ3RoOyBfaSsrKSB7XFxuICAgICAgdmFyIF9rZXkgPSBmaW5hbFJlZHVjZXJLZXlzW19pXTtcXG4gICAgICB2YXIgcmVkdWNlciA9IGZpbmFsUmVkdWNlcnNbX2tleV07XFxuICAgICAgdmFyIHByZXZpb3VzU3RhdGVGb3JLZXkgPSBzdGF0ZVtfa2V5XTtcXG4gICAgICB2YXIgbmV4dFN0YXRlRm9yS2V5ID0gcmVkdWNlcihwcmV2aW91c1N0YXRlRm9yS2V5LCBhY3Rpb24pO1xcbiAgICAgIGlmICh0eXBlb2YgbmV4dFN0YXRlRm9yS2V5ID09PSAndW5kZWZpbmVkJykge1xcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IGdldFVuZGVmaW5lZFN0YXRlRXJyb3JNZXNzYWdlKF9rZXksIGFjdGlvbik7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcXG4gICAgICB9XFxuICAgICAgbmV4dFN0YXRlW19rZXldID0gbmV4dFN0YXRlRm9yS2V5O1xcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcXG4gICAgfVxcbiAgICByZXR1cm4gaGFzQ2hhbmdlZCA/IG5leHRTdGF0ZSA6IHN0YXRlO1xcbiAgfTtcXG59XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovfS5jYWxsKF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18oMSkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDIwNiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gYmluZEFjdGlvbkNyZWF0b3JzO1xcbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xcbiAgICByZXR1cm4gZGlzcGF0Y2goYWN0aW9uQ3JlYXRvci5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cykpO1xcbiAgfTtcXG59XFxuXFxuLyoqXFxuICogVHVybnMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgYWN0aW9uIGNyZWF0b3JzLCBpbnRvIGFuIG9iamVjdCB3aXRoIHRoZVxcbiAqIHNhbWUga2V5cywgYnV0IHdpdGggZXZlcnkgZnVuY3Rpb24gd3JhcHBlZCBpbnRvIGEgYGRpc3BhdGNoYCBjYWxsIHNvIHRoZXlcXG4gKiBtYXkgYmUgaW52b2tlZCBkaXJlY3RseS4gVGhpcyBpcyBqdXN0IGEgY29udmVuaWVuY2UgbWV0aG9kLCBhcyB5b3UgY2FuIGNhbGxcXG4gKiBgc3RvcmUuZGlzcGF0Y2goTXlBY3Rpb25DcmVhdG9ycy5kb1NvbWV0aGluZygpKWAgeW91cnNlbGYganVzdCBmaW5lLlxcbiAqXFxuICogRm9yIGNvbnZlbmllbmNlLCB5b3UgY2FuIGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQsXFxuICogYW5kIGdldCBhIGZ1bmN0aW9uIGluIHJldHVybi5cXG4gKlxcbiAqIEBwYXJhbSB7RnVuY3Rpb258T2JqZWN0fSBhY3Rpb25DcmVhdG9ycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGFyZSBhY3Rpb25cXG4gKiBjcmVhdG9yIGZ1bmN0aW9ucy4gT25lIGhhbmR5IHdheSB0byBvYnRhaW4gaXQgaXMgdG8gdXNlIEVTNiBgaW1wb3J0ICogYXNgXFxuICogc3ludGF4LiBZb3UgbWF5IGFsc28gcGFzcyBhIHNpbmdsZSBmdW5jdGlvbi5cXG4gKlxcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGRpc3BhdGNoIFRoZSBgZGlzcGF0Y2hgIGZ1bmN0aW9uIGF2YWlsYWJsZSBvbiB5b3VyIFJlZHV4XFxuICogc3RvcmUuXFxuICpcXG4gKiBAcmV0dXJucyB7RnVuY3Rpb258T2JqZWN0fSBUaGUgb2JqZWN0IG1pbWlja2luZyB0aGUgb3JpZ2luYWwgb2JqZWN0LCBidXQgd2l0aFxcbiAqIGV2ZXJ5IGFjdGlvbiBjcmVhdG9yIHdyYXBwZWQgaW50byB0aGUgYGRpc3BhdGNoYCBjYWxsLiBJZiB5b3UgcGFzc2VkIGFcXG4gKiBmdW5jdGlvbiBhcyBgYWN0aW9uQ3JlYXRvcnNgLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYWxzbyBiZSBhIHNpbmdsZVxcbiAqIGZ1bmN0aW9uLlxcbiAqL1xcbmZ1bmN0aW9uIGJpbmRBY3Rpb25DcmVhdG9ycyhhY3Rpb25DcmVhdG9ycywgZGlzcGF0Y2gpIHtcXG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgPT09ICdmdW5jdGlvbicpIHtcXG4gICAgcmV0dXJuIGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3JzLCBkaXNwYXRjaCk7XFxuICB9XFxuXFxuICBpZiAodHlwZW9mIGFjdGlvbkNyZWF0b3JzICE9PSAnb2JqZWN0JyB8fCBhY3Rpb25DcmVhdG9ycyA9PT0gbnVsbCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JpbmRBY3Rpb25DcmVhdG9ycyBleHBlY3RlZCBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbiwgaW5zdGVhZCByZWNlaXZlZCAnICsgKGFjdGlvbkNyZWF0b3JzID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGFjdGlvbkNyZWF0b3JzKSArICcuICcgKyAnRGlkIHlvdSB3cml0ZSBcXFwiaW1wb3J0IEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiIGluc3RlYWQgb2YgXFxcImltcG9ydCAqIGFzIEFjdGlvbkNyZWF0b3JzIGZyb21cXFwiPycpO1xcbiAgfVxcblxcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhY3Rpb25DcmVhdG9ycyk7XFxuICB2YXIgYm91bmRBY3Rpb25DcmVhdG9ycyA9IHt9O1xcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xcbiAgICB2YXIgYWN0aW9uQ3JlYXRvciA9IGFjdGlvbkNyZWF0b3JzW2tleV07XFxuICAgIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgIGJvdW5kQWN0aW9uQ3JlYXRvcnNba2V5XSA9IGJpbmRBY3Rpb25DcmVhdG9yKGFjdGlvbkNyZWF0b3IsIGRpc3BhdGNoKTtcXG4gICAgfVxcbiAgfVxcbiAgcmV0dXJuIGJvdW5kQWN0aW9uQ3JlYXRvcnM7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDIwNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IGRlZmF1bHQgKi9cXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb3NlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc1KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbi8qKlxcbiAqIENyZWF0ZXMgYSBzdG9yZSBlbmhhbmNlciB0aGF0IGFwcGxpZXMgbWlkZGxld2FyZSB0byB0aGUgZGlzcGF0Y2ggbWV0aG9kXFxuICogb2YgdGhlIFJlZHV4IHN0b3JlLiBUaGlzIGlzIGhhbmR5IGZvciBhIHZhcmlldHkgb2YgdGFza3MsIHN1Y2ggYXMgZXhwcmVzc2luZ1xcbiAqIGFzeW5jaHJvbm91cyBhY3Rpb25zIGluIGEgY29uY2lzZSBtYW5uZXIsIG9yIGxvZ2dpbmcgZXZlcnkgYWN0aW9uIHBheWxvYWQuXFxuICpcXG4gKiBTZWUgYHJlZHV4LXRodW5rYCBwYWNrYWdlIGFzIGFuIGV4YW1wbGUgb2YgdGhlIFJlZHV4IG1pZGRsZXdhcmUuXFxuICpcXG4gKiBCZWNhdXNlIG1pZGRsZXdhcmUgaXMgcG90ZW50aWFsbHkgYXN5bmNocm9ub3VzLCB0aGlzIHNob3VsZCBiZSB0aGUgZmlyc3RcXG4gKiBzdG9yZSBlbmhhbmNlciBpbiB0aGUgY29tcG9zaXRpb24gY2hhaW4uXFxuICpcXG4gKiBOb3RlIHRoYXQgZWFjaCBtaWRkbGV3YXJlIHdpbGwgYmUgZ2l2ZW4gdGhlIGBkaXNwYXRjaGAgYW5kIGBnZXRTdGF0ZWAgZnVuY3Rpb25zXFxuICogYXMgbmFtZWQgYXJndW1lbnRzLlxcbiAqXFxuICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gbWlkZGxld2FyZXMgVGhlIG1pZGRsZXdhcmUgY2hhaW4gdG8gYmUgYXBwbGllZC5cXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgc3RvcmUgZW5oYW5jZXIgYXBwbHlpbmcgdGhlIG1pZGRsZXdhcmUuXFxuICovXFxuZnVuY3Rpb24gYXBwbHlNaWRkbGV3YXJlKCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG1pZGRsZXdhcmVzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIG1pZGRsZXdhcmVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIChjcmVhdGVTdG9yZSkge1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xcbiAgICAgIHZhciBzdG9yZSA9IGNyZWF0ZVN0b3JlKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcik7XFxuICAgICAgdmFyIF9kaXNwYXRjaCA9IHN0b3JlLmRpc3BhdGNoO1xcbiAgICAgIHZhciBjaGFpbiA9IFtdO1xcblxcbiAgICAgIHZhciBtaWRkbGV3YXJlQVBJID0ge1xcbiAgICAgICAgZ2V0U3RhdGU6IHN0b3JlLmdldFN0YXRlLFxcbiAgICAgICAgZGlzcGF0Y2g6IGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xcbiAgICAgICAgICByZXR1cm4gX2Rpc3BhdGNoKGFjdGlvbik7XFxuICAgICAgICB9XFxuICAgICAgfTtcXG4gICAgICBjaGFpbiA9IG1pZGRsZXdhcmVzLm1hcChmdW5jdGlvbiAobWlkZGxld2FyZSkge1xcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmUobWlkZGxld2FyZUFQSSk7XFxuICAgICAgfSk7XFxuICAgICAgX2Rpc3BhdGNoID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19jb21wb3NlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLmFwcGx5KHVuZGVmaW5lZCwgY2hhaW4pKHN0b3JlLmRpc3BhdGNoKTtcXG5cXG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0b3JlLCB7XFxuICAgICAgICBkaXNwYXRjaDogX2Rpc3BhdGNoXFxuICAgICAgfSk7XFxuICAgIH07XFxuICB9O1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyMDggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNNaXNzaW5nICovXFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNzYpO1xcblxcblxcbmZ1bmN0aW9uIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc0Z1bmN0aW9uKG1hcFN0YXRlVG9Qcm9wcykge1xcbiAgcmV0dXJuIHR5cGVvZiBtYXBTdGF0ZVRvUHJvcHMgPT09ICdmdW5jdGlvbicgPyBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX193cmFwTWFwVG9Qcm9wc19fW1xcXCJiXFxcIiAvKiB3cmFwTWFwVG9Qcm9wc0Z1bmMgKi9dKShtYXBTdGF0ZVRvUHJvcHMsICdtYXBTdGF0ZVRvUHJvcHMnKSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuZnVuY3Rpb24gd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZyhtYXBTdGF0ZVRvUHJvcHMpIHtcXG4gIHJldHVybiAhbWFwU3RhdGVUb1Byb3BzID8gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fd3JhcE1hcFRvUHJvcHNfX1tcXFwiYVxcXCIgLyogd3JhcE1hcFRvUHJvcHNDb25zdGFudCAqL10pKGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIHt9O1xcbiAgfSkgOiB1bmRlZmluZWQ7XFxufVxcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKFt3aGVuTWFwU3RhdGVUb1Byb3BzSXNGdW5jdGlvbiwgd2hlbk1hcFN0YXRlVG9Qcm9wc0lzTWlzc2luZ10pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIwOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKHByb2Nlc3MpIHsvKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgZGVmYXVsdE1lcmdlUHJvcHMgKi9cXG4vKiB1bnVzZWQgaGFybW9ueSBleHBvcnQgd3JhcE1lcmdlUHJvcHNGdW5jICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbiAqL1xcbi8qIHVudXNlZCBoYXJtb255IGV4cG9ydCB3aGVuTWVyZ2VQcm9wc0lzT21pdHRlZCAqL1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDc3KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcblxcblxcbmZ1bmN0aW9uIGRlZmF1bHRNZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XFxuICByZXR1cm4gX2V4dGVuZHMoe30sIG93blByb3BzLCBzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzKTtcXG59XFxuXFxuZnVuY3Rpb24gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbml0TWVyZ2VQcm9wc1Byb3h5KGRpc3BhdGNoLCBfcmVmKSB7XFxuICAgIHZhciBkaXNwbGF5TmFtZSA9IF9yZWYuZGlzcGxheU5hbWUsXFxuICAgICAgICBwdXJlID0gX3JlZi5wdXJlLFxcbiAgICAgICAgYXJlTWVyZ2VkUHJvcHNFcXVhbCA9IF9yZWYuYXJlTWVyZ2VkUHJvcHNFcXVhbDtcXG5cXG4gICAgdmFyIGhhc1J1bk9uY2UgPSBmYWxzZTtcXG4gICAgdmFyIG1lcmdlZFByb3BzID0gdm9pZCAwO1xcblxcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VQcm9wc1Byb3h5KHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XFxuICAgICAgdmFyIG5leHRNZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xcblxcbiAgICAgIGlmIChoYXNSdW5PbmNlKSB7XFxuICAgICAgICBpZiAoIXB1cmUgfHwgIWFyZU1lcmdlZFByb3BzRXF1YWwobmV4dE1lcmdlZFByb3BzLCBtZXJnZWRQcm9wcykpIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xcbiAgICAgIH0gZWxzZSB7XFxuICAgICAgICBoYXNSdW5PbmNlID0gdHJ1ZTtcXG4gICAgICAgIG1lcmdlZFByb3BzID0gbmV4dE1lcmdlZFByb3BzO1xcblxcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3V0aWxzX3ZlcmlmeVBsYWluT2JqZWN0X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShtZXJnZWRQcm9wcywgZGlzcGxheU5hbWUsICdtZXJnZVByb3BzJyk7XFxuICAgICAgfVxcblxcbiAgICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gICAgfTtcXG4gIH07XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNGdW5jdGlvbihtZXJnZVByb3BzKSB7XFxuICByZXR1cm4gdHlwZW9mIG1lcmdlUHJvcHMgPT09ICdmdW5jdGlvbicgPyB3cmFwTWVyZ2VQcm9wc0Z1bmMobWVyZ2VQcm9wcykgOiB1bmRlZmluZWQ7XFxufVxcblxcbmZ1bmN0aW9uIHdoZW5NZXJnZVByb3BzSXNPbWl0dGVkKG1lcmdlUHJvcHMpIHtcXG4gIHJldHVybiAhbWVyZ2VQcm9wcyA/IGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIGRlZmF1bHRNZXJnZVByb3BzO1xcbiAgfSA6IHVuZGVmaW5lZDtcXG59XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoW3doZW5NZXJnZVByb3BzSXNGdW5jdGlvbiwgd2hlbk1lcmdlUHJvcHNJc09taXR0ZWRdKTtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwoX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXygxKSkpXFxuXFxuLyoqKi8gfSksXFxuLyogMjEwICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24ocHJvY2Vzcykgey8qIHVudXNlZCBoYXJtb255IGV4cG9ydCBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5ICovXFxuLyogdW51c2VkIGhhcm1vbnkgZXhwb3J0IHB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5ICovXFxuLyogaGFybW9ueSBleHBvcnQgKGltbXV0YWJsZSkgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gZmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX192ZXJpZnlTdWJzZWxlY3RvcnNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjExKTtcXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuXFxuXFxuZnVuY3Rpb24gaW1wdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgZGlzcGF0Y2gpIHtcXG4gIHJldHVybiBmdW5jdGlvbiBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3Ioc3RhdGUsIG93blByb3BzKSB7XFxuICAgIHJldHVybiBtZXJnZVByb3BzKG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpLCBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKSwgb3duUHJvcHMpO1xcbiAgfTtcXG59XFxuXFxuZnVuY3Rpb24gcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIGRpc3BhdGNoLCBfcmVmKSB7XFxuICB2YXIgYXJlU3RhdGVzRXF1YWwgPSBfcmVmLmFyZVN0YXRlc0VxdWFsLFxcbiAgICAgIGFyZU93blByb3BzRXF1YWwgPSBfcmVmLmFyZU93blByb3BzRXF1YWwsXFxuICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZi5hcmVTdGF0ZVByb3BzRXF1YWw7XFxuXFxuICB2YXIgaGFzUnVuQXRMZWFzdE9uY2UgPSBmYWxzZTtcXG4gIHZhciBzdGF0ZSA9IHZvaWQgMDtcXG4gIHZhciBvd25Qcm9wcyA9IHZvaWQgMDtcXG4gIHZhciBzdGF0ZVByb3BzID0gdm9pZCAwO1xcbiAgdmFyIGRpc3BhdGNoUHJvcHMgPSB2b2lkIDA7XFxuICB2YXIgbWVyZ2VkUHJvcHMgPSB2b2lkIDA7XFxuXFxuICBmdW5jdGlvbiBoYW5kbGVGaXJzdENhbGwoZmlyc3RTdGF0ZSwgZmlyc3RPd25Qcm9wcykge1xcbiAgICBzdGF0ZSA9IGZpcnN0U3RhdGU7XFxuICAgIG93blByb3BzID0gZmlyc3RPd25Qcm9wcztcXG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcbiAgICBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIGhhc1J1bkF0TGVhc3RPbmNlID0gdHJ1ZTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaGFuZGxlTmV3UHJvcHNBbmROZXdTdGF0ZSgpIHtcXG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcblxcbiAgICBpZiAobWFwRGlzcGF0Y2hUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBkaXNwYXRjaFByb3BzID0gbWFwRGlzcGF0Y2hUb1Byb3BzKGRpc3BhdGNoLCBvd25Qcm9wcyk7XFxuXFxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZU5ld1Byb3BzKCkge1xcbiAgICBpZiAobWFwU3RhdGVUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzKSBzdGF0ZVByb3BzID0gbWFwU3RhdGVUb1Byb3BzKHN0YXRlLCBvd25Qcm9wcyk7XFxuXFxuICAgIGlmIChtYXBEaXNwYXRjaFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMpIGRpc3BhdGNoUHJvcHMgPSBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKTtcXG5cXG4gICAgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgZnVuY3Rpb24gaGFuZGxlTmV3U3RhdGUoKSB7XFxuICAgIHZhciBuZXh0U3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xcbiAgICB2YXIgc3RhdGVQcm9wc0NoYW5nZWQgPSAhYXJlU3RhdGVQcm9wc0VxdWFsKG5leHRTdGF0ZVByb3BzLCBzdGF0ZVByb3BzKTtcXG4gICAgc3RhdGVQcm9wcyA9IG5leHRTdGF0ZVByb3BzO1xcblxcbiAgICBpZiAoc3RhdGVQcm9wc0NoYW5nZWQpIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XFxuXFxuICAgIHJldHVybiBtZXJnZWRQcm9wcztcXG4gIH1cXG5cXG4gIGZ1bmN0aW9uIGhhbmRsZVN1YnNlcXVlbnRDYWxscyhuZXh0U3RhdGUsIG5leHRPd25Qcm9wcykge1xcbiAgICB2YXIgcHJvcHNDaGFuZ2VkID0gIWFyZU93blByb3BzRXF1YWwobmV4dE93blByb3BzLCBvd25Qcm9wcyk7XFxuICAgIHZhciBzdGF0ZUNoYW5nZWQgPSAhYXJlU3RhdGVzRXF1YWwobmV4dFN0YXRlLCBzdGF0ZSk7XFxuICAgIHN0YXRlID0gbmV4dFN0YXRlO1xcbiAgICBvd25Qcm9wcyA9IG5leHRPd25Qcm9wcztcXG5cXG4gICAgaWYgKHByb3BzQ2hhbmdlZCAmJiBzdGF0ZUNoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wc0FuZE5ld1N0YXRlKCk7XFxuICAgIGlmIChwcm9wc0NoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wcygpO1xcbiAgICBpZiAoc3RhdGVDaGFuZ2VkKSByZXR1cm4gaGFuZGxlTmV3U3RhdGUoKTtcXG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xcbiAgfVxcblxcbiAgcmV0dXJuIGZ1bmN0aW9uIHB1cmVGaW5hbFByb3BzU2VsZWN0b3IobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpIHtcXG4gICAgcmV0dXJuIGhhc1J1bkF0TGVhc3RPbmNlID8gaGFuZGxlU3Vic2VxdWVudENhbGxzKG5leHRTdGF0ZSwgbmV4dE93blByb3BzKSA6IGhhbmRsZUZpcnN0Q2FsbChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcyk7XFxuICB9O1xcbn1cXG5cXG4vLyBUT0RPOiBBZGQgbW9yZSBjb21tZW50c1xcblxcbi8vIElmIHB1cmUgaXMgdHJ1ZSwgdGhlIHNlbGVjdG9yIHJldHVybmVkIGJ5IHNlbGVjdG9yRmFjdG9yeSB3aWxsIG1lbW9pemUgaXRzIHJlc3VsdHMsXFxuLy8gYWxsb3dpbmcgY29ubmVjdEFkdmFuY2VkJ3Mgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHRvIHJldHVybiBmYWxzZSBpZiBmaW5hbFxcbi8vIHByb3BzIGhhdmUgbm90IGNoYW5nZWQuIElmIGZhbHNlLCB0aGUgc2VsZWN0b3Igd2lsbCBhbHdheXMgcmV0dXJuIGEgbmV3XFxuLy8gb2JqZWN0IGFuZCBzaG91bGRDb21wb25lbnRVcGRhdGUgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuXFxuXFxuZnVuY3Rpb24gZmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeShkaXNwYXRjaCwgX3JlZjIpIHtcXG4gIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gX3JlZjIuaW5pdE1hcFN0YXRlVG9Qcm9wcyxcXG4gICAgICBpbml0TWFwRGlzcGF0Y2hUb1Byb3BzID0gX3JlZjIuaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcXG4gICAgICBpbml0TWVyZ2VQcm9wcyA9IF9yZWYyLmluaXRNZXJnZVByb3BzLFxcbiAgICAgIG9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFsnaW5pdE1hcFN0YXRlVG9Qcm9wcycsICdpbml0TWFwRGlzcGF0Y2hUb1Byb3BzJywgJ2luaXRNZXJnZVByb3BzJ10pO1xcblxcbiAgdmFyIG1hcFN0YXRlVG9Qcm9wcyA9IGluaXRNYXBTdGF0ZVRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbiAgdmFyIG1hcERpc3BhdGNoVG9Qcm9wcyA9IGluaXRNYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xcbiAgdmFyIG1lcmdlUHJvcHMgPSBpbml0TWVyZ2VQcm9wcyhkaXNwYXRjaCwgb3B0aW9ucyk7XFxuXFxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xcbiAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX192ZXJpZnlTdWJzZWxlY3RvcnNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBvcHRpb25zLmRpc3BsYXlOYW1lKTtcXG4gIH1cXG5cXG4gIHZhciBzZWxlY3RvckZhY3RvcnkgPSBvcHRpb25zLnB1cmUgPyBwdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeSA6IGltcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3Rvcnk7XFxuXFxuICByZXR1cm4gc2VsZWN0b3JGYWN0b3J5KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwYXRjaCwgb3B0aW9ucyk7XFxufVxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDEpKSlcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgZXhwb3J0IChpbW11dGFibGUpICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IHZlcmlmeVN1YnNlbGVjdG9ycztcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc193YXJuaW5nX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ0KTtcXG5cXG5cXG5mdW5jdGlvbiB2ZXJpZnkoc2VsZWN0b3IsIG1ldGhvZE5hbWUsIGRpc3BsYXlOYW1lKSB7XFxuICBpZiAoIXNlbGVjdG9yKSB7XFxuICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB2YWx1ZSBmb3IgJyArIG1ldGhvZE5hbWUgKyAnIGluICcgKyBkaXNwbGF5TmFtZSArICcuJyk7XFxuICB9IGVsc2UgaWYgKG1ldGhvZE5hbWUgPT09ICdtYXBTdGF0ZVRvUHJvcHMnIHx8IG1ldGhvZE5hbWUgPT09ICdtYXBEaXNwYXRjaFRvUHJvcHMnKSB7XFxuICAgIGlmICghc2VsZWN0b3IuaGFzT3duUHJvcGVydHkoJ2RlcGVuZHNPbk93blByb3BzJykpIHtcXG4gICAgICBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX191dGlsc193YXJuaW5nX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSgnVGhlIHNlbGVjdG9yIGZvciAnICsgbWV0aG9kTmFtZSArICcgb2YgJyArIGRpc3BsYXlOYW1lICsgJyBkaWQgbm90IHNwZWNpZnkgYSB2YWx1ZSBmb3IgZGVwZW5kc09uT3duUHJvcHMuJyk7XFxuICAgIH1cXG4gIH1cXG59XFxuXFxuZnVuY3Rpb24gdmVyaWZ5U3Vic2VsZWN0b3JzKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwbGF5TmFtZSkge1xcbiAgdmVyaWZ5KG1hcFN0YXRlVG9Qcm9wcywgJ21hcFN0YXRlVG9Qcm9wcycsIGRpc3BsYXlOYW1lKTtcXG4gIHZlcmlmeShtYXBEaXNwYXRjaFRvUHJvcHMsICdtYXBEaXNwYXRjaFRvUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxuICB2ZXJpZnkobWVyZ2VQcm9wcywgJ21lcmdlUHJvcHMnLCBkaXNwbGF5TmFtZSk7XFxufVxcblxcbi8qKiovIH0pLFxcbi8qIDIxMiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGdldERpc3BsYXlOYW1lID0gZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUoQ29tcCkge1xcbiAgcmV0dXJuIENvbXAuZGlzcGxheU5hbWUgfHwgQ29tcC5uYW1lIHx8ICdDb21wb25lbnQnO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZ2V0RGlzcGxheU5hbWUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3OSk7XFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxuXFxuXFxuXFxudmFyIGhhbmRsZVN1Ym1pdCA9IGZ1bmN0aW9uIGhhbmRsZVN1Ym1pdChzdWJtaXQsIHByb3BzLCB2YWxpZCwgYXN5bmNWYWxpZGF0ZSwgZmllbGRzKSB7XFxuICB2YXIgZGlzcGF0Y2ggPSBwcm9wcy5kaXNwYXRjaCxcXG4gICAgICBvblN1Ym1pdEZhaWwgPSBwcm9wcy5vblN1Ym1pdEZhaWwsXFxuICAgICAgb25TdWJtaXRTdWNjZXNzID0gcHJvcHMub25TdWJtaXRTdWNjZXNzLFxcbiAgICAgIHN0YXJ0U3VibWl0ID0gcHJvcHMuc3RhcnRTdWJtaXQsXFxuICAgICAgc3RvcFN1Ym1pdCA9IHByb3BzLnN0b3BTdWJtaXQsXFxuICAgICAgc2V0U3VibWl0RmFpbGVkID0gcHJvcHMuc2V0U3VibWl0RmFpbGVkLFxcbiAgICAgIHNldFN1Ym1pdFN1Y2NlZWRlZCA9IHByb3BzLnNldFN1Ym1pdFN1Y2NlZWRlZCxcXG4gICAgICBzeW5jRXJyb3JzID0gcHJvcHMuc3luY0Vycm9ycyxcXG4gICAgICB0b3VjaCA9IHByb3BzLnRvdWNoLFxcbiAgICAgIHZhbHVlcyA9IHByb3BzLnZhbHVlcyxcXG4gICAgICBwZXJzaXN0ZW50U3VibWl0RXJyb3JzID0gcHJvcHMucGVyc2lzdGVudFN1Ym1pdEVycm9ycztcXG5cXG5cXG4gIHRvdWNoLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpOyAvLyBtYXJrIGFsbCBmaWVsZHMgYXMgdG91Y2hlZFxcblxcbiAgaWYgKHZhbGlkIHx8IHBlcnNpc3RlbnRTdWJtaXRFcnJvcnMpIHtcXG4gICAgdmFyIGRvU3VibWl0ID0gZnVuY3Rpb24gZG9TdWJtaXQoKSB7XFxuICAgICAgdmFyIHJlc3VsdCA9IHZvaWQgMDtcXG4gICAgICB0cnkge1xcbiAgICAgICAgcmVzdWx0ID0gc3VibWl0KHZhbHVlcywgZGlzcGF0Y2gsIHByb3BzKTtcXG4gICAgICB9IGNhdGNoIChzdWJtaXRFcnJvcikge1xcbiAgICAgICAgdmFyIGVycm9yID0gc3VibWl0RXJyb3IgaW5zdGFuY2VvZiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX1N1Ym1pc3Npb25FcnJvcl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSA/IHN1Ym1pdEVycm9yLmVycm9ycyA6IHVuZGVmaW5lZDtcXG4gICAgICAgIHN0b3BTdWJtaXQoZXJyb3IpO1xcbiAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICBvblN1Ym1pdEZhaWwoZXJyb3IsIGRpc3BhdGNoLCBzdWJtaXRFcnJvciwgcHJvcHMpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKGVycm9yIHx8IG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICAvLyBpZiB5b3UndmUgcHJvdmlkZWQgYW4gb25TdWJtaXRGYWlsIGNhbGxiYWNrLCBkb24ndCByZS10aHJvdyB0aGUgZXJyb3JcXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgdGhyb3cgc3VibWl0RXJyb3I7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fX2RlZmF1bHQoKShyZXN1bHQpKSB7XFxuICAgICAgICBzdGFydFN1Ym1pdCgpO1xcbiAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKGZ1bmN0aW9uIChzdWJtaXRSZXN1bHQpIHtcXG4gICAgICAgICAgc3RvcFN1Ym1pdCgpO1xcbiAgICAgICAgICBzZXRTdWJtaXRTdWNjZWVkZWQoKTtcXG4gICAgICAgICAgaWYgKG9uU3VibWl0U3VjY2Vzcykge1xcbiAgICAgICAgICAgIG9uU3VibWl0U3VjY2VzcyhzdWJtaXRSZXN1bHQsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgICAgIH1cXG4gICAgICAgICAgcmV0dXJuIHN1Ym1pdFJlc3VsdDtcXG4gICAgICAgIH0sIGZ1bmN0aW9uIChzdWJtaXRFcnJvcikge1xcbiAgICAgICAgICB2YXIgZXJyb3IgPSBzdWJtaXRFcnJvciBpbnN0YW5jZW9mIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fU3VibWlzc2lvbkVycm9yX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dID8gc3VibWl0RXJyb3IuZXJyb3JzIDogdW5kZWZpbmVkO1xcbiAgICAgICAgICBzdG9wU3VibWl0KGVycm9yKTtcXG4gICAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgICBpZiAob25TdWJtaXRGYWlsKSB7XFxuICAgICAgICAgICAgb25TdWJtaXRGYWlsKGVycm9yLCBkaXNwYXRjaCwgc3VibWl0RXJyb3IsIHByb3BzKTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgICBpZiAoZXJyb3IgfHwgb25TdWJtaXRGYWlsKSB7XFxuICAgICAgICAgICAgLy8gaWYgeW91J3ZlIHByb3ZpZGVkIGFuIG9uU3VibWl0RmFpbCBjYWxsYmFjaywgZG9uJ3QgcmUtdGhyb3cgdGhlIGVycm9yXFxuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRocm93IHN1Ym1pdEVycm9yO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICB9IGVsc2Uge1xcbiAgICAgICAgc2V0U3VibWl0U3VjY2VlZGVkKCk7XFxuICAgICAgICBpZiAob25TdWJtaXRTdWNjZXNzKSB7XFxuICAgICAgICAgIG9uU3VibWl0U3VjY2VzcyhyZXN1bHQsIGRpc3BhdGNoLCBwcm9wcyk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICAgIHJldHVybiByZXN1bHQ7XFxuICAgIH07XFxuXFxuICAgIHZhciBhc3luY1ZhbGlkYXRlUmVzdWx0ID0gYXN5bmNWYWxpZGF0ZSAmJiBhc3luY1ZhbGlkYXRlKCk7XFxuICAgIGlmIChhc3luY1ZhbGlkYXRlUmVzdWx0KSB7XFxuICAgICAgcmV0dXJuIGFzeW5jVmFsaWRhdGVSZXN1bHQudGhlbihmdW5jdGlvbiAoYXN5bmNFcnJvcnMpIHtcXG4gICAgICAgIGlmIChhc3luY0Vycm9ycykge1xcbiAgICAgICAgICB0aHJvdyBhc3luY0Vycm9ycztcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBkb1N1Ym1pdCgpO1xcbiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChhc3luY0Vycm9ycykge1xcbiAgICAgICAgc2V0U3VibWl0RmFpbGVkLmFwcGx5KHVuZGVmaW5lZCwgX3RvQ29uc3VtYWJsZUFycmF5KGZpZWxkcykpO1xcbiAgICAgICAgaWYgKG9uU3VibWl0RmFpbCkge1xcbiAgICAgICAgICBvblN1Ym1pdEZhaWwoYXN5bmNFcnJvcnMsIGRpc3BhdGNoLCBudWxsLCBwcm9wcyk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYXN5bmNFcnJvcnMpO1xcbiAgICAgIH0pO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgIHJldHVybiBkb1N1Ym1pdCgpO1xcbiAgICB9XFxuICB9IGVsc2Uge1xcbiAgICBzZXRTdWJtaXRGYWlsZWQuYXBwbHkodW5kZWZpbmVkLCBfdG9Db25zdW1hYmxlQXJyYXkoZmllbGRzKSk7XFxuICAgIGlmIChvblN1Ym1pdEZhaWwpIHtcXG4gICAgICBvblN1Ym1pdEZhaWwoc3luY0Vycm9ycywgZGlzcGF0Y2gsIG51bGwsIHByb3BzKTtcXG4gICAgfVxcbiAgICByZXR1cm4gc3luY0Vycm9ycztcXG4gIH1cXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGhhbmRsZVN1Ym1pdCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9leHRlbmRhYmxlQnVpbHRpbihjbHMpIHtcXG4gIGZ1bmN0aW9uIEV4dGVuZGFibGVCdWlsdGluKCkge1xcbiAgICBjbHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcXG4gIH1cXG5cXG4gIEV4dGVuZGFibGVCdWlsdGluLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoY2xzLnByb3RvdHlwZSwge1xcbiAgICBjb25zdHJ1Y3Rvcjoge1xcbiAgICAgIHZhbHVlOiBjbHMsXFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXFxuICAgICAgd3JpdGFibGU6IHRydWUsXFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXFxuICAgIH1cXG4gIH0pO1xcblxcbiAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRXh0ZW5kYWJsZUJ1aWx0aW4sIGNscyk7XFxuICB9IGVsc2Uge1xcbiAgICBFeHRlbmRhYmxlQnVpbHRpbi5fX3Byb3RvX18gPSBjbHM7XFxuICB9XFxuXFxuICByZXR1cm4gRXh0ZW5kYWJsZUJ1aWx0aW47XFxufVxcblxcbnZhciBFeHRlbmRhYmxlRXJyb3IgPSBmdW5jdGlvbiAoX2V4dGVuZGFibGVCdWlsdGluMikge1xcbiAgX2luaGVyaXRzKEV4dGVuZGFibGVFcnJvciwgX2V4dGVuZGFibGVCdWlsdGluMik7XFxuXFxuICBmdW5jdGlvbiBFeHRlbmRhYmxlRXJyb3IoKSB7XFxuICAgIHZhciBtZXNzYWdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJztcXG5cXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEV4dGVuZGFibGVFcnJvcik7XFxuXFxuICAgIC8vIGV4dGVuZGluZyBFcnJvciBpcyB3ZWlyZCBhbmQgZG9lcyBub3QgcHJvcGFnYXRlIGBtZXNzYWdlYFxcbiAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRXh0ZW5kYWJsZUVycm9yLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRXh0ZW5kYWJsZUVycm9yKSkuY2FsbCh0aGlzLCBtZXNzYWdlKSk7XFxuXFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ21lc3NhZ2UnLCB7XFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxcbiAgICAgIHZhbHVlOiBtZXNzYWdlLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXFxuICAgIH0pO1xcblxcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogX3RoaXMuY29uc3RydWN0b3IubmFtZSxcXG4gICAgICB3cml0YWJsZTogdHJ1ZVxcbiAgICB9KTtcXG5cXG4gICAgaWYgKEVycm9yLmhhc093blByb3BlcnR5KCdjYXB0dXJlU3RhY2tUcmFjZScpKSB7XFxuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoX3RoaXMsIF90aGlzLmNvbnN0cnVjdG9yKTtcXG4gICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMpO1xcbiAgICB9XFxuXFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ3N0YWNrJywge1xcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcXG4gICAgICB2YWx1ZTogbmV3IEVycm9yKG1lc3NhZ2UpLnN0YWNrLFxcbiAgICAgIHdyaXRhYmxlOiB0cnVlXFxuICAgIH0pO1xcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICByZXR1cm4gRXh0ZW5kYWJsZUVycm9yO1xcbn0oX2V4dGVuZGFibGVCdWlsdGluKEVycm9yKSk7XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoRXh0ZW5kYWJsZUVycm9yKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyMTUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX3NpbGVuY2VFdmVudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MCk7XFxuXFxuXFxudmFyIHNpbGVuY2VFdmVudHMgPSBmdW5jdGlvbiBzaWxlbmNlRXZlbnRzKGZuKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XFxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zaWxlbmNlRXZlbnRfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50KSA/IGZuLmFwcGx5KHVuZGVmaW5lZCwgYXJncykgOiBmbi5hcHBseSh1bmRlZmluZWQsIFtldmVudF0uY29uY2F0KGFyZ3MpKTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzaWxlbmNlRXZlbnRzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0Nik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pc19wcm9taXNlX19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaXNfcHJvbWlzZV9fKTtcXG5cXG5cXG52YXIgYXN5bmNWYWxpZGF0aW9uID0gZnVuY3Rpb24gYXN5bmNWYWxpZGF0aW9uKGZuLCBzdGFydCwgc3RvcCwgZmllbGQpIHtcXG4gIHN0YXJ0KGZpZWxkKTtcXG4gIHZhciBwcm9taXNlID0gZm4oKTtcXG4gIGlmICghX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2lzX3Byb21pc2VfX19kZWZhdWx0KCkocHJvbWlzZSkpIHtcXG4gICAgdGhyb3cgbmV3IEVycm9yKCdhc3luY1ZhbGlkYXRlIGZ1bmN0aW9uIHBhc3NlZCB0byByZWR1eEZvcm0gbXVzdCByZXR1cm4gYSBwcm9taXNlJyk7XFxuICB9XFxuICB2YXIgaGFuZGxlRXJyb3JzID0gZnVuY3Rpb24gaGFuZGxlRXJyb3JzKHJlamVjdGVkKSB7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZXJyb3JzKSB7XFxuICAgICAgaWYgKGVycm9ycyAmJiBPYmplY3Qua2V5cyhlcnJvcnMpLmxlbmd0aCkge1xcbiAgICAgICAgc3RvcChlcnJvcnMpO1xcbiAgICAgICAgcmV0dXJuIGVycm9ycztcXG4gICAgICB9IGVsc2UgaWYgKHJlamVjdGVkKSB7XFxuICAgICAgICBzdG9wKCk7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FzeW5jaHJvbm91cyB2YWxpZGF0aW9uIHByb21pc2Ugd2FzIHJlamVjdGVkIHdpdGhvdXQgZXJyb3JzLicpO1xcbiAgICAgIH1cXG4gICAgICBzdG9wKCk7XFxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xcbiAgICB9O1xcbiAgfTtcXG4gIHJldHVybiBwcm9taXNlLnRoZW4oaGFuZGxlRXJyb3JzKGZhbHNlKSwgaGFuZGxlRXJyb3JzKHRydWUpKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGFzeW5jVmFsaWRhdGlvbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjE3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUgPSBmdW5jdGlvbiBkZWZhdWx0U2hvdWxkQXN5bmNWYWxpZGF0ZShfcmVmKSB7XFxuICB2YXIgaW5pdGlhbGl6ZWQgPSBfcmVmLmluaXRpYWxpemVkLFxcbiAgICAgIHRyaWdnZXIgPSBfcmVmLnRyaWdnZXIsXFxuICAgICAgcHJpc3RpbmUgPSBfcmVmLnByaXN0aW5lLFxcbiAgICAgIHN5bmNWYWxpZGF0aW9uUGFzc2VzID0gX3JlZi5zeW5jVmFsaWRhdGlvblBhc3NlcztcXG5cXG4gIGlmICghc3luY1ZhbGlkYXRpb25QYXNzZXMpIHtcXG4gICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbiAgc3dpdGNoICh0cmlnZ2VyKSB7XFxuICAgIGNhc2UgJ2JsdXInOlxcbiAgICAgIC8vIGJsdXJyaW5nXFxuICAgICAgcmV0dXJuIHRydWU7XFxuICAgIGNhc2UgJ3N1Ym1pdCc6XFxuICAgICAgLy8gc3VibWl0dGluZywgc28gb25seSBhc3luYyB2YWxpZGF0ZSBpZiBmb3JtIGlzIGRpcnR5IG9yIHdhcyBuZXZlciBpbml0aWFsaXplZFxcbiAgICAgIC8vIGNvbnZlcnNlbHksIERPTidUIGFzeW5jIHZhbGlkYXRlIGlmIHRoZSBmb3JtIGlzIHByaXN0aW5lIGp1c3QgYXMgaXQgd2FzIGluaXRpYWxpemVkXFxuICAgICAgcmV0dXJuICFwcmlzdGluZSB8fCAhaW5pdGlhbGl6ZWQ7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgfVxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmYXVsdFNob3VsZEFzeW5jVmFsaWRhdGUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIxOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGRlZmF1bHRTaG91bGRWYWxpZGF0ZSA9IGZ1bmN0aW9uIGRlZmF1bHRTaG91bGRWYWxpZGF0ZShfcmVmKSB7XFxuICB2YXIgdmFsdWVzID0gX3JlZi52YWx1ZXMsXFxuICAgICAgbmV4dFByb3BzID0gX3JlZi5uZXh0UHJvcHMsXFxuICAgICAgaW5pdGlhbFJlbmRlciA9IF9yZWYuaW5pdGlhbFJlbmRlcixcXG4gICAgICBsYXN0RmllbGRWYWxpZGF0b3JLZXlzID0gX3JlZi5sYXN0RmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgIGZpZWxkVmFsaWRhdG9yS2V5cyA9IF9yZWYuZmllbGRWYWxpZGF0b3JLZXlzLFxcbiAgICAgIHN0cnVjdHVyZSA9IF9yZWYuc3RydWN0dXJlO1xcblxcbiAgaWYgKGluaXRpYWxSZW5kZXIpIHtcXG4gICAgcmV0dXJuIHRydWU7XFxuICB9XFxuICByZXR1cm4gIXN0cnVjdHVyZS5kZWVwRXF1YWwodmFsdWVzLCBuZXh0UHJvcHMudmFsdWVzKSB8fCAhc3RydWN0dXJlLmRlZXBFcXVhbChsYXN0RmllbGRWYWxpZGF0b3JLZXlzLCBmaWVsZFZhbGlkYXRvcktleXMpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVmYXVsdFNob3VsZFZhbGlkYXRlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMTkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgeyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gZWxzZSB7IHJldHVybiBBcnJheS5mcm9tKGFycik7IH0gfVxcblxcbnZhciBzcGxpY2UgPSBmdW5jdGlvbiBzcGxpY2UoYXJyYXksIGluZGV4LCByZW1vdmVOdW0sIHZhbHVlKSB7XFxuICBhcnJheSA9IGFycmF5IHx8IFtdO1xcblxcbiAgaWYgKGluZGV4IDwgYXJyYXkubGVuZ3RoKSB7XFxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICFyZW1vdmVOdW0pIHtcXG4gICAgICAvLyBpbnNlcnRpbmcgdW5kZWZpbmVkXFxuICAgICAgdmFyIF9jb3B5MiA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTtcXG4gICAgICBfY29weTIuc3BsaWNlKGluZGV4LCAwLCBudWxsKTtcXG4gICAgICBfY29weTJbaW5kZXhdID0gdW5kZWZpbmVkO1xcbiAgICAgIHJldHVybiBfY29weTI7XFxuICAgIH1cXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcXG4gICAgICB2YXIgX2NvcHkzID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShhcnJheSkpO1xcbiAgICAgIF9jb3B5My5zcGxpY2UoaW5kZXgsIHJlbW92ZU51bSwgdmFsdWUpOyAvLyByZW1vdmluZyBhbmQgYWRkaW5nXFxuICAgICAgcmV0dXJuIF9jb3B5MztcXG4gICAgfVxcbiAgICB2YXIgX2NvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICAgIF9jb3B5LnNwbGljZShpbmRleCwgcmVtb3ZlTnVtKTsgLy8gcmVtb3ZpbmdcXG4gICAgcmV0dXJuIF9jb3B5O1xcbiAgfVxcbiAgaWYgKHJlbW92ZU51bSkge1xcbiAgICAvLyB0cnlpbmcgdG8gcmVtb3ZlIG5vbi1leGlzdGFudCBpdGVtOiByZXR1cm4gb3JpZ2luYWwgYXJyYXlcXG4gICAgcmV0dXJuIGFycmF5O1xcbiAgfVxcbiAgLy8gdHJ5aW5nIHRvIGFkZCBvdXRzaWRlIG9mIHJhbmdlOiBqdXN0IHNldCB2YWx1ZVxcbiAgdmFyIGNvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7XFxuICBjb3B5W2luZGV4XSA9IHZhbHVlO1xcbiAgcmV0dXJuIGNvcHk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzcGxpY2UpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG5cXG52YXIgZ2V0SW4gPSBmdW5jdGlvbiBnZXRJbihzdGF0ZSwgZmllbGQpIHtcXG4gIGlmICghc3RhdGUpIHtcXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcblxcbiAgdmFyIHBhdGggPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKTtcXG4gIHZhciBsZW5ndGggPSBwYXRoLmxlbmd0aDtcXG4gIGlmICghbGVuZ3RoKSB7XFxuICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICB9XFxuXFxuICB2YXIgcmVzdWx0ID0gc3RhdGU7XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aCAmJiAhIXJlc3VsdDsgKytpKSB7XFxuICAgIHJlc3VsdCA9IHJlc3VsdFtwYXRoW2ldXTtcXG4gIH1cXG5cXG4gIHJldHVybiByZXN1bHQ7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZXRJbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjIxICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTQpO1xcblxcblxcbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XFxuXFxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cXG5cXG52YXIgc2V0SW5XaXRoUGF0aCA9IGZ1bmN0aW9uIHNldEluV2l0aFBhdGgoc3RhdGUsIHZhbHVlLCBwYXRoLCBwYXRoSW5kZXgpIHtcXG4gIGlmIChwYXRoSW5kZXggPj0gcGF0aC5sZW5ndGgpIHtcXG4gICAgcmV0dXJuIHZhbHVlO1xcbiAgfVxcblxcbiAgdmFyIGZpcnN0ID0gcGF0aFtwYXRoSW5kZXhdO1xcbiAgdmFyIG5leHQgPSBzZXRJbldpdGhQYXRoKHN0YXRlICYmIHN0YXRlW2ZpcnN0XSwgdmFsdWUsIHBhdGgsIHBhdGhJbmRleCArIDEpO1xcblxcbiAgaWYgKCFzdGF0ZSkge1xcbiAgICB2YXIgaW5pdGlhbGl6ZWQgPSBpc05hTihmaXJzdCkgPyB7fSA6IFtdO1xcbiAgICBpbml0aWFsaXplZFtmaXJzdF0gPSBuZXh0O1xcbiAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7XFxuICB9XFxuXFxuICBpZiAoQXJyYXkuaXNBcnJheShzdGF0ZSkpIHtcXG4gICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoc3RhdGUpO1xcbiAgICBjb3B5W2ZpcnN0XSA9IG5leHQ7XFxuICAgIHJldHVybiBjb3B5O1xcbiAgfVxcblxcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBzdGF0ZSwgX2RlZmluZVByb3BlcnR5KHt9LCBmaXJzdCwgbmV4dCkpO1xcbn07XFxuXFxudmFyIHNldEluID0gZnVuY3Rpb24gc2V0SW4oc3RhdGUsIGZpZWxkLCB2YWx1ZSkge1xcbiAgcmV0dXJuIHNldEluV2l0aFBhdGgoc3RhdGUsIHZhbHVlLCBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc190b1BhdGhfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGZpZWxkKSwgMCk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChzZXRJbik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjIyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Mik7XFxuXFxuXFxuXFxudmFyIGN1c3RvbWl6ZXIgPSBmdW5jdGlvbiBjdXN0b21pemVyKG9iaiwgb3RoZXIpIHtcXG4gIGlmIChvYmogPT09IG90aGVyKSByZXR1cm4gdHJ1ZTtcXG4gIGlmICgob2JqID09IG51bGwgfHwgb2JqID09PSAnJyB8fCBvYmogPT09IGZhbHNlKSAmJiAob3RoZXIgPT0gbnVsbCB8fCBvdGhlciA9PT0gJycgfHwgb3RoZXIgPT09IGZhbHNlKSkgcmV0dXJuIHRydWU7XFxuXFxuICBpZiAob2JqICYmIG90aGVyICYmIG9iai5fZXJyb3IgIT09IG90aGVyLl9lcnJvcikgcmV0dXJuIGZhbHNlO1xcbiAgaWYgKG9iaiAmJiBvdGhlciAmJiBvYmouX3dhcm5pbmcgIT09IG90aGVyLl93YXJuaW5nKSByZXR1cm4gZmFsc2U7XFxufTtcXG5cXG52YXIgZGVlcEVxdWFsID0gZnVuY3Rpb24gZGVlcEVxdWFsKGEsIGIpIHtcXG4gIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2xvZGFzaF9lc19pc0VxdWFsV2l0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoYSwgYiwgY3VzdG9taXplcik7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChkZWVwRXF1YWwpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyMyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfdG9QYXRoX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDE0KTtcXG5cXG5cXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9XFxuXFxudmFyIGRlbGV0ZUluV2l0aFBhdGggPSBmdW5jdGlvbiBkZWxldGVJbldpdGhQYXRoKHN0YXRlLCBmaXJzdCkge1xcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XFxuICAgIHJlc3RbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xcbiAgfVxcblxcbiAgaWYgKHN0YXRlID09PSB1bmRlZmluZWQgfHwgZmlyc3QgPT09IHVuZGVmaW5lZCkge1xcbiAgICByZXR1cm4gc3RhdGU7XFxuICB9XFxuICBpZiAocmVzdC5sZW5ndGgpIHtcXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgICAgaWYgKGZpcnN0IDwgc3RhdGUubGVuZ3RoKSB7XFxuICAgICAgICB2YXIgcmVzdWx0ID0gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZSAmJiBzdGF0ZVtmaXJzdF1dLmNvbmNhdChyZXN0KSk7XFxuICAgICAgICBpZiAocmVzdWx0ICE9PSBzdGF0ZVtmaXJzdF0pIHtcXG4gICAgICAgICAgdmFyIGNvcHkgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHN0YXRlKSk7XFxuICAgICAgICAgIGNvcHlbZmlyc3RdID0gcmVzdWx0O1xcbiAgICAgICAgICByZXR1cm4gY29weTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgICAgcmV0dXJuIHN0YXRlO1xcbiAgICB9XFxuICAgIGlmIChmaXJzdCBpbiBzdGF0ZSkge1xcbiAgICAgIHZhciBfcmVzdWx0ID0gZGVsZXRlSW5XaXRoUGF0aC5hcHBseSh1bmRlZmluZWQsIFtzdGF0ZSAmJiBzdGF0ZVtmaXJzdF1dLmNvbmNhdChyZXN0KSk7XFxuICAgICAgcmV0dXJuIHN0YXRlW2ZpcnN0XSA9PT0gX3Jlc3VsdCA/IHN0YXRlIDogX2V4dGVuZHMoe30sIHN0YXRlLCBfZGVmaW5lUHJvcGVydHkoe30sIGZpcnN0LCBfcmVzdWx0KSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHN0YXRlO1xcbiAgfVxcbiAgaWYgKEFycmF5LmlzQXJyYXkoc3RhdGUpKSB7XFxuICAgIGlmIChpc05hTihmaXJzdCkpIHtcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZWxldGUgbm9uLW51bWVyaWNhbCBpbmRleCBmcm9tIGFuIGFycmF5Jyk7XFxuICAgIH1cXG4gICAgaWYgKGZpcnN0IDwgc3RhdGUubGVuZ3RoKSB7XFxuICAgICAgdmFyIF9jb3B5ID0gW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShzdGF0ZSkpO1xcbiAgICAgIF9jb3B5LnNwbGljZShmaXJzdCwgMSk7XFxuICAgICAgcmV0dXJuIF9jb3B5O1xcbiAgICB9XFxuICAgIHJldHVybiBzdGF0ZTtcXG4gIH1cXG4gIGlmIChmaXJzdCBpbiBzdGF0ZSkge1xcbiAgICB2YXIgX2NvcHkyID0gX2V4dGVuZHMoe30sIHN0YXRlKTtcXG4gICAgZGVsZXRlIF9jb3B5MltmaXJzdF07XFxuICAgIHJldHVybiBfY29weTI7XFxuICB9XFxuICByZXR1cm4gc3RhdGU7XFxufTtcXG5cXG52YXIgZGVsZXRlSW4gPSBmdW5jdGlvbiBkZWxldGVJbihzdGF0ZSwgZmllbGQpIHtcXG4gIHJldHVybiBkZWxldGVJbldpdGhQYXRoLmFwcGx5KHVuZGVmaW5lZCwgW3N0YXRlXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX3RvUGF0aF9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZmllbGQpKSkpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoZGVsZXRlSW4pO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGtleXMgPSBmdW5jdGlvbiBrZXlzKHZhbHVlKSB7XFxuICByZXR1cm4gdmFsdWUgPyBPYmplY3Qua2V5cyh2YWx1ZSkgOiBbXTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGtleXMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcbnZhciB0b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheSh2YWx1ZSkge1xcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xcbn07XFxuXFxudmFyIGdldEVycm9yID0gZnVuY3Rpb24gZ2V0RXJyb3IodmFsdWUsIHZhbHVlcywgcHJvcHMsIHZhbGlkYXRvcnMpIHtcXG4gIHZhciBhcnJheSA9IHRvQXJyYXkodmFsaWRhdG9ycyk7XFxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XFxuICAgIHZhciBlcnJvciA9IGFycmF5W2ldKHZhbHVlLCB2YWx1ZXMsIHByb3BzKTtcXG4gICAgaWYgKGVycm9yKSB7XFxuICAgICAgcmV0dXJuIGVycm9yO1xcbiAgICB9XFxuICB9XFxufTtcXG5cXG52YXIgZ2VuZXJhdGVWYWxpZGF0b3IgPSBmdW5jdGlvbiBnZW5lcmF0ZVZhbGlkYXRvcih2YWxpZGF0b3JzLCBfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZXMsIHByb3BzKSB7XFxuICAgIHZhciBlcnJvcnMgPSB7fTtcXG4gICAgT2JqZWN0LmtleXModmFsaWRhdG9ycykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgIHZhciB2YWx1ZSA9IGdldEluKHZhbHVlcywgbmFtZSk7XFxuICAgICAgdmFyIGVycm9yID0gZ2V0RXJyb3IodmFsdWUsIHZhbHVlcywgcHJvcHMsIHZhbGlkYXRvcnNbbmFtZV0pO1xcbiAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgZXJyb3JzID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uc2V0SW4oZXJyb3JzLCBuYW1lLCBlcnJvcik7XFxuICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIGVycm9ycztcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChnZW5lcmF0ZVZhbGlkYXRvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjI2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgZ2V0RXJyb3JLZXlzID0gZnVuY3Rpb24gZ2V0RXJyb3JLZXlzKG5hbWUsIHR5cGUpIHtcXG4gIHN3aXRjaCAodHlwZSkge1xcbiAgICBjYXNlICdGaWVsZCc6XFxuICAgICAgcmV0dXJuIFtuYW1lLCBuYW1lICsgJy5fZXJyb3InXTtcXG4gICAgY2FzZSAnRmllbGRBcnJheSc6XFxuICAgICAgcmV0dXJuIFtuYW1lICsgJy5fZXJyb3InXTtcXG4gICAgZGVmYXVsdDpcXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gZmllbGQgdHlwZScpO1xcbiAgfVxcbn07XFxuXFxudmFyIGNyZWF0ZUhhc0Vycm9yID0gZnVuY3Rpb24gY3JlYXRlSGFzRXJyb3IoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG5cXG4gIHZhciBoYXNFcnJvciA9IGZ1bmN0aW9uIGhhc0Vycm9yKGZpZWxkLCBzeW5jRXJyb3JzLCBhc3luY0Vycm9ycywgc3VibWl0RXJyb3JzKSB7XFxuICAgIGlmICghc3luY0Vycm9ycyAmJiAhYXN5bmNFcnJvcnMgJiYgIXN1Ym1pdEVycm9ycykge1xcbiAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcblxcbiAgICB2YXIgbmFtZSA9IGdldEluKGZpZWxkLCAnbmFtZScpO1xcbiAgICB2YXIgdHlwZSA9IGdldEluKGZpZWxkLCAndHlwZScpO1xcbiAgICByZXR1cm4gZ2V0RXJyb3JLZXlzKG5hbWUsIHR5cGUpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzeW5jRXJyb3JzLCBrZXkpIHx8IGdldEluKGFzeW5jRXJyb3JzLCBrZXkpIHx8IGdldEluKHN1Ym1pdEVycm9ycywga2V5KTtcXG4gICAgfSk7XFxuICB9O1xcbiAgcmV0dXJuIGhhc0Vycm9yO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzRXJyb3IpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyNyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTIpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIyOCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI1KTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIGNyZWF0ZUZpZWxkID0gZnVuY3Rpb24gY3JlYXRlRmllbGQoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBzZXRJbiA9IF9yZWYuc2V0SW4sXFxuICAgICAgdG9KUyA9IF9yZWYudG9KUztcXG5cXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZCA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX0Nvbm5lY3RlZEZpZWxkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsLFxcbiAgICBnZXRJbjogZ2V0SW4sXFxuICAgIHRvSlM6IHRvSlNcXG4gIH0pO1xcblxcbiAgdmFyIEZpZWxkID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKEZpZWxkLCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGQocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGQpO1xcblxcbiAgICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGaWVsZC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkIG11c3QgYmUgaW5zaWRlIGEgY29tcG9uZW50IGRlY29yYXRlZCB3aXRoIHJlZHV4Rm9ybSgpJyk7XFxuICAgICAgfVxcblxcbiAgICAgIF90aGlzLm5vcm1hbGl6ZSA9IF90aGlzLm5vcm1hbGl6ZS5iaW5kKF90aGlzKTtcXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkLCBbe1xcbiAgICAgIGtleTogJ3Nob3VsZENvbXBvbmVudFVwZGF0ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMsIG5leHRQcm9wcywgbmV4dFN0YXRlKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyKHRoaXMubmFtZSwgJ0ZpZWxkJywgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnByb3BzLnZhbGlkYXRlO1xcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMyLnByb3BzLndhcm47XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm5hbWUgIT09IG5leHRQcm9wcy5uYW1lKSB7XFxuICAgICAgICAgIC8vIHVucmVnaXN0ZXIgb2xkIG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgICAgICAvLyByZWdpc3RlciBuZXcgbmFtZVxcbiAgICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgbmV4dFByb3BzLm5hbWUpLCAnRmllbGQnKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsVW5tb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfaW52YXJpYW50X19fZGVmYXVsdCgpKHRoaXMucHJvcHMud2l0aFJlZiwgJ0lmIHlvdSB3YW50IHRvIGFjY2VzcyBnZXRSZW5kZXJlZENvbXBvbmVudCgpLCAnICsgJ3lvdSBtdXN0IHNwZWNpZnkgYSB3aXRoUmVmIHByb3AgdG8gRmllbGQnKTtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFJlbmRlcmVkQ29tcG9uZW50KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbm9ybWFsaXplJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gbm9ybWFsaXplKG5hbWUsIHZhbHVlKSB7XFxuICAgICAgICB2YXIgbm9ybWFsaXplID0gdGhpcy5wcm9wcy5ub3JtYWxpemU7XFxuXFxuICAgICAgICBpZiAoIW5vcm1hbGl6ZSkge1xcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgcHJldmlvdXNWYWx1ZXMgPSB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5nZXRWYWx1ZXMoKTtcXG4gICAgICAgIHZhciBwcmV2aW91c1ZhbHVlID0gdGhpcy52YWx1ZTtcXG4gICAgICAgIHZhciBuZXh0VmFsdWVzID0gc2V0SW4ocHJldmlvdXNWYWx1ZXMsIG5hbWUsIHZhbHVlKTtcXG4gICAgICAgIHJldHVybiBub3JtYWxpemUodmFsdWUsIHByZXZpb3VzVmFsdWUsIG5leHRWYWx1ZXMsIHByZXZpb3VzVmFsdWVzKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKENvbm5lY3RlZEZpZWxkLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXFxuICAgICAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLmNvbnRleHQsIHRoaXMucHJvcHMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZGlydHknLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuICF0aGlzLnByaXN0aW5lO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ByaXN0aW5lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmlzUHJpc3RpbmUoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZCAmJiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlKCk7XFxuICAgICAgfVxcbiAgICB9XSk7XFxuXFxuICAgIHJldHVybiBGaWVsZDtcXG4gIH0oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIkNvbXBvbmVudFxcXCJdKTtcXG5cXG4gIEZpZWxkLnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZy5pc1JlcXVpcmVkLFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUoW19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLCBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc3RyaW5nXSkuaXNSZXF1aXJlZCxcXG4gICAgZm9ybWF0OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgbm9ybWFsaXplOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25CbHVyOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25DaGFuZ2U6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBvbkZvY3VzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgb25EcmFnU3RhcnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBvbkRyb3A6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwYXJzZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB2YWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5hcnJheU9mKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jKV0pLFxcbiAgICB3YXJuOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmFycmF5T2YoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMpXSksXFxuICAgIHdpdGhSZWY6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5ib29sXFxuICB9O1xcbiAgRmllbGQuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyOCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY3JlYXRlRmllbGRQcm9wc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Myk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODQpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMjMxKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbnZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXFxcInZhbHVlXFxcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcbnZhciBwcm9wc1RvTm90VXBkYXRlRm9yID0gWydfcmVkdXhGb3JtJ107XFxuXFxudmFyIGNyZWF0ZUNvbm5lY3RlZEZpZWxkID0gZnVuY3Rpb24gY3JlYXRlQ29ubmVjdGVkRmllbGQoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIHZhciBlcnJvciA9IGdldEluKHN5bmNFcnJvcnMsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSBlcnJvciBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgZXJyb3Igc3RydWN0dXJlIHdoZXJlXFxuICAgIC8vIGl0IGNhbiBiZSBzZXQgZGlyZWN0bHksIGl0IG1pZ2h0IG5lZWQgdG8gYmUgdW53cmFwcGVkIGZyb20gdGhlIF9lcnJvciBwcm9wZXJ0eVxcbiAgICByZXR1cm4gZXJyb3IgJiYgZXJyb3IuX2Vycm9yID8gZXJyb3IuX2Vycm9yIDogZXJyb3I7XFxuICB9O1xcblxcbiAgdmFyIGdldFN5bmNXYXJuaW5nID0gZnVuY3Rpb24gZ2V0U3luY1dhcm5pbmcoc3luY1dhcm5pbmdzLCBuYW1lKSB7XFxuICAgIHZhciB3YXJuaW5nID0gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lKTtcXG4gICAgLy8gQmVjYXVzZSB0aGUgd2FybmluZyBmb3IgdGhpcyBmaWVsZCBtaWdodCBub3QgYmUgYXQgYSBsZXZlbCBpbiB0aGUgd2FybmluZyBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX3dhcm5pbmcgcHJvcGVydHlcXG4gICAgcmV0dXJuIHdhcm5pbmcgJiYgd2FybmluZy5fd2FybmluZyA/IHdhcm5pbmcuX3dhcm5pbmcgOiB3YXJuaW5nO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZCA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZCwgX0NvbXBvbmVudCk7XFxuXFxuICAgIGZ1bmN0aW9uIENvbm5lY3RlZEZpZWxkKHByb3BzKSB7XFxuICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbm5lY3RlZEZpZWxkKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGQuX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihDb25uZWN0ZWRGaWVsZCkpLmNhbGwodGhpcywgcHJvcHMpKTtcXG5cXG4gICAgICBfdGhpcy5oYW5kbGVDaGFuZ2UgPSBfdGhpcy5oYW5kbGVDaGFuZ2UuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRm9jdXMgPSBfdGhpcy5oYW5kbGVGb2N1cy5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVCbHVyID0gX3RoaXMuaGFuZGxlQmx1ci5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVEcmFnU3RhcnQgPSBfdGhpcy5oYW5kbGVEcmFnU3RhcnQuYmluZChfdGhpcyk7XFxuICAgICAgX3RoaXMuaGFuZGxlRHJvcCA9IF90aGlzLmhhbmRsZURyb3AuYmluZChfdGhpcyk7XFxuICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuXFxuICAgIF9jcmVhdGVDbGFzcyhDb25uZWN0ZWRGaWVsZCwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIHZhciBuZXh0UHJvcHNLZXlzID0gT2JqZWN0LmtleXMobmV4dFByb3BzKTtcXG4gICAgICAgIHZhciB0aGlzUHJvcHNLZXlzID0gT2JqZWN0LmtleXModGhpcy5wcm9wcyk7XFxuICAgICAgICByZXR1cm4gbmV4dFByb3BzS2V5cy5sZW5ndGggIT09IHRoaXNQcm9wc0tleXMubGVuZ3RoIHx8IG5leHRQcm9wc0tleXMuc29tZShmdW5jdGlvbiAocHJvcCkge1xcbiAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczIucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdpc1ByaXN0aW5lJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaXNQcmlzdGluZSgpIHtcXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLnByaXN0aW5lO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFZhbHVlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWUoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVDaGFuZ2UnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVDaGFuZ2UoZXZlbnQpIHtcXG4gICAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMubmFtZSxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wcy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wcy5wYXJzZSxcXG4gICAgICAgICAgICBub3JtYWxpemUgPSBfcHJvcHMubm9ybWFsaXplLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlID0gX3Byb3BzLm9uQ2hhbmdlLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICBwcmV2aW91c1ZhbHVlID0gX3Byb3BzLnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xcbiAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XFxuICAgICAgICAgIG9uQ2hhbmdlKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZSBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5jaGFuZ2UobmFtZSwgbmV3VmFsdWUpKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVGb2N1cycsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUZvY3VzKGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wczIubmFtZSxcXG4gICAgICAgICAgICBkaXNwYXRjaCA9IF9wcm9wczIuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgb25Gb2N1cyA9IF9wcm9wczIub25Gb2N1cyxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMi5fcmVkdXhGb3JtO1xcblxcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkZvY3VzKSB7XFxuICAgICAgICAgIG9uRm9jdXMoX2V4dGVuZHMoe30sIGV2ZW50LCB7XFxuICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XFxuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlmICghZGVmYXVsdFByZXZlbnRlZCkge1xcbiAgICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmZvY3VzKG5hbWUpKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVCbHVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cihldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHMzLm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMzLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIHBhcnNlID0gX3Byb3BzMy5wYXJzZSxcXG4gICAgICAgICAgICBub3JtYWxpemUgPSBfcHJvcHMzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBvbkJsdXIgPSBfcHJvcHMzLm9uQmx1cixcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzMy5fcmVkdXhGb3JtLFxcbiAgICAgICAgICAgIF92YWx1ZSA9IF9wcm9wczMuX3ZhbHVlLFxcbiAgICAgICAgICAgIHByZXZpb3VzVmFsdWUgPSBfcHJvcHMzLnZhbHVlO1xcblxcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fZXZlbnRzX29uQ2hhbmdlVmFsdWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGV2ZW50LCB7IG5hbWU6IG5hbWUsIHBhcnNlOiBwYXJzZSwgbm9ybWFsaXplOiBub3JtYWxpemUgfSk7XFxuXFxuICAgICAgICAvLyBmb3IgY2hlY2tib3ggYW5kIHJhZGlvLCBpZiB0aGUgdmFsdWUgcHJvcGVydHkgb2YgY2hlY2tib3ggb3IgcmFkaW8gZXF1YWxzXFxuICAgICAgICAvLyB0aGUgdmFsdWUgcGFzc2VkIGJ5IGJsdXIgZXZlbnQsIHRoZW4gZmlyZSBibHVyIGFjdGlvbiB3aXRoIHByZXZpb3VzVmFsdWUuXFxuICAgICAgICBpZiAobmV3VmFsdWUgPT09IF92YWx1ZSAmJiBfdmFsdWUgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgICAgICBuZXdWYWx1ZSA9IHByZXZpb3VzVmFsdWU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlO1xcbiAgICAgICAgaWYgKG9uQmx1cikge1xcbiAgICAgICAgICBvbkJsdXIoX2V4dGVuZHMoe30sIGV2ZW50LCB7XFxuICAgICAgICAgICAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KCkge1xcbiAgICAgICAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IHRydWU7XFxuICAgICAgICAgICAgICByZXR1cm4gZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgIH0pLCBuZXdWYWx1ZSwgcHJldmlvdXNWYWx1ZSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoIWRlZmF1bHRQcmV2ZW50ZWQpIHtcXG4gICAgICAgICAgLy8gZGlzcGF0Y2ggYmx1ciBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5ibHVyKG5hbWUsIG5ld1ZhbHVlKSk7XFxuXFxuICAgICAgICAgIC8vIGNhbGwgcG9zdC1ibHVyIGNhbGxiYWNrXFxuICAgICAgICAgIGlmIChfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgICBfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUobmFtZSwgbmV3VmFsdWUpO1xcbiAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRHJhZ1N0YXJ0JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRHJhZ1N0YXJ0KGV2ZW50KSB7XFxuICAgICAgICB2YXIgX3Byb3BzNCA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPSBfcHJvcHM0Lm9uRHJhZ1N0YXJ0LFxcbiAgICAgICAgICAgIHZhbHVlID0gX3Byb3BzNC52YWx1ZTtcXG5cXG4gICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fdXRpbF9ldmVudENvbnN0c19fW1xcXCJhXFxcIiAvKiBkYXRhS2V5ICovXSwgdmFsdWUgPT0gbnVsbCA/ICcnIDogdmFsdWUpO1xcblxcbiAgICAgICAgaWYgKG9uRHJhZ1N0YXJ0KSB7XFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0KGV2ZW50KTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVEcm9wJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlRHJvcChldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczUgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIG5hbWUgPSBfcHJvcHM1Lm5hbWUsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHM1LmRpc3BhdGNoLFxcbiAgICAgICAgICAgIG9uRHJvcCA9IF9wcm9wczUub25Ecm9wLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM1Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgcHJldmlvdXNWYWx1ZSA9IF9wcm9wczUudmFsdWU7XFxuXFxuICAgICAgICB2YXIgbmV3VmFsdWUgPSBldmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfZXZlbnRDb25zdHNfX1tcXFwiYVxcXCIgLyogZGF0YUtleSAqL10pO1xcblxcbiAgICAgICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcXG4gICAgICAgIGlmIChvbkRyb3ApIHtcXG4gICAgICAgICAgb25Ecm9wKF9leHRlbmRzKHt9LCBldmVudCwge1xcbiAgICAgICAgICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHtcXG4gICAgICAgICAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICB9KSwgbmV3VmFsdWUsIHByZXZpb3VzVmFsdWUpO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaWYgKCFkZWZhdWx0UHJldmVudGVkKSB7XFxuICAgICAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZSBhY3Rpb25cXG4gICAgICAgICAgZGlzcGF0Y2goX3JlZHV4Rm9ybS5jaGFuZ2UobmFtZSwgbmV3VmFsdWUpKTtcXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgX3Byb3BzNiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzNi5jb21wb25lbnQsXFxuICAgICAgICAgICAgd2l0aFJlZiA9IF9wcm9wczYud2l0aFJlZixcXG4gICAgICAgICAgICBuYW1lID0gX3Byb3BzNi5uYW1lLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHM2Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzNi5ub3JtYWxpemUsXFxuICAgICAgICAgICAgb25CbHVyID0gX3Byb3BzNi5vbkJsdXIsXFxuICAgICAgICAgICAgb25DaGFuZ2UgPSBfcHJvcHM2Lm9uQ2hhbmdlLFxcbiAgICAgICAgICAgIG9uRm9jdXMgPSBfcHJvcHM2Lm9uRm9jdXMsXFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPSBfcHJvcHM2Lm9uRHJhZ1N0YXJ0LFxcbiAgICAgICAgICAgIG9uRHJvcCA9IF9wcm9wczYub25Ecm9wLFxcbiAgICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzNiwgWydjb21wb25lbnQnLCAnd2l0aFJlZicsICduYW1lJywgJ19yZWR1eEZvcm0nLCAnbm9ybWFsaXplJywgJ29uQmx1cicsICdvbkNoYW5nZScsICdvbkZvY3VzJywgJ29uRHJhZ1N0YXJ0JywgJ29uRHJvcCddKTtcXG5cXG4gICAgICAgIHZhciBfY3JlYXRlRmllbGRQcm9wcyA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHsgZ2V0SW46IGdldEluLCB0b0pTOiB0b0pTIH0sIG5hbWUsIF9leHRlbmRzKHt9LCByZXN0LCB7XFxuICAgICAgICAgIGZvcm06IF9yZWR1eEZvcm0uZm9ybSxcXG4gICAgICAgICAgb25CbHVyOiB0aGlzLmhhbmRsZUJsdXIsXFxuICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZSxcXG4gICAgICAgICAgb25Ecm9wOiB0aGlzLmhhbmRsZURyb3AsXFxuICAgICAgICAgIG9uRHJhZ1N0YXJ0OiB0aGlzLmhhbmRsZURyYWdTdGFydCxcXG4gICAgICAgICAgb25Gb2N1czogdGhpcy5oYW5kbGVGb2N1c1xcbiAgICAgICAgfSkpLFxcbiAgICAgICAgICAgIGN1c3RvbSA9IF9jcmVhdGVGaWVsZFByb3BzLmN1c3RvbSxcXG4gICAgICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY3JlYXRlRmllbGRQcm9wcywgWydjdXN0b20nXSk7XFxuXFxuICAgICAgICBpZiAod2l0aFJlZikge1xcbiAgICAgICAgICBjdXN0b20ucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ID09PSAnc3RyaW5nJykge1xcbiAgICAgICAgICB2YXIgaW5wdXQgPSBwcm9wcy5pbnB1dCxcXG4gICAgICAgICAgICAgIG1ldGEgPSBwcm9wcy5tZXRhOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXFxuICAgICAgICAgIC8vIGZsYXR0ZW4gaW5wdXQgaW50byBvdGhlciBwcm9wc1xcblxcbiAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJjcmVhdGVFbGVtZW50XFxcIl0pKGNvbXBvbmVudCwgX2V4dGVuZHMoe30sIGlucHV0LCBjdXN0b20pKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIGN1c3RvbSkpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gQ29ubmVjdGVkRmllbGQ7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBDb25uZWN0ZWRGaWVsZC5wcm9wVHlwZXMgPSB7XFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBwcm9wczogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9iamVjdFxcbiAgfTtcXG5cXG4gIHZhciBjb25uZWN0b3IgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X3JlZHV4X19bXFxcImFcXFwiIC8qIGNvbm5lY3QgKi9dKShmdW5jdGlvbiAoc3RhdGUsIG93blByb3BzKSB7XFxuICAgIHZhciBuYW1lID0gb3duUHJvcHMubmFtZSxcXG4gICAgICAgIF9vd25Qcm9wcyRfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX293blByb3BzJF9yZWR1eEZvcm0uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ2luaXRpYWwuJyArIG5hbWUpO1xcbiAgICB2YXIgaW5pdGlhbCA9IGluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5pdGlhbFN0YXRlIDogaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgdmFyIHZhbHVlID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzLicgKyBuYW1lKTtcXG4gICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgIHZhciBzeW5jRXJyb3IgPSBnZXRTeW5jRXJyb3IoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpLCBuYW1lKTtcXG4gICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICB2YXIgcHJpc3RpbmUgPSBkZWVwRXF1YWwodmFsdWUsIGluaXRpYWwpO1xcbiAgICByZXR1cm4ge1xcbiAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICBhc3luY1ZhbGlkYXRpbmc6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jVmFsaWRhdGluZycpID09PSBuYW1lLFxcbiAgICAgIGRpcnR5OiAhcHJpc3RpbmUsXFxuICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgIHN0YXRlOiBnZXRJbihmb3JtU3RhdGUsICdmaWVsZHMuJyArIG5hbWUpLFxcbiAgICAgIHN1Ym1pdEVycm9yOiBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXRFcnJvcnMuJyArIG5hbWUpLFxcbiAgICAgIHN1Ym1pdEZhaWxlZDogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyksXFxuICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICBzeW5jRXJyb3I6IHN5bmNFcnJvcixcXG4gICAgICBzeW5jV2FybmluZzogc3luY1dhcm5pbmcsXFxuICAgICAgdmFsdWU6IHZhbHVlLFxcbiAgICAgIF92YWx1ZTogb3duUHJvcHMudmFsdWUgLy8gc2F2ZSB2YWx1ZSBwYXNzZWQgaW4gKGZvciBjaGVja2JveGVzKVxcbiAgICB9O1xcbiAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgd2l0aFJlZjogdHJ1ZSB9KTtcXG4gIHJldHVybiBjb25uZWN0b3IoQ29ubmVjdGVkRmllbGQpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdGVkRmllbGQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIyOSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9faXNFdmVudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4MSk7XFxuXFxuXFxudmFyIGdldFNlbGVjdGVkVmFsdWVzID0gZnVuY3Rpb24gZ2V0U2VsZWN0ZWRWYWx1ZXMob3B0aW9ucykge1xcbiAgdmFyIHJlc3VsdCA9IFtdO1xcbiAgaWYgKG9wdGlvbnMpIHtcXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG9wdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XFxuICAgICAgdmFyIG9wdGlvbiA9IG9wdGlvbnNbaW5kZXhdO1xcbiAgICAgIGlmIChvcHRpb24uc2VsZWN0ZWQpIHtcXG4gICAgICAgIHJlc3VsdC5wdXNoKG9wdGlvbi52YWx1ZSk7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxuICByZXR1cm4gcmVzdWx0O1xcbn07XFxuXFxudmFyIGdldFZhbHVlID0gZnVuY3Rpb24gZ2V0VmFsdWUoZXZlbnQsIGlzUmVhY3ROYXRpdmUpIHtcXG4gIGlmIChPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc0V2ZW50X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCkpIHtcXG4gICAgaWYgKCFpc1JlYWN0TmF0aXZlICYmIGV2ZW50Lm5hdGl2ZUV2ZW50ICYmIGV2ZW50Lm5hdGl2ZUV2ZW50LnRleHQgIT09IHVuZGVmaW5lZCkge1xcbiAgICAgIHJldHVybiBldmVudC5uYXRpdmVFdmVudC50ZXh0O1xcbiAgICB9XFxuICAgIGlmIChpc1JlYWN0TmF0aXZlICYmIGV2ZW50Lm5hdGl2ZUV2ZW50ICE9PSB1bmRlZmluZWQpIHtcXG4gICAgICByZXR1cm4gZXZlbnQubmF0aXZlRXZlbnQudGV4dDtcXG4gICAgfVxcbiAgICB2YXIgX2V2ZW50JHRhcmdldCA9IGV2ZW50LnRhcmdldCxcXG4gICAgICAgIHR5cGUgPSBfZXZlbnQkdGFyZ2V0LnR5cGUsXFxuICAgICAgICB2YWx1ZSA9IF9ldmVudCR0YXJnZXQudmFsdWUsXFxuICAgICAgICBjaGVja2VkID0gX2V2ZW50JHRhcmdldC5jaGVja2VkLFxcbiAgICAgICAgZmlsZXMgPSBfZXZlbnQkdGFyZ2V0LmZpbGVzLFxcbiAgICAgICAgZGF0YVRyYW5zZmVyID0gZXZlbnQuZGF0YVRyYW5zZmVyO1xcblxcbiAgICBpZiAodHlwZSA9PT0gJ2NoZWNrYm94Jykge1xcbiAgICAgIHJldHVybiBjaGVja2VkO1xcbiAgICB9XFxuICAgIGlmICh0eXBlID09PSAnZmlsZScpIHtcXG4gICAgICByZXR1cm4gZmlsZXMgfHwgZGF0YVRyYW5zZmVyICYmIGRhdGFUcmFuc2Zlci5maWxlcztcXG4gICAgfVxcbiAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdC1tdWx0aXBsZScpIHtcXG4gICAgICByZXR1cm4gZ2V0U2VsZWN0ZWRWYWx1ZXMoZXZlbnQudGFyZ2V0Lm9wdGlvbnMpO1xcbiAgICB9XFxuICAgIHJldHVybiB2YWx1ZTtcXG4gIH1cXG4gIHJldHVybiBldmVudDtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGdldFZhbHVlKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBpc1JlYWN0TmF0aXZlID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLnByb2R1Y3QgJiYgd2luZG93Lm5hdmlnYXRvci5wcm9kdWN0ID09PSAnUmVhY3ROYXRpdmUnO1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGlzUmVhY3ROYXRpdmUpO1xcblxcbi8qKiovIH0pLFxcbi8qIDIzMSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBleHBvcnQgKGJpbmRpbmcpICovIF9fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLCBcXFwiYVxcXCIsIGZ1bmN0aW9uKCkgeyByZXR1cm4gZGF0YUtleTsgfSk7XFxudmFyIGRhdGFLZXkgPSAndGV4dCc7XFxuXFxuLyoqKi8gfSksXFxuLyogMjMyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzMyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0OCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcblxcblxcblxcblxcblxcblxcblxcbnZhciB2YWxpZGF0ZU5hbWVQcm9wID0gZnVuY3Rpb24gdmFsaWRhdGVOYW1lUHJvcChwcm9wKSB7XFxuICBpZiAoIXByb3ApIHtcXG4gICAgcmV0dXJuIG5ldyBFcnJvcignTm8gXFxcIm5hbWVzXFxcIiBwcm9wIHdhcyBzcGVjaWZpZWQgPEZpZWxkcy8+Jyk7XFxuICB9XFxuICBpZiAoIUFycmF5LmlzQXJyYXkocHJvcCkgJiYgIXByb3AuX2lzRmllbGRBcnJheSkge1xcbiAgICByZXR1cm4gbmV3IEVycm9yKCdJbnZhbGlkIHByb3AgXFxcIm5hbWVzXFxcIiBzdXBwbGllZCB0byA8RmllbGRzLz4uIE11c3QgYmUgZWl0aGVyIGFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgdGhlIGZpZWxkcyBhcnJheSBnZW5lcmF0ZWQgYnkgRmllbGRBcnJheS4nKTtcXG4gIH1cXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZHMgPSBmdW5jdGlvbiBjcmVhdGVGaWVsZHMoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTLFxcbiAgICAgIHNpemUgPSBfcmVmLnNpemU7XFxuXFxuXFxuICB2YXIgQ29ubmVjdGVkRmllbGRzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgIGRlZXBFcXVhbDogZGVlcEVxdWFsLFxcbiAgICBnZXRJbjogZ2V0SW4sXFxuICAgIHRvSlM6IHRvSlMsXFxuICAgIHNpemU6IHNpemVcXG4gIH0pO1xcblxcbiAgdmFyIEZpZWxkcyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZHMsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBGaWVsZHMocHJvcHMsIGNvbnRleHQpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmllbGRzKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGRzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoRmllbGRzKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICAgIGlmICghY29udGV4dC5fcmVkdXhGb3JtKSB7XFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpZWxkcyBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkcywgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX191dGlsX3NoYWxsb3dDb21wYXJlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh0aGlzLCBuZXh0UHJvcHMsIG5leHRTdGF0ZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnY29tcG9uZW50V2lsbE1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgICAgdmFyIGVycm9yID0gdmFsaWRhdGVOYW1lUHJvcCh0aGlzLnByb3BzLm5hbWVzKTtcXG4gICAgICAgIGlmIChlcnJvcikge1xcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xcbiAgICAgICAgdmFyIHJlZ2lzdGVyID0gY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVyO1xcblxcbiAgICAgICAgdGhpcy5uYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiByZWdpc3RlcihuYW1lLCAnRmllbGQnKTtcXG4gICAgICAgIH0pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgaWYgKCFfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3N0cnVjdHVyZV9wbGFpbl9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXS5kZWVwRXF1YWwodGhpcy5wcm9wcy5uYW1lcywgbmV4dFByb3BzLm5hbWVzKSkge1xcbiAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgICAgdmFyIF9jb250ZXh0JF9yZWR1eEZvcm0gPSBjb250ZXh0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgICAgICByZWdpc3RlciA9IF9jb250ZXh0JF9yZWR1eEZvcm0ucmVnaXN0ZXIsXFxuICAgICAgICAgICAgICB1bnJlZ2lzdGVyID0gX2NvbnRleHQkX3JlZHV4Rm9ybS51bnJlZ2lzdGVyO1xcbiAgICAgICAgICAvLyB1bnJlZ2lzdGVyIG9sZCBuYW1lXFxuXFxuICAgICAgICAgIHRoaXMucHJvcHMubmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xcbiAgICAgICAgICAgIHJldHVybiB1bnJlZ2lzdGVyKE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSkpO1xcbiAgICAgICAgICB9KTtcXG4gICAgICAgICAgLy8gcmVnaXN0ZXIgbmV3IG5hbWVcXG4gICAgICAgICAgbmV4dFByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gcmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKSwgJ0ZpZWxkJyk7XFxuICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG4gICAgICAgIHZhciB1bnJlZ2lzdGVyID0gY29udGV4dC5fcmVkdXhGb3JtLnVucmVnaXN0ZXI7XFxuXFxuICAgICAgICB0aGlzLnByb3BzLm5hbWVzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIHVucmVnaXN0ZXIoT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fX2RlZmF1bHQoKSh0aGlzLnByb3BzLndpdGhSZWYsICdJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZ2V0UmVuZGVyZWRDb21wb25lbnQoKSwgJyArICd5b3UgbXVzdCBzcGVjaWZ5IGEgd2l0aFJlZiBwcm9wIHRvIEZpZWxkcycpO1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5jb25uZWN0ZWQuZ2V0V3JhcHBlZEluc3RhbmNlKCkuZ2V0UmVuZGVyZWRDb21wb25lbnQoKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXMuY29udGV4dDtcXG5cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRmllbGRzLCBfZXh0ZW5kcyh7fSwgdGhpcy5wcm9wcywge1xcbiAgICAgICAgICBuYW1lczogdGhpcy5wcm9wcy5uYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKTtcXG4gICAgICAgICAgfSksXFxuICAgICAgICAgIF9yZWR1eEZvcm06IHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLFxcbiAgICAgICAgICByZWY6ICdjb25uZWN0ZWQnXFxuICAgICAgICB9KSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnbmFtZXMnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQ7XFxuXFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5uYW1lcy5tYXAoZnVuY3Rpb24gKG5hbWUpIHtcXG4gICAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzVfX3V0aWxfcHJlZml4TmFtZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoY29udGV4dCwgbmFtZSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5pc0RpcnR5KCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncHJpc3RpbmUnLFxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xcbiAgICAgICAgcmV0dXJuICF0aGlzLmRpcnR5O1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3ZhbHVlcycsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZCAmJiB0aGlzLnJlZnMuY29ubmVjdGVkLmdldFdyYXBwZWRJbnN0YW5jZSgpLmdldFZhbHVlcygpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gRmllbGRzO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgRmllbGRzLnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZXM6IGZ1bmN0aW9uIG5hbWVzKHByb3BzLCBwcm9wTmFtZSkge1xcbiAgICAgIHJldHVybiB2YWxpZGF0ZU5hbWVQcm9wKHByb3BzW3Byb3BOYW1lXSk7XFxuICAgIH0sXFxuICAgIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKS5pc1JlcXVpcmVkLFxcbiAgICBmb3JtYXQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICBwYXJzZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkcy5jb250ZXh0VHlwZXMgPSB7XFxuICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICByZXR1cm4gRmllbGRzO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlRmllbGRzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfcmVkdXhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTEpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX2NyZWF0ZUZpZWxkUHJvcHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODMpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3N0cnVjdHVyZV9wbGFpbl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4KTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NCk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG5cXG5cXG5cXG52YXIgcHJvcHNUb05vdFVwZGF0ZUZvciA9IFsnX3JlZHV4Rm9ybSddO1xcblxcbnZhciBjcmVhdGVDb25uZWN0ZWRGaWVsZHMgPSBmdW5jdGlvbiBjcmVhdGVDb25uZWN0ZWRGaWVsZHMoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICB0b0pTID0gX3JlZi50b0pTLFxcbiAgICAgIHNpemUgPSBfcmVmLnNpemU7XFxuXFxuXFxuICB2YXIgZ2V0U3luY0Vycm9yID0gZnVuY3Rpb24gZ2V0U3luY0Vycm9yKHN5bmNFcnJvcnMsIG5hbWUpIHtcXG4gICAgdmFyIGVycm9yID0gZ2V0SW4oc3luY0Vycm9ycywgbmFtZSk7XFxuICAgIC8vIEJlY2F1c2UgdGhlIGVycm9yIGZvciB0aGlzIGZpZWxkIG1pZ2h0IG5vdCBiZSBhdCBhIGxldmVsIGluIHRoZSBlcnJvciBzdHJ1Y3R1cmUgd2hlcmVcXG4gICAgLy8gaXQgY2FuIGJlIHNldCBkaXJlY3RseSwgaXQgbWlnaHQgbmVlZCB0byBiZSB1bndyYXBwZWQgZnJvbSB0aGUgX2Vycm9yIHByb3BlcnR5XFxuICAgIHJldHVybiBlcnJvciAmJiBlcnJvci5fZXJyb3IgPyBlcnJvci5fZXJyb3IgOiBlcnJvcjtcXG4gIH07XFxuXFxuICB2YXIgZ2V0U3luY1dhcm5pbmcgPSBmdW5jdGlvbiBnZXRTeW5jV2FybmluZyhzeW5jV2FybmluZ3MsIG5hbWUpIHtcXG4gICAgdmFyIHdhcm5pbmcgPSBnZXRJbihzeW5jV2FybmluZ3MsIG5hbWUpO1xcbiAgICAvLyBCZWNhdXNlIHRoZSB3YXJuaW5nIGZvciB0aGlzIGZpZWxkIG1pZ2h0IG5vdCBiZSBhdCBhIGxldmVsIGluIHRoZSB3YXJuaW5nIHN0cnVjdHVyZSB3aGVyZVxcbiAgICAvLyBpdCBjYW4gYmUgc2V0IGRpcmVjdGx5LCBpdCBtaWdodCBuZWVkIHRvIGJlIHVud3JhcHBlZCBmcm9tIHRoZSBfd2FybmluZyBwcm9wZXJ0eVxcbiAgICByZXR1cm4gd2FybmluZyAmJiB3YXJuaW5nLl93YXJuaW5nID8gd2FybmluZy5fd2FybmluZyA6IHdhcm5pbmc7XFxuICB9O1xcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkcyA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhDb25uZWN0ZWRGaWVsZHMsIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZHMocHJvcHMpIHtcXG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdGVkRmllbGRzKTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGRzLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoQ29ubmVjdGVkRmllbGRzKSkuY2FsbCh0aGlzLCBwcm9wcykpO1xcblxcbiAgICAgIF90aGlzLmhhbmRsZUNoYW5nZSA9IF90aGlzLmhhbmRsZUNoYW5nZS5iaW5kKF90aGlzKTtcXG4gICAgICBfdGhpcy5oYW5kbGVGb2N1cyA9IF90aGlzLmhhbmRsZUZvY3VzLmJpbmQoX3RoaXMpO1xcbiAgICAgIF90aGlzLmhhbmRsZUJsdXIgPSBfdGhpcy5oYW5kbGVCbHVyLmJpbmQoX3RoaXMpO1xcblxcbiAgICAgIF90aGlzLm9uQ2hhbmdlRm5zID0gcHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlQ2hhbmdlKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgIH0sIHt9KTtcXG5cXG4gICAgICBfdGhpcy5vbkZvY3VzRm5zID0gcHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgIGFjY1tuYW1lXSA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUZvY3VzKG5hbWUpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgfSwge30pO1xcblxcbiAgICAgIF90aGlzLm9uQmx1ckZucyA9IHByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUJsdXIobmFtZSwgZXZlbnQpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgfSwge30pO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGRzLCBbe1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XFxuXFxuICAgICAgICBpZiAodGhpcy5wcm9wcy5uYW1lcyAhPT0gbmV4dFByb3BzLm5hbWVzICYmIChzaXplKHRoaXMucHJvcHMubmFtZXMpICE9PSBzaXplKG5leHRQcm9wcy5uYW1lcykgfHwgbmV4dFByb3BzLm5hbWVzLnNvbWUoZnVuY3Rpb24gKG5leHROYW1lKSB7XFxuICAgICAgICAgIHJldHVybiAhX3RoaXMyLnByb3BzLl9maWVsZHNbbmV4dE5hbWVdO1xcbiAgICAgICAgfSkpKSB7XFxuXFxuICAgICAgICAgIC8vIG5hbWVzIGlzIGNoYW5nZWQuIFRoZSBjYWNoZWQgZXZlbnQgaGFuZGxlcnMgbmVlZCB0byBiZSB1cGRhdGVkXFxuICAgICAgICAgIHRoaXMub25DaGFuZ2VGbnMgPSBuZXh0UHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQ2hhbmdlKG5hbWUsIGV2ZW50KTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgIH0sIHt9KTtcXG5cXG4gICAgICAgICAgdGhpcy5vbkZvY3VzRm5zID0gbmV4dFByb3BzLm5hbWVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBuYW1lKSB7XFxuICAgICAgICAgICAgYWNjW25hbWVdID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5oYW5kbGVGb2N1cyhuYW1lKTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIHJldHVybiBhY2M7XFxuICAgICAgICAgIH0sIHt9KTtcXG5cXG4gICAgICAgICAgdGhpcy5vbkJsdXJGbnMgPSBuZXh0UHJvcHMubmFtZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIG5hbWUpIHtcXG4gICAgICAgICAgICBhY2NbbmFtZV0gPSBmdW5jdGlvbiAoZXZlbnQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBfdGhpczIuaGFuZGxlQmx1cihuYW1lLCBldmVudCk7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICByZXR1cm4gYWNjO1xcbiAgICAgICAgICB9LCB7fSk7XFxuICAgICAgICB9XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XFxuXFxuICAgICAgICB2YXIgbmV4dFByb3BzS2V5cyA9IE9iamVjdC5rZXlzKG5leHRQcm9wcyk7XFxuICAgICAgICB2YXIgdGhpc1Byb3BzS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMucHJvcHMpO1xcbiAgICAgICAgcmV0dXJuIG5leHRQcm9wc0tleXMubGVuZ3RoICE9PSB0aGlzUHJvcHNLZXlzLmxlbmd0aCB8fCBuZXh0UHJvcHNLZXlzLnNvbWUoZnVuY3Rpb24gKHByb3ApIHtcXG4gICAgICAgICAgcmV0dXJuICF+cHJvcHNUb05vdFVwZGF0ZUZvci5pbmRleE9mKHByb3ApICYmICFkZWVwRXF1YWwoX3RoaXMzLnByb3BzW3Byb3BdLCBuZXh0UHJvcHNbcHJvcF0pO1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaXNEaXJ0eScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRGlydHkoKSB7XFxuICAgICAgICB2YXIgX2ZpZWxkcyA9IHRoaXMucHJvcHMuX2ZpZWxkcztcXG5cXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhfZmllbGRzKS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XFxuICAgICAgICAgIHJldHVybiBfZmllbGRzW25hbWVdLmRpcnR5O1xcbiAgICAgICAgfSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0VmFsdWVzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VmFsdWVzKCkge1xcbiAgICAgICAgdmFyIF9maWVsZHMgPSB0aGlzLnByb3BzLl9maWVsZHM7XFxuXFxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX2ZpZWxkcykucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgbmFtZSkge1xcbiAgICAgICAgICByZXR1cm4gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zX19zdHJ1Y3R1cmVfcGxhaW5fX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10uc2V0SW4oYWNjdW11bGF0b3IsIG5hbWUsIF9maWVsZHNbbmFtZV0udmFsdWUpO1xcbiAgICAgICAgfSwge30pO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2dldFJlbmRlcmVkQ29tcG9uZW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVuZGVyZWRDb21wb25lbnQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLnJlbmRlcmVkQ29tcG9uZW50O1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2hhbmRsZUNoYW5nZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhbmRsZUNoYW5nZShuYW1lLCBldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMuZGlzcGF0Y2gsXFxuICAgICAgICAgICAgcGFyc2UgPSBfcHJvcHMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzLm5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBfcmVkdXhGb3JtID0gX3Byb3BzLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICB2YXIgdmFsdWUgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19ldmVudHNfb25DaGFuZ2VWYWx1ZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoZXZlbnQsIHsgbmFtZTogbmFtZSwgcGFyc2U6IHBhcnNlLCBub3JtYWxpemU6IG5vcm1hbGl6ZSB9KTtcXG5cXG4gICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uY2hhbmdlKG5hbWUsIHZhbHVlKSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnaGFuZGxlRm9jdXMnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYW5kbGVGb2N1cyhuYW1lKSB7XFxuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgZGlzcGF0Y2ggPSBfcHJvcHMyLmRpc3BhdGNoLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMyLl9yZWR1eEZvcm07XFxuXFxuICAgICAgICBkaXNwYXRjaChfcmVkdXhGb3JtLmZvY3VzKG5hbWUpKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdoYW5kbGVCbHVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gaGFuZGxlQmx1cihuYW1lLCBldmVudCkge1xcbiAgICAgICAgdmFyIF9wcm9wczMgPSB0aGlzLnByb3BzLFxcbiAgICAgICAgICAgIGRpc3BhdGNoID0gX3Byb3BzMy5kaXNwYXRjaCxcXG4gICAgICAgICAgICBwYXJzZSA9IF9wcm9wczMucGFyc2UsXFxuICAgICAgICAgICAgbm9ybWFsaXplID0gX3Byb3BzMy5ub3JtYWxpemUsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczMuX3JlZHV4Rm9ybTtcXG5cXG4gICAgICAgIHZhciB2YWx1ZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX2V2ZW50c19vbkNoYW5nZVZhbHVlX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShldmVudCwgeyBuYW1lOiBuYW1lLCBwYXJzZTogcGFyc2UsIG5vcm1hbGl6ZTogbm9ybWFsaXplIH0pO1xcblxcbiAgICAgICAgLy8gZGlzcGF0Y2ggYmx1ciBhY3Rpb25cXG4gICAgICAgIGRpc3BhdGNoKF9yZWR1eEZvcm0uYmx1cihuYW1lLCB2YWx1ZSkpO1xcblxcbiAgICAgICAgLy8gY2FsbCBwb3N0LWJsdXIgY2FsbGJhY2tcXG4gICAgICAgIGlmIChfcmVkdXhGb3JtLmFzeW5jVmFsaWRhdGUpIHtcXG4gICAgICAgICAgX3JlZHV4Rm9ybS5hc3luY1ZhbGlkYXRlKG5hbWUsIHZhbHVlKTtcXG4gICAgICAgIH1cXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdyZW5kZXInLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgICB2YXIgX3RoaXM0ID0gdGhpcztcXG5cXG4gICAgICAgIHZhciBfcHJvcHM0ID0gdGhpcy5wcm9wcyxcXG4gICAgICAgICAgICBjb21wb25lbnQgPSBfcHJvcHM0LmNvbXBvbmVudCxcXG4gICAgICAgICAgICB3aXRoUmVmID0gX3Byb3BzNC53aXRoUmVmLFxcbiAgICAgICAgICAgIF9maWVsZHMgPSBfcHJvcHM0Ll9maWVsZHMsXFxuICAgICAgICAgICAgX3JlZHV4Rm9ybSA9IF9wcm9wczQuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wczQsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnX2ZpZWxkcycsICdfcmVkdXhGb3JtJ10pO1xcblxcbiAgICAgICAgdmFyIHNlY3Rpb25QcmVmaXggPSBfcmVkdXhGb3JtLnNlY3Rpb25QcmVmaXg7XFxuXFxuICAgICAgICB2YXIgX09iamVjdCRrZXlzJHJlZHVjZSA9IE9iamVjdC5rZXlzKF9maWVsZHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIG5hbWUpIHtcXG4gICAgICAgICAgdmFyIGNvbm5lY3RlZFByb3BzID0gX2ZpZWxkc1tuYW1lXTtcXG5cXG4gICAgICAgICAgdmFyIF9jcmVhdGVGaWVsZFByb3BzID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fY3JlYXRlRmllbGRQcm9wc19fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkoeyBnZXRJbjogZ2V0SW4sIHRvSlM6IHRvSlMgfSwgbmFtZSwgX2V4dGVuZHMoe30sIGNvbm5lY3RlZFByb3BzLCByZXN0LCB7XFxuICAgICAgICAgICAgb25CbHVyOiBfdGhpczQub25CbHVyRm5zW25hbWVdLFxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBfdGhpczQub25DaGFuZ2VGbnNbbmFtZV0sXFxuICAgICAgICAgICAgb25Gb2N1czogX3RoaXM0Lm9uRm9jdXNGbnNbbmFtZV1cXG4gICAgICAgICAgfSkpLFxcbiAgICAgICAgICAgICAgY3VzdG9tID0gX2NyZWF0ZUZpZWxkUHJvcHMuY3VzdG9tLFxcbiAgICAgICAgICAgICAgZmllbGRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfY3JlYXRlRmllbGRQcm9wcywgWydjdXN0b20nXSk7XFxuXFxuICAgICAgICAgIGFjY3VtdWxhdG9yLmN1c3RvbSA9IGN1c3RvbTtcXG4gICAgICAgICAgdmFyIGZpZWxkTmFtZSA9IHNlY3Rpb25QcmVmaXggPyBuYW1lLnJlcGxhY2Uoc2VjdGlvblByZWZpeCArICcuJywgJycpIDogbmFtZTtcXG4gICAgICAgICAgcmV0dXJuIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBmaWVsZE5hbWUsIGZpZWxkUHJvcHMpO1xcbiAgICAgICAgfSwge30pLFxcbiAgICAgICAgICAgIGN1c3RvbSA9IF9PYmplY3Qka2V5cyRyZWR1Y2UuY3VzdG9tLFxcbiAgICAgICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9PYmplY3Qka2V5cyRyZWR1Y2UsIFsnY3VzdG9tJ10pO1xcblxcbiAgICAgICAgaWYgKHdpdGhSZWYpIHtcXG4gICAgICAgICAgcHJvcHMucmVmID0gJ3JlbmRlcmVkQ29tcG9uZW50JztcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIGN1c3RvbSkpO1xcbiAgICAgIH1cXG4gICAgfV0pO1xcblxcbiAgICByZXR1cm4gQ29ubmVjdGVkRmllbGRzO1xcbiAgfShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbiAgQ29ubmVjdGVkRmllbGRzLnByb3BUeXBlcyA9IHtcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIF9maWVsZHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3QuaXNSZXF1aXJlZCxcXG4gICAgcHJvcHM6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZXMgPSBvd25Qcm9wcy5uYW1lcyxcXG4gICAgICAgIF9vd25Qcm9wcyRfcmVkdXhGb3JtID0gb3duUHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgIGluaXRpYWxWYWx1ZXMgPSBfb3duUHJvcHMkX3JlZHV4Rm9ybS5pbml0aWFsVmFsdWVzLFxcbiAgICAgICAgZ2V0Rm9ybVN0YXRlID0gX293blByb3BzJF9yZWR1eEZvcm0uZ2V0Rm9ybVN0YXRlO1xcblxcbiAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgcmV0dXJuIHtcXG4gICAgICBfZmllbGRzOiBuYW1lcy5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBuYW1lKSB7XFxuICAgICAgICB2YXIgaW5pdGlhbFN0YXRlID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbC4nICsgbmFtZSk7XFxuICAgICAgICB2YXIgaW5pdGlhbCA9IGluaXRpYWxTdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5pdGlhbFN0YXRlIDogaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldEluKGZvcm1TdGF0ZSwgJ3ZhbHVlcy4nICsgbmFtZSk7XFxuICAgICAgICB2YXIgc3luY0Vycm9yID0gZ2V0U3luY0Vycm9yKGdldEluKGZvcm1TdGF0ZSwgJ3N5bmNFcnJvcnMnKSwgbmFtZSk7XFxuICAgICAgICB2YXIgc3luY1dhcm5pbmcgPSBnZXRTeW5jV2FybmluZyhnZXRJbihmb3JtU3RhdGUsICdzeW5jV2FybmluZ3MnKSwgbmFtZSk7XFxuICAgICAgICB2YXIgc3VibWl0dGluZyA9IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdHRpbmcnKTtcXG4gICAgICAgIHZhciBwcmlzdGluZSA9IHZhbHVlID09PSBpbml0aWFsO1xcbiAgICAgICAgYWNjdW11bGF0b3JbbmFtZV0gPSB7XFxuICAgICAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lKSxcXG4gICAgICAgICAgYXN5bmNWYWxpZGF0aW5nOiBnZXRJbihmb3JtU3RhdGUsICdhc3luY1ZhbGlkYXRpbmcnKSA9PT0gbmFtZSxcXG4gICAgICAgICAgZGlydHk6ICFwcmlzdGluZSxcXG4gICAgICAgICAgcHJpc3RpbmU6IHByaXN0aW5lLFxcbiAgICAgICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICAgICAgc3VibWl0RXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEVycm9ycy4nICsgbmFtZSksXFxuICAgICAgICAgIHN1Ym1pdEZhaWxlZDogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RmFpbGVkJyksXFxuICAgICAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgICAgIHN5bmNFcnJvcjogc3luY0Vycm9yLFxcbiAgICAgICAgICBzeW5jV2FybmluZzogc3luY1dhcm5pbmcsXFxuICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICAgICAgX3ZhbHVlOiBvd25Qcm9wcy52YWx1ZSAvLyBzYXZlIHZhbHVlIHBhc3NlZCBpbiAoZm9yIGNoZWNrYm94ZXMpXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yO1xcbiAgICAgIH0sIHt9KVxcbiAgICB9O1xcbiAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgd2l0aFJlZjogdHJ1ZSB9KTtcXG4gIHJldHVybiBjb25uZWN0b3IoQ29ubmVjdGVkRmllbGRzKTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUNvbm5lY3RlZEZpZWxkcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9fQ29ubmVjdGVkRmllbGRBcnJheV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyMzUpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfX3V0aWxfc2hhbGxvd0NvbXBhcmVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDgpO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblxcXCIpOyB9IH1cXG5cXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXFxcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFxcXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXFxcIm9iamVjdFxcXCIgfHwgdHlwZW9mIGNhbGwgPT09IFxcXCJmdW5jdGlvblxcXCIpID8gY2FsbCA6IHNlbGY7IH1cXG5cXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcXFwiZnVuY3Rpb25cXFwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcXFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHRvQXJyYXkgPSBmdW5jdGlvbiB0b0FycmF5KHZhbHVlKSB7XFxuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XFxufTtcXG5cXG52YXIgd3JhcEVycm9yID0gZnVuY3Rpb24gd3JhcEVycm9yKGZuLCBrZXkpIHtcXG4gIHJldHVybiBmbiAmJiBmdW5jdGlvbiAoKSB7XFxuICAgIHZhciB2YWxpZGF0b3JzID0gdG9BcnJheShmbik7XFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xcbiAgICAgIHZhciByZXN1bHQgPSB2YWxpZGF0b3JzW2ldLmFwcGx5KHZhbGlkYXRvcnMsIGFyZ3VtZW50cyk7XFxuICAgICAgaWYgKHJlc3VsdCkge1xcbiAgICAgICAgcmV0dXJuIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCByZXN1bHQpO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgfTtcXG59O1xcblxcbnZhciBjcmVhdGVGaWVsZEFycmF5ID0gZnVuY3Rpb24gY3JlYXRlRmllbGRBcnJheShfcmVmMikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYyLmRlZXBFcXVhbCxcXG4gICAgICBnZXRJbiA9IF9yZWYyLmdldEluLFxcbiAgICAgIHNpemUgPSBfcmVmMi5zaXplO1xcblxcblxcbiAgdmFyIENvbm5lY3RlZEZpZWxkQXJyYXkgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yX19Db25uZWN0ZWRGaWVsZEFycmF5X19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7IGRlZXBFcXVhbDogZGVlcEVxdWFsLCBnZXRJbjogZ2V0SW4sIHNpemU6IHNpemUgfSk7XFxuXFxuICB2YXIgRmllbGRBcnJheSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICAgIF9pbmhlcml0cyhGaWVsZEFycmF5LCBfQ29tcG9uZW50KTtcXG5cXG4gICAgZnVuY3Rpb24gRmllbGRBcnJheShwcm9wcywgY29udGV4dCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGaWVsZEFycmF5KTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoRmllbGRBcnJheS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZpZWxkQXJyYXkpKS5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSk7XFxuXFxuICAgICAgaWYgKCFjb250ZXh0Ll9yZWR1eEZvcm0pIHtcXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmllbGRBcnJheSBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICAgIH1cXG4gICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG5cXG4gICAgX2NyZWF0ZUNsYXNzKEZpZWxkQXJyYXksIFt7XFxuICAgICAga2V5OiAnc2hvdWxkQ29tcG9uZW50VXBkYXRlJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XFxuICAgICAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fdXRpbF9zaGFsbG93Q29tcGFyZV9fW1xcXCJhXFxcIiAvKiBkZWZhdWx0ICovXSkodGhpcywgbmV4dFByb3BzLCBuZXh0U3RhdGUpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxNb3VudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcXG4gICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xcblxcbiAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0ucmVnaXN0ZXIodGhpcy5uYW1lLCAnRmllbGRBcnJheScsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIHdyYXBFcnJvcihfdGhpczIucHJvcHMudmFsaWRhdGUsICdfZXJyb3InKTtcXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgcmV0dXJuIHdyYXBFcnJvcihfdGhpczIucHJvcHMud2FybiwgJ193YXJuaW5nJyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm5hbWUgIT09IG5leHRQcm9wcy5uYW1lKSB7XFxuICAgICAgICAgIC8vIHVucmVnaXN0ZXIgb2xkIG5hbWVcXG4gICAgICAgICAgdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0udW5yZWdpc3Rlcih0aGlzLm5hbWUpO1xcbiAgICAgICAgICAvLyByZWdpc3RlciBuZXcgbmFtZVxcbiAgICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS5yZWdpc3RlcihPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgbmV4dFByb3BzLm5hbWUpLCAnRmllbGRBcnJheScpO1xcbiAgICAgICAgfVxcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XFxuICAgICAgICB0aGlzLmNvbnRleHQuX3JlZHV4Rm9ybS51bnJlZ2lzdGVyKHRoaXMubmFtZSk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAnZ2V0UmVuZGVyZWRDb21wb25lbnQnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZW5kZXJlZENvbXBvbmVudCgpIHtcXG4gICAgICAgIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9pbnZhcmlhbnRfX19kZWZhdWx0KCkodGhpcy5wcm9wcy53aXRoUmVmLCAnSWYgeW91IHdhbnQgdG8gYWNjZXNzIGdldFJlbmRlcmVkQ29tcG9uZW50KCksICcgKyAneW91IG11c3Qgc3BlY2lmeSBhIHdpdGhSZWYgcHJvcCB0byBGaWVsZEFycmF5Jyk7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5nZXRSZW5kZXJlZENvbXBvbmVudCgpO1xcbiAgICAgIH1cXG4gICAgfSwge1xcbiAgICAgIGtleTogJ3JlbmRlcicsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoQ29ubmVjdGVkRmllbGRBcnJheSwgX2V4dGVuZHMoe30sIHRoaXMucHJvcHMsIHtcXG4gICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxcbiAgICAgICAgICBzeW5jRXJyb3I6IHRoaXMuc3luY0Vycm9yLFxcbiAgICAgICAgICBzeW5jV2FybmluZzogdGhpcy5zeW5jV2FybmluZyxcXG4gICAgICAgICAgX3JlZHV4Rm9ybTogdGhpcy5jb250ZXh0Ll9yZWR1eEZvcm0sXFxuICAgICAgICAgIHJlZjogJ2Nvbm5lY3RlZCdcXG4gICAgICAgIH0pKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICduYW1lJyxcXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcXG4gICAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X191dGlsX3ByZWZpeE5hbWVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHRoaXMuY29udGV4dCwgdGhpcy5wcm9wcy5uYW1lKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5yZWZzLmNvbm5lY3RlZC5nZXRXcmFwcGVkSW5zdGFuY2UoKS52YWx1ZTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIEZpZWxkQXJyYXk7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBGaWVsZEFycmF5LnByb3BUeXBlcyA9IHtcXG4gICAgbmFtZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZy5pc1JlcXVpcmVkLFxcbiAgICBjb21wb25lbnQ6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LFxcbiAgICB2YWxpZGF0ZTogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsXFxuICAgIHdhcm46IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5mdW5jLFxcbiAgICB3aXRoUmVmOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYm9vbFxcbiAgfTtcXG4gIEZpZWxkQXJyYXkuY29udGV4dFR5cGVzID0ge1xcbiAgICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgcmV0dXJuIEZpZWxkQXJyYXk7XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGaWVsZEFycmF5KTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfbG9kYXNoX2VzX21hcFZhbHVlc19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg2NCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19yZWR1eF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg0NSk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fY3JlYXRlRmllbGRBcnJheVByb3BzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDIzNik7XFxuXFxuXFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxcblxcbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcXFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXFxcIik7IH0gfVxcblxcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcXFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXFxcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcXFwib2JqZWN0XFxcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXFxcImZ1bmN0aW9uXFxcIikgPyBjYWxsIDogc2VsZjsgfVxcblxcbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFxcXCJmdW5jdGlvblxcXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFxcXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XFxuXFxuXFxuXFxuXFxuXFxuXFxuXFxudmFyIHByb3BzVG9Ob3RVcGRhdGVGb3IgPSBbJ19yZWR1eEZvcm0nLCAndmFsdWUnXTtcXG5cXG52YXIgY3JlYXRlQ29ubmVjdGVkRmllbGRBcnJheSA9IGZ1bmN0aW9uIGNyZWF0ZUNvbm5lY3RlZEZpZWxkQXJyYXkoX3JlZikge1xcbiAgdmFyIGRlZXBFcXVhbCA9IF9yZWYuZGVlcEVxdWFsLFxcbiAgICAgIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBzaXplID0gX3JlZi5zaXplO1xcblxcblxcbiAgdmFyIGdldFN5bmNFcnJvciA9IGZ1bmN0aW9uIGdldFN5bmNFcnJvcihzeW5jRXJyb3JzLCBuYW1lKSB7XFxuICAgIC8vIEZvciBhbiBhcnJheSwgdGhlIGVycm9yIGNhbiBfT05MWV8gYmUgdW5kZXIgX2Vycm9yLlxcbiAgICAvLyBUaGlzIGlzIHdoeSB0aGlzIGdldFN5bmNFcnJvciBpcyBub3QgdGhlIHNhbWUgYXMgdGhlXFxuICAgIC8vIG9uZSBpbiBGaWVsZC5cXG4gICAgcmV0dXJuIGdldEluKHN5bmNFcnJvcnMsIG5hbWUgKyAnLl9lcnJvcicpO1xcbiAgfTtcXG5cXG4gIHZhciBnZXRTeW5jV2FybmluZyA9IGZ1bmN0aW9uIGdldFN5bmNXYXJuaW5nKHN5bmNXYXJuaW5ncywgbmFtZSkge1xcbiAgICAvLyBGb3IgYW4gYXJyYXksIHRoZSB3YXJuaW5nIGNhbiBfT05MWV8gYmUgdW5kZXIgX3dhcm5pbmcuXFxuICAgIC8vIFRoaXMgaXMgd2h5IHRoaXMgZ2V0U3luY0Vycm9yIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGVcXG4gICAgLy8gb25lIGluIEZpZWxkLlxcbiAgICByZXR1cm4gZ2V0SW4oc3luY1dhcm5pbmdzLCBuYW1lICsgJy5fd2FybmluZycpO1xcbiAgfTtcXG5cXG4gIHZhciBDb25uZWN0ZWRGaWVsZEFycmF5ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcXG4gICAgX2luaGVyaXRzKENvbm5lY3RlZEZpZWxkQXJyYXksIF9Db21wb25lbnQpO1xcblxcbiAgICBmdW5jdGlvbiBDb25uZWN0ZWRGaWVsZEFycmF5KCkge1xcbiAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDb25uZWN0ZWRGaWVsZEFycmF5KTtcXG5cXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoQ29ubmVjdGVkRmllbGRBcnJheS5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKENvbm5lY3RlZEZpZWxkQXJyYXkpKS5jYWxsKHRoaXMpKTtcXG5cXG4gICAgICBfdGhpcy5nZXRWYWx1ZSA9IF90aGlzLmdldFZhbHVlLmJpbmQoX3RoaXMpO1xcbiAgICAgIHJldHVybiBfdGhpcztcXG4gICAgfVxcblxcbiAgICBfY3JlYXRlQ2xhc3MoQ29ubmVjdGVkRmllbGRBcnJheSwgW3tcXG4gICAgICBrZXk6ICdzaG91bGRDb21wb25lbnRVcGRhdGUnLFxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcXG5cXG4gICAgICAgIC8vIFVwZGF0ZSBpZiB0aGUgZWxlbWVudHMgb2YgdGhlIHZhbHVlIGFycmF5IHdhcyB1cGRhdGVkLlxcbiAgICAgICAgdmFyIHRoaXNWYWx1ZSA9IHRoaXMucHJvcHMudmFsdWU7XFxuICAgICAgICB2YXIgbmV4dFZhbHVlID0gbmV4dFByb3BzLnZhbHVlO1xcblxcbiAgICAgICAgaWYgKHRoaXNWYWx1ZSAmJiBuZXh0VmFsdWUpIHtcXG4gICAgICAgICAgaWYgKHRoaXNWYWx1ZS5sZW5ndGggIT09IG5leHRWYWx1ZS5sZW5ndGggfHwgdGhpc1ZhbHVlLmV2ZXJ5KGZ1bmN0aW9uICh2YWwpIHtcXG4gICAgICAgICAgICByZXR1cm4gbmV4dFZhbHVlLnNvbWUoZnVuY3Rpb24gKG5leHQpIHtcXG4gICAgICAgICAgICAgIHJldHVybiBkZWVwRXF1YWwodmFsLCBuZXh0KTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgfSkpIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgdmFyIG5leHRQcm9wc0tleXMgPSBPYmplY3Qua2V5cyhuZXh0UHJvcHMpO1xcbiAgICAgICAgdmFyIHRoaXNQcm9wc0tleXMgPSBPYmplY3Qua2V5cyh0aGlzLnByb3BzKTtcXG4gICAgICAgIHJldHVybiBuZXh0UHJvcHNLZXlzLmxlbmd0aCAhPT0gdGhpc1Byb3BzS2V5cy5sZW5ndGggfHwgbmV4dFByb3BzS2V5cy5zb21lKGZ1bmN0aW9uIChwcm9wKSB7XFxuICAgICAgICAgIC8vIHVzZWZ1bCB0byBkZWJ1ZyByZXJlbmRlcnNcXG4gICAgICAgICAgLy8gaWYgKCFwbGFpbi5kZWVwRXF1YWwodGhpcy5wcm9wc1sgcHJvcCBdLCBuZXh0UHJvcHNbIHByb3AgXSkpIHtcXG4gICAgICAgICAgLy8gICBjb25zb2xlLmluZm8ocHJvcCwgJ2NoYW5nZWQnLCB0aGlzLnByb3BzWyBwcm9wIF0sICc9PT4nLCBuZXh0UHJvcHNbIHByb3AgXSlcXG4gICAgICAgICAgLy8gfVxcbiAgICAgICAgICByZXR1cm4gIX5wcm9wc1RvTm90VXBkYXRlRm9yLmluZGV4T2YocHJvcCkgJiYgIWRlZXBFcXVhbChfdGhpczIucHJvcHNbcHJvcF0sIG5leHRQcm9wc1twcm9wXSk7XFxuICAgICAgICB9KTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRSZW5kZXJlZENvbXBvbmVudCcsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJlbmRlcmVkQ29tcG9uZW50KCkge1xcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmcy5yZW5kZXJlZENvbXBvbmVudDtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdnZXRWYWx1ZScsXFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFZhbHVlKGluZGV4KSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZSAmJiBnZXRJbih0aGlzLnByb3BzLnZhbHVlLCBpbmRleCk7XFxuICAgICAgfVxcbiAgICB9LCB7XFxuICAgICAga2V5OiAncmVuZGVyJyxcXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgICAgY29tcG9uZW50ID0gX3Byb3BzLmNvbXBvbmVudCxcXG4gICAgICAgICAgICB3aXRoUmVmID0gX3Byb3BzLndpdGhSZWYsXFxuICAgICAgICAgICAgbmFtZSA9IF9wcm9wcy5uYW1lLFxcbiAgICAgICAgICAgIF9yZWR1eEZvcm0gPSBfcHJvcHMuX3JlZHV4Rm9ybSxcXG4gICAgICAgICAgICB2YWxpZGF0ZSA9IF9wcm9wcy52YWxpZGF0ZSxcXG4gICAgICAgICAgICB3YXJuID0gX3Byb3BzLndhcm4sXFxuICAgICAgICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMsIFsnY29tcG9uZW50JywgJ3dpdGhSZWYnLCAnbmFtZScsICdfcmVkdXhGb3JtJywgJ3ZhbGlkYXRlJywgJ3dhcm4nXSk7XFxuXFxuICAgICAgICB2YXIgcHJvcHMgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80X19jcmVhdGVGaWVsZEFycmF5UHJvcHNfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKGdldEluLCBuYW1lLCBfcmVkdXhGb3JtLmZvcm0sIF9yZWR1eEZvcm0uc2VjdGlvblByZWZpeCwgdGhpcy5nZXRWYWx1ZSwgcmVzdCk7XFxuICAgICAgICBpZiAod2l0aFJlZikge1xcbiAgICAgICAgICBwcm9wcy5yZWYgPSAncmVuZGVyZWRDb21wb25lbnQnO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiY3JlYXRlRWxlbWVudFxcXCJdKShjb21wb25lbnQsIHByb3BzKTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdkaXJ0eScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5kaXJ0eTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICdwcmlzdGluZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5wcmlzdGluZTtcXG4gICAgICB9XFxuICAgIH0sIHtcXG4gICAgICBrZXk6ICd2YWx1ZScsXFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XFxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy52YWx1ZTtcXG4gICAgICB9XFxuICAgIH1dKTtcXG5cXG4gICAgcmV0dXJuIENvbm5lY3RlZEZpZWxkQXJyYXk7XFxuICB9KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuICBDb25uZWN0ZWRGaWVsZEFycmF5LnByb3BUeXBlcyA9IHtcXG4gICAgY29tcG9uZW50OiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub25lT2ZUeXBlKFtfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYywgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLnN0cmluZ10pLmlzUmVxdWlyZWQsXFxuICAgIHByb3BzOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxuICB9O1xcblxcbiAgQ29ubmVjdGVkRmllbGRBcnJheS5jb250ZXh0VHlwZXMgPSB7XFxuICAgIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG4gIH07XFxuXFxuICB2YXIgY29ubmVjdG9yID0gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMl9yZWFjdF9yZWR1eF9fW1xcXCJhXFxcIiAvKiBjb25uZWN0ICovXSkoZnVuY3Rpb24gKHN0YXRlLCBvd25Qcm9wcykge1xcbiAgICB2YXIgbmFtZSA9IG93blByb3BzLm5hbWUsXFxuICAgICAgICBfb3duUHJvcHMkX3JlZHV4Rm9ybSA9IG93blByb3BzLl9yZWR1eEZvcm0sXFxuICAgICAgICBpbml0aWFsVmFsdWVzID0gX293blByb3BzJF9yZWR1eEZvcm0uaW5pdGlhbFZhbHVlcyxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9vd25Qcm9wcyRfcmVkdXhGb3JtLmdldEZvcm1TdGF0ZTtcXG5cXG4gICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgIHZhciBpbml0aWFsID0gZ2V0SW4oZm9ybVN0YXRlLCAnaW5pdGlhbC4nICsgbmFtZSkgfHwgaW5pdGlhbFZhbHVlcyAmJiBnZXRJbihpbml0aWFsVmFsdWVzLCBuYW1lKTtcXG4gICAgdmFyIHZhbHVlID0gZ2V0SW4oZm9ybVN0YXRlLCAndmFsdWVzLicgKyBuYW1lKTtcXG4gICAgdmFyIHN1Ym1pdHRpbmcgPSBnZXRJbihmb3JtU3RhdGUsICdzdWJtaXR0aW5nJyk7XFxuICAgIHZhciBzeW5jRXJyb3IgPSBnZXRTeW5jRXJyb3IoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY0Vycm9ycycpLCBuYW1lKTtcXG4gICAgdmFyIHN5bmNXYXJuaW5nID0gZ2V0U3luY1dhcm5pbmcoZ2V0SW4oZm9ybVN0YXRlLCAnc3luY1dhcm5pbmdzJyksIG5hbWUpO1xcbiAgICB2YXIgcHJpc3RpbmUgPSBkZWVwRXF1YWwodmFsdWUsIGluaXRpYWwpO1xcbiAgICByZXR1cm4ge1xcbiAgICAgIGFzeW5jRXJyb3I6IGdldEluKGZvcm1TdGF0ZSwgJ2FzeW5jRXJyb3JzLicgKyBuYW1lICsgJy5fZXJyb3InKSxcXG4gICAgICBkaXJ0eTogIXByaXN0aW5lLFxcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSxcXG4gICAgICBzdGF0ZTogZ2V0SW4oZm9ybVN0YXRlLCAnZmllbGRzLicgKyBuYW1lKSxcXG4gICAgICBzdWJtaXRFcnJvcjogZ2V0SW4oZm9ybVN0YXRlLCAnc3VibWl0RXJyb3JzLicgKyBuYW1lICsgJy5fZXJyb3InKSxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IGdldEluKGZvcm1TdGF0ZSwgJ3N1Ym1pdEZhaWxlZCcpLFxcbiAgICAgIHN1Ym1pdHRpbmc6IHN1Ym1pdHRpbmcsXFxuICAgICAgc3luY0Vycm9yOiBzeW5jRXJyb3IsXFxuICAgICAgc3luY1dhcm5pbmc6IHN5bmNXYXJuaW5nLFxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcXG4gICAgICBsZW5ndGg6IHNpemUodmFsdWUpXFxuICAgIH07XFxuICB9LCBmdW5jdGlvbiAoZGlzcGF0Y2gsIG93blByb3BzKSB7XFxuICAgIHZhciBuYW1lID0gb3duUHJvcHMubmFtZSxcXG4gICAgICAgIF9yZWR1eEZvcm0gPSBvd25Qcm9wcy5fcmVkdXhGb3JtO1xcbiAgICB2YXIgYXJyYXlJbnNlcnQgPSBfcmVkdXhGb3JtLmFycmF5SW5zZXJ0LFxcbiAgICAgICAgYXJyYXlNb3ZlID0gX3JlZHV4Rm9ybS5hcnJheU1vdmUsXFxuICAgICAgICBhcnJheVBvcCA9IF9yZWR1eEZvcm0uYXJyYXlQb3AsXFxuICAgICAgICBhcnJheVB1c2ggPSBfcmVkdXhGb3JtLmFycmF5UHVzaCxcXG4gICAgICAgIGFycmF5UmVtb3ZlID0gX3JlZHV4Rm9ybS5hcnJheVJlbW92ZSxcXG4gICAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3JlZHV4Rm9ybS5hcnJheVJlbW92ZUFsbCxcXG4gICAgICAgIGFycmF5U2hpZnQgPSBfcmVkdXhGb3JtLmFycmF5U2hpZnQsXFxuICAgICAgICBhcnJheVNwbGljZSA9IF9yZWR1eEZvcm0uYXJyYXlTcGxpY2UsXFxuICAgICAgICBhcnJheVN3YXAgPSBfcmVkdXhGb3JtLmFycmF5U3dhcCxcXG4gICAgICAgIGFycmF5VW5zaGlmdCA9IF9yZWR1eEZvcm0uYXJyYXlVbnNoaWZ0O1xcblxcbiAgICByZXR1cm4gT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9sb2Rhc2hfZXNfbWFwVmFsdWVzX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKSh7XFxuICAgICAgYXJyYXlJbnNlcnQ6IGFycmF5SW5zZXJ0LFxcbiAgICAgIGFycmF5TW92ZTogYXJyYXlNb3ZlLFxcbiAgICAgIGFycmF5UG9wOiBhcnJheVBvcCxcXG4gICAgICBhcnJheVB1c2g6IGFycmF5UHVzaCxcXG4gICAgICBhcnJheVJlbW92ZTogYXJyYXlSZW1vdmUsXFxuICAgICAgYXJyYXlSZW1vdmVBbGw6IGFycmF5UmVtb3ZlQWxsLFxcbiAgICAgIGFycmF5U2hpZnQ6IGFycmF5U2hpZnQsXFxuICAgICAgYXJyYXlTcGxpY2U6IGFycmF5U3BsaWNlLFxcbiAgICAgIGFycmF5U3dhcDogYXJyYXlTd2FwLFxcbiAgICAgIGFycmF5VW5zaGlmdDogYXJyYXlVbnNoaWZ0XFxuICAgIH0sIGZ1bmN0aW9uIChhY3Rpb25DcmVhdG9yKSB7XFxuICAgICAgcmV0dXJuIE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfcmVkdXhfX1tcXFwiYVxcXCIgLyogYmluZEFjdGlvbkNyZWF0b3JzICovXSkoYWN0aW9uQ3JlYXRvci5iaW5kKG51bGwsIG5hbWUpLCBkaXNwYXRjaCk7XFxuICAgIH0pO1xcbiAgfSwgdW5kZWZpbmVkLCB7IHdpdGhSZWY6IHRydWUgfSk7XFxuICByZXR1cm4gY29ubmVjdG9yKENvbm5lY3RlZEZpZWxkQXJyYXkpO1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlQ29ubmVjdGVkRmllbGRBcnJheSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cXG5cXG52YXIgY3JlYXRlRmllbGRBcnJheVByb3BzID0gZnVuY3Rpb24gY3JlYXRlRmllbGRBcnJheVByb3BzKGdldEluLCBuYW1lLCBmb3JtLCBzZWN0aW9uUHJlZml4LCBnZXRWYWx1ZSwgX3JlZikge1xcbiAgdmFyIGFycmF5SW5zZXJ0ID0gX3JlZi5hcnJheUluc2VydCxcXG4gICAgICBhcnJheU1vdmUgPSBfcmVmLmFycmF5TW92ZSxcXG4gICAgICBhcnJheVBvcCA9IF9yZWYuYXJyYXlQb3AsXFxuICAgICAgYXJyYXlQdXNoID0gX3JlZi5hcnJheVB1c2gsXFxuICAgICAgYXJyYXlSZW1vdmUgPSBfcmVmLmFycmF5UmVtb3ZlLFxcbiAgICAgIGFycmF5UmVtb3ZlQWxsID0gX3JlZi5hcnJheVJlbW92ZUFsbCxcXG4gICAgICBhcnJheVNoaWZ0ID0gX3JlZi5hcnJheVNoaWZ0LFxcbiAgICAgIGFycmF5U3BsaWNlID0gX3JlZi5hcnJheVNwbGljZSxcXG4gICAgICBhcnJheVN3YXAgPSBfcmVmLmFycmF5U3dhcCxcXG4gICAgICBhcnJheVVuc2hpZnQgPSBfcmVmLmFycmF5VW5zaGlmdCxcXG4gICAgICBhc3luY0Vycm9yID0gX3JlZi5hc3luY0Vycm9yLFxcbiAgICAgIGRpcnR5ID0gX3JlZi5kaXJ0eSxcXG4gICAgICBsZW5ndGggPSBfcmVmLmxlbmd0aCxcXG4gICAgICBwcmlzdGluZSA9IF9yZWYucHJpc3RpbmUsXFxuICAgICAgc3VibWl0RXJyb3IgPSBfcmVmLnN1Ym1pdEVycm9yLFxcbiAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZSxcXG4gICAgICBzdWJtaXRGYWlsZWQgPSBfcmVmLnN1Ym1pdEZhaWxlZCxcXG4gICAgICBzdWJtaXR0aW5nID0gX3JlZi5zdWJtaXR0aW5nLFxcbiAgICAgIHN5bmNFcnJvciA9IF9yZWYuc3luY0Vycm9yLFxcbiAgICAgIHN5bmNXYXJuaW5nID0gX3JlZi5zeW5jV2FybmluZyxcXG4gICAgICB2YWx1ZSA9IF9yZWYudmFsdWUsXFxuICAgICAgcHJvcHMgPSBfcmVmLnByb3BzLFxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWydhcnJheUluc2VydCcsICdhcnJheU1vdmUnLCAnYXJyYXlQb3AnLCAnYXJyYXlQdXNoJywgJ2FycmF5UmVtb3ZlJywgJ2FycmF5UmVtb3ZlQWxsJywgJ2FycmF5U2hpZnQnLCAnYXJyYXlTcGxpY2UnLCAnYXJyYXlTd2FwJywgJ2FycmF5VW5zaGlmdCcsICdhc3luY0Vycm9yJywgJ2RpcnR5JywgJ2xlbmd0aCcsICdwcmlzdGluZScsICdzdWJtaXRFcnJvcicsICdzdGF0ZScsICdzdWJtaXRGYWlsZWQnLCAnc3VibWl0dGluZycsICdzeW5jRXJyb3InLCAnc3luY1dhcm5pbmcnLCAndmFsdWUnLCAncHJvcHMnXSk7XFxuXFxuICB2YXIgZXJyb3IgPSBzeW5jRXJyb3IgfHwgYXN5bmNFcnJvciB8fCBzdWJtaXRFcnJvcjtcXG4gIHZhciB3YXJuaW5nID0gc3luY1dhcm5pbmc7XFxuICB2YXIgZmllbGROYW1lID0gc2VjdGlvblByZWZpeCA/IG5hbWUucmVwbGFjZShzZWN0aW9uUHJlZml4ICsgJy4nLCAnJykgOiBuYW1lO1xcbiAgdmFyIGZpbmFsUHJvcHMgPSBfZXh0ZW5kcyh7XFxuICAgIGZpZWxkczoge1xcbiAgICAgIF9pc0ZpZWxkQXJyYXk6IHRydWUsXFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFjaykge1xcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcXG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGZpZWxkTmFtZSArICdbJyArIGluZGV4ICsgJ10nLCBpbmRleCwgZmluYWxQcm9wcy5maWVsZHMpO1xcbiAgICAgICAgfSk7XFxuICAgICAgfSxcXG4gICAgICBnZXQ6IGdldFZhbHVlLFxcbiAgICAgIGdldEFsbDogZnVuY3Rpb24gZ2V0QWxsKCkge1xcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICAgIH0sXFxuICAgICAgaW5zZXJ0OiBhcnJheUluc2VydCxcXG4gICAgICBsZW5ndGg6IGxlbmd0aCxcXG4gICAgICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFjaykge1xcbiAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCBbXSkubWFwKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZmllbGROYW1lICsgJ1snICsgaW5kZXggKyAnXScsIGluZGV4LCBmaW5hbFByb3BzLmZpZWxkcyk7XFxuICAgICAgICB9KTtcXG4gICAgICB9LFxcbiAgICAgIG1vdmU6IGFycmF5TW92ZSxcXG4gICAgICBuYW1lOiBuYW1lLFxcbiAgICAgIHBvcDogZnVuY3Rpb24gcG9wKCkge1xcbiAgICAgICAgYXJyYXlQb3AoKTtcXG4gICAgICAgIHJldHVybiBnZXRJbih2YWx1ZSwgbGVuZ3RoIC0gMSk7XFxuICAgICAgfSxcXG4gICAgICBwdXNoOiBhcnJheVB1c2gsXFxuICAgICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2ssIGluaXRpYWwpIHtcXG4gICAgICAgIHJldHVybiAodmFsdWUgfHwgW10pLnJlZHVjZShmdW5jdGlvbiAoYWNjdW11bGF0b3IsIGl0ZW0sIGluZGV4KSB7XFxuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhhY2N1bXVsYXRvciwgZmllbGROYW1lICsgJ1snICsgaW5kZXggKyAnXScsIGluZGV4LCBmaW5hbFByb3BzLmZpZWxkcyk7XFxuICAgICAgICB9LCBpbml0aWFsKTtcXG4gICAgICB9LFxcbiAgICAgIHJlbW92ZTogYXJyYXlSZW1vdmUsXFxuICAgICAgcmVtb3ZlQWxsOiBhcnJheVJlbW92ZUFsbCxcXG4gICAgICBzaGlmdDogZnVuY3Rpb24gc2hpZnQoKSB7XFxuICAgICAgICBhcnJheVNoaWZ0KCk7XFxuICAgICAgICByZXR1cm4gZ2V0SW4odmFsdWUsIDApO1xcbiAgICAgIH0sXFxuICAgICAgc3dhcDogYXJyYXlTd2FwLFxcbiAgICAgIHVuc2hpZnQ6IGFycmF5VW5zaGlmdFxcbiAgICB9LFxcbiAgICBtZXRhOiB7XFxuICAgICAgZGlydHk6IGRpcnR5LFxcbiAgICAgIGVycm9yOiBlcnJvcixcXG4gICAgICBmb3JtOiBmb3JtLFxcbiAgICAgIHdhcm5pbmc6IHdhcm5pbmcsXFxuICAgICAgaW52YWxpZDogISFlcnJvcixcXG4gICAgICBwcmlzdGluZTogcHJpc3RpbmUsXFxuICAgICAgc3VibWl0dGluZzogc3VibWl0dGluZyxcXG4gICAgICBzdWJtaXRGYWlsZWQ6IHN1Ym1pdEZhaWxlZCxcXG4gICAgICB0b3VjaGVkOiAhIShzdGF0ZSAmJiBnZXRJbihzdGF0ZSwgJ3RvdWNoZWQnKSksXFxuICAgICAgdmFsaWQ6ICFlcnJvclxcbiAgICB9XFxuICB9LCBwcm9wcywgcmVzdCk7XFxuICByZXR1cm4gZmluYWxQcm9wcztcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUZpZWxkQXJyYXlQcm9wcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMik7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfX19kZWZhdWx0ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5uKF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9pbnZhcmlhbnRfXyk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDgpO1xcblxcblxcblxcbnZhciBjcmVhdGVGb3JtVmFsdWVTZWxlY3RvciA9IGZ1bmN0aW9uIGNyZWF0ZUZvcm1WYWx1ZVNlbGVjdG9yKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcblxcbiAgICBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfaW52YXJpYW50X19fZGVmYXVsdCgpKGZvcm0sICdGb3JtIHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkJyk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZmllbGRzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xcbiAgICAgICAgZmllbGRzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcXG4gICAgICB9XFxuXFxuICAgICAgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX2ludmFyaWFudF9fX2RlZmF1bHQoKShmaWVsZHMubGVuZ3RoLCAnTm8gZmllbGRzIHNwZWNpZmllZCcpO1xcbiAgICAgIHJldHVybiBmaWVsZHMubGVuZ3RoID09PSAxID9cXG4gICAgICAvLyBvbmx5IHNlbGVjdGluZyBvbmUgZmllbGQsIHNvIHJldHVybiBpdHMgdmFsdWVcXG4gICAgICBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMuJyArIGZpZWxkc1swXSkgOlxcbiAgICAgIC8vIHNlbGVjdGluZyBtYW55IGZpZWxkcywgc28gcmV0dXJuIGFuIG9iamVjdCBvZiBmaWVsZCB2YWx1ZXNcXG4gICAgICBmaWVsZHMucmVkdWNlKGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgZmllbGQpIHtcXG4gICAgICAgIHZhciB2YWx1ZSA9IGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLnZhbHVlcy4nICsgZmllbGQpO1xcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBhY2N1bXVsYXRvciA6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fc3RydWN0dXJlX3BsYWluX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dLnNldEluKGFjY3VtdWxhdG9yLCBmaWVsZCwgdmFsdWUpO1xcbiAgICAgIH0sIHt9KTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVGb3JtVmFsdWVTZWxlY3Rvcik7XFxuXFxuLyoqKi8gfSksXFxuLyogMjM4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X3JlZHV4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDExKTtcXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xcblxcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XFxuXFxuXFxuXFxudmFyIGNyZWF0ZVZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZVZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChjb25maWcpIHtcXG4gICAgdmFyIF9wcm9wJGdldEZvcm1TdGF0ZSRjbyA9IF9leHRlbmRzKHtcXG4gICAgICBwcm9wOiAndmFsdWVzJyxcXG4gICAgICBnZXRGb3JtU3RhdGU6IGZ1bmN0aW9uIGdldEZvcm1TdGF0ZShzdGF0ZSkge1xcbiAgICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICAgIH1cXG4gICAgfSwgY29uZmlnKSxcXG4gICAgICAgIGZvcm0gPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28uZm9ybSxcXG4gICAgICAgIHByb3AgPSBfcHJvcCRnZXRGb3JtU3RhdGUkY28ucHJvcCxcXG4gICAgICAgIGdldEZvcm1TdGF0ZSA9IF9wcm9wJGdldEZvcm1TdGF0ZSRjby5nZXRGb3JtU3RhdGU7XFxuXFxuICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X3JlZHV4X19bXFxcImFcXFwiIC8qIGNvbm5lY3QgKi9dKShmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wLCBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMnKSk7XFxuICAgIH0sIGZ1bmN0aW9uICgpIHtcXG4gICAgICByZXR1cm4ge307XFxuICAgIH0gLy8gaWdub3JlIGRpc3BhdGNoXFxuICAgICk7XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlVmFsdWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyMzkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtTmFtZXMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtTmFtZXMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbixcXG4gICAgICBrZXlzID0gX3JlZi5rZXlzO1xcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGtleXMoZ2V0Rm9ybVN0YXRlKHN0YXRlKSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybU5hbWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtVmFsdWVzID0gZnVuY3Rpb24gY3JlYXRlR2V0Rm9ybVZhbHVlcyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy52YWx1ZXMnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtVmFsdWVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNDEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1Jbml0aWFsVmFsdWVzKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKGdldEZvcm1TdGF0ZShzdGF0ZSksIGZvcm0gKyAnLmluaXRpYWwnKTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVHZXRGb3JtSW5pdGlhbFZhbHVlcyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMgPSBmdW5jdGlvbiBjcmVhdGVHZXRGb3JtU3luY0Vycm9ycyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5zeW5jRXJyb3JzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN5bmNFcnJvcnMpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI0MyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxudmFyIGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyhfcmVmKSB7XFxuICB2YXIgZ2V0SW4gPSBfcmVmLmdldEluO1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtKSB7XFxuICAgIHZhciBnZXRGb3JtU3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihzdGF0ZSwgJ2Zvcm0nKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiBnZXRJbihnZXRGb3JtU3RhdGUoc3RhdGUpLCBmb3JtICsgJy5hc3luY0Vycm9ycycpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUdldEZvcm1Bc3luY0Vycm9ycyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN5bmNXYXJuaW5ncyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1TeW5jV2FybmluZ3MoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3luY1dhcm5pbmdzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN5bmNXYXJuaW5ncyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlR2V0Rm9ybVN1Ym1pdEVycm9ycyA9IGZ1bmN0aW9uIGNyZWF0ZUdldEZvcm1TdWJtaXRFcnJvcnMoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oZ2V0Rm9ybVN0YXRlKHN0YXRlKSwgZm9ybSArICcuc3VibWl0RXJyb3JzJyk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlR2V0Rm9ybVN1Ym1pdEVycm9ycyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ2ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ByaXN0aW5lX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg1KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNEaXJ0eSA9IGZ1bmN0aW9uIGNyZWF0ZUlzRGlydHkoc3RydWN0dXJlKSB7XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0sIGdldEZvcm1TdGF0ZSkge1xcbiAgICB2YXIgaXNQcmlzdGluZSA9IE9iamVjdChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfX2lzUHJpc3RpbmVfX1tcXFwiYVxcXCIgLyogZGVmYXVsdCAqL10pKHN0cnVjdHVyZSkoZm9ybSwgZ2V0Rm9ybVN0YXRlKTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdGF0ZSkge1xcbiAgICAgIHJldHVybiAhaXNQcmlzdGluZShzdGF0ZSk7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSXNEaXJ0eSk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ3ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ZhbGlkX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDQ3KTtcXG5cXG5cXG52YXIgY3JlYXRlSXNJbnZhbGlkID0gZnVuY3Rpb24gY3JlYXRlSXNJbnZhbGlkKHN0cnVjdHVyZSkge1xcbiAgcmV0dXJuIGZ1bmN0aW9uIChmb3JtLCBnZXRGb3JtU3RhdGUpIHtcXG4gICAgdmFyIGlzVmFsaWQgPSBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX19pc1ZhbGlkX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShzdHJ1Y3R1cmUpKGZvcm0sIGdldEZvcm1TdGF0ZSk7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gIWlzVmFsaWQoc3RhdGUpO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzSW52YWxpZCk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ4ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSXNTdWJtaXR0aW5nID0gZnVuY3Rpb24gY3JlYXRlSXNTdWJtaXR0aW5nKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0dGluZycpIHx8IGZhbHNlO1xcbiAgICB9O1xcbiAgfTtcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKGNyZWF0ZUlzU3VibWl0dGluZyk7XFxuXFxuLyoqKi8gfSksXFxuLyogMjQ5ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgX193ZWJwYWNrX2V4cG9ydHNfXywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG52YXIgY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkID0gZnVuY3Rpb24gY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkKF9yZWYpIHtcXG4gIHZhciBnZXRJbiA9IF9yZWYuZ2V0SW47XFxuICByZXR1cm4gZnVuY3Rpb24gKGZvcm0pIHtcXG4gICAgdmFyIGdldEZvcm1TdGF0ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgcmV0dXJuIGdldEluKHN0YXRlLCAnZm9ybScpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN0YXRlKSB7XFxuICAgICAgdmFyIGZvcm1TdGF0ZSA9IGdldEZvcm1TdGF0ZShzdGF0ZSk7XFxuICAgICAgcmV0dXJuIGdldEluKGZvcm1TdGF0ZSwgZm9ybSArICcuc3VibWl0U3VjY2VlZGVkJykgfHwgZmFsc2U7XFxuICAgIH07XFxuICB9O1xcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAoY3JlYXRlSGFzU3VibWl0U3VjY2VlZGVkKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTAgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbnZhciBjcmVhdGVIYXNTdWJtaXRGYWlsZWQgPSBmdW5jdGlvbiBjcmVhdGVIYXNTdWJtaXRGYWlsZWQoX3JlZikge1xcbiAgdmFyIGdldEluID0gX3JlZi5nZXRJbjtcXG4gIHJldHVybiBmdW5jdGlvbiAoZm9ybSkge1xcbiAgICB2YXIgZ2V0Rm9ybVN0YXRlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICByZXR1cm4gZ2V0SW4oc3RhdGUsICdmb3JtJyk7XFxuICAgIH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoc3RhdGUpIHtcXG4gICAgICB2YXIgZm9ybVN0YXRlID0gZ2V0Rm9ybVN0YXRlKHN0YXRlKTtcXG4gICAgICByZXR1cm4gZ2V0SW4oZm9ybVN0YXRlLCBmb3JtICsgJy5zdWJtaXRGYWlsZWQnKSB8fCBmYWxzZTtcXG4gICAgfTtcXG4gIH07XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChjcmVhdGVIYXNTdWJtaXRGYWlsZWQpO1xcblxcbi8qKiovIH0pLFxcbi8qIDI1MSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIF9fd2VicGFja19leHBvcnRzX18sIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19fZGVmYXVsdCA9IF9fd2VicGFja19yZXF1aXJlX18ubihfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyk7XFxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcXFwidmFsdWVcXFwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfSByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9OyB9KCk7XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG52YXIgRm9ybSA9IGZ1bmN0aW9uIChfQ29tcG9uZW50KSB7XFxuICBfaW5oZXJpdHMoRm9ybSwgX0NvbXBvbmVudCk7XFxuXFxuICBmdW5jdGlvbiBGb3JtKHByb3BzLCBjb250ZXh0KSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtKTtcXG5cXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKEZvcm0uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihGb3JtKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybSBtdXN0IGJlIGluc2lkZSBhIGNvbXBvbmVudCBkZWNvcmF0ZWQgd2l0aCByZWR1eEZvcm0oKScpO1xcbiAgICB9XFxuICAgIHJldHVybiBfdGhpcztcXG4gIH1cXG5cXG4gIF9jcmVhdGVDbGFzcyhGb3JtLCBbe1xcbiAgICBrZXk6ICdjb21wb25lbnRXaWxsTW91bnQnLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xcbiAgICAgIHRoaXMuY29udGV4dC5fcmVkdXhGb3JtLnJlZ2lzdGVySW5uZXJPblN1Ym1pdCh0aGlzLnByb3BzLm9uU3VibWl0KTtcXG4gICAgfVxcbiAgfSwge1xcbiAgICBrZXk6ICdyZW5kZXInLFxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xcbiAgICAgIHJldHVybiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuY3JlYXRlRWxlbWVudCgnZm9ybScsIHRoaXMucHJvcHMpO1xcbiAgICB9XFxuICB9XSk7XFxuXFxuICByZXR1cm4gRm9ybTtcXG59KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJDb21wb25lbnRcXFwiXSk7XFxuXFxuRm9ybS5wcm9wVHlwZXMgPSB7XFxuICBvblN1Ym1pdDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMuaXNSZXF1aXJlZFxcbn07XFxuRm9ybS5jb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0XFxufTtcXG5cXG4vKiBoYXJtb255IGRlZmF1bHQgZXhwb3J0ICovIF9fd2VicGFja19leHBvcnRzX19bXFxcImFcXFwiXSA9IChGb3JtKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTIgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzFfX3V0aWxfcHJlZml4TmFtZV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNSk7XFxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcXG5cXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFxcXCJ2YWx1ZVxcXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcXG5cXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XFxuXFxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFxcXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cXFwiKTsgfSB9XFxuXFxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFxcXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcXFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFxcXCJvYmplY3RcXFwiIHx8IHR5cGVvZiBjYWxsID09PSBcXFwiZnVuY3Rpb25cXFwiKSA/IGNhbGwgOiBzZWxmOyB9XFxuXFxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXFxcImZ1bmN0aW9uXFxcIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXFxcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXFxcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cXG5cXG5cXG5cXG5cXG52YXIgRm9ybVNlY3Rpb24gPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xcbiAgX2luaGVyaXRzKEZvcm1TZWN0aW9uLCBfQ29tcG9uZW50KTtcXG5cXG4gIGZ1bmN0aW9uIEZvcm1TZWN0aW9uKHByb3BzLCBjb250ZXh0KSB7XFxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBGb3JtU2VjdGlvbik7XFxuXFxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChGb3JtU2VjdGlvbi5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEZvcm1TZWN0aW9uKSkuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkpO1xcblxcbiAgICBpZiAoIWNvbnRleHQuX3JlZHV4Rm9ybSkge1xcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9ybVNlY3Rpb24gbXVzdCBiZSBpbnNpZGUgYSBjb21wb25lbnQgZGVjb3JhdGVkIHdpdGggcmVkdXhGb3JtKCknKTtcXG4gICAgfVxcbiAgICByZXR1cm4gX3RoaXM7XFxuICB9XFxuXFxuICBfY3JlYXRlQ2xhc3MoRm9ybVNlY3Rpb24sIFt7XFxuICAgIGtleTogJ2dldENoaWxkQ29udGV4dCcsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRDaGlsZENvbnRleHQoKSB7XFxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmNvbnRleHQsXFxuICAgICAgICAgIG5hbWUgPSB0aGlzLnByb3BzLm5hbWU7XFxuXFxuICAgICAgcmV0dXJuIHtcXG4gICAgICAgIF9yZWR1eEZvcm06IF9leHRlbmRzKHt9LCBjb250ZXh0Ll9yZWR1eEZvcm0sIHtcXG4gICAgICAgICAgc2VjdGlvblByZWZpeDogT2JqZWN0KF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fdXRpbF9wcmVmaXhOYW1lX19bXFxcImFcXFwiIC8qIGRlZmF1bHQgKi9dKShjb250ZXh0LCBuYW1lKVxcbiAgICAgICAgfSlcXG4gICAgICB9O1xcbiAgICB9XFxuICB9LCB7XFxuICAgIGtleTogJ3JlbmRlcicsXFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XFxuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXFxuICAgICAgICAgIGNoaWxkcmVuID0gX3Byb3BzLmNoaWxkcmVuLFxcbiAgICAgICAgICBuYW1lID0gX3Byb3BzLm5hbWUsXFxuICAgICAgICAgIGNvbXBvbmVudCA9IF9wcm9wcy5jb21wb25lbnQsXFxuICAgICAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3Byb3BzLCBbJ2NoaWxkcmVuJywgJ25hbWUnLCAnY29tcG9uZW50J10pO1xcblxcbiAgICAgIGlmIChfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX19kZWZhdWx0LmEuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XFxuICAgICAgICByZXR1cm4gY2hpbGRyZW47XFxuICAgICAgfVxcblxcbiAgICAgIHJldHVybiBPYmplY3QoX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcImNyZWF0ZUVsZW1lbnRcXFwiXSkoY29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVzdCwge1xcbiAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXFxuICAgICAgfSkpO1xcbiAgICB9XFxuICB9XSk7XFxuXFxuICByZXR1cm4gRm9ybVNlY3Rpb247XFxufShfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiQ29tcG9uZW50XFxcIl0pO1xcblxcbkZvcm1TZWN0aW9uLnByb3BUeXBlcyA9IHtcXG4gIG5hbWU6IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcuaXNSZXF1aXJlZCxcXG4gIGNvbXBvbmVudDogX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLm9uZU9mVHlwZShbX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmZ1bmMsIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmddKVxcbn07XFxuXFxuRm9ybVNlY3Rpb24uZGVmYXVsdFByb3BzID0ge1xcbiAgY29tcG9uZW50OiAnZGl2J1xcbn07XFxuXFxuRm9ybVNlY3Rpb24uY2hpbGRDb250ZXh0VHlwZXMgPSB7XFxuICBfcmVkdXhGb3JtOiBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0ub2JqZWN0LmlzUmVxdWlyZWRcXG59O1xcblxcbkZvcm1TZWN0aW9uLmNvbnRleHRUeXBlcyA9IHtcXG4gIF9yZWR1eEZvcm06IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3RcXG59O1xcblxcbi8qIGhhcm1vbnkgZGVmYXVsdCBleHBvcnQgKi8gX193ZWJwYWNrX2V4cG9ydHNfX1tcXFwiYVxcXCJdID0gKEZvcm1TZWN0aW9uKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBfX3dlYnBhY2tfZXhwb3J0c19fLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMCk7XFxuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fX2RlZmF1bHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLm4oX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X18pO1xcblxcbnZhciBhbnkgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uYW55LFxcbiAgICBib29sID0gX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8wX3JlYWN0X19bXFxcIlByb3BUeXBlc1xcXCJdLmJvb2wsXFxuICAgIGZ1bmMgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uZnVuYyxcXG4gICAgc2hhcGUgPSBfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzBfcmVhY3RfX1tcXFwiUHJvcFR5cGVzXFxcIl0uc2hhcGUsXFxuICAgIHN0cmluZyA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5zdHJpbmcsXFxuICAgIG9uZU9mVHlwZSA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vbmVPZlR5cGUsXFxuICAgIG9iamVjdCA9IF9fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9yZWFjdF9fW1xcXCJQcm9wVHlwZXNcXFwiXS5vYmplY3Q7XFxuXFxuXFxudmFyIHByb3BUeXBlcyA9IHtcXG4gIC8vIFN0YXRlOlxcbiAgYW55VG91Y2hlZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFueSBvZiB0aGUgZmllbGRzIGhhdmUgYmVlbiBtYXJrZWQgYXMgdG91Y2hlZFxcbiAgYXN5bmNWYWxpZGF0aW5nOiBvbmVPZlR5cGUoW2Jvb2wsIHN0cmluZ10pLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgYXN5bmMgdmFsaWRhdGlvbiBpcyBydW5uaW5nLCBhIHN0cmluZyBpZiBhIGZpZWxkIHRyaWdnZXJlZCBhc3luYyB2YWxpZGF0aW9uXFxuICBkaXJ0eTogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIGFueSB2YWx1ZXMgYXJlIGRpZmZlcmVudCBmcm9tIGluaXRpYWxWYWx1ZXNcXG4gIGVycm9yOiBhbnksIC8vIGZvcm0td2lkZSBlcnJvciBmcm9tICdfZXJyb3InIGtleSBpbiB2YWxpZGF0aW9uIHJlc3VsdFxcbiAgZm9ybTogc3RyaW5nLmlzUmVxdWlyZWQsIC8vIHRoZSBuYW1lIG9mIHRoZSBmb3JtXFxuICBpbnZhbGlkOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlcmUgYXJlIGFueSB2YWxpZGF0aW9uIGVycm9yc1xcbiAgaW5pdGlhbGl6ZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSBoYXMgYmVlbiBpbml0aWFsaXplZFxcbiAgaW5pdGlhbFZhbHVlczogb2JqZWN0LCAvLyB0aGUgaW5pdGlhbFZhbHVlcyBvYmplY3QgcGFzc2VkIHRvIHJlZHV4Rm9ybVxcbiAgcHJpc3RpbmU6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSB0aGUgc2FtZSBhcyBpbml0aWFsVmFsdWVzXFxuICBwdXJlOiBib29sLmlzUmVxdWlyZWQsIC8vIGlmIHRydWUsIGltcGxlbWVudHMgc2hvdWxkQ29tcG9uZW50VXBkYXRlXFxuICBzdWJtaXR0aW5nOiBib29sLmlzUmVxdWlyZWQsIC8vIHRydWUgaWYgdGhlIGZvcm0gaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3VibWl0dGVkXFxuICBzdWJtaXRGYWlsZWQ6IGJvb2wuaXNSZXF1aXJlZCwgLy8gdHJ1ZSBpZiB0aGUgZm9ybSB3YXMgc3VibWl0dGVkIGFuZCBmYWlsZWQgZm9yIGFueSByZWFzb25cXG4gIHN1Ym1pdFN1Y2NlZWRlZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZSBmb3JtIHdhcyBzdWNjZXNzZnVsbHkgc3VibWl0dGVkXFxuICB2YWxpZDogYm9vbC5pc1JlcXVpcmVkLCAvLyB0cnVlIGlmIHRoZXJlIGFyZSBubyB2YWxpZGF0aW9uIGVycm9yc1xcbiAgd2FybmluZzogYW55LCAvLyBmb3JtLXdpZGUgd2FybmluZyBmcm9tICdfd2FybmluZycga2V5IGluIHZhbGlkYXRpb24gcmVzdWx0XFxuICAvLyBBY3Rpb25zOlxcbiAgYXJyYXk6IHNoYXBlKHtcXG4gICAgaW5zZXJ0OiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIGluc2VydCBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gICAgbW92ZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBtb3ZlIGEgdmFsdWUgd2l0aGluIGFuIGFycmF5IGZpZWxkXFxuICAgIHBvcDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBwb3AgYSB2YWx1ZSBvZmYgb2YgYW4gYXJyYXkgZmllbGRcXG4gICAgcHVzaDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBwdXNoIGEgdmFsdWUgb250byBhbiBhcnJheSBmaWVsZFxcbiAgICByZW1vdmU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGEgdmFsdWUgZnJvbSBhbiBhcnJheSBmaWVsZFxcbiAgICByZW1vdmVBbGw6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGFsbCB0aGUgdmFsdWVzIGZyb20gYW4gYXJyYXkgZmllbGRcXG4gICAgc2hpZnQ6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gZnVuY3Rpb24gdG8gc2hpZnQgYSB2YWx1ZSBvdXQgb2YgYW4gYXJyYXkgZmllbGRcXG4gICAgc3BsaWNlOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGZ1bmN0aW9uIHRvIHNwbGljZSBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gICAgc3dhcDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzd2FwIHZhbHVlcyBpbiBhbiBhcnJheSBmaWVsZFxcbiAgICB1bnNoaWZ0OiBmdW5jLmlzUmVxdWlyZWQgLy8gZnVuY3Rpb24gdG8gdW5zaGlmdCBhIHZhbHVlIGludG8gYW4gYXJyYXkgZmllbGRcXG4gIH0pLFxcbiAgYXN5bmNWYWxpZGF0ZTogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byB0cmlnZ2VyIGFzeW5jIHZhbGlkYXRpb25cXG4gIGF1dG9maWxsOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBzZXQgYSB2YWx1ZSBvZiBhIGZpZWxkIGFuZCBtYXJrIGl0IGFzIGF1dG9maWxsZWRcXG4gIGJsdXI6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIG1hcmsgYSBmaWVsZCBhcyBibHVycmVkXFxuICBjaGFuZ2U6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBmaWVsZFxcbiAgY2xlYXJBc3luY0Vycm9yOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBjbGVhciB0aGUgYXN5bmMgZXJyb3Igb2YgYSBmaWVsZFxcbiAgZGVzdHJveTogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gZGVzdHJveSB0aGUgZm9ybSdzIGRhdGEgaW4gUmVkdXhcXG4gIGRpc3BhdGNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIHRoZSBSZWR1eCBkaXNwYXRjaCBhY3Rpb25cXG4gIGhhbmRsZVN1Ym1pdDogZnVuYy5pc1JlcXVpcmVkLCAvLyBmdW5jdGlvbiB0byBzdWJtaXQgdGhlIGZvcm1cXG4gIGluaXRpYWxpemU6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIGluaXRpYWxpemUgZm9ybSBkYXRhXFxuICByZXNldDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gcmVzZXQgdGhlIGZvcm0gZGF0YSB0byBwcmV2aW91c2x5IGluaXRpYWxpemVkIHZhbHVlc1xcbiAgdG91Y2g6IGZ1bmMuaXNSZXF1aXJlZCwgLy8gYWN0aW9uIHRvIG1hcmsgZmllbGRzIGFzIHRvdWNoZWRcXG4gIHN1Ym1pdDogZnVuYy5pc1JlcXVpcmVkLCAvLyBhY3Rpb24gdG8gdHJpZ2dlciBhIHN1Ym1pc3Npb24gb2YgdGhlIHNwZWNpZmllZCBmb3JtXFxuICB1bnRvdWNoOiBmdW5jLmlzUmVxdWlyZWQsIC8vIGFjdGlvbiB0byBtYXJrIGZpZWxkcyBhcyB1bnRvdWNoZWRcXG5cXG4gIC8vIHRyaWdnZXJTdWJtaXRcXG4gIHRyaWdnZXJTdWJtaXQ6IGJvb2wsIC8vIGlmIHRydWUsIHN1Ym1pdHMgdGhlIGZvcm0gb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1xcbiAgY2xlYXJTdWJtaXQ6IGZ1bmMuaXNSZXF1aXJlZCAvLyBjYWxsZWQgYmVmb3JlIGEgdHJpZ2dlcmVkIHN1Ym1pdCwgYnkgZGVmYXVsdCBjbGVhcnMgdHJpZ2dlclN1Ym1pdFxcbn07XFxuXFxuLyogaGFybW9ueSBkZWZhdWx0IGV4cG9ydCAqLyBfX3dlYnBhY2tfZXhwb3J0c19fW1xcXCJhXFxcIl0gPSAocHJvcFR5cGVzKTtcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTQgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSBwbGF0Zm9ybTY7XFxuXFxuLyoqKi8gfSksXFxuLyogMjU1ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XFxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XFxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XFxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XFxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XFxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XFxuICAgIH07XFxufSkoKTtcXG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcXG4gICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XFxuICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xcbiAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxcbiAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xcbiAgICB9XFxuICAgIHJldHVybiB0O1xcbn07XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciB1dWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTYpO1xcbnZhciByZWR1eF9mb3JtXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2KTtcXG52YXIgaGVscF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgVGV4dElucHV0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFRleHRJbnB1dCwgX3N1cGVyKTtcXG4gICAgZnVuY3Rpb24gVGV4dElucHV0KHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnJlbmRlclRleHQgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5wcm9wcywgbGFiZWwgPSBfYS5sYWJlbCwgZGlzYWJsZWQgPSBfYS5kaXNhYmxlZCwgYXV0b2ZvY3VzID0gX2EuYXV0b2ZvY3VzLCBoZWxwID0gX2EuaGVscCwgY29udGFpbmVyQ2xhc3MgPSBfYS5jb250YWluZXJDbGFzcywgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3MsIHR5cGUgPSBfYS50eXBlLCBzdGVwID0gX2Euc3RlcCwgcmFuZG9tR2VuZXJhdG9yID0gX2EucmFuZG9tR2VuZXJhdG9yLCBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLCBjb2xsYXBzZUVycm9yU3BhY2UgPSBfYS5jb2xsYXBzZUVycm9yU3BhY2U7XFxuICAgICAgICAgICAgdmFyIGlucHV0ID0gZmllbGQuaW5wdXQsIG1ldGEgPSBmaWVsZC5tZXRhO1xcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQnOiBtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yXFxuICAgICAgICAgICAgICAgIH0pIH0sXFxuICAgICAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgICAgICBoZWxwICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoaGVscF8xLmRlZmF1bHQsIHsgdGV4dDogaGVscCB9KSkgOiBudWxsLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJpbnB1dFxcXCIsIF9fYXNzaWduKHt9LCBpbnB1dCwgeyBrZXk6IGlucHV0Lm5hbWUsIHR5cGU6IHR5cGUgfHwgJ3RleHQnLCBzdGVwOiAhdHlwZSB8fCB0eXBlICE9PSAnbnVtYmVyJyA/IHVuZGVmaW5lZCA6IHN0ZXAsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgZGlzYWJsZWQ6IGRpc2FibGVkLCBhdXRvRm9jdXM6IGF1dG9mb2N1cywgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWNvbnRyb2wgaW5wdXQtYmxvY2snLCBpbnB1dENsYXNzLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2J0bi1wcmVmaXgnOiByYW5kb21HZW5lcmF0b3JcXG4gICAgICAgICAgICAgICAgICAgIH0pIH0pKSxcXG4gICAgICAgICAgICAgICAgcmFuZG9tR2VuZXJhdG9yID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogXFxcImJ0biBidG4taW5mbyBpbnB1dC1zdWZmaXhcXFwiLCBvbkNsaWNrOiBmdW5jdGlvbiAoZSkgeyByZXR1cm4gX3RoaXMuZ2VuZXJhdGVDbGllbnRTZWNyZXQoZmllbGQpOyB9IH0sXFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IFxcXCJmYXMgZmEtcmFuZG9tXFxcIiB9KSkpIDogbnVsbCxcXG4gICAgICAgICAgICAgICAgKG1ldGEudG91Y2hlZCAmJiAhIW1ldGEuZXJyb3IpID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwicFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidmFsaWRhdGlvbi1lcnJvci1tZXNzYWdlXFxcIiB9LCBtZXRhLmVycm9yKSA6IChjb2xsYXBzZUVycm9yU3BhY2UgPyBudWxsIDogUmVhY3QuY3JlYXRlRWxlbWVudChcXFwicFxcXCIsIHsgY2xhc3NOYW1lOiBcXFwidmFsaWRhdGlvbi1lcnJvci1tZXNzYWdlXFxcIiB9LCBcXFwiXFxcXHUwMEEwXFxcIikpKSk7XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuZ2VuZXJhdGVDbGllbnRTZWNyZXQgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICBmaWVsZC5pbnB1dC5vbkNoYW5nZSh1dWlkLnYxKCksIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcXG4gICAgICAgIH07XFxuICAgICAgICBfdGhpcy5zdGF0ZSA9IHt9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFRleHRJbnB1dC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgbmFtZSA9IF9hLm5hbWUsIGxhYmVsID0gX2EubGFiZWwsIGZvcm1hdCA9IF9hLmZvcm1hdCwgbm9ybWFsaXplID0gX2Eubm9ybWFsaXplLCBwYXJzZSA9IF9hLnBhcnNlLCB2YWxpZGF0ZSA9IF9hLnZhbGlkYXRlLCB3YXJuID0gX2Eud2FybjtcXG4gICAgICAgIHZhciBiYXNlRmllbGRQcm9wcyA9IHtcXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxcbiAgICAgICAgICAgIGZvcm1hdDogZm9ybWF0LFxcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogbm9ybWFsaXplLFxcbiAgICAgICAgICAgIHBhcnNlOiBwYXJzZSxcXG4gICAgICAgICAgICB2YWxpZGF0ZTogdmFsaWRhdGUsXFxuICAgICAgICAgICAgd2Fybjogd2FyblxcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZCwgX19hc3NpZ24oe30sIGJhc2VGaWVsZFByb3BzLCB7IGNvbXBvbmVudDogdGhpcy5yZW5kZXJUZXh0IH0pKTtcXG4gICAgfTtcXG4gICAgcmV0dXJuIFRleHRJbnB1dDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFRleHRJbnB1dDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNTYgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHYxID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNTcpO1xcbnZhciB2NCA9IF9fd2VicGFja19yZXF1aXJlX18oMjU4KTtcXG5cXG52YXIgdXVpZCA9IHY0O1xcbnV1aWQudjEgPSB2MTtcXG51dWlkLnY0ID0gdjQ7XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB1dWlkO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI1NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG52YXIgcm5nID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nik7XFxudmFyIGJ5dGVzVG9VdWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4Nyk7XFxuXFxuLy8gKipgdjEoKWAgLSBHZW5lcmF0ZSB0aW1lLWJhc2VkIFVVSUQqKlxcbi8vXFxuLy8gSW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL0xpb3NLL1VVSUQuanNcXG4vLyBhbmQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3V1aWQuaHRtbFxcblxcbnZhciBfbm9kZUlkO1xcbnZhciBfY2xvY2tzZXE7XFxuXFxuLy8gUHJldmlvdXMgdXVpZCBjcmVhdGlvbiB0aW1lXFxudmFyIF9sYXN0TVNlY3MgPSAwO1xcbnZhciBfbGFzdE5TZWNzID0gMDtcXG5cXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2Jyb29mYS9ub2RlLXV1aWQgZm9yIEFQSSBkZXRhaWxzXFxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcXG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xcbiAgdmFyIGIgPSBidWYgfHwgW107XFxuXFxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcXG4gIHZhciBub2RlID0gb3B0aW9ucy5ub2RlIHx8IF9ub2RlSWQ7XFxuICB2YXIgY2xvY2tzZXEgPSBvcHRpb25zLmNsb2Nrc2VxICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmNsb2Nrc2VxIDogX2Nsb2Nrc2VxO1xcblxcbiAgLy8gbm9kZSBhbmQgY2xvY2tzZXEgbmVlZCB0byBiZSBpbml0aWFsaXplZCB0byByYW5kb20gdmFsdWVzIGlmIHRoZXkncmUgbm90XFxuICAvLyBzcGVjaWZpZWQuICBXZSBkbyB0aGlzIGxhemlseSB0byBtaW5pbWl6ZSBpc3N1ZXMgcmVsYXRlZCB0byBpbnN1ZmZpY2llbnRcXG4gIC8vIHN5c3RlbSBlbnRyb3B5LiAgU2VlICMxODlcXG4gIGlmIChub2RlID09IG51bGwgfHwgY2xvY2tzZXEgPT0gbnVsbCkge1xcbiAgICB2YXIgc2VlZEJ5dGVzID0gcm5nKCk7XFxuICAgIGlmIChub2RlID09IG51bGwpIHtcXG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcXG4gICAgICBub2RlID0gX25vZGVJZCA9IFtcXG4gICAgICAgIHNlZWRCeXRlc1swXSB8IDB4MDEsXFxuICAgICAgICBzZWVkQnl0ZXNbMV0sIHNlZWRCeXRlc1syXSwgc2VlZEJ5dGVzWzNdLCBzZWVkQnl0ZXNbNF0sIHNlZWRCeXRlc1s1XVxcbiAgICAgIF07XFxuICAgIH1cXG4gICAgaWYgKGNsb2Nrc2VxID09IG51bGwpIHtcXG4gICAgICAvLyBQZXIgNC4yLjIsIHJhbmRvbWl6ZSAoMTQgYml0KSBjbG9ja3NlcVxcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcXG4gICAgfVxcbiAgfVxcblxcbiAgLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcXG4gIC8vICgxNTgyLTEwLTE1IDAwOjAwKS4gIEpTTnVtYmVycyBhcmVuJ3QgcHJlY2lzZSBlbm91Z2ggZm9yIHRoaXMsIHNvXFxuICAvLyB0aW1lIGlzIGhhbmRsZWQgaW50ZXJuYWxseSBhcyAnbXNlY3MnIChpbnRlZ2VyIG1pbGxpc2Vjb25kcykgYW5kICduc2VjcydcXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXFxuICB2YXIgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogbmV3IERhdGUoKS5nZXRUaW1lKCk7XFxuXFxuICAvLyBQZXIgNC4yLjEuMiwgdXNlIGNvdW50IG9mIHV1aWQncyBnZW5lcmF0ZWQgZHVyaW5nIHRoZSBjdXJyZW50IGNsb2NrXFxuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xcbiAgdmFyIG5zZWNzID0gb3B0aW9ucy5uc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uc2VjcyA6IF9sYXN0TlNlY3MgKyAxO1xcblxcbiAgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxcbiAgdmFyIGR0ID0gKG1zZWNzIC0gX2xhc3RNU2VjcykgKyAobnNlY3MgLSBfbGFzdE5TZWNzKS8xMDAwMDtcXG5cXG4gIC8vIFBlciA0LjIuMS4yLCBCdW1wIGNsb2Nrc2VxIG9uIGNsb2NrIHJlZ3Jlc3Npb25cXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XFxuICAgIGNsb2Nrc2VxID0gY2xvY2tzZXEgKyAxICYgMHgzZmZmO1xcbiAgfVxcblxcbiAgLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcXG4gIC8vIHRpbWUgaW50ZXJ2YWxcXG4gIGlmICgoZHQgPCAwIHx8IG1zZWNzID4gX2xhc3RNU2VjcykgJiYgb3B0aW9ucy5uc2VjcyA9PT0gdW5kZWZpbmVkKSB7XFxuICAgIG5zZWNzID0gMDtcXG4gIH1cXG5cXG4gIC8vIFBlciA0LjIuMS4yIFRocm93IGVycm9yIGlmIHRvbyBtYW55IHV1aWRzIGFyZSByZXF1ZXN0ZWRcXG4gIGlmIChuc2VjcyA+PSAxMDAwMCkge1xcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3V1aWQudjEoKTogQ2FuXFxcXCd0IGNyZWF0ZSBtb3JlIHRoYW4gMTBNIHV1aWRzL3NlYycpO1xcbiAgfVxcblxcbiAgX2xhc3RNU2VjcyA9IG1zZWNzO1xcbiAgX2xhc3ROU2VjcyA9IG5zZWNzO1xcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7XFxuXFxuICAvLyBQZXIgNC4xLjQgLSBDb252ZXJ0IGZyb20gdW5peCBlcG9jaCB0byBHcmVnb3JpYW4gZXBvY2hcXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwO1xcblxcbiAgLy8gYHRpbWVfbG93YFxcbiAgdmFyIHRsID0gKChtc2VjcyAmIDB4ZmZmZmZmZikgKiAxMDAwMCArIG5zZWNzKSAlIDB4MTAwMDAwMDAwO1xcbiAgYltpKytdID0gdGwgPj4+IDI0ICYgMHhmZjtcXG4gIGJbaSsrXSA9IHRsID4+PiAxNiAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCA+Pj4gOCAmIDB4ZmY7XFxuICBiW2krK10gPSB0bCAmIDB4ZmY7XFxuXFxuICAvLyBgdGltZV9taWRgXFxuICB2YXIgdG1oID0gKG1zZWNzIC8gMHgxMDAwMDAwMDAgKiAxMDAwMCkgJiAweGZmZmZmZmY7XFxuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xcbiAgYltpKytdID0gdG1oICYgMHhmZjtcXG5cXG4gIC8vIGB0aW1lX2hpZ2hfYW5kX3ZlcnNpb25gXFxuICBiW2krK10gPSB0bWggPj4+IDI0ICYgMHhmIHwgMHgxMDsgLy8gaW5jbHVkZSB2ZXJzaW9uXFxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjtcXG5cXG4gIC8vIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYCAoUGVyIDQuMi4yIC0gaW5jbHVkZSB2YXJpYW50KVxcbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwO1xcblxcbiAgLy8gYGNsb2NrX3NlcV9sb3dgXFxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7XFxuXFxuICAvLyBgbm9kZWBcXG4gIGZvciAodmFyIG4gPSAwOyBuIDwgNjsgKytuKSB7XFxuICAgIGJbaSArIG5dID0gbm9kZVtuXTtcXG4gIH1cXG5cXG4gIHJldHVybiBidWYgPyBidWYgOiBieXRlc1RvVXVpZChiKTtcXG59XFxuXFxubW9kdWxlLmV4cG9ydHMgPSB2MTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNTggKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxudmFyIHJuZyA9IF9fd2VicGFja19yZXF1aXJlX18oODYpO1xcbnZhciBieXRlc1RvVXVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oODcpO1xcblxcbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XFxuICB2YXIgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcXG5cXG4gIGlmICh0eXBlb2Yob3B0aW9ucykgPT0gJ3N0cmluZycpIHtcXG4gICAgYnVmID0gb3B0aW9ucyA9PT0gJ2JpbmFyeScgPyBuZXcgQXJyYXkoMTYpIDogbnVsbDtcXG4gICAgb3B0aW9ucyA9IG51bGw7XFxuICB9XFxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcXG5cXG4gIHZhciBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcXG5cXG4gIC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcXG4gIHJuZHNbNl0gPSAocm5kc1s2XSAmIDB4MGYpIHwgMHg0MDtcXG4gIHJuZHNbOF0gPSAocm5kc1s4XSAmIDB4M2YpIHwgMHg4MDtcXG5cXG4gIC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxcbiAgaWYgKGJ1Zikge1xcbiAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgMTY7ICsraWkpIHtcXG4gICAgICBidWZbaSArIGlpXSA9IHJuZHNbaWldO1xcbiAgICB9XFxuICB9XFxuXFxuICByZXR1cm4gYnVmIHx8IGJ5dGVzVG9VdWlkKHJuZHMpO1xcbn1cXG5cXG5tb2R1bGUuZXhwb3J0cyA9IHY0O1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI1OSAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XFxuICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xcbiAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcXG4gICAgICAgICAgICB0W3BdID0gc1twXTtcXG4gICAgfVxcbiAgICByZXR1cm4gdDtcXG59O1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgcmVkdXhfZm9ybV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNik7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgaGVscF8xID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4OCk7XFxudmFyIFNlbGVjdElucHV0ID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFNlbGVjdElucHV0LCBfc3VwZXIpO1xcbiAgICBmdW5jdGlvbiBTZWxlY3RJbnB1dChwcm9wcykge1xcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XFxuICAgICAgICBfdGhpcy5yZW5kZXJTZWxlY3QgPSBmdW5jdGlvbiAoZmllbGQpIHtcXG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5wcm9wcywgbGFiZWwgPSBfYS5sYWJlbCwgb3B0aW9ucyA9IF9hLm9wdGlvbnMsIGRpc2FibGVkID0gX2EuZGlzYWJsZWQsIGhlbHAgPSBfYS5oZWxwLCBjb250YWluZXJDbGFzcyA9IF9hLmNvbnRhaW5lckNsYXNzLCBpbnB1dENsYXNzID0gX2EuaW5wdXRDbGFzcywgaGlkZUVtcHR5T3B0aW9uID0gX2EuaGlkZUVtcHR5T3B0aW9uLCBjb2xsYXBzZUVycm9yU3BhY2UgPSBfYS5jb2xsYXBzZUVycm9yU3BhY2U7XFxuICAgICAgICAgICAgdmFyIGlucHV0ID0gZmllbGQuaW5wdXQsIG1ldGEgPSBmaWVsZC5tZXRhO1xcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2Zvcm0tZ3JvdXAnLCBjb250YWluZXJDbGFzcywge1xcbiAgICAgICAgICAgICAgICAgICAgJ2ludmFsaWQnOiBtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yXFxuICAgICAgICAgICAgICAgIH0pIH0sXFxuICAgICAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXFxuICAgICAgICAgICAgICAgICAgICBoZWxwICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoaGVscF8xLmRlZmF1bHQsIHsgdGV4dDogaGVscCB9KSkgOiBudWxsLFxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzZWxlY3RcXFwiLCBfX2Fzc2lnbih7fSwgaW5wdXQsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdmb3JtLWNvbnRyb2wnLCBpbnB1dENsYXNzKSwgZGlzYWJsZWQ6IGRpc2FibGVkIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgaGlkZUVtcHR5T3B0aW9uID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcIm9wdGlvblxcXCIsIHsgdmFsdWU6IFxcXCJcXFwiIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tYXAoZnVuY3Rpb24gKG9wdCwgaWR4KSB7IHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJvcHRpb25cXFwiLCB7IGtleTogaWR4LCB2YWx1ZTogb3B0LnZhbHVlLCBkaXNhYmxlZDogb3B0LmRpc2FibGVkIH0sIG9wdC5sYWJlbCB8fCBvcHQudmFsdWUpOyB9KSksXFxuICAgICAgICAgICAgICAgIChtZXRhLnRvdWNoZWQgJiYgISFtZXRhLmVycm9yKSA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgbWV0YS5lcnJvcikgOiAoY29sbGFwc2VFcnJvclNwYWNlID8gbnVsbCA6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcInBcXFwiLCB7IGNsYXNzTmFtZTogXFxcInZhbGlkYXRpb24tZXJyb3ItbWVzc2FnZVxcXCIgfSwgXFxcIlxcXFx1MDBBMFxcXCIpKSkpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIF90aGlzLnN0YXRlID0ge307XFxuICAgICAgICByZXR1cm4gX3RoaXM7XFxuICAgIH1cXG4gICAgU2VsZWN0SW5wdXQucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcXG4gICAgICAgIHZhciBfYSA9IHRoaXMucHJvcHMsIG9wdGlvbnMgPSBfYS5vcHRpb25zLCBuYW1lID0gX2EubmFtZSwgZm9ybWF0ID0gX2EuZm9ybWF0LCBub3JtYWxpemUgPSBfYS5ub3JtYWxpemUsIHBhcnNlID0gX2EucGFyc2UsIHZhbGlkYXRlID0gX2EudmFsaWRhdGUsIHdhcm4gPSBfYS53YXJuLCBjb250YWluZXJDbGFzcyA9IF9hLmNvbnRhaW5lckNsYXNzLCBoZWxwID0gX2EuaGVscCwgbGFiZWwgPSBfYS5sYWJlbCwgaW5wdXRDbGFzcyA9IF9hLmlucHV0Q2xhc3M7XFxuICAgICAgICB2YXIgYmFzZUZpZWxkUHJvcHMgPSB7XFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcXG4gICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCxcXG4gICAgICAgICAgICBub3JtYWxpemU6IG5vcm1hbGl6ZSxcXG4gICAgICAgICAgICBwYXJzZTogcGFyc2UsXFxuICAgICAgICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlLFxcbiAgICAgICAgICAgIHdhcm46IHdhcm5cXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gb3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KHJlZHV4X2Zvcm1fMS5GaWVsZCwgX19hc3NpZ24oe30sIGJhc2VGaWVsZFByb3BzLCB7IGNvbXBvbmVudDogdGhpcy5yZW5kZXJTZWxlY3QgfSkpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1ncm91cCcsIGNvbnRhaW5lckNsYXNzKSB9LFxcbiAgICAgICAgICAgIGxhYmVsID8gUmVhY3QuY3JlYXRlRWxlbWVudChcXFwibGFiZWxcXFwiLCBudWxsLFxcbiAgICAgICAgICAgICAgICBsYWJlbCxcXG4gICAgICAgICAgICAgICAgaGVscCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KGhlbHBfMS5kZWZhdWx0LCB7IHRleHQ6IGhlbHAgfSkpIDogbnVsbCxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzZWxlY3RcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcygnZm9ybS1jb250cm9sJywgaW5wdXRDbGFzcyksIGRpc2FibGVkOiB0cnVlIH0pKSk7XFxuICAgIH07XFxuICAgIHJldHVybiBTZWxlY3RJbnB1dDtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFNlbGVjdElucHV0O1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI2MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxudmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XFxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xcbiAgICB9O1xcbn0pKCk7XFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG52YXIgUmVhY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xcbnZhciBjbGFzc05hbWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygxMyk7XFxudmFyIHNwaW5uZXJfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjYxKTtcXG52YXIgVG9nZ2xlUGFuZWwgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xcbiAgICBfX2V4dGVuZHMoVG9nZ2xlUGFuZWwsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFRvZ2dsZVBhbmVsKHByb3BzKSB7XFxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgICAgIF90aGlzLnRvZ2dsZVBhbmVsQ29udGVudCA9IGZ1bmN0aW9uIChldmVudCkge1xcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcm9wcy50b2dnbGFibGUgIT09IGZhbHNlKSB7XFxuICAgICAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHtcXG4gICAgICAgICAgICAgICAgICAgIG9wZW5lZDogIV90aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMucHJvcHMudG9nZ2xlQ2FsbGJhY2spIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5wcm9wcy50b2dnbGVDYWxsYmFjayhfdGhpcy5zdGF0ZS5vcGVuZWQpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9O1xcbiAgICAgICAgX3RoaXMuc3RhdGUgPSB7XFxuICAgICAgICAgICAgb3BlbmVkOiBfdGhpcy5wcm9wcy5kZWZhdWx0T3BlbmVkXFxuICAgICAgICB9O1xcbiAgICAgICAgcmV0dXJuIF90aGlzO1xcbiAgICB9XFxuICAgIFRvZ2dsZVBhbmVsLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgdGl0bGVTcGlubmVyID0gdGhpcy5wcm9wcy5zaG93U3Bpbm5lciA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogXFxcInNwaW5uZXItY29udGFpbmVyXFxcIiB9LFxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoc3Bpbm5lcl8xLmRlZmF1bHQsIG51bGwpKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIGxDdXN0b21Db250cm9scyA9IHRoaXMucHJvcHMubGVmdEN1c3RvbUNvbnRyb2xzID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtaGVhZGluZy1jb250cm9sc1xcXCIgfSwgdGhpcy5wcm9wcy5sZWZ0Q3VzdG9tQ29udHJvbHMpKSA6IG51bGw7XFxuICAgICAgICB2YXIgckN1c3RvbUNvbnRyb2xzID0gdGhpcy5wcm9wcy5yaWdodEN1c3RvbUNvbnRyb2xzID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBcXFwicGFuZWwtaGVhZGluZy1jb250cm9sc1xcXCIsIHN0eWxlOiB7IHJpZ2h0OiAwIH0gfSwgdGhpcy5wcm9wcy5yaWdodEN1c3RvbUNvbnRyb2xzKSkgOiBudWxsO1xcbiAgICAgICAgdmFyIGNhbmNlbEJ0biA9ICh0aGlzLnByb3BzLmNhbmNlbEJ0biAmJiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5sYWJlbCAmJiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5hY3Rpb24pID8gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImJ1dHRvblxcXCIsIHsgdHlwZTogXFxcImJ1dHRvblxcXCIsIGNsYXNzTmFtZTogY2xhc3NOYW1lcygnYnRuJywgdGhpcy5wcm9wcy5jYW5jZWxCdG4uY3NzQ2xhc3MsIHtcXG4gICAgICAgICAgICAgICAgJ2J0bi1mb250IGJ0bi10cmFucyc6ICF0aGlzLnByb3BzLmNhbmNlbEJ0bi5jc3NDbGFzc1xcbiAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnByb3BzLmNhbmNlbEJ0bi5hY3Rpb24gfSwgdGhpcy5wcm9wcy5jYW5jZWxCdG4ubGFiZWwpKSA6IG51bGw7XFxuICAgICAgICB2YXIgc3VibWl0QnRuID0gKHRoaXMucHJvcHMuc3VibWl0QnRuICYmIHRoaXMucHJvcHMuc3VibWl0QnRuLmxhYmVsICYmIHRoaXMucHJvcHMuc3VibWl0QnRuLmFjdGlvbikgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiYnV0dG9uXFxcIiwgeyB0eXBlOiBcXFwiYnV0dG9uXFxcIiwgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdidG4gcHVsbC1yaWdodCcsIHRoaXMucHJvcHMuc3VibWl0QnRuLmNzc0NsYXNzLCB7XFxuICAgICAgICAgICAgICAgICdidG4tc3VjY2Vzcyc6ICF0aGlzLnByb3BzLnN1Ym1pdEJ0bi5jc3NDbGFzc1xcbiAgICAgICAgICAgIH0pLCBvbkNsaWNrOiB0aGlzLnByb3BzLnN1Ym1pdEJ0bi5hY3Rpb24gfSwgdGhpcy5wcm9wcy5zdWJtaXRCdG4ubGFiZWwpKSA6IG51bGw7XFxuICAgICAgICB2YXIgcGFuZWxGb290ZXIgPSAoY2FuY2VsQnRuIHx8IHN1Ym1pdEJ0bikgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJwYW5lbC1mb290ZXJcXFwiIH0sXFxuICAgICAgICAgICAgY2FuY2VsQnRuLFxcbiAgICAgICAgICAgIHN1Ym1pdEJ0bikpIDogbnVsbDtcXG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IFxcXCJwYW5lbCBwYW5lbC1kZWZhdWx0XFxcIiwgc3R5bGU6IHRoaXMucHJvcHMuY3VzdG9tU3R5bGUgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJkaXZcXFwiLCB7IGNsYXNzTmFtZTogY2xhc3NOYW1lcyhcXFwicGFuZWwtaGVhZGluZyBcXFwiICsgdGhpcy5wcm9wcy5oZWFkZXJDdXN0b21DU1MsIHtcXG4gICAgICAgICAgICAgICAgICAgICdjbGljay1wb2ludGVyJzogdGhpcy5wcm9wcy50b2dnbGFibGUgIT09IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgJ2hpZGRlbic6ICEhdGhpcy5wcm9wcy5oaWRlVGl0bGVcXG4gICAgICAgICAgICAgICAgfSksIG9uQ2xpY2s6IHRoaXMudG9nZ2xlUGFuZWxDb250ZW50IH0sXFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImgzXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ3BhbmVsLXRpdGxlJywge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdoYXMtc3Bpbm5lcic6IHRoaXMucHJvcHMuc2hvd1NwaW5uZXJcXG4gICAgICAgICAgICAgICAgICAgIH0pIH0sIHRoaXMucHJvcHMucGFuZWxUaXRsZSksXFxuICAgICAgICAgICAgICAgIHRpdGxlU3Bpbm5lcixcXG4gICAgICAgICAgICAgICAgbEN1c3RvbUNvbnRyb2xzLFxcbiAgICAgICAgICAgICAgICByQ3VzdG9tQ29udHJvbHMsXFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiBjbGFzc05hbWVzKCdhY3Rpb25zJywgeyAnaGlkZGVuJzogdGhpcy5wcm9wcy50b2dnbGFibGUgPT09IGZhbHNlIH0pIH0sXFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJzcGFuXFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ2ZhcycsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZXZyb24tZG93bic6ICF0aGlzLnN0YXRlLm9wZW5lZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhLWNoZXZyb24tdXAnOiB0aGlzLnN0YXRlLm9wZW5lZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pIH0pKSksXFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcXFwiZGl2XFxcIiwgeyBjbGFzc05hbWU6IGNsYXNzTmFtZXMoJ3BhbmVsLWJvZHknLCB7XFxuICAgICAgICAgICAgICAgICAgICAnaGlkZGVuJzogIXRoaXMuc3RhdGUub3BlbmVkXFxuICAgICAgICAgICAgICAgIH0pIH0sIHRoaXMucHJvcHMuY2hpbGRyZW4pLFxcbiAgICAgICAgICAgIHBhbmVsRm9vdGVyKSk7XFxuICAgIH07XFxuICAgIFRvZ2dsZVBhbmVsLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gKG5leHRQcm9wcykge1xcbiAgICAgICAgaWYgKHRoaXMucHJvcHMuZGVmYXVsdE9wZW5lZCAhPT0gbmV4dFByb3BzLmRlZmF1bHRPcGVuZWQpIHtcXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcXG4gICAgICAgICAgICAgICAgb3BlbmVkOiBuZXh0UHJvcHMuZGVmYXVsdE9wZW5lZFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICB9O1xcbiAgICByZXR1cm4gVG9nZ2xlUGFuZWw7XFxufShSZWFjdC5Db21wb25lbnQpKTtcXG5leHBvcnRzLmRlZmF1bHQgPSBUb2dnbGVQYW5lbDtcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XFxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcXG4gICAgfTtcXG59KSgpO1xcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIFJlYWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygwKTtcXG52YXIgc3Bpbm5lcl8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjIpO1xcbnZhciBTcGlubmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcXG4gICAgX19leHRlbmRzKFNwaW5uZXIsIF9zdXBlcik7XFxuICAgIGZ1bmN0aW9uIFNwaW5uZXIocHJvcHMpIHtcXG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcXG4gICAgfVxcbiAgICBTcGlubmVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICB2YXIgX2EgPSB0aGlzLnByb3BzLCB0b3AgPSBfYS50b3AsIGJvdHRvbSA9IF9hLmJvdHRvbSwgcmlnaHQgPSBfYS5yaWdodCwgbGVmdCA9IF9hLmxlZnQsIHNpemUgPSBfYS5zaXplO1xcbiAgICAgICAgdmFyIHNwaW5uZXJTdHlsZSA9IHtcXG4gICAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcXG4gICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxcbiAgICAgICAgICAgIG1hcmdpbjogJ2F1dG8nLFxcbiAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXFxuICAgICAgICAgICAgdG9wOiB0b3AsXFxuICAgICAgICAgICAgYm90dG9tOiBib3R0b20sXFxuICAgICAgICAgICAgcmlnaHQ6IHJpZ2h0LFxcbiAgICAgICAgICAgIGxlZnQ6IGxlZnRcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXFxcImRpdlxcXCIsIHsgY2xhc3NOYW1lOiAnc3Bpbm5lcicsIHN0eWxlOiBzcGlubmVyU3R5bGUgfSxcXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFxcXCJpbWdcXFwiLCB7IHNyYzogc3Bpbm5lcl8xLnNwaW5uZXIsIGFsdDogJ0xvYWRpbmcuLi4nLCB3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IDMyLCBoZWlnaHQ6IHRoaXMucHJvcHMuc2l6ZSB8fCAzMiB9KSkpO1xcbiAgICB9O1xcbiAgICByZXR1cm4gU3Bpbm5lcjtcXG59KFJlYWN0LkNvbXBvbmVudCkpO1xcbmV4cG9ydHMuZGVmYXVsdCA9IFNwaW5uZXI7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjYyICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcblxcXCJ1c2Ugc3RyaWN0XFxcIjtcXG5cXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXFxcIl9fZXNNb2R1bGVcXFwiLCB7IHZhbHVlOiB0cnVlIH0pO1xcbmV4cG9ydHMuc3Bpbm5lciA9ICdkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhRQUJBQVBJQUFQeWxiZjJtYnYyNmovM09yLzdpMFA3dDR2MjdrQUFBQUNIL0MwNUZWRk5EUVZCRk1pNHdBd0VBQUFBaC9ob2lRM0psWVhSbFpDQjNhWFJvSUVOb2FXMXdiSGt1WTI5dElnQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NrbXF2Zmlxd2J2L25pS01aR21XUzZabUcraCs0aW1iNldvVDdhdkhjMS9mcXB6T3hldkpma0NNY0FnREdIMktaQkRBZkJXZnFLaFVTYTJDcnRnUmNvdnJla1BPTUUxTHJpelA0UEI0Ky9iR3NYTnB2WHAvNXBON1RIMUdmMENCUTROUUFHMFdoenRwYWlTRk40NVdrSkVDa3phVlJKZVJtaXVjWDU1cW9GTm5UWmlTYkcyaXFhcVpFN0t6dExXMnQ3aTBCYnU4dmI2OXVRd0J3OFRGeHNVTHY4cS93UXZIejhmSnk5TUZ6UXJRMk1QUzFNcldBTm5ZMjl5KzN1RFE0dU84NWViUkN1bk0xdXp0QU8vazhmTEk3dlhxOS9qYSt2dXE5Zk9IN3QwNmZ3RUtwanRJRU9BK2h2Z1Vqb01vVHlJM2l1d3NVc05vVG5yak5JN2dQQzREbVUxa3Q0RVJ2YWxjeWJKbGc0QzdITmFUYVpEbVFub3diVTdVZVJGblFKNGJnWDcwK1pEb1RLRWpqZGFFS1ZEcFRhWklUenJkQ1hWcVQ2dEJxMWJGT2xScnpxand2UDRFYTA5c1VhNUp6UjVGZTFKdFRiWmh2MjUxKy9RcjNMSnk3ZEtscWpmdjJMbCtpMjUxU2JpdzRRZ0pBQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTbG1xdmZncXdydi9uaktNWkdtV1M2Wm1HK2grNGltYjZXb1g3YXZIYzEvZnFwek94ZXZKZmtDTWNBZ0RHSDJLWkJEQWZCV2ZxS2hVU2EyQ3J0Z1Jjb3ZyZWtQT01FMUxyaXpQNFBCNCsvYkdzWE5wdlhwLzVwTjdUSDFHZjBDQlE0TlFBRzBXaHp0cGFpU0ZONDVXa0pFRGt6YVZSSmVSbWl1Y1g1NXFvRk5uVFppU2JHMmlxYXFaRTdLenRMVzJ0N2kwakc2NUN3Sy93TUhDd2FZc3ZRckR5Y1BGWE1mS3o3L01Hc2NBME0vU2pkVFd5dGk4enR2THJHVFUxZURDM1dYZjVzRG81T3ZFNG5UYTc5SHhldlAwN2Zqdit1cjg5b0QycmV2WGkxNjlSYnZjR1NTWXk2QUFocmdjUXJ3bGtaekZpeGd6TnRoVmhuR2pnZ0FnUTRvY0tWS2ZSd0FrVTVJMG1SQ2x5cGNCV0RMNkNGT2x6Rll1YTY0RWFBamh6Snc2Uy9LazVCTm4wSjFGeHlXVmQzVGtUYVZOaFM2OWR6SnF5S2RNcmNZY3VtbHFRSzFidmZhc3FoWHJQYkJtdjVibEdrb3NVYlJzcDVDMW1yWW5YTGRkNTBiVnlMZXZYMWtKQUFBaCtRUUpDZ0FBQUN3QUFBQUFRQUJBQUFBRC93aTYzUDR3U2xtcXZmaXF6TE1pWUNpTzR0S2QxWVoySCttTzVzcXBNdGErZUZ4cndHNER1S0RPVjZBUmIwSFMwR2RrQXBPdTVhNDVmVUpoMUZwV2hyeUNwTm9lTVdYMWZyY3JOS3JyQlhQRlkvYlZuWVlmeTJiNjJ1NDBsOVFuZ0N4NGJZSXpmRlYrSVhxQmlHR0taNDV2WTJTUUJJeURsRVdFYzRZZWtuV1dFNk9rcGFhbnFLbW1tcW9NQTYrd3NiS3htSWV0QUxPNXM3V2Z0N3Evcjd3L3ZzQzZ3anpFeGJ1ZXc2M0t1Y2NXdHdyUHk2Qjd5ZFhCek1qTzJyRFJaTm5hNFp2ajFlWFR1Ti9iMTQzbnorblQ3TzJzOC9UeThNcjUzdXo4cXZRRy9Fc1ZVSjNCZ3dnVE9yQVhvS0hEaHhBZktqQkFzYUxGaXhibFJkd1ljWE1peG84WE5YSWNHY0FqeUpNaVNXNDBlZkpqU3BVUVdiWU15VTBhQUpnckFjd0UrUkpuUTVrN0tmYjBDVFRvVUp4RmR4NkZtWFRtVXBWTld6NGxHUlZsVFRJK1krb01TdFBkb0t3U3QzS3RPSFZrVlo1WE40RjFlTlpsV2dWcmY0b2RhNkFzeDdZWTdlYWtTMWFoMzcrQUp5UUFBQ0g1QkFrS0FBQUFMQUFBQUFCQUFFQUFBQVAvQ0xyYy9qQktXYXE5K0tyTTgrNWdzWVRnUjNyQXlZMHFacmJWQzdOd25OWTJidCs0M1BvcVdnMTRJcEtFTTk1UW1XVCtuRUZvMFJpaWxxUkhhMGU3d2xhNUtKM0lleVZ2elYweDhxbEdvOXd1dUVadVdVZmJiWHBPQjQ3cngzaDhmWE9CUFlOMWY0YzdFNHlOam8rUWtaS01lWk1BQkppWm1wdWFkbE9XbDV5aW01NVpvS09vbUtWZnA2bWpxMldXcnErS1k2MnpwTFdnQ3JpY3NHZTN2YXE2dThLZHhNSEN2MTNKdmN0dnNzYkRpY1hTQk05KzBkTFljODI0M0lqZXMrQ0xrOWJYeU5yRzVMYnF5cnZ3OGZMekVnSDI5L2o1K0FvQy9mNy9BUDhwR0VDd29NR0RCaGZvVzZpUFg4Q0hBQWNpbkhoUUljT0xBUnhDM0NpUmlxSkhpeGdYYXR6NHNLUEhpU0JENWh0Sk1pS0FreDhWcUJRSm9DVkVrekFUeXB5NXNxYk5nRGh6RWt6Sk02UFBud0pmQ3EyNHM2Zzlsa2lEQ2lYS0UrcFBxVG1wenJScUV5dE1yU3E1dHZSNkVteElzU1RKeGdUZzlCNWFqa3FYRmpTTDhlM051SElIMEwxb3R5UmV1WHNaOWdYNmQybGdta2hkNXAzYjFPbGd4WXYxMHB0TXVmS2pCQUFoK1FRSkNnQUFBQ3dBQUFBQVFBQkFBQUFEL3dpNjNQNHdTbG1xdmZpcXpQUHVZTEdFNEVkNndNbU5LbWEyMVF1emNKeldObTdmdU56Nktsb05lQ0tTaERQZVVKbGsvcHhCYU5FWW9wYWtSMnRIdThKV3VTaWR5SHNsYjgxZE1mS3BScVBjTHJoR2JsbEgyMjE2VGdlTzY4ZDRmSDF6Z1QyRGRYK0hPeE9Nalk2UGtKR1NqQUdWbHBlWWw1TU1lWm1lbVp0MlV3Q2ZwWldoaW1Pa3BwK29pUXFzcmFpZHNhQ3pncXUxbXJlR3VicW52RXUrdjY2MHY4Q2h4c2ZGdU1lV3pMM095SnZLeE1GTjBnSFF3dG5iMk5MZVQ4TzY0VkhqdGVXanJ1dnM3ZTRMQXZIeTgvVHpDZ1A0K2ZyNytnb0Uvd0FEQ2d3SXI1NUJldmY0S2R6bmI2QkRnUVVQU2t5NHNHTERoeGdqU2pSSXNZYWl3b3NZSFdyY2lCQ0FSNHNBUW1aVVFQSmd4NVA5VXFvVXliSmx2WmN3OFlHY0NYQ2tUUUU0Yys3a1NjQ256YUF3aC9JMDJoTHBTYVV6bVpKMDZoR3FTcWticWFJa0NySG1UM2xhRjFvTmlYV2l5WndNWlhMOVY5YmxXYlQ1eHE0RThOWGVXN2dENUQ1c3kvRXVYTDAwNmRhTkYvYWoyclY4Yi9wRkMzamd1OGVRSXpOS0FBQWgrUVFKQ2dBQUFDd0FBQUFBUUFCQUFBQUQvd2k2M1A0d1NobXF2Zmlxd3J2LzNnYU8zNUtkbVVpdTZqcWFhQnkwYmduVUpDeWZOTTcxUHQwT0E4UVZhOEtoNWVoaXNoVEsxTTFubzlvQVVlTFUrdHR5azFGbnptc0ZLOFV2TXRVOFJJUGMxNnhHSGFRYm9mSUtQR1JINHZON0hZRmRXSGt6ZlUySVQ0V0FpbU5jZ245eWd3V1ViRHVXam1tTWs1cHZubGNUb3FPa3BhYW5xS0lDcTZ5dHJxMnBESkNFcjdXdnNRdXpsUXEydmF1NG1RQyt2Y0NnZk1MRHRjVzZDOG5Ld015OHpxN0xzODNUc05EVzB0aS8ycERYM1FMVjROemQ1Ri9tMk9obDZ0UHNhKzdPOEhYSTR2UjM5dWZmNmZyci9PMzh2UU1ZVCtBOGd2V0tLVnpJc09HQ0FSQWpTcHdvVVFHQml4Z3phc3dZakh1aVI0b1dONHJVMlBHanlRRWhSNm9zZWRKalNwVWlXYmFjK0JJbVNXT1JBTXgwQ2NEbVNKazdJZGIwZVJGbzBLRkVqZTVFNmxQcFRLWTJuYmFFQ2xQcVNhb3JjUklLU3JNbjBadlJkSEtOaVBXbjFsMWl4NkwwK2hXalZaTmxZNTU5cUhadFc0NXpGZFMxZTdkbzNyUmo0MjRNNXJDdzRjTVJFZ0FBSWZrRUNRb0FBQUFzQUFBQUFFQUFRQUFBQS84SXV0eitNRW9wcXIzNHFzQzcvNTVTakdScGxrdW1aaHZvZnVJcG0rbHFDKzJyeDNOZjM2cWN6c1hyeVg1QWpIQUlBeGg5aW1RUXdId1ZuNmlvVkVtdGdxN1lFWEtMNjNwRHpqQk5TNjRzeitEd2VQdjJ4ckZ6YWIxNmYrYVRlMHg5Um45QWdVT0RVQUJ0Rm9jN2FXb2toVGVPVnBDUkJaTTJsVVNYa1pvcm5GK2VhcUJUWjAyWWtteHRvcW1xbVJPeXM3UzF0cmU0dEFPN3ZMMit2YmtNc0xFQXY4YS93UXZEQzhmTnU4bUpNOHpPeDlDa2NnclUxZERMMmRySTNMRFQzOERocXVQa3orYVk2T25XM2NYcHZPL2kzdklEOU9mMjh2bnMrKzdyUHYwajEwOWd2SHNGU3czOGxoRGJRWDRCRlQ0RW1BemVQWFVWNjFuYnlMRjNvMGNHQkVLS0hFbHlaTFFqMS9Bb0tNbXk1TWtUTDljQWFFa3paTXdzOEdyU3ZMa3FwMDZXUE1XazlMUHlwOHVoaEpBcU1ucTBtMCttSW9QR2VncVZnTlNyUmF0YVZTcU5LOHFaV3JjNjFSaFdiRDJxVUxHaVphcVdiTmkyK3NCcWhldFBibFc2QnN2aWxhalhLMHkvTWo4S0hrdzRRZ0lBSWZrRUNRb0FBQUFzQUFBQUFFQUFRQUFBQS84SXV0eitNRW81cXIzNEtzRzcvNTRTakdScGxrdW1aaHZvZnVJcG0rbHFEKzJyeDNOZjM2cWN6c1hyeVg1QWpIQUlBeGg5aW1RUXdId1ZuNmlvVkVtdGdxN1lFWEtMNjNwRHpqQk5TNjRzeitEd2VQdjJ4ckZ6YWIxNmYrYVRlMHg5Um45QWdVT0RVQUJ0Rm9jN2FXb2toVGVPVnBDUkFaTTJsVVNYa1pvcm5GK2VhcUJUWjAyWWtteHRvcW1xbVJPeXM3UzF0cmU0dEFTN3ZMMit2YmtNQmNQRXhjYkZDNy9LdjhFTHg4L0h5Y3ZUQk0wSzBOakQwdFRLMWdEWjJOdmN2dDdnME9ManZPWG0wUXJwek5iczdRRHY1UEh5eU83MTZ2ZjQydnI3cXZYemgrN2RPbjhGQ3FZN1NCRGdQb2I0Rkk2REtFOGlONHJzTEZMRGFFNTM0elNPNER3dUE1bE5aTGVCRWIycFhNbXlaUU9FLzJBbS9BYlRXVTJhQ0svZHhObFFwczZjUDN2ZTlCazBKVkdpUEkwTzNYbDBLZENrRmFGbWxOcXhhTlNtVDdFS3plcDBhME9xSWNHV0ZCdk82bFN0S2NtZVUvdk1iRlcyN2RCR2hXdk1iVmlrY3M4eTdhcVVLOUM4YjEwS0hrdzRRZ0lBT3c9PSc7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Bpbm5lci5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNjMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxudmFyIG1kNV8xID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjQpO1xcbnZhciBiYXNlNjQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2Nyk7XFxudmFyIGNsYXNzTmFtZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDEzKTtcXG52YXIgd29yZGluZ3NfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjY5KTtcXG52YXIgQ29uZmlnXzEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDI3MCk7XFxudmFyIERhdGFfMSA9IF9fd2VicGFja19yZXF1aXJlX18oMjcxKTtcXG5leHBvcnRzLkVNQUlMX1JFR0VYID0gL15cXFxcUytAXFxcXFMrXFxcXC5cXFxcUyskLztcXG5leHBvcnRzLkNPTE9SX0NPREVfUkVHRVggPSAvXiMoW0EtRmEtZjAtOV17Nn18W0EtRmEtZjAtOV17M30pJC87XFxuZXhwb3J0cy5TQ09QRV9LRVlXT1JEX1JFR0VYID0gL15bYS16QS1aMC05LV9+QCTCo3zigqzCpcKnJl0rJC87XFxuZXhwb3J0cy5NQVBfUFJPUEVSVFlfS0VZX1JFR0VYID0gL15bYS16QS1aMC05LV9dKyQvO1xcbmV4cG9ydHMuWE1MX1RBR19SRUdFWCA9IC9eW2EtekEtWl86XVthLXpBLVowLTlfOlxcXFwtXFxcXC5dKiQvO1xcbmV4cG9ydHMuSFRUUFNfVVJMX1JFR0VYID0gL2h0dHBzOlxcXFwvXFxcXC8od3d3XFxcXC4pP1stYS16QS1aMC05QDolLl9cXFxcK34jPV17MiwyNTZ9XFxcXC5bYS16XXsyLDZ9XFxcXGIoWy1hLXpBLVowLTlAOiVfXFxcXCsufiM/JlxcXFwvPV0qKS87XFxuZnVuY3Rpb24gZ2V0V29yZGluZ3Mod29yZGluZ3MsIGxvY2FsZSkge1xcbiAgICB2YXIgY29tYmluZWRXb3JkaW5ncyA9IGRlZXBDb3B5KHdvcmRpbmdzXzEuTVVMVElMQU5HVUFHRV9XT1JESU5HUywgd29yZGluZ3MpO1xcbiAgICB2YXIgcmVzID0gT2JqZWN0LmtleXMoY29tYmluZWRXb3JkaW5ncykucmVkdWNlKGZ1bmN0aW9uIChkaWMsIGtleSkge1xcbiAgICAgICAgZGljW2tleV0gPSBjb21iaW5lZFdvcmRpbmdzW2tleV1bbG9jYWxlXTtcXG4gICAgICAgIHJldHVybiBkaWM7XFxuICAgIH0sIHt9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRXb3JkaW5ncyA9IGdldFdvcmRpbmdzO1xcbmZ1bmN0aW9uIGNvbXBpbGVXb3JkaW5ncyh3b3JkaW5ncywgbG9jYWxlKSB7XFxuICAgIGxvY2FsZSA9IGxvY2FsZSB8fCBcXFwiZW4tVVNcXFwiO1xcbiAgICB2YXIgcmVzID0gT2JqZWN0LmtleXMod29yZGluZ3MpLnJlZHVjZShmdW5jdGlvbiAoZGljLCBrZXkpIHtcXG4gICAgICAgIGRpY1trZXldID0gd29yZGluZ3Nba2V5XVtsb2NhbGVdO1xcbiAgICAgICAgcmV0dXJuIGRpYztcXG4gICAgfSwge30pO1xcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmNvbXBpbGVXb3JkaW5ncyA9IGNvbXBpbGVXb3JkaW5ncztcXG5mdW5jdGlvbiBnZXRHcmF2YXRhclVybChlbWFpbCkge1xcbiAgICB2YXIgYmFzZVVybCA9ICdodHRwczovL3NlY3VyZS5ncmF2YXRhci5jb20vYXZhdGFyLyc7XFxuICAgIHZhciBxdWVyeVBhcmFtcyA9ICc/cz0yMDAmZD1tbSc7XFxuICAgIHJldHVybiBiYXNlVXJsICsgbWQ1XzEuZGVmYXVsdChlbWFpbC50cmltKCkudG9Mb3dlckNhc2UoKSkgKyBxdWVyeVBhcmFtcztcXG59XFxuZXhwb3J0cy5nZXRHcmF2YXRhclVybCA9IGdldEdyYXZhdGFyVXJsO1xcbmZ1bmN0aW9uIGlzVmFsaWRQYXNzd29yZChwYXNzd29yZCkge1xcbiAgICB2YXIgbWluTWF4TGVuZ3RoID0gL15bXFxcXHNcXFxcU117OCwzMn0kLywgdXBwZXIgPSAvW0EtWl0vLCBsb3dlciA9IC9bYS16XS8sIG51bWJlciA9IC9bMC05XS8sIGNvdW50ID0gMDtcXG4gICAgaWYgKG1pbk1heExlbmd0aC50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgaWYgKHVwcGVyLnRlc3QocGFzc3dvcmQpKSB7XFxuICAgICAgICAgICAgY291bnQrKztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChsb3dlci50ZXN0KHBhc3N3b3JkKSkge1xcbiAgICAgICAgICAgIGNvdW50Kys7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAobnVtYmVyLnRlc3QocGFzc3dvcmQpKSB7XFxuICAgICAgICAgICAgY291bnQrKztcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gY291bnQgPj0gMjtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkUGFzc3dvcmQgPSBpc1ZhbGlkUGFzc3dvcmQ7XFxuZnVuY3Rpb24gaXNWYWxpZEVtYWlsKGVtYWlsKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkVNQUlMX1JFR0VYLnRlc3QoZW1haWwpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRFbWFpbCA9IGlzVmFsaWRFbWFpbDtcXG5mdW5jdGlvbiBpc1ZhbGlkQ29sb3JDb2RlKGNvbG9yKSB7XFxuICAgIHJldHVybiBleHBvcnRzLkNPTE9SX0NPREVfUkVHRVgudGVzdChjb2xvcik7XFxufVxcbmV4cG9ydHMuaXNWYWxpZENvbG9yQ29kZSA9IGlzVmFsaWRDb2xvckNvZGU7XFxuZnVuY3Rpb24gaXNOb3RFbXB0eSh2YWx1ZSkge1xcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID4gMDtcXG59XFxuZXhwb3J0cy5pc05vdEVtcHR5ID0gaXNOb3RFbXB0eTtcXG5mdW5jdGlvbiBpc1ZhbGlkU2NvcGVLZXl3b3JkKHZhbHVlKSB7XFxuICAgIHJldHVybiBleHBvcnRzLlNDT1BFX0tFWVdPUkRfUkVHRVgudGVzdCh2YWx1ZSk7XFxufVxcbmV4cG9ydHMuaXNWYWxpZFNjb3BlS2V5d29yZCA9IGlzVmFsaWRTY29wZUtleXdvcmQ7XFxuZnVuY3Rpb24gaXNWYWxpZEtleUNoYXIodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuTUFQX1BST1BFUlRZX0tFWV9SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkS2V5Q2hhciA9IGlzVmFsaWRLZXlDaGFyO1xcbmZ1bmN0aW9uIGlzVmFsaWRYTUxUYWcodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuWE1MX1RBR19SRUdFWC50ZXN0KHZhbHVlKTtcXG59XFxuZXhwb3J0cy5pc1ZhbGlkWE1MVGFnID0gaXNWYWxpZFhNTFRhZztcXG5mdW5jdGlvbiBpc1ZhbGlkSHR0cHNVcmwodmFsdWUpIHtcXG4gICAgcmV0dXJuIGV4cG9ydHMuSFRUUFNfVVJMX1JFR0VYLnRlc3QodmFsdWUpO1xcbn1cXG5leHBvcnRzLmlzVmFsaWRIdHRwc1VybCA9IGlzVmFsaWRIdHRwc1VybDtcXG5mdW5jdGlvbiBlc2NhcGVYbWwoeG1sKSB7XFxuICAgIHJldHVybiB4bWwucmVwbGFjZSgvWzw+JidcXFwiXS9nLCBmdW5jdGlvbiAoYykge1xcbiAgICAgICAgc3dpdGNoIChjKSB7XFxuICAgICAgICAgICAgY2FzZSAnPCc6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJmx0JztcXG4gICAgICAgICAgICBjYXNlICc+JzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmZ3QnO1xcbiAgICAgICAgICAgIGNhc2UgJyYnOlxcbiAgICAgICAgICAgICAgICByZXR1cm4gJyZhbXAnO1xcbiAgICAgICAgICAgIGNhc2UgJ1xcXFwnJzpcXG4gICAgICAgICAgICAgICAgcmV0dXJuICcmYXBvcyc7XFxuICAgICAgICAgICAgY2FzZSAnXFxcIic6XFxuICAgICAgICAgICAgICAgIHJldHVybiAnJnF1b3QnO1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG59XFxuZXhwb3J0cy5lc2NhcGVYbWwgPSBlc2NhcGVYbWw7XFxuZnVuY3Rpb24gdXRmOEpTT05fdG9fYjY0VVJJKGpzb24pIHtcXG4gICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChiYXNlNjQuZW5jb2RlKGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoanNvbikpKSkpO1xcbn1cXG5leHBvcnRzLnV0ZjhKU09OX3RvX2I2NFVSSSA9IHV0ZjhKU09OX3RvX2I2NFVSSTtcXG5mdW5jdGlvbiBVUkliNjRfdG9fdXRmOEpTT04oc3RyKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGJhc2U2NC5kZWNvZGUoZGVjb2RlVVJJQ29tcG9uZW50KHN0cikpKSkpO1xcbiAgICB9XFxuICAgIGNhdGNoIChlcnJvcikge1xcbiAgICAgICAgY29uc29sZS5sb2coJ0pTT04gcGFyc2luZyBlcnJvcjogJywgZXJyb3IpO1xcbiAgICAgICAgcmV0dXJuIHt9O1xcbiAgICB9XFxufVxcbmV4cG9ydHMuVVJJYjY0X3RvX3V0ZjhKU09OID0gVVJJYjY0X3RvX3V0ZjhKU09OO1xcbmZ1bmN0aW9uIGFycmF5TWluKGFycikge1xcbiAgICByZXR1cm4gYXJyLnJlZHVjZShmdW5jdGlvbiAocHJldiwgbmV4dCkge1xcbiAgICAgICAgcmV0dXJuIChwcmV2IDwgbmV4dCA/IHByZXYgOiBuZXh0KTtcXG4gICAgfSk7XFxufVxcbmV4cG9ydHMuYXJyYXlNaW4gPSBhcnJheU1pbjtcXG5mdW5jdGlvbiBhcnJheU1heChhcnIpIHtcXG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoZnVuY3Rpb24gKHByZXYsIG5leHQpIHtcXG4gICAgICAgIHJldHVybiAocHJldiA+IG5leHQgPyBwcmV2IDogbmV4dCk7XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmFycmF5TWF4ID0gYXJyYXlNYXg7XFxuZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xcbiAgICBpZiAoIXNpemUpIHtcXG4gICAgICAgIHJldHVybiAnMCBCJztcXG4gICAgfVxcbiAgICB2YXIgayA9IDEwMDA7XFxuICAgIHZhciBzaXplcyA9IFsnQicsICdLQicsICdNQicsICdHQicsICdUQiddO1xcbiAgICB2YXIgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coc2l6ZSkgLyBNYXRoLmxvZyhrKSk7XFxuICAgIHZhciB1bml0ID0gaSA8IDUgPyBzaXplc1tpXSA6IHNpemVzWzRdO1xcbiAgICByZXR1cm4gKHNpemUgLyBNYXRoLnBvdyhrLCBpKSkudG9GaXhlZCgxKSArICcgJyArIHVuaXQ7XFxufVxcbmV4cG9ydHMuZm9ybWF0RmlsZVNpemUgPSBmb3JtYXRGaWxlU2l6ZTtcXG5mdW5jdGlvbiBnZXRRdWVyeVBhcmFtcyhzZWFyY2hTdHJpbmcpIHtcXG4gICAgaWYgKCFzZWFyY2hTdHJpbmcpIHtcXG4gICAgICAgIHJldHVybiB7fTtcXG4gICAgfVxcbiAgICB2YXIgcXVlcnlTdHJpbmdQYXJhbXMgPSBzZWFyY2hTdHJpbmcuc3Vic3RyKDEpLnNwbGl0KCcmJyk7XFxuICAgIHZhciBxdWVyeVBhcmFtcyA9IHF1ZXJ5U3RyaW5nUGFyYW1zLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBxdWVyeVN0clBhcmFtKSB7XFxuICAgICAgICB2YXIga2V5VmFsdWUgPSBxdWVyeVN0clBhcmFtLnNwbGl0KCc9Jyk7XFxuICAgICAgICBpZiAoa2V5VmFsdWUubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICAgICAgYWNjW2tleVZhbHVlWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlWYWx1ZVsxXSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gYWNjO1xcbiAgICB9LCB7fSk7XFxuICAgIHJldHVybiBxdWVyeVBhcmFtcztcXG59XFxuZXhwb3J0cy5nZXRRdWVyeVBhcmFtcyA9IGdldFF1ZXJ5UGFyYW1zO1xcbmZ1bmN0aW9uIGFkZFF1ZXJ5UGFyYW0odXJpLCBrZXksIHZhbHVlKSB7XFxuICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xcbiAgICBsaW5rLmhyZWYgPSB1cmk7XFxuICAgIGlmIChsaW5rLnNlYXJjaCkge1xcbiAgICAgICAgbGluay5zZWFyY2ggKz0gKCcmJyArIGVuY29kZVVSSUNvbXBvbmVudChrZXkpICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XFxuICAgIH1cXG4gICAgZWxzZSB7XFxuICAgICAgICBsaW5rLnNlYXJjaCA9ICgnPycgKyBlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xcbiAgICB9XFxuICAgIHJldHVybiBsaW5rO1xcbn1cXG5leHBvcnRzLmFkZFF1ZXJ5UGFyYW0gPSBhZGRRdWVyeVBhcmFtO1xcbmZ1bmN0aW9uIG9yZGVyQXNjKG9iamVjdCkge1xcbiAgICB2YXIgcmVzdWx0ID0ge307XFxuICAgIE9iamVjdC5rZXlzKG9iamVjdCkuc29ydCgpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcXG4gICAgfSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcbmV4cG9ydHMub3JkZXJBc2MgPSBvcmRlckFzYztcXG5mdW5jdGlvbiBvcmRlckRlc2Mob2JqZWN0KSB7XFxuICAgIHZhciByZXN1bHQgPSB7fTtcXG4gICAgT2JqZWN0LmtleXMob2JqZWN0KS5zb3J0KCkucmV2ZXJzZSgpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xcbiAgICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcXG4gICAgfSk7XFxuICAgIHJldHVybiByZXN1bHQ7XFxufVxcbmV4cG9ydHMub3JkZXJEZXNjID0gb3JkZXJEZXNjO1xcbmZ1bmN0aW9uIHNhdmVEYXRhQXNKU09ORmlsZShkYXRhLCBmaWxlTmFtZSwgZXh0ZW5zaW9uKSB7XFxuICAgIHZhciBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgJ1xcXFx0Jyk7XFxuICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2pzb25dLCB7XFxuICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vanNvbidcXG4gICAgfSk7XFxuICAgIHRyaWdnZXJEYXRhRG93bmxvYWQoYmxvYiwgZmlsZU5hbWUgKyBcXFwiX1xcXCIgKyBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3Vic3RyKDAsIDE5KSArIChleHRlbnNpb24gfHwgJy5qc29uJykpO1xcbn1cXG5leHBvcnRzLnNhdmVEYXRhQXNKU09ORmlsZSA9IHNhdmVEYXRhQXNKU09ORmlsZTtcXG5mdW5jdGlvbiBkb3dubG9hZERhdGFGaWxlKGJhc2U2NERhdGFTdHJpbmcsIGNvbnRlbnRUeXBlLCBmaWxlTmFtZSkge1xcbiAgICB2YXIgYjY0U3RyaW5nID0gJ2RhdGE6JyArIGNvbnRlbnRUeXBlICsgJztiYXNlNjQsJyArIGJhc2U2NERhdGFTdHJpbmc7XFxuICAgIHRyaWdnZXJEYXRhRG93bmxvYWQoYjY0U3RyaW5nLCBmaWxlTmFtZSwgdHJ1ZSk7XFxufVxcbmV4cG9ydHMuZG93bmxvYWREYXRhRmlsZSA9IGRvd25sb2FkRGF0YUZpbGU7XFxuZnVuY3Rpb24gdHJpZ2dlckRhdGFEb3dubG9hZChkYXRhLCBmaWxlTmFtZSwgZGF0YVVybCkge1xcbiAgICB2YXIgdXJsID0gZGF0YVVybCA/IGRhdGEgOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGRhdGEpO1xcbiAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcXG4gICAgbGluay5ocmVmID0gdXJsO1xcbiAgICBsaW5rWydkb3dubG9hZCddID0gZmlsZU5hbWU7XFxuICAgIGxpbmsuY2xpY2soKTtcXG4gICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xcbn1cXG5mdW5jdGlvbiBoYXNSZXF1aXJlZFJlc291cmNlKGFwcEVuZHBvaW50cywgYXBwSW5zdGFuY2VOYW1lLCBmZWF0dXJlSWQpIHtcXG4gICAgaWYgKGFwcEVuZHBvaW50cyAmJiBhcHBFbmRwb2ludHNbYXBwSW5zdGFuY2VOYW1lXSkge1xcbiAgICAgICAgaWYgKGFwcEVuZHBvaW50c1thcHBJbnN0YW5jZU5hbWVdW2ZlYXR1cmVJZF0pIHtcXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZmFsc2U7XFxufVxcbmV4cG9ydHMuaGFzUmVxdWlyZWRSZXNvdXJjZSA9IGhhc1JlcXVpcmVkUmVzb3VyY2U7XFxuZnVuY3Rpb24gcmVwbGFjZVRlbXBsYXRlVmlld05hbWUodGVtcGxhdGVkSHRtbCwgdmlld05hbWUpIHtcXG4gICAgcmV0dXJuIHRlbXBsYXRlZEh0bWwucmVwbGFjZSgve3tWSUVXTkFNRX19L2csIHZpZXdOYW1lKTtcXG59XFxuZXhwb3J0cy5yZXBsYWNlVGVtcGxhdGVWaWV3TmFtZSA9IHJlcGxhY2VUZW1wbGF0ZVZpZXdOYW1lO1xcbmZ1bmN0aW9uIHJlcGxhY2VUZW1wbGF0ZUZsYWdzKHRlbXBsYXRlZEh0bWwsIGxvY2FsZSkge1xcbiAgICB2YXIgZmxhZ3NSZWdleCA9IC97e0ZMQUdTXFxcXD0oLiopfX0vZztcXG4gICAgdmFyIG1hdGNoUmVzID0gZmxhZ3NSZWdleC5leGVjKHRlbXBsYXRlZEh0bWwpO1xcbiAgICBpZiAobWF0Y2hSZXMgJiYgbWF0Y2hSZXMubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICB2YXIgZmxhZ3MgPSBtYXRjaFJlc1sxXS5zcGxpdCgnLCcpO1xcbiAgICAgICAgdmFyIGZsYWdzSHRtbCA9ICcnO1xcbiAgICAgICAgZm9yICh2YXIgZmxhZ05hbWUgaW4gRGF0YV8xLmZsYWdzRGVmKSB7XFxuICAgICAgICAgICAgdmFyIGZsYWdEZWYgPSBEYXRhXzEuZmxhZ3NEZWZbZmxhZ05hbWVdO1xcbiAgICAgICAgICAgIGlmIChmbGFnTmFtZSAhPT0gJ2V1bnJlYWQnKSB7XFxuICAgICAgICAgICAgICAgIGlmICgoZmxhZ0RlZi5pbnZlcnNlZCAmJiBmbGFncy5pbmRleE9mKGZsYWdOYW1lKSA9PT0gLTEpIHx8ICghZmxhZ0RlZi5pbnZlcnNlZCAmJiBmbGFncy5pbmRleE9mKGZsYWdOYW1lKSAhPT0gLTEpKSB7XFxuICAgICAgICAgICAgICAgICAgICBmbGFnc0h0bWwgKz0gJzxzcGFuIGNsYXNzPVxcXCJmYS1mdyByaWdodC1zcGFjZWQgdGV4dC14bGFyZ2UgJyArIGZsYWdEZWYuaWNvbkNvbG9yICsgJyAnICsgZmxhZ0RlZi5pY29uU2hhcGUgKyAnXFxcIiB0aXRsZT1cXFwiJyArIGZsYWdEZWYuZmxhZ0xhYmVsW2xvY2FsZV0gKyAnXFxcIj48L3NwYW4+JztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sLnJlcGxhY2UoZmxhZ3NSZWdleCwgZmxhZ3NIdG1sKTtcXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZWRIdG1sO1xcbiAgICB9XFxufVxcbmV4cG9ydHMucmVwbGFjZVRlbXBsYXRlRmxhZ3MgPSByZXBsYWNlVGVtcGxhdGVGbGFncztcXG5mdW5jdGlvbiBnZXRTdHlsZURlZihzdHlsZUNvbmYpIHtcXG4gICAgdmFyIHN0eWxlcyA9IHN0eWxlQ29uZi5zcGxpdCgnLCcpO1xcbiAgICB2YXIgcmVzID0ge1xcbiAgICAgICAgaWNvbjogbnVsbCxcXG4gICAgICAgIGJ0bjogbnVsbCxcXG4gICAgICAgIGNvbG9yOiBudWxsXFxuICAgIH07XFxuICAgIHN0eWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdHlsZSkge1xcbiAgICAgICAgaWYgKHN0eWxlLmluZGV4T2YoJ2ljb246JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmljb24gPSBzdHlsZS5yZXBsYWNlKCdpY29uOicsICcnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChzdHlsZS5pbmRleE9mKCdidG46JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmJ0biA9IHN0eWxlLnJlcGxhY2UoJ2J0bjonLCAnJyk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoc3R5bGUuaW5kZXhPZignY29sb3I6JykgIT09IC0xKSB7XFxuICAgICAgICAgICAgcmVzLmNvbG9yID0gc3R5bGUucmVwbGFjZSgnY29sb3I6JywgJycpO1xcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIHJlcztcXG59XFxuZXhwb3J0cy5nZXRTdHlsZURlZiA9IGdldFN0eWxlRGVmO1xcbmZ1bmN0aW9uIGdldEFjY2VwdExhbmd1YWdlSGVhZGVyKGxvY2FsZSkge1xcbiAgICB2YXIgbm90U2VsZWN0ZWQgPSBDb25maWdfMS5BVkFJTEFCTEVfTEFOR1VBR0VTLmZpbHRlcihmdW5jdGlvbiAobGFuZ3VhZ2UsIGlkeCkge1xcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlLmxvY2FsZSAhPT0gbG9jYWxlICYmIGlkeCA8IDM7XFxuICAgIH0pLm1hcChmdW5jdGlvbiAobGFuZ3VhZ2UsIGlkeCkge1xcbiAgICAgICAgcmV0dXJuIGxhbmd1YWdlLmxvY2FsZS5zdWJzdHIoMCwgMikudG9Mb3dlckNhc2UoKSArICc7cT0nICsgKDAuOCAtIChpZHggLyAxMCkpLnRvU3RyaW5nKCk7XFxuICAgIH0pO1xcbiAgICByZXR1cm4gbG9jYWxlLnN1YnN0cigwLCAyKS50b0xvd2VyQ2FzZSgpICsgJywnICsgbm90U2VsZWN0ZWQuam9pbignLCcpO1xcbn1cXG5leHBvcnRzLmdldEFjY2VwdExhbmd1YWdlSGVhZGVyID0gZ2V0QWNjZXB0TGFuZ3VhZ2VIZWFkZXI7XFxuZnVuY3Rpb24gZ2V0STE4bkxhYmVsKGxvY2FsZSwgbGFiZWxNYXAsIG5vUmVnaW9uLCB1cHBlcikge1xcbiAgICB2YXIgcmVzID0gbnVsbDtcXG4gICAgdmFyIGxhbmd1YWdlID0gbG9jYWxlO1xcbiAgICBpZiAobm9SZWdpb24pIHtcXG4gICAgICAgIGxhbmd1YWdlID0gbGFuZ3VhZ2Uuc3Vic3RyKDAsIDIpO1xcbiAgICB9XFxuICAgIGlmICh1cHBlcikge1xcbiAgICAgICAgbGFuZ3VhZ2UgPSBsYW5ndWFnZS50b1VwcGVyQ2FzZSgpO1xcbiAgICB9XFxuICAgIGlmIChsYWJlbE1hcCkge1xcbiAgICAgICAgaWYgKGxhYmVsTWFwW2xhbmd1YWdlXSkge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwW2xhbmd1YWdlXTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICghcmVzICYmIGxhbmd1YWdlICE9PSAnRU4nKSB7XFxuICAgICAgICAgICAgcmVzID0gbGFiZWxNYXBbJ0VOJ107XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoIXJlcyAmJiBsYW5ndWFnZSAhPT0gJ2VuJykge1xcbiAgICAgICAgICAgIHJlcyA9IGxhYmVsTWFwWydlbiddO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKCFyZXMgJiYgbGFuZ3VhZ2UgIT09ICdlbi1VUycpIHtcXG4gICAgICAgICAgICByZXMgPSBsYWJlbE1hcFsnZW4tVVMnXTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmVzO1xcbn1cXG5leHBvcnRzLmdldEkxOG5MYWJlbCA9IGdldEkxOG5MYWJlbDtcXG5mdW5jdGlvbiBnZXRKU1RyZWVEYXRhKG9yZ1RyZWVEYXRhLCBvcGVuZWROb2Rlcykge1xcbiAgICByZXR1cm4gb3JnVHJlZURhdGEgPyB7XFxuICAgICAgICBpZDogb3JnVHJlZURhdGEuaWQsXFxuICAgICAgICB0ZXh0OiBvcmdUcmVlRGF0YS5pZCA9PT0gJzAnID8gJycgOiBvcmdUcmVlRGF0YS5lbGVtZW50TmFtZSxcXG4gICAgICAgIGRhdGE6IHtcXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogb3JnVHJlZURhdGEuZGVzY3JpcHRpb24sXFxuICAgICAgICAgICAgcHJvcGVydGllc01hcDogb3JnVHJlZURhdGEucHJvcGVydGllc01hcCxcXG4gICAgICAgICAgICBwYXJlbnRJZDogb3JnVHJlZURhdGEucGFyZW50SWQsXFxuICAgICAgICAgICAgY2hpbGROYW1lczogb3JnVHJlZURhdGEuY2hpbGRyZW4gPyBvcmdUcmVlRGF0YS5jaGlsZHJlbi5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiBjaGlsZC5lbGVtZW50TmFtZTsgfSkgOiBbXVxcbiAgICAgICAgfSxcXG4gICAgICAgIGNoaWxkcmVuOiBvcmdUcmVlRGF0YS5jaGlsZHJlbiA/IG9yZ1RyZWVEYXRhLmNoaWxkcmVuLm1hcChmdW5jdGlvbiAoY2hpbGQpIHtcXG4gICAgICAgICAgICByZXR1cm4gZ2V0SlNUcmVlRGF0YShjaGlsZCwgb3BlbmVkTm9kZXMpO1xcbiAgICAgICAgfSkgOiBudWxsLFxcbiAgICAgICAgaWNvbjogY2xhc3NOYW1lcygnZmFzIGZhLWZ3Jywge1xcbiAgICAgICAgICAgICdmYS10aC1sYXJnZSBmb250LWNvbG9yLWxpZ2h0ZXInOiBvcmdUcmVlRGF0YS5pZCAhPT0gJzAnLFxcbiAgICAgICAgICAgICdmYS10ZXJtaW5hbCBibGFjay1jb2xvcic6IG9yZ1RyZWVEYXRhLmlkID09PSAnMCcsXFxuICAgICAgICB9KSxcXG4gICAgICAgIHN0YXRlOiB7XFxuICAgICAgICAgICAgb3BlbmVkOiBvcGVuZWROb2RlcyA/IG9wZW5lZE5vZGVzLmluZGV4T2Yob3JnVHJlZURhdGEuaWQpICE9PSAtMSA6IGZhbHNlLFxcbiAgICAgICAgICAgIGRpc2FibGVkOiBvcmdUcmVlRGF0YS5pZCA9PT0gJy0xJ1xcbiAgICAgICAgfVxcbiAgICB9IDogbnVsbDtcXG59XFxuZXhwb3J0cy5nZXRKU1RyZWVEYXRhID0gZ2V0SlNUcmVlRGF0YTtcXG5mdW5jdGlvbiBsb2FkVG9vbHRpcHMoZWxlbWVudCkge1xcbiAgICBpZiAoIU1vZGVybml6ci50b3VjaGV2ZW50cykge1xcbiAgICAgICAgdmFyICRlbGVtZW50VG9vbHRpcHNfMSA9ICQoZWxlbWVudCkuZmluZCgnW2RhdGEtdG9nZ2xlPVxcXCJ0b29sdGlwXFxcIl0nKTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHNfMS50b29sdGlwKHtcXG4gICAgICAgICAgICBjb250YWluZXI6ICdib2R5JyxcXG4gICAgICAgICAgICBwbGFjZW1lbnQ6ICdhdXRvIHRvcCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgJGVsZW1lbnRUb29sdGlwc18xLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcXG4gICAgICAgICAgICAkZWxlbWVudFRvb2x0aXBzXzEudG9vbHRpcCgnaGlkZScpO1xcbiAgICAgICAgfSk7XFxuICAgIH1cXG59XFxuZXhwb3J0cy5sb2FkVG9vbHRpcHMgPSBsb2FkVG9vbHRpcHM7XFxuZnVuY3Rpb24gdW5sb2FkVG9vbHRpcHMoZWxlbWVudCkge1xcbiAgICBpZiAoIU1vZGVybml6ci50b3VjaGV2ZW50cykge1xcbiAgICAgICAgdmFyICRlbGVtZW50VG9vbHRpcHMgPSAkKGVsZW1lbnQpLmZpbmQoJ1tkYXRhLXRvZ2dsZT1cXFwidG9vbHRpcFxcXCJdJyk7XFxuICAgICAgICAkZWxlbWVudFRvb2x0aXBzLnRvb2x0aXAoJ2hpZGUnKTtcXG4gICAgICAgICRlbGVtZW50VG9vbHRpcHMudG9vbHRpcCgnZGVzdHJveScpO1xcbiAgICAgICAgJCgnZGl2LnRvb2x0aXAnKS5yZW1vdmUoKTtcXG4gICAgfVxcbn1cXG5leHBvcnRzLnVubG9hZFRvb2x0aXBzID0gdW5sb2FkVG9vbHRpcHM7XFxuZnVuY3Rpb24gZ3JvdXBCeVByb3BlcnR5KGxpc3QsIHByb3BlcnR5TmFtZSkge1xcbiAgICByZXR1cm4gbGlzdC5yZWR1Y2UoZnVuY3Rpb24gKGdyb3VwZWQsIGl0ZW0pIHtcXG4gICAgICAgIHZhciBrZXkgPSBpdGVtW3Byb3BlcnR5TmFtZV07XFxuICAgICAgICBncm91cGVkW2tleV0gPSBncm91cGVkW2tleV0gfHwgW107XFxuICAgICAgICBncm91cGVkW2tleV0ucHVzaChpdGVtKTtcXG4gICAgICAgIHJldHVybiBncm91cGVkO1xcbiAgICB9LCB7fSk7XFxufVxcbmV4cG9ydHMuZ3JvdXBCeVByb3BlcnR5ID0gZ3JvdXBCeVByb3BlcnR5O1xcbmZ1bmN0aW9uIGFkZFZhbFRvQXJyYXlOb0R1cChhcnJheSwgdmFsdWUpIHtcXG4gICAgaWYgKGFycmF5LmluZGV4T2YodmFsdWUpID09PSAtMSkge1xcbiAgICAgICAgcmV0dXJuIGFycmF5LmNvbmNhdCh2YWx1ZSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIGFycmF5LnNsaWNlKCk7XFxufVxcbmV4cG9ydHMuYWRkVmFsVG9BcnJheU5vRHVwID0gYWRkVmFsVG9BcnJheU5vRHVwO1xcbmZ1bmN0aW9uIHJlbW92ZVZhbEZyb21BcnJheU5vRHVwKGFycmF5LCB2YWx1ZSkge1xcbiAgICByZXR1cm4gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uIChlbGVtZW50KSB7IHJldHVybiBlbGVtZW50ICE9PSB2YWx1ZTsgfSk7XFxufVxcbmV4cG9ydHMucmVtb3ZlVmFsRnJvbUFycmF5Tm9EdXAgPSByZW1vdmVWYWxGcm9tQXJyYXlOb0R1cDtcXG5mdW5jdGlvbiBnZXROZXN0ZWRWYWx1ZShvYmosIGtleVBhdGgpIHtcXG4gICAgaWYgKCFvYmopIHtcXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XFxuICAgIH1cXG4gICAgdmFyIHByb3BzID0ga2V5UGF0aC5zcGxpdCgnLicpO1xcbiAgICBpZiAocHJvcHMubGVuZ3RoID09PSAxKSB7XFxuICAgICAgICByZXR1cm4gb2JqW3Byb3BzWzBdXTtcXG4gICAgfVxcbiAgICBlbHNlIHtcXG4gICAgICAgIHJldHVybiBnZXROZXN0ZWRWYWx1ZShvYmpbcHJvcHNbMF1dLCBwcm9wcy5zbGljZSgxKS5qb2luKCcuJykpO1xcbiAgICB9XFxufVxcbmV4cG9ydHMuZ2V0TmVzdGVkVmFsdWUgPSBnZXROZXN0ZWRWYWx1ZTtcXG5mdW5jdGlvbiBmaWx0ZXJDb2xsZWN0aW9uKGNvbGxlY3Rpb24sIHByb3BlcnRpZXMsIHNlYXJjaFN0cmluZykge1xcbiAgICB2YXIgc2VhcmNoRWxlbWVudHMgPSBzZWFyY2hTdHJpbmcudG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpO1xcbiAgICB2YXIgZmlsdGVyZWRDb2xsZWN0aW9uID0gc2VhcmNoU3RyaW5nID8gY29sbGVjdGlvbi5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcXG4gICAgICAgIHZhciBkYXRhID0gcHJvcGVydGllcy5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XFxuICAgICAgICAgICAgaWYgKHByb3BlcnR5LnNwbGl0KCcuJykubGVuZ3RoID4gMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TmVzdGVkVmFsdWUoaXRlbSwgcHJvcGVydHkpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bcHJvcGVydHldO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pLmpvaW4oKS50b0xvd2VyQ2FzZSgpO1xcbiAgICAgICAgdmFyIG1hdGNoZXMgPSBzZWFyY2hFbGVtZW50cy5tYXAoZnVuY3Rpb24gKHNlYXJjaCkgeyByZXR1cm4gZGF0YS5pbmRleE9mKHNlYXJjaCkgIT09IC0xOyB9KTtcXG4gICAgICAgIHJldHVybiBtYXRjaGVzLmZpbHRlcihmdW5jdGlvbiAobWF0Y2hlZCkgeyByZXR1cm4gIW1hdGNoZWQ7IH0pLmxlbmd0aCA9PT0gMDtcXG4gICAgfSkgOiBjb2xsZWN0aW9uO1xcbiAgICByZXR1cm4gZmlsdGVyZWRDb2xsZWN0aW9uO1xcbn1cXG5leHBvcnRzLmZpbHRlckNvbGxlY3Rpb24gPSBmaWx0ZXJDb2xsZWN0aW9uO1xcbmZ1bmN0aW9uIGJhc2U2NERlY29kZShlbmNvZGVkRGF0YSkge1xcbiAgICByZXR1cm4gYmFzZTY0LmRlY29kZShlbmNvZGVkRGF0YSk7XFxufVxcbmV4cG9ydHMuYmFzZTY0RGVjb2RlID0gYmFzZTY0RGVjb2RlO1xcbmZ1bmN0aW9uIGRlZXBDb3B5KGRhdGEsIGV4dGVuc2lvbnMpIHtcXG4gICAgcmV0dXJuICFleHRlbnNpb25zID8gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhIHx8IHt9KSkgOiAkLmV4dGVuZCh7fSwgZGF0YSwgZXh0ZW5zaW9ucyk7XFxufVxcbmV4cG9ydHMuZGVlcENvcHkgPSBkZWVwQ29weTtcXG5mdW5jdGlvbiBoYW5kbGVEdXBsaWNhdGVOYW1lRnJvbUFycmF5KG5hbWUsIGNvbnRhaW5lcikge1xcbiAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcXG4gICAgdmFyIHJlcyA9IG5hbWU7XFxuICAgIHZhciBpZHggPSAxO1xcbiAgICB3aGlsZSAoY29udGFpbmVyLnNvbWUoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIHJlcyA9PT0gYzsgfSkpIHtcXG4gICAgICAgIGlmIChmaXJzdFRpbWUpIHtcXG4gICAgICAgICAgICByZXMgPSByZXMuY29uY2F0KFxcXCJfXFxcIiArIGlkeCk7XFxuICAgICAgICB9XFxuICAgICAgICBlbHNlIHtcXG4gICAgICAgICAgICByZXMgPSByZXMucmVwbGFjZSgvX1tcXFxcZF0rJC8sIFxcXCJfXFxcIiArIGlkeCk7XFxuICAgICAgICB9XFxuICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcXG4gICAgICAgIGlkeCsrO1xcbiAgICB9XFxuICAgIHJldHVybiByZXM7XFxufVxcbmV4cG9ydHMuaGFuZGxlRHVwbGljYXRlTmFtZUZyb21BcnJheSA9IGhhbmRsZUR1cGxpY2F0ZU5hbWVGcm9tQXJyYXk7XFxuZnVuY3Rpb24gZGF0ZUJ5TG9jYWxUb1N0cmluZyhsb2NhbGUsIGRhdGUsIG9wdGlvbnMpIHtcXG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgZGVlcENvcHkoe1xcbiAgICAgICAgbW9udGg6ICdudW1lcmljJyxcXG4gICAgICAgIGRheTogJ251bWVyaWMnLFxcbiAgICAgICAgeWVhcjogJ251bWVyaWMnLFxcbiAgICAgICAgaG91cjogJ251bWVyaWMnLFxcbiAgICAgICAgbWludXRlOiAnbnVtZXJpYydcXG4gICAgfSwgb3B0aW9ucykpO1xcbn1cXG5leHBvcnRzLmRhdGVCeUxvY2FsVG9TdHJpbmcgPSBkYXRlQnlMb2NhbFRvU3RyaW5nO1xcbmZ1bmN0aW9uIGdldEl0ZW1zQnlJZHgoY29sbGVjdGlvbiwgaW5kZXhlcykge1xcbiAgICByZXR1cm4gaW5kZXhlcy5tYXAoZnVuY3Rpb24gKGlkeCkgeyByZXR1cm4gY29sbGVjdGlvbltpZHhdOyB9KTtcXG59XFxuZXhwb3J0cy5nZXRJdGVtc0J5SWR4ID0gZ2V0SXRlbXNCeUlkeDtcXG5mdW5jdGlvbiBlc2NhcGVSZWdFeHAodGV4dCkge1xcbiAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC9bLVtcXFxcXXt9KCkqKz8uLFxcXFxcXFxcXiR8I10vZywgJ1xcXFxcXFxcJCYnKTtcXG59XFxuZXhwb3J0cy5lc2NhcGVSZWdFeHAgPSBlc2NhcGVSZWdFeHA7XFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwXFxuXFxuLyoqKi8gfSksXFxuLyogMjY0ICovXFxuLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXykge1xcblxcbihmdW5jdGlvbigpe1xcbiAgdmFyIGNyeXB0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjUpLFxcbiAgICAgIHV0ZjggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDg5KS51dGY4LFxcbiAgICAgIGlzQnVmZmVyID0gX193ZWJwYWNrX3JlcXVpcmVfXygyNjYpLFxcbiAgICAgIGJpbiA9IF9fd2VicGFja19yZXF1aXJlX18oODkpLmJpbixcXG5cXG4gIC8vIFRoZSBjb3JlXFxuICBtZDUgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xcbiAgICAvLyBDb252ZXJ0IHRvIGJ5dGUgYXJyYXlcXG4gICAgaWYgKG1lc3NhZ2UuY29uc3RydWN0b3IgPT0gU3RyaW5nKVxcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RpbmcgPT09ICdiaW5hcnknKVxcbiAgICAgICAgbWVzc2FnZSA9IGJpbi5zdHJpbmdUb0J5dGVzKG1lc3NhZ2UpO1xcbiAgICAgIGVsc2VcXG4gICAgICAgIG1lc3NhZ2UgPSB1dGY4LnN0cmluZ1RvQnl0ZXMobWVzc2FnZSk7XFxuICAgIGVsc2UgaWYgKGlzQnVmZmVyKG1lc3NhZ2UpKVxcbiAgICAgIG1lc3NhZ2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChtZXNzYWdlLCAwKTtcXG4gICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkobWVzc2FnZSkpXFxuICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UudG9TdHJpbmcoKTtcXG4gICAgLy8gZWxzZSwgYXNzdW1lIGJ5dGUgYXJyYXkgYWxyZWFkeVxcblxcbiAgICB2YXIgbSA9IGNyeXB0LmJ5dGVzVG9Xb3JkcyhtZXNzYWdlKSxcXG4gICAgICAgIGwgPSBtZXNzYWdlLmxlbmd0aCAqIDgsXFxuICAgICAgICBhID0gIDE3MzI1ODQxOTMsXFxuICAgICAgICBiID0gLTI3MTczMzg3OSxcXG4gICAgICAgIGMgPSAtMTczMjU4NDE5NCxcXG4gICAgICAgIGQgPSAgMjcxNzMzODc4O1xcblxcbiAgICAvLyBTd2FwIGVuZGlhblxcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcXG4gICAgICBtW2ldID0gKChtW2ldIDw8ICA4KSB8IChtW2ldID4+PiAyNCkpICYgMHgwMEZGMDBGRiB8XFxuICAgICAgICAgICAgICgobVtpXSA8PCAyNCkgfCAobVtpXSA+Pj4gIDgpKSAmIDB4RkYwMEZGMDA7XFxuICAgIH1cXG5cXG4gICAgLy8gUGFkZGluZ1xcbiAgICBtW2wgPj4+IDVdIHw9IDB4ODAgPDwgKGwgJSAzMik7XFxuICAgIG1bKCgobCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBsO1xcblxcbiAgICAvLyBNZXRob2Qgc2hvcnRjdXRzXFxuICAgIHZhciBGRiA9IG1kNS5fZmYsXFxuICAgICAgICBHRyA9IG1kNS5fZ2csXFxuICAgICAgICBISCA9IG1kNS5faGgsXFxuICAgICAgICBJSSA9IG1kNS5faWk7XFxuXFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkgKz0gMTYpIHtcXG5cXG4gICAgICB2YXIgYWEgPSBhLFxcbiAgICAgICAgICBiYiA9IGIsXFxuICAgICAgICAgIGNjID0gYyxcXG4gICAgICAgICAgZGQgPSBkO1xcblxcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDBdLCAgNywgLTY4MDg3NjkzNik7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcXG4gICAgICBjID0gRkYoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTcsICA2MDYxMDU4MTkpO1xcbiAgICAgIGIgPSBGRihiLCBjLCBkLCBhLCBtW2krIDNdLCAyMiwgLTEwNDQ1MjUzMzApO1xcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDRdLCAgNywgLTE3NjQxODg5Nyk7XFxuICAgICAgZCA9IEZGKGQsIGEsIGIsIGMsIG1baSsgNV0sIDEyLCAgMTIwMDA4MDQyNik7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsgN10sIDIyLCAtNDU3MDU5ODMpO1xcbiAgICAgIGEgPSBGRihhLCBiLCBjLCBkLCBtW2krIDhdLCAgNywgIDE3NzAwMzU0MTYpO1xcbiAgICAgIGQgPSBGRihkLCBhLCBiLCBjLCBtW2krIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xcbiAgICAgIGMgPSBGRihjLCBkLCBhLCBiLCBtW2krMTBdLCAxNywgLTQyMDYzKTtcXG4gICAgICBiID0gRkYoYiwgYywgZCwgYSwgbVtpKzExXSwgMjIsIC0xOTkwNDA0MTYyKTtcXG4gICAgICBhID0gRkYoYSwgYiwgYywgZCwgbVtpKzEyXSwgIDcsICAxODA0NjAzNjgyKTtcXG4gICAgICBkID0gRkYoZCwgYSwgYiwgYywgbVtpKzEzXSwgMTIsIC00MDM0MTEwMSk7XFxuICAgICAgYyA9IEZGKGMsIGQsIGEsIGIsIG1baSsxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XFxuICAgICAgYiA9IEZGKGIsIGMsIGQsIGEsIG1baSsxNV0sIDIyLCAgMTIzNjUzNTMyOSk7XFxuXFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgMV0sICA1LCAtMTY1Nzk2NTEwKTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyA2XSwgIDksIC0xMDY5NTAxNjMyKTtcXG4gICAgICBjID0gR0coYywgZCwgYSwgYiwgbVtpKzExXSwgMTQsICA2NDM3MTc3MTMpO1xcbiAgICAgIGIgPSBHRyhiLCBjLCBkLCBhLCBtW2krIDBdLCAyMCwgLTM3Mzg5NzMwMik7XFxuICAgICAgYSA9IEdHKGEsIGIsIGMsIGQsIG1baSsgNV0sICA1LCAtNzAxNTU4NjkxKTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKzEwXSwgIDksICAzODAxNjA4Myk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsxNV0sIDE0LCAtNjYwNDc4MzM1KTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyA0XSwgMjAsIC00MDU1Mzc4NDgpO1xcbiAgICAgIGEgPSBHRyhhLCBiLCBjLCBkLCBtW2krIDldLCAgNSwgIDU2ODQ0NjQzOCk7XFxuICAgICAgZCA9IEdHKGQsIGEsIGIsIGMsIG1baSsxNF0sICA5LCAtMTAxOTgwMzY5MCk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsgM10sIDE0LCAtMTg3MzYzOTYxKTtcXG4gICAgICBiID0gR0coYiwgYywgZCwgYSwgbVtpKyA4XSwgMjAsICAxMTYzNTMxNTAxKTtcXG4gICAgICBhID0gR0coYSwgYiwgYywgZCwgbVtpKzEzXSwgIDUsIC0xNDQ0NjgxNDY3KTtcXG4gICAgICBkID0gR0coZCwgYSwgYiwgYywgbVtpKyAyXSwgIDksIC01MTQwMzc4NCk7XFxuICAgICAgYyA9IEdHKGMsIGQsIGEsIGIsIG1baSsgN10sIDE0LCAgMTczNTMyODQ3Myk7XFxuICAgICAgYiA9IEdHKGIsIGMsIGQsIGEsIG1baSsxMl0sIDIwLCAtMTkyNjYwNzczNCk7XFxuXFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgNV0sICA0LCAtMzc4NTU4KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKyA4XSwgMTEsIC0yMDIyNTc0NDYzKTtcXG4gICAgICBjID0gSEgoYywgZCwgYSwgYiwgbVtpKzExXSwgMTYsICAxODM5MDMwNTYyKTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzE0XSwgMjMsIC0zNTMwOTU1Nik7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgMV0sICA0LCAtMTUzMDk5MjA2MCk7XFxuICAgICAgZCA9IEhIKGQsIGEsIGIsIGMsIG1baSsgNF0sIDExLCAgMTI3Mjg5MzM1Myk7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgN10sIDE2LCAtMTU1NDk3NjMyKTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKzEwXSwgMjMsIC0xMDk0NzMwNjQwKTtcXG4gICAgICBhID0gSEgoYSwgYiwgYywgZCwgbVtpKzEzXSwgIDQsICA2ODEyNzkxNzQpO1xcbiAgICAgIGQgPSBISChkLCBhLCBiLCBjLCBtW2krIDBdLCAxMSwgLTM1ODUzNzIyMik7XFxuICAgICAgYyA9IEhIKGMsIGQsIGEsIGIsIG1baSsgM10sIDE2LCAtNzIyNTIxOTc5KTtcXG4gICAgICBiID0gSEgoYiwgYywgZCwgYSwgbVtpKyA2XSwgMjMsICA3NjAyOTE4OSk7XFxuICAgICAgYSA9IEhIKGEsIGIsIGMsIGQsIG1baSsgOV0sICA0LCAtNjQwMzY0NDg3KTtcXG4gICAgICBkID0gSEgoZCwgYSwgYiwgYywgbVtpKzEyXSwgMTEsIC00MjE4MTU4MzUpO1xcbiAgICAgIGMgPSBISChjLCBkLCBhLCBiLCBtW2krMTVdLCAxNiwgIDUzMDc0MjUyMCk7XFxuICAgICAgYiA9IEhIKGIsIGMsIGQsIGEsIG1baSsgMl0sIDIzLCAtOTk1MzM4NjUxKTtcXG5cXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyAwXSwgIDYsIC0xOTg2MzA4NDQpO1xcbiAgICAgIGQgPSBJSShkLCBhLCBiLCBjLCBtW2krIDddLCAxMCwgIDExMjY4OTE0MTUpO1xcbiAgICAgIGMgPSBJSShjLCBkLCBhLCBiLCBtW2krMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDVdLCAyMSwgLTU3NDM0MDU1KTtcXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKzEyXSwgIDYsICAxNzAwNDg1NTcxKTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKzEwXSwgMTUsIC0xMDUxNTIzKTtcXG4gICAgICBiID0gSUkoYiwgYywgZCwgYSwgbVtpKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcXG4gICAgICBhID0gSUkoYSwgYiwgYywgZCwgbVtpKyA4XSwgIDYsICAxODczMzEzMzU5KTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKzE1XSwgMTAsIC0zMDYxMTc0NCk7XFxuICAgICAgYyA9IElJKGMsIGQsIGEsIGIsIG1baSsgNl0sIDE1LCAtMTU2MDE5ODM4MCk7XFxuICAgICAgYiA9IElJKGIsIGMsIGQsIGEsIG1baSsxM10sIDIxLCAgMTMwOTE1MTY0OSk7XFxuICAgICAgYSA9IElJKGEsIGIsIGMsIGQsIG1baSsgNF0sICA2LCAtMTQ1NTIzMDcwKTtcXG4gICAgICBkID0gSUkoZCwgYSwgYiwgYywgbVtpKzExXSwgMTAsIC0xMTIwMjEwMzc5KTtcXG4gICAgICBjID0gSUkoYywgZCwgYSwgYiwgbVtpKyAyXSwgMTUsICA3MTg3ODcyNTkpO1xcbiAgICAgIGIgPSBJSShiLCBjLCBkLCBhLCBtW2krIDldLCAyMSwgLTM0MzQ4NTU1MSk7XFxuXFxuICAgICAgYSA9IChhICsgYWEpID4+PiAwO1xcbiAgICAgIGIgPSAoYiArIGJiKSA+Pj4gMDtcXG4gICAgICBjID0gKGMgKyBjYykgPj4+IDA7XFxuICAgICAgZCA9IChkICsgZGQpID4+PiAwO1xcbiAgICB9XFxuXFxuICAgIHJldHVybiBjcnlwdC5lbmRpYW4oW2EsIGIsIGMsIGRdKTtcXG4gIH07XFxuXFxuICAvLyBBdXhpbGlhcnkgZnVuY3Rpb25zXFxuICBtZDUuX2ZmICA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XFxuICAgIHZhciBuID0gYSArIChiICYgYyB8IH5iICYgZCkgKyAoeCA+Pj4gMCkgKyB0O1xcbiAgICByZXR1cm4gKChuIDw8IHMpIHwgKG4gPj4+ICgzMiAtIHMpKSkgKyBiO1xcbiAgfTtcXG4gIG1kNS5fZ2cgID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcXG4gICAgdmFyIG4gPSBhICsgKGIgJiBkIHwgYyAmIH5kKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcbiAgbWQ1Ll9oaCAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYiBeIGMgXiBkKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcbiAgbWQ1Ll9paSAgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgeCwgcywgdCkge1xcbiAgICB2YXIgbiA9IGEgKyAoYyBeIChiIHwgfmQpKSArICh4ID4+PiAwKSArIHQ7XFxuICAgIHJldHVybiAoKG4gPDwgcykgfCAobiA+Pj4gKDMyIC0gcykpKSArIGI7XFxuICB9O1xcblxcbiAgLy8gUGFja2FnZSBwcml2YXRlIGJsb2Nrc2l6ZVxcbiAgbWQ1Ll9ibG9ja3NpemUgPSAxNjtcXG4gIG1kNS5fZGlnZXN0c2l6ZSA9IDE2O1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWVzc2FnZSwgb3B0aW9ucykge1xcbiAgICBpZiAobWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2UgPT09IG51bGwpXFxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50ICcgKyBtZXNzYWdlKTtcXG5cXG4gICAgdmFyIGRpZ2VzdGJ5dGVzID0gY3J5cHQud29yZHNUb0J5dGVzKG1kNShtZXNzYWdlLCBvcHRpb25zKSk7XFxuICAgIHJldHVybiBvcHRpb25zICYmIG9wdGlvbnMuYXNCeXRlcyA/IGRpZ2VzdGJ5dGVzIDpcXG4gICAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5hc1N0cmluZyA/IGJpbi5ieXRlc1RvU3RyaW5nKGRpZ2VzdGJ5dGVzKSA6XFxuICAgICAgICBjcnlwdC5ieXRlc1RvSGV4KGRpZ2VzdGJ5dGVzKTtcXG4gIH07XFxuXFxufSkoKTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjUgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzKSB7XFxuXFxuKGZ1bmN0aW9uKCkge1xcbiAgdmFyIGJhc2U2NG1hcFxcbiAgICAgID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nLFxcblxcbiAgY3J5cHQgPSB7XFxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIGxlZnRcXG4gICAgcm90bDogZnVuY3Rpb24obiwgYikge1xcbiAgICAgIHJldHVybiAobiA8PCBiKSB8IChuID4+PiAoMzIgLSBiKSk7XFxuICAgIH0sXFxuXFxuICAgIC8vIEJpdC13aXNlIHJvdGF0aW9uIHJpZ2h0XFxuICAgIHJvdHI6IGZ1bmN0aW9uKG4sIGIpIHtcXG4gICAgICByZXR1cm4gKG4gPDwgKDMyIC0gYikpIHwgKG4gPj4+IGIpO1xcbiAgICB9LFxcblxcbiAgICAvLyBTd2FwIGJpZy1lbmRpYW4gdG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYVxcbiAgICBlbmRpYW46IGZ1bmN0aW9uKG4pIHtcXG4gICAgICAvLyBJZiBudW1iZXIgZ2l2ZW4sIHN3YXAgZW5kaWFuXFxuICAgICAgaWYgKG4uY29uc3RydWN0b3IgPT0gTnVtYmVyKSB7XFxuICAgICAgICByZXR1cm4gY3J5cHQucm90bChuLCA4KSAmIDB4MDBGRjAwRkYgfCBjcnlwdC5yb3RsKG4sIDI0KSAmIDB4RkYwMEZGMDA7XFxuICAgICAgfVxcblxcbiAgICAgIC8vIEVsc2UsIGFzc3VtZSBhcnJheSBhbmQgc3dhcCBhbGwgaXRlbXNcXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG4ubGVuZ3RoOyBpKyspXFxuICAgICAgICBuW2ldID0gY3J5cHQuZW5kaWFuKG5baV0pO1xcbiAgICAgIHJldHVybiBuO1xcbiAgICB9LFxcblxcbiAgICAvLyBHZW5lcmF0ZSBhbiBhcnJheSBvZiBhbnkgbGVuZ3RoIG9mIHJhbmRvbSBieXRlc1xcbiAgICByYW5kb21CeXRlczogZnVuY3Rpb24obikge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW107IG4gPiAwOyBuLS0pXFxuICAgICAgICBieXRlcy5wdXNoKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NikpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYmlnLWVuZGlhbiAzMi1iaXQgd29yZHNcXG4gICAgYnl0ZXNUb1dvcmRzOiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIHdvcmRzID0gW10sIGkgPSAwLCBiID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSsrLCBiICs9IDgpXFxuICAgICAgICB3b3Jkc1tiID4+PiA1XSB8PSBieXRlc1tpXSA8PCAoMjQgLSBiICUgMzIpO1xcbiAgICAgIHJldHVybiB3b3JkcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBiaWctZW5kaWFuIDMyLWJpdCB3b3JkcyB0byBhIGJ5dGUgYXJyYXlcXG4gICAgd29yZHNUb0J5dGVzOiBmdW5jdGlvbih3b3Jkcykge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW10sIGIgPSAwOyBiIDwgd29yZHMubGVuZ3RoICogMzI7IGIgKz0gOClcXG4gICAgICAgIGJ5dGVzLnB1c2goKHdvcmRzW2IgPj4+IDVdID4+PiAoMjQgLSBiICUgMzIpKSAmIDB4RkYpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBoZXggc3RyaW5nXFxuICAgIGJ5dGVzVG9IZXg6IGZ1bmN0aW9uKGJ5dGVzKSB7XFxuICAgICAgZm9yICh2YXIgaGV4ID0gW10sIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSA+Pj4gNCkudG9TdHJpbmcoMTYpKTtcXG4gICAgICAgIGhleC5wdXNoKChieXRlc1tpXSAmIDB4RikudG9TdHJpbmcoMTYpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGhleC5qb2luKCcnKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGhleCBzdHJpbmcgdG8gYSBieXRlIGFycmF5XFxuICAgIGhleFRvQnl0ZXM6IGZ1bmN0aW9uKGhleCkge1xcbiAgICAgIGZvciAodmFyIGJ5dGVzID0gW10sIGMgPSAwOyBjIDwgaGV4Lmxlbmd0aDsgYyArPSAyKVxcbiAgICAgICAgYnl0ZXMucHVzaChwYXJzZUludChoZXguc3Vic3RyKGMsIDIpLCAxNikpO1xcbiAgICAgIHJldHVybiBieXRlcztcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJ5dGUgYXJyYXkgdG8gYSBiYXNlLTY0IHN0cmluZ1xcbiAgICBieXRlc1RvQmFzZTY0OiBmdW5jdGlvbihieXRlcykge1xcbiAgICAgIGZvciAodmFyIGJhc2U2NCA9IFtdLCBpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAzKSB7XFxuICAgICAgICB2YXIgdHJpcGxldCA9IChieXRlc1tpXSA8PCAxNikgfCAoYnl0ZXNbaSArIDFdIDw8IDgpIHwgYnl0ZXNbaSArIDJdO1xcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCA0OyBqKyspXFxuICAgICAgICAgIGlmIChpICogOCArIGogKiA2IDw9IGJ5dGVzLmxlbmd0aCAqIDgpXFxuICAgICAgICAgICAgYmFzZTY0LnB1c2goYmFzZTY0bWFwLmNoYXJBdCgodHJpcGxldCA+Pj4gNiAqICgzIC0gaikpICYgMHgzRikpO1xcbiAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgYmFzZTY0LnB1c2goJz0nKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJhc2U2NC5qb2luKCcnKTtcXG4gICAgfSxcXG5cXG4gICAgLy8gQ29udmVydCBhIGJhc2UtNjQgc3RyaW5nIHRvIGEgYnl0ZSBhcnJheVxcbiAgICBiYXNlNjRUb0J5dGVzOiBmdW5jdGlvbihiYXNlNjQpIHtcXG4gICAgICAvLyBSZW1vdmUgbm9uLWJhc2UtNjQgY2hhcmFjdGVyc1xcbiAgICAgIGJhc2U2NCA9IGJhc2U2NC5yZXBsYWNlKC9bXkEtWjAtOStcXFxcL10vaWcsICcnKTtcXG5cXG4gICAgICBmb3IgKHZhciBieXRlcyA9IFtdLCBpID0gMCwgaW1vZDQgPSAwOyBpIDwgYmFzZTY0Lmxlbmd0aDtcXG4gICAgICAgICAgaW1vZDQgPSArK2kgJSA0KSB7XFxuICAgICAgICBpZiAoaW1vZDQgPT0gMCkgY29udGludWU7XFxuICAgICAgICBieXRlcy5wdXNoKCgoYmFzZTY0bWFwLmluZGV4T2YoYmFzZTY0LmNoYXJBdChpIC0gMSkpXFxuICAgICAgICAgICAgJiAoTWF0aC5wb3coMiwgLTIgKiBpbW9kNCArIDgpIC0gMSkpIDw8IChpbW9kNCAqIDIpKVxcbiAgICAgICAgICAgIHwgKGJhc2U2NG1hcC5pbmRleE9mKGJhc2U2NC5jaGFyQXQoaSkpID4+PiAoNiAtIGltb2Q0ICogMikpKTtcXG4gICAgICB9XFxuICAgICAgcmV0dXJuIGJ5dGVzO1xcbiAgICB9XFxuICB9O1xcblxcbiAgbW9kdWxlLmV4cG9ydHMgPSBjcnlwdDtcXG59KSgpO1xcblxcblxcbi8qKiovIH0pLFxcbi8qIDI2NiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG4vKiFcXG4gKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyXFxuICpcXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxcbiAqIEBsaWNlbnNlICBNSVRcXG4gKi9cXG5cXG4vLyBUaGUgX2lzQnVmZmVyIGNoZWNrIGlzIGZvciBTYWZhcmkgNS03IHN1cHBvcnQsIGJlY2F1c2UgaXQncyBtaXNzaW5nXFxuLy8gT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseVxcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIChpc0J1ZmZlcihvYmopIHx8IGlzU2xvd0J1ZmZlcihvYmopIHx8ICEhb2JqLl9pc0J1ZmZlcilcXG59XFxuXFxuZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xcbiAgcmV0dXJuICEhb2JqLmNvbnN0cnVjdG9yICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcXG59XFxuXFxuLy8gRm9yIE5vZGUgdjAuMTAgc3VwcG9ydC4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseS5cXG5mdW5jdGlvbiBpc1Nsb3dCdWZmZXIgKG9iaikge1xcbiAgcmV0dXJuIHR5cGVvZiBvYmoucmVhZEZsb2F0TEUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zbGljZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0J1ZmZlcihvYmouc2xpY2UoMCwgMCkpXFxufVxcblxcblxcbi8qKiovIH0pLFxcbi8qIDI2NyAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG4vKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi8oZnVuY3Rpb24obW9kdWxlLCBnbG9iYWwpIHt2YXIgX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX187LyohIGh0dHA6Ly9tdGhzLmJlL2Jhc2U2NCB2MC4xLjAgYnkgQG1hdGhpYXMgfCBNSVQgbGljZW5zZSAqL1xcbjsoZnVuY3Rpb24ocm9vdCkge1xcblxcblxcdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlcyBgZXhwb3J0c2AuXFxuXFx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cztcXG5cXG5cXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC5cXG5cXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXFxuXFx0XFx0bW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMgJiYgbW9kdWxlO1xcblxcblxcdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgLCBmcm9tIE5vZGUuanMgb3IgQnJvd3NlcmlmaWVkIGNvZGUsIGFuZCB1c2VcXG5cXHQvLyBpdCBhcyBgcm9vdGAuXFxuXFx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcXG5cXHRpZiAoZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwpIHtcXG5cXHRcXHRyb290ID0gZnJlZUdsb2JhbDtcXG5cXHR9XFxuXFxuXFx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuXFxuXFx0dmFyIEludmFsaWRDaGFyYWN0ZXJFcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcXG5cXHRcXHR0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xcblxcdH07XFxuXFx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcjtcXG5cXHRJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcXG5cXG5cXHR2YXIgZXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XFxuXFx0XFx0Ly8gTm90ZTogdGhlIGVycm9yIG1lc3NhZ2VzIHVzZWQgdGhyb3VnaG91dCB0aGlzIGZpbGUgbWF0Y2ggdGhvc2UgdXNlZCBieVxcblxcdFxcdC8vIHRoZSBuYXRpdmUgYGF0b2JgL2BidG9hYCBpbXBsZW1lbnRhdGlvbiBpbiBDaHJvbWl1bS5cXG5cXHRcXHR0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yKG1lc3NhZ2UpO1xcblxcdH07XFxuXFxuXFx0dmFyIFRBQkxFID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xcblxcdC8vIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvY29tbW9uLW1pY3Jvc3ludGF4ZXMuaHRtbCNzcGFjZS1jaGFyYWN0ZXJcXG5cXHR2YXIgUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyA9IC9bXFxcXHRcXFxcblxcXFxmXFxcXHIgXS9nO1xcblxcblxcdC8vIGBkZWNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYXRvYmAgYXMgZGVzY3JpYmVkIGluIHRoZVxcblxcdC8vIEhUTUwgU3RhbmRhcmQuIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYXRvYlxcblxcdC8vIFRoZSBvcHRpbWl6ZWQgYmFzZTY0LWRlY29kaW5nIGFsZ29yaXRobSB1c2VkIGlzIGJhc2VkIG9uIEBhdGvigJlzIGV4Y2VsbGVudFxcblxcdC8vIGltcGxlbWVudGF0aW9uLiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9hdGsvMTAyMDM5NlxcblxcdHZhciBkZWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xcblxcdFxcdGlucHV0ID0gU3RyaW5nKGlucHV0KVxcblxcdFxcdFxcdC5yZXBsYWNlKFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMsICcnKTtcXG5cXHRcXHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xcblxcdFxcdGlmIChsZW5ndGggJSA0ID09IDApIHtcXG5cXHRcXHRcXHRpbnB1dCA9IGlucHV0LnJlcGxhY2UoLz09PyQvLCAnJyk7XFxuXFx0XFx0XFx0bGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xcblxcdFxcdH1cXG5cXHRcXHRpZiAoXFxuXFx0XFx0XFx0bGVuZ3RoICUgNCA9PSAxIHx8XFxuXFx0XFx0XFx0Ly8gaHR0cDovL3doYXR3Zy5vcmcvQyNhbHBoYW51bWVyaWMtYXNjaWktY2hhcmFjdGVyc1xcblxcdFxcdFxcdC9bXithLXpBLVowLTkvXS8udGVzdChpbnB1dClcXG5cXHRcXHQpIHtcXG5cXHRcXHRcXHRlcnJvcihcXG5cXHRcXHRcXHRcXHQnSW52YWxpZCBjaGFyYWN0ZXI6IHRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuJ1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBiaXRDb3VudGVyID0gMDtcXG5cXHRcXHR2YXIgYml0U3RvcmFnZTtcXG5cXHRcXHR2YXIgYnVmZmVyO1xcblxcdFxcdHZhciBvdXRwdXQgPSAnJztcXG5cXHRcXHR2YXIgcG9zaXRpb24gPSAtMTtcXG5cXHRcXHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xcblxcdFxcdFxcdGJ1ZmZlciA9IFRBQkxFLmluZGV4T2YoaW5wdXQuY2hhckF0KHBvc2l0aW9uKSk7XFxuXFx0XFx0XFx0Yml0U3RvcmFnZSA9IGJpdENvdW50ZXIgJSA0ID8gYml0U3RvcmFnZSAqIDY0ICsgYnVmZmVyIDogYnVmZmVyO1xcblxcdFxcdFxcdC8vIFVubGVzcyB0aGlzIGlzIHRoZSBmaXJzdCBvZiBhIGdyb3VwIG9mIDQgY2hhcmFjdGVyc+KAplxcblxcdFxcdFxcdGlmIChiaXRDb3VudGVyKysgJSA0KSB7XFxuXFx0XFx0XFx0XFx0Ly8g4oCmY29udmVydCB0aGUgZmlyc3QgOCBiaXRzIHRvIGEgc2luZ2xlIEFTQ0lJIGNoYXJhY3Rlci5cXG5cXHRcXHRcXHRcXHRvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShcXG5cXHRcXHRcXHRcXHRcXHQweEZGICYgYml0U3RvcmFnZSA+PiAoLTIgKiBiaXRDb3VudGVyICYgNilcXG5cXHRcXHRcXHRcXHQpO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9XFxuXFx0XFx0cmV0dXJuIG91dHB1dDtcXG5cXHR9O1xcblxcblxcdC8vIGBlbmNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYnRvYWAgYXMgZGVzY3JpYmVkIGluIHRoZVxcblxcdC8vIEhUTUwgU3RhbmRhcmQ6IGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYnRvYVxcblxcdHZhciBlbmNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xcblxcdFxcdGlucHV0ID0gU3RyaW5nKGlucHV0KTtcXG5cXHRcXHRpZiAoL1teXFxcXDAtXFxcXHhGRl0vLnRlc3QoaW5wdXQpKSB7XFxuXFx0XFx0XFx0Ly8gTm90ZTogbm8gbmVlZCB0byBzcGVjaWFsLWNhc2UgYXN0cmFsIHN5bWJvbHMgaGVyZSwgYXMgc3Vycm9nYXRlcyBhcmVcXG5cXHRcXHRcXHQvLyBtYXRjaGVkLCBhbmQgdGhlIGlucHV0IGlzIHN1cHBvc2VkIHRvIG9ubHkgY29udGFpbiBBU0NJSSBhbnl3YXkuXFxuXFx0XFx0XFx0ZXJyb3IoXFxuXFx0XFx0XFx0XFx0J1RoZSBzdHJpbmcgdG8gYmUgZW5jb2RlZCBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgb2YgdGhlICcgK1xcblxcdFxcdFxcdFxcdCdMYXRpbjEgcmFuZ2UuJ1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fVxcblxcdFxcdHZhciBwYWRkaW5nID0gaW5wdXQubGVuZ3RoICUgMztcXG5cXHRcXHR2YXIgb3V0cHV0ID0gJyc7XFxuXFx0XFx0dmFyIHBvc2l0aW9uID0gLTE7XFxuXFx0XFx0dmFyIGE7XFxuXFx0XFx0dmFyIGI7XFxuXFx0XFx0dmFyIGM7XFxuXFx0XFx0dmFyIGQ7XFxuXFx0XFx0dmFyIGJ1ZmZlcjtcXG5cXHRcXHQvLyBNYWtlIHN1cmUgYW55IHBhZGRpbmcgaXMgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBsb29wLlxcblxcdFxcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGggLSBwYWRkaW5nO1xcblxcblxcdFxcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XFxuXFx0XFx0XFx0Ly8gUmVhZCB0aHJlZSBieXRlcywgaS5lLiAyNCBiaXRzLlxcblxcdFxcdFxcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCAxNjtcXG5cXHRcXHRcXHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKSA8PCA4O1xcblxcdFxcdFxcdGMgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xcblxcdFxcdFxcdGJ1ZmZlciA9IGEgKyBiICsgYztcXG5cXHRcXHRcXHQvLyBUdXJuIHRoZSAyNCBiaXRzIGludG8gZm91ciBjaHVua3Mgb2YgNiBiaXRzIGVhY2gsIGFuZCBhcHBlbmQgdGhlXFxuXFx0XFx0XFx0Ly8gbWF0Y2hpbmcgY2hhcmFjdGVyIGZvciBlYWNoIG9mIHRoZW0gdG8gdGhlIG91dHB1dC5cXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTggJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMiAmIDB4M0YpICtcXG5cXHRcXHRcXHRcXHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDYgJiAweDNGKSArXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciAmIDB4M0YpXFxuXFx0XFx0XFx0KTtcXG5cXHRcXHR9XFxuXFxuXFx0XFx0aWYgKHBhZGRpbmcgPT0gMikge1xcblxcdFxcdFxcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCA4O1xcblxcdFxcdFxcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xcblxcdFxcdFxcdGJ1ZmZlciA9IGEgKyBiO1xcblxcdFxcdFxcdG91dHB1dCArPSAoXFxuXFx0XFx0XFx0XFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMCkgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyID4+IDQpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDIpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdCc9J1xcblxcdFxcdFxcdCk7XFxuXFx0XFx0fSBlbHNlIGlmIChwYWRkaW5nID09IDEpIHtcXG5cXHRcXHRcXHRidWZmZXIgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcXG5cXHRcXHRcXHRvdXRwdXQgKz0gKFxcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMikgK1xcblxcdFxcdFxcdFxcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDQpICYgMHgzRikgK1xcblxcdFxcdFxcdFxcdCc9PSdcXG5cXHRcXHRcXHQpO1xcblxcdFxcdH1cXG5cXG5cXHRcXHRyZXR1cm4gb3V0cHV0O1xcblxcdH07XFxuXFxuXFx0dmFyIGJhc2U2NCA9IHtcXG5cXHRcXHQnZW5jb2RlJzogZW5jb2RlLFxcblxcdFxcdCdkZWNvZGUnOiBkZWNvZGUsXFxuXFx0XFx0J3ZlcnNpb24nOiAnMC4xLjAnXFxuXFx0fTtcXG5cXG5cXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcXG5cXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XFxuXFx0aWYgKFxcblxcdFxcdHRydWVcXG5cXHQpIHtcXG5cXHRcXHQhKF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fID0gKGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdHJldHVybiBiYXNlNjQ7XFxuXFx0XFx0fSkuY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fLCBleHBvcnRzLCBtb2R1bGUpLFxcblxcdFxcdFxcdFxcdF9fV0VCUEFDS19BTURfREVGSU5FX1JFU1VMVF9fICE9PSB1bmRlZmluZWQgJiYgKG1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18pKTtcXG5cXHR9XFx0ZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgIWZyZWVFeHBvcnRzLm5vZGVUeXBlKSB7XFxuXFx0XFx0aWYgKGZyZWVNb2R1bGUpIHsgLy8gaW4gTm9kZS5qcyBvciBSaW5nb0pTIHYwLjguMCtcXG5cXHRcXHRcXHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBiYXNlNjQ7XFxuXFx0XFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cXG5cXHRcXHRcXHRmb3IgKHZhciBrZXkgaW4gYmFzZTY0KSB7XFxuXFx0XFx0XFx0XFx0YmFzZTY0Lmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBiYXNlNjRba2V5XSk7XFxuXFx0XFx0XFx0fVxcblxcdFxcdH1cXG5cXHR9IGVsc2UgeyAvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXFxuXFx0XFx0cm9vdC5iYXNlNjQgPSBiYXNlNjQ7XFxuXFx0fVxcblxcbn0odGhpcykpO1xcblxcbi8qIFdFQlBBQ0sgVkFSIElOSkVDVElPTiAqL30uY2FsbChleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKDI2OCkobW9kdWxlKSwgX193ZWJwYWNrX3JlcXVpcmVfXygyOCkpKVxcblxcbi8qKiovIH0pLFxcbi8qIDI2OCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMpIHtcXG5cXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xcblxcdGlmKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XFxuXFx0XFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XFxuXFx0XFx0bW9kdWxlLnBhdGhzID0gW107XFxuXFx0XFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XFxuXFx0XFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XFxuXFx0XFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXFxcImxvYWRlZFxcXCIsIHtcXG5cXHRcXHRcXHRlbnVtZXJhYmxlOiB0cnVlLFxcblxcdFxcdFxcdGdldDogZnVuY3Rpb24oKSB7XFxuXFx0XFx0XFx0XFx0cmV0dXJuIG1vZHVsZS5sO1xcblxcdFxcdFxcdH1cXG5cXHRcXHR9KTtcXG5cXHRcXHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcXFwiaWRcXFwiLCB7XFxuXFx0XFx0XFx0ZW51bWVyYWJsZTogdHJ1ZSxcXG5cXHRcXHRcXHRnZXQ6IGZ1bmN0aW9uKCkge1xcblxcdFxcdFxcdFxcdHJldHVybiBtb2R1bGUuaTtcXG5cXHRcXHRcXHR9XFxuXFx0XFx0fSk7XFxuXFx0XFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XFxuXFx0fVxcblxcdHJldHVybiBtb2R1bGU7XFxufTtcXG5cXG5cXG4vKioqLyB9KSxcXG4vKiAyNjkgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5NVUxUSUxBTkdVQUdFX1dPUkRJTkdTID0ge1xcbiAgICBzYXZlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2F2ZScsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZXInXFxuICAgIH0sXFxuICAgIHNhdmVDaGFuZ2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2F2ZSBjaGFuZ2VzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnJlZ2lzdHJlciBtb2RpZmljYXRpb25zJ1xcbiAgICB9LFxcbiAgICBjYW5jZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYW5jZWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXInXFxuICAgIH0sXFxuICAgIGVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsJ1xcbiAgICB9LFxcbiAgICBzdWJtaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdWJtaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGlkZXInXFxuICAgIH0sXFxuICAgIGNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maXJtJyxcXG4gICAgICAgICdmci1GUic6ICdDb25maXJtZXInXFxuICAgIH0sXFxuICAgIGRlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RlbGV0ZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyJ1xcbiAgICB9LFxcbiAgICBlbmFibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW5hYmxlZCcsXFxuICAgICAgICAnZnItRlInOiAnQWN0aWYnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGVybWlzc2lvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Blcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBkZXNjcmlwdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rlc2NyaXB0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXNjcmlwdGlvbidcXG4gICAgfSxcXG4gICAgbmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSdcXG4gICAgfSxcXG4gICAgbm9EYXRhRm91bmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBkYXRhIGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUgZG9ubsOpZSdcXG4gICAgfSxcXG4gICAgZmlyc3RuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmlyc3QgbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqW5vbSdcXG4gICAgfSxcXG4gICAgbG9hZGluZ0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9hZGluZyBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyIGRlIGNoYXJnZW1lbnQnXFxuICAgIH0sXFxuICAgIGRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscydcXG4gICAgfSxcXG4gICAgbGFzdG5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IG5hbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSdcXG4gICAgfSxcXG4gICAgZXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyJ1xcbiAgICB9LFxcbiAgICByZWdpc3Rlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZ2lzdGVyJyxcXG4gICAgICAgICdmci1GUic6ICdTXFxcXCdlbnJlZ2lzdHJlcidcXG4gICAgfSxcXG4gICAgaW5zdGFuY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnN0YW5jZScsXFxuICAgICAgICAnZnItRlInOiAnSW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICB0aXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RpdGxlJyxcXG4gICAgICAgICdmci1GUic6ICdUaXRyZSdcXG4gICAgfSxcXG4gICAgdXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyJ1xcbiAgICB9LFxcbiAgICBtcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01yLicsXFxuICAgICAgICAnZnItRlInOiAnTS4nXFxuICAgIH0sXFxuICAgIG1yczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01ycy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01tZSdcXG4gICAgfSxcXG4gICAgbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNcy4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lbGxlJ1xcbiAgICB9LFxcbiAgICBwcm9mOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvZi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ByJ1xcbiAgICB9LFxcbiAgICBkcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RyLicsXFxuICAgICAgICAnZnItRlInOiAnRHInXFxuICAgIH0sXFxuICAgIHNhbHV0YXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTYWx1dGF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTYWx1dGF0aW9uJ1xcbiAgICB9LFxcbiAgICBjb21wYW55OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29tcGFueScsXFxuICAgICAgICAnZnItRlInOiAnU29jacOpdMOpJ1xcbiAgICB9LFxcbiAgICBjb21wYW55TmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbXBhbnkgbmFtZScsXFxuICAgICAgICAnZnItRlInOiAnTm9tIGRlIGxhIHNvY2nDqXTDqSdcXG4gICAgfSxcXG4gICAgYWRkcmVzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZHJlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FkcmVzc2UnXFxuICAgIH0sXFxuICAgIGNpdHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdWaWxsZSdcXG4gICAgfSxcXG4gICAgc3RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnw4l0YXQnXFxuICAgIH0sXFxuICAgIGNvdW50cnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb3VudHJ5JyxcXG4gICAgICAgICdmci1GUic6ICdQYXlzJ1xcbiAgICB9LFxcbiAgICB6aXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdaaXAnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvZGUgcG9zdGFsJ1xcbiAgICB9LFxcbiAgICBwaG9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bob25lJyxcXG4gICAgICAgICdmci1GUic6ICdUw6lsw6lwaG9uZSdcXG4gICAgfSxcXG4gICAgbW9iaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9iaWxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2JpbGUnXFxuICAgIH0sXFxuICAgIHdlYnNpdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXZWJzaXRlJyxcXG4gICAgICAgICdmci1GUic6ICdTaXRlIHdlYidcXG4gICAgfSxcXG4gICAgc3RhcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnRMOpbWFycmVyJ1xcbiAgICB9LFxcbiAgICBzdG9wOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3RvcCcsXFxuICAgICAgICAnZnItRlInOiAnQXJyw6p0ZXInXFxuICAgIH0sXFxuICAgIHJlc2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1LDqWluaXRpYWxpc2VyJ1xcbiAgICB9LFxcbiAgICBlZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlcidcXG4gICAgfSxcXG4gICAgY3JlYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXInXFxuICAgIH0sXFxuICAgIGFjdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBY3Rpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdBY3Rpb25zJ1xcbiAgICB9LFxcbiAgICBpbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5mbycsXFxuICAgICAgICAnZnItRlInOiAnSW5mbydcXG4gICAgfSxcXG4gICAgc2VhcmNoUGxhY2Vob2xkZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWFyY2guLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hlcmNoZXIuLi4nXFxuICAgIH0sXFxuICAgIGtleToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0tleScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqSdcXG4gICAgfSxcXG4gICAgdmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWYWx1ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyJ1xcbiAgICB9LFxcbiAgICBmaWVsZFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVxdWlyZWQgZmllbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wIG9ibGlnYXRvaXJlJ1xcbiAgICB9LFxcbiAgICBzaG93RGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgZGV0YWlscycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIGNsb3NlRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlIGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Zlcm1lciBsZXMgZMOpdGFpbHMnXFxuICAgIH0sXFxuICAgIHNlYXJjaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCcsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlcidcXG4gICAgfSxcXG4gICAgYWRtaW5pc3RyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZG1pbmlzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQWRtaW5pc3RyYXRpb24nXFxuICAgIH0sXFxuICAgIGl0ZW1DcmVhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBjcmVhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICfDiWzDqW1lbnQgY3LDqcOpJ1xcbiAgICB9LFxcbiAgICBpdGVtVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gdXBkYXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG1vZGlmacOpJ1xcbiAgICB9LFxcbiAgICBpdGVtUmVuYW1lZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVuYW1lZCcsXFxuICAgICAgICAnZnItRlInOiAnTm9tIGRlIGxcXFxcJ8OpbMOpbWVudCBtb2RpZmnDqSdcXG4gICAgfSxcXG4gICAgaXRlbURlbGV0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBzdXBwcmltw6knXFxuICAgIH0sXFxuICAgIGNvbmZpcm1EZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGl0ZW1zSW1wb3J0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtcyBpbXBvcnRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50cyBpbXBvcnTDqXMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1JdGVtc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlc2UgaXRlbXM/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgY2VzIMOpbMOpbWVudHMgPydcXG4gICAgfSxcXG4gICAgaXRlbXNEZWxldGVJbXBvc3NpYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGNhblxcXFwndCBkZWxldGUgdGhlc2UgaXRlbXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9zc2libGUgZGUgc3VwcHJpbWVyIGNlcyDDqWzDqW1lbnRzJ1xcbiAgICB9LFxcbiAgICB3YXJuaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2FybmluZycsXFxuICAgICAgICAnZnItRlInOiAnQXR0ZW50aW9uJ1xcbiAgICB9LFxcbiAgICBleHBvcnRKU09OOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IGFzIEpTT04nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4cG9ydGVyIChKU09OKSdcXG4gICAgfSxcXG4gICAgcHJvZmlsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Byb2ZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb2ZpbCdcXG4gICAgfSxcXG4gICAgdGFyZ2V0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGFyZ2V0JyxcXG4gICAgICAgICdmci1GUic6ICdDaWJsZSdcXG4gICAgfSxcXG4gICAgYnk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdieScsXFxuICAgICAgICAnZnItRlInOiAncGFyJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkRW1haWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGVtYWlsJyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZE51bWJlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ011c3QgYmUgYSBudW1iZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RvaXQgw6p0cmUgdW4gbm9tYnJlJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBodHRwcyB1cmwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VybCBodHRwcyBpbnZhbGlkJ1xcbiAgICB9LFxcbiAgICBzdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2VzcycsXFxuICAgICAgICAnZnItRlInOiAnU3VjY8OocydcXG4gICAgfSxcXG4gICAgdGFiTGlzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xpc3QgKHt0b3RhbH0pJyxcXG4gICAgICAgICdmci1GUic6ICdMaXN0ZSAoe3RvdGFsfSknXFxuICAgIH0sXFxuICAgIHRhYkVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IC0ge25hbWV9JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICB0YWJBZGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgLSBOZXcgaXRlbScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciAtIE5vdXZlbCDDqWzDqW1lbnQnXFxuICAgIH0sXFxuICAgIHRhYlJ1bjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1biAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnRXjDqWN1dGVyIC0ge25hbWV9J1xcbiAgICB9LFxcbiAgICB0YWJWaWV3OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyAtIHtuYW1lfScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgLSB7bmFtZX0nXFxuICAgIH0sXFxuICAgIHNlbGVjdEFsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdG91dCdcXG4gICAgfSxcXG4gICAgdW5zZWxlY3RBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVbnNlbGVjdCBhbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXPDqWxlY3Rpb25uZXIgdG91dCdcXG4gICAgfSxcXG4gICAgYWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyJ1xcbiAgICB9LFxcbiAgICBpbXBvcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbXBvcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyJ1xcbiAgICB9LFxcbiAgICBleHBvcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBvcnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4cG9ydGVyJ1xcbiAgICB9LFxcbiAgICBleHBvcnRBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBvcnQgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciB0b3V0J1xcbiAgICB9LFxcbiAgICBkZWxldGVBbGw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgdG91dCdcXG4gICAgfSxcXG4gICAgc2F2ZUFsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgYWxsJyxcXG4gICAgICAgICdmci1GUic6ICdTYXV2ZWdhcmRlciB0b3V0J1xcbiAgICB9LFxcbiAgICBydW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdSdW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0V4w6ljdXRlcidcXG4gICAgfSxcXG4gICAgcmVuYW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVuYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdSZW5vbW1lcidcXG4gICAgfSxcXG4gICAgZHVwbGljYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHVwbGljYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEdXBsaXF1ZXInXFxuICAgIH0sXFxuICAgIHR5cGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1R5cGVzJ1xcbiAgICB9LFxcbiAgICBmdWxsc2NyZWVuOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnVsbC1zY3JlZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BsZWluIMOpY3JhbidcXG4gICAgfSxcXG4gICAgcmVkdWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVkdWNlJyxcXG4gICAgICAgICdmci1GUic6ICdSw6lkdWlyZSdcXG4gICAgfSxcXG4gICAgYXBwS2V5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwbGljYXRpb24ga2V5JyxcXG4gICAgICAgICdmci1GUic6ICdDbMOpIGRcXFxcJ2FwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBhcHBJbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwbGljYXRpb24gaW5mbycsXFxuICAgICAgICAnZnItRlInOiAnSW5mb3JtYXRpb24gc3VyIGxcXFxcJ2FwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0TW9kaWZpY2F0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFzdCBtb2RpZmljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlcm5pw6hyZSBtb2RpZmljYXRpb24nXFxuICAgIH0sXFxuICAgIGxhc3RNb2RpZmljYXRpb25CeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3QgbW9kaWZpY2F0aW9uIG1hZGUgYnkge25hbWV9IG9uIHtkYXRlfScsXFxuICAgICAgICAnZnItRlInOiAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBmYWl0ZSBwYXIge25hbWV9IGxlIHtkYXRlfSdcXG4gICAgfSxcXG4gICAga2V5RXhpc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXkgYWxyZWFkeSBleGlzdC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIGNsw6kgZXhpc3RlIGTDqWrDoC4nXFxuICAgIH0sXFxuICAgIHNpemU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaXplJyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUnXFxuICAgIH0sXFxuICAgIHRhYkNsb3NlVW5zYXZlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIHRoaXMgdGFiIGFuZCBsb3NlIHlvdXIgdXBkYXRlcz8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgYXZleiBlZmZlY3R1w6kgZGVzIG1vZGlmaWNhdGlvbnMgc2FucyBsZXMgZW5yZWdpc3RyZXIuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGZlcm1lciBjZXQgb25nbGV0IGV0IHBlcmRyZSBsZXMgZG9ubsOpZXMgbm9uIHNhdXZlZ2FyZMOpZXMgPydcXG4gICAgfSxcXG4gICAgbmFtZUFscmVhZHlUYWtlbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05hbWUgYWxyZWFkeSB0YWtlbi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vbSBkw6lqw6AgdXRpbGlzw6kuJ1xcbiAgICB9LFxcbiAgICBuYW1lTm9Eb3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBjYW5ub3QgY29udGFpbiBhIFxcXFwnLlxcXFwnJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gbmUgcGV1dCBwYXMgY29udGVuaXIgZGUgXFxcXCcuXFxcXCcnXFxuICAgIH0sXFxuICAgIHJlc291cmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzb3VyY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Jlc3NvdXJjZSdcXG4gICAgfSxcXG4gICAgdGFyZ2V0Um9vdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhcmdldCByb290JyxcXG4gICAgICAgICdmci1GUic6ICdSYWNpbmUgZGUgbGEgY2libGUnXFxuICAgIH0sXFxuICAgIHRhcmdldFBhdGg6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYXJnZXQgcGF0aCcsXFxuICAgICAgICAnZnItRlInOiAnQ2hlbWluIHZlcnMgbGEgY2libGUnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9wZXJ0aWVzJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXNFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhbnkgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgblxcXFwnYXZleiBhdWN1bmUgcHJvcHJpw6l0w6knXFxuICAgIH0sXFxuICAgIGtleVVuaXF1ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBrZXkgbXVzdCBiZSB1bmlxdWUuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSBjbMOpIGRvaXQgw6p0cmUgdW5pcXVlLidcXG4gICAgfSxcXG4gICAgcHJvcGVydHlBZGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgcHJvcGVydHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIHByb3ByacOpdMOpJ1xcbiAgICB9LFxcbiAgICBtdWx0aWxhbmd1YWdlRmllbGQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGlzIGEgbXVsdGlsaW5ndWFsIGZpZWxkLiBFbmdsaXNoIGlzIHJlcXVpcmVkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2VjaSBlc3QgdW4gY2hhbXAgbXVsdGlsaW5ndWUuIExcXFxcJ2FuZ2xhaXMgZXN0IG9ibGlnYXRvaXJlLidcXG4gICAgfSxcXG4gICAgZW5nbGlzaERlc2NyaXB0aW9uUmVxdWlyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbmdsaXNoIGRlc2NyaXB0aW9uIGlzIHJlcXVpcmVkLicsXFxuICAgICAgICAnZnItRlInOiAnTGEgZGVzY3JpcHRpb24gYW5nbGFpc2UgZXN0IG9ibGlnYXRvaXJlLidcXG4gICAgfSxcXG4gICAgbWF4U2l6ZTFHQjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01heGltdW0gc2l6ZSBhbGxvd2VkIGlzIDFHQi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhIHRhaWxsZSBtYXhpbWFsZSBhdXRob3Jpc8OpZSBlc3QgZGUgMUdPLidcXG4gICAgfSxcXG4gICAgaW52YWxpZFNpemVNYXgxR0I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHRvbyBiaWcsIG1heGltdW0gc2l6ZSBhbGxvd2VkIGlzIDFHQi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgdHJvcCBsb3VyZCwgbGEgdGFpbGxlIG1heGltYWxlIGF1dGhvcmlzw6llIGVzdCBkZSAxR08uJ1xcbiAgICB9LFxcbiAgICBuYW1lQWxyZWFkeUV4aXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLicsXFxuICAgICAgICAnZnItRlInOiAnQ2Ugbm9tIGV4aXN0ZSBkw6lqw6AuJ1xcbiAgICB9LFxcbiAgICByZXNvdXJjZU5vdEZvdW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gcmVzb3VyY2UgaGFzIGJlZW4gZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSByZXNzb3VyY2UgblxcXFwnYSDDqXTDqSB0cm91dsOpZSdcXG4gICAgfSxcXG4gICAgcmVzb3VyY2VzQXR0YWNoZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNvdXJjZSBhdHRhY2hlZCcsXFxuICAgICAgICAnZnItRlInOiAnUmVzc291cmNlIGF0dGFjaMOpZSdcXG4gICAgfSxcXG4gICAgY29uZmlybVVwZGF0ZUZvckNvbnNpc3RhbmN5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXQgc2VlbXMgbGlrZSB5b3VyIGl0ZW1zIGFyZSBub3Qgc3luY2hyb25pemVkIHdpdGggdGhlIHNlcnZlciBhbnltb3JlLCB5b3Ugc2hvdWxkIHNhdmUgeW91ciB3b3JrIGFuZCB1cGRhdGUgdGhlIHNlcnZpY2UuJyxcXG4gICAgICAgICdmci1GUic6ICdJbCBzZW1ibGUgcXVlIHZvcyDDqWzDqW1lbnRzIG5lIHNvbnQgcGx1cyBzeW5jaHJvbmlzw6lzIGF2ZWMgbGUgc2VydmV1ciwgdm91cyBkZXZyaWV6IHNhdXZlZ2FyZGVyIHZvdHJlIHRyYXZhaWwgZXQgbWV0dHJlIMOgIGpvdXIgbGUgc2VydmljZS4nXFxuICAgIH0sXFxuICAgIGl0ZW1Ob3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gbm90IGZvdW5kLicsXFxuICAgICAgICAnZnItVVMnOiAnQXVjdW4gw6lsw6ltZW50IHRyb3V2w6kuJ1xcbiAgICB9LFxcbiAgICBzdGF0dXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGF0dXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N0YXR1dCdcXG4gICAgfSxcXG4gICAgbm9uZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vbmUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuJ1xcbiAgICB9LFxcbiAgICBpdGVtc1JlYWRvbmx5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlc2XigIJpdGVtcyBhcmUgb25seSByZWFkYWJsZS4gVGhleSBjYW4gbm90IGJlIGRlbGV0ZWQuJyxcXG4gICAgICAgICdmci1GUic6ICdDZXMgw6lsw6ltZW50cyBuZSBzb250IHBhcyBtb2RpZmlhYmxlcy4gSWxzIG5lIHBldXZlbnQgcGFzIMOqdHJlIHN1cHByaW3DqXMuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VucmVnaXN0cmVtZW50J1xcbiAgICB9LFxcbiAgICBiYWNrVG9Mb2dpbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2sgdG8gc2lnbiBpbiBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkZSBjb25uZXhpb24nXFxuICAgIH0sXFxuICAgIHJlZ2lzdHJhdGlvblN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdWNjZXNzZnVsIHJlZ2lzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRW5yZWdpc3RyZW1lbnQgcsOpdXNzaSdcXG4gICAgfSxcXG4gICAgc3VjY2Vzc1JlZ2lzdGVyTWFpbFNlbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3Ugd2lsbCByZWNlaXZlIGEgY29uZmlybWF0aW9uIGVtYWlsLicsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBhbGxleiByZWNldm9pciB1biBlbWFpbCBkZSBjb25maXJtYXRpb24uJ1xcbiAgICB9LFxcbiAgICBzdWNjZXNzUmVnaXN0cmF0aW9uTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lmIHlvdSBhbHJlYWR5IHNldCB5b3VyIHBhc3N3b3JkLCB5b3UgY2FuIG5vdyBzaWduIGluLiBPdGhlcndpc2UsIHBsZWFzZSBjbGljayBvbiB0aGUgbGluayBzZW50IHRvIHlvdSBieSBlbWFpbCB0byBhY3RpdmF0ZSB5b3VyIGFjY291bnQuJyxcXG4gICAgICAgICdmci1GUic6ICdTaSB2b3VzIGF2ZXogZMOpasOgIGNyw6nDqSB2b3RyZSBtb3QgZGUgcGFzc2UsIHZvdXMgcG91dmV6IHZvdXMgY29ubmVjdGVyIGTDqHMgbWFpbnRlbmFudC4gU2lub24sIHZvdXMgdHJvdXZlcmV6IHVuIGxpZW4gZGFucyBsXFxcXCdlbWFpbCBkZSBjb25maXJtYXRpb24gcXVpIHZvdXMgcGVtZXR0cmEgZFxcXFwnYWN0aXZlciB2b3RyZSBjb21wdGUuJ1xcbiAgICB9LFxcbiAgICByZWdpc3RyYXRpb25FbWFpbEhlbHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYWtlIHN1cmUgdGhlIGVtYWlsIGlzIGNvcnJlY3QgdG8gcmVjZWl2ZSB0aGUgY29uZmlybWF0aW9uIGxpbmsnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHZvdXMgYXNzdXJlciBxdWUgdm90cmUgZW1haWwgZXN0IGNvcnJlY3QgcG91ciBwb3V2b2lyIGZpbmFsaXNlciBsXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgcGxlYXNlV2FpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSB3YWl0JyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBwYXRpZW50ZXInXFxuICAgIH0sXFxuICAgIGltcG9ydExvYWRpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3VyIGltcG9ydCBmaWxlIGlzIGJlaW5nIHByb2Nlc3NlZC4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgaW1wb3J0IGVzdCBlbiBjb3VycyBkZSB0cmFpdGVtZW50Li4uJ1xcbiAgICB9LFxcbiAgICBleHBvcnRMb2FkaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBleHBvcnQgZmlsZSBpcyBiZWluZyBwcmVwYXJlZC4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgZXhwb3J0IGVzdCBlbiBjb3VycyBkZSBjaGFyZ2VtZW50Li4uJ1xcbiAgICB9LFxcbiAgICBjbG9zZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Nsb3NlJyxcXG4gICAgICAgICdmci1GUic6ICdGZXJtZXInXFxuICAgIH0sXFxuICAgIHNlcnZpY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlJyxcXG4gICAgICAgICdmci1GUic6ICdTZXJ2aWNlJ1xcbiAgICB9LFxcbiAgICByZW5hbWVEaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBjbG9zZSBhbnkgdmlldyBvciBlZGl0IHRhYiBjb25jZXJuaW5nIHRoaXMgaXRlbSBpZiB5b3Ugd2FudCB0byByZW5hbWUgaXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIGZlcm1lciB0b3V0IG9uZ2xldCBjb25jZXJuYW50IGNldCDDqWzDqW1lbnQgc2kgdm91cyBzb3VoYWl0ZXogbGUgcmVub21tZXInXFxuICAgIH0sXFxuICAgIGRlbGV0ZURpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGNsb3NlIGFueSB2aWV3IG9yIGVkaXQgdGFiIGNvbmNlcm5pbmcgdGhpcyBpdGVtIGlmIHlvdSB3YW50IHRvIGRlbGV0ZSBpdCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgZmVybWVyIHRvdXQgb25nbGV0IGNvbmNlcm5hbnQgY2V0IMOpbMOpbWVudCBzaSB2b3VzIHNvdWhhaXRleiBsZSBzdXBwcmltZXInXFxuICAgIH0sXFxuICAgIHJlc3VsdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3Jlc3VsdCcsXFxuICAgICAgICAnZnItRlInOiAncsOpc3VsdGF0J1xcbiAgICB9LFxcbiAgICByZXN1bHRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAncmVzdWx0cycsXFxuICAgICAgICAnZnItRlInOiAncsOpc3VsdGF0cydcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlTGFiZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWdpc3RyYXRpb24gdHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSBkXFxcXCdlbnJlZ2lzdHJlbWVudCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25SZWdpc3RyYXRpb25UeXBlRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugc2VsZWN0IHRoZSB0eXBlIG9mIHJlZ2lzdHJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc8OpbGVjdGlvbm5lciBsZSB0eXBlIGRcXFxcJ2VucmVnaXN0cmVtZW50J1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblR5cGVTdXBwbGllcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N1cHBsaWVyJyxcXG4gICAgICAgICdmci1GUic6ICdGb3Vybmlzc2V1cidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlQ2FwaXRhbFByb2plY3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYXBpdGFsIFByb2plY3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhcGl0YWwgUHJvamVjdCdcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25UeXBlSW50ZXJuYWxVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW50ZXJuYWwgVXNlcicsXFxuICAgICAgICAnZnItRlInOiAnSW50ZXJuYWwgVXNlcidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25JbnRybzE6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIENvbW11bml0eSBlbmFibGVzIENoZXZyb24gU3VwcGxpZXJzLCBDaGV2cm9uIEludGVybmFsIFVzZXJzIGFuZCBDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdHMgdG8gcGVyZm9ybSBlbGVjdHJvbmljIHRyYW5zYWN0aW9ucyB3aXRoIENoZXZyb24gSVQgc3lzdGVtcyBpbiBhIGhpZ2hseSBzZWN1cmUgYnV0IHZlcnkgZWFzeSBtYW5uZXIuJyxcXG4gICAgICAgICdmci1GUic6ICdDZXR0ZSBjb21tdW5hdXTDqSBwZXJtZXQgYXV4IGZvdXJuaXNzZXVycywgXFxcIkludGVybmFsIFVzZXJcXFwiIGV0IFxcXCJDYXBpdGFsIFByb2plY3RcXFwiIENoZXZyb24gZGUgcsOpYWxpc2VyIGRlcyDDqWNoYW5nZXMgw6lsZWN0cm9uaXF1ZXMgYXZlYyBsZXMgc3lzdMOobWVzIGluZm9ybWF0aXF1ZXMgZGUgQ2hldnJvbiBkZSBmYcOnb24gc2ltcGxlIGV0IHPDqWN1cmlzw6llLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25TdXBwbGllckludHJvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8gYmUgcGFydCBvZiB0aGUgQ2hldnJvbiBDb21tdW5pdHksIHlvdSBtdXN0IGhhdmUgYmVlbiBpbnZpdGVkIGFuZC9vciBhdXRob3JpemVkIGJ5IENoZXZyb24uJyxcXG4gICAgICAgICdmci1GUic6ICdQb3VyIGZhaXJlIHBhcnRpZSBkZSBsYSBjb21tdW5hdXTDqSBDaGV2cm9uLCB2b3VzIGRldmV6IGF2b2lyIHJlw6d1IHVuZSBpbnZpdGF0aW9uIGV0L291IHVuZSBhdXRvcmlzYXRpb24gZGUgbGEgcGFydCBkZSBDaGV2cm9uLidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25QaWR4aWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEJyxcXG4gICAgICAgICdmci1GUic6ICdQSURYIElEJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZEhlbHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgQ2hldnJvbiBQSURYIElEIGlzIGZvdW5kIGluIHRoZSBpbnZpdGF0aW9uIGVtYWlsIHNlbnQgYnkgQ2hldnJvbicsXFxuICAgICAgICAnZnItRlInOiAnTGUgXFxcIlBJRFggSURcXFwiIENoZXZyb24gc2UgdHJvdXZlIGRhbnMgbFxcXFwnZW1haWwgZFxcXFwnaW52aXRhdGlvbiBlbnZvecOpIHBhciBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGVudGVyIHRoZSBDaGV2cm9uIFBJRFggSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHNhaXNpciBsZSBcXFwiUElEWCBJRFxcXCIgQ2hldnJvbidcXG4gICAgfSxcXG4gICAgQ0hFVlJPTl9yZWdpc3RyYXRpb25WZW5kb3JpZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VSUCBWZW5kb3IgSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VSUCBWZW5kb3IgSUQnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gRVJQIFZlbmRvciBJRCBpcyBmb3VuZCBpbiB0aGUgaW52aXRhdGlvbiBlbWFpbCBzZW50IHRvIHlvdSBieSBDaGV2cm9uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBcXFwiRVJQIFZlbmRvciBJRFxcXCIgQ2hldnJvbiBzZSB0cm91dmUgZGFucyBsXFxcXCdlbWFpbCBkXFxcXCdpbnZpdGF0aW9uIGVudm95w6kgcGFyIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uVmVuZG9yaWRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBFUlAgVmVuZG9yIElEJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgbGUgXFxcIkVSUCBWZW5kb3IgSURcXFwiIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uQWdyZWVtZW50SW50cm86IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxzcGFuPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlBsZWFzZSByZWFkIHRoZSZuYnNwOzwvc3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8YSB0YXJnZXQ9XFxcXFxcXCJfYmxhbmtcXFxcXFxcIiBocmVmPVxcXFxcXFwiaHR0cDovL3d3dy5iMmVlbi5jb20vX2NvbW11bml0eW1hdGVyaWFsL2NoZXZyb24vQWdyZWVtZW50X2IyZWVuX0NoZXZyb25fUHJvZC5wZGZcXFxcXFxcIj5jb250cmFjdHVhbCBhZ3JlZW1lbnQ8L2E+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7YW5kIGNvbmZpcm0gYmVsb3c8L3NwYW4+XFxcXG4gICAgICAgICAgICA8L3NwYW4+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8c3Bhbj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5NZXJjaSBkZSBsaXJlJm5ic3A7PC9zcGFuPlxcXFxuICAgICAgICAgICAgICAgIDxhIHRhcmdldD1cXFxcXFxcIl9ibGFua1xcXFxcXFwiIGhyZWY9XFxcXFxcXCJodHRwOi8vd3d3LmIyZWVuLmNvbS9fY29tbXVuaXR5bWF0ZXJpYWwvY2hldnJvbi9BZ3JlZW1lbnRfYjJlZW5fQ2hldnJvbl9Qcm9kLnBkZlxcXFxcXFwiPmwnYWNjb3JkIGNvbnRyYWN0dWVsPC9hPlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPiZuYnNwO2V0IGRlIHZhbGlkZXIgY2ktZGVzc291czwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvc3Bhbj5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudExhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSSBoYXZlIHJlYWQgYW5kIEkgYWNjZXB0IHRoZSBUZXJtcyBhbmQgQ29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCcsXFxuICAgICAgICAnZnItRlInOiAnSlxcXFwnYWkgbHUgZXQgYWNjZXB0ZSBsZXMgQ29uZGl0aW9ucyBHw6luw6lyYWxlcyBkZSBjZSBjb250cmF0J1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkFncmVlbWVudEVycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIGFjY2VwdCB0aGUgVGVybXMgYW5kIENvbmRpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHZhbGlkZXIgbGVzIENvbmRpdGlvbnMgR8OpbsOpcmFsZXMnXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uSW50ZXJuYWxVc2VySW50cm8yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVG8gZ2V0IHlvdXIgcmVnaXN0cmF0aW9uIGFjY2VwdGVkLCBwbGVhc2UgcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgUElEWCBJRCBhbmQgQ2hldnJvbiBwYXNzd29yZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BvdXIgcG91cnN1aXZyZSB2b3RyZSBlbnJlZ2lzdHJlbWVudCwgbWVyY2kgZFxcXFwnZW50cmVyIGxlIFxcXCJQSURYIElEXFxcIiBldCBtb3QgZGUgcGFzc2UgQ2hldnJvbiBwdWlzIHZhbGlkZXIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2hldnJvbiBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGFzc3dvcmRIZWxwOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIENoZXZyb24gcGFzc3dvcmQgaXMgZm91bmQgaW4gdGhlIGludml0YXRpb24gZW1haWwgc2VudCBieSBDaGV2cm9uJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtb3QgZGUgcGFzc2UgQ2hldnJvbiBzZSB0cm91dmUgZGFucyBsXFxcXCdlbWFpbCBkXFxcXCdpbnZpdGF0aW9uIGVudm95w6kgcGFyIENoZXZyb24nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGFzc3dvcmRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB0aGUgQ2hldnJvbiBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgc2Fpc2lyIGxlIG1vdCBkZSBwYXNzZSBDaGV2cm9uJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvbkNhcGl0YWxQcm9qZWN0SW50cm86IHtcXG4gICAgICAgICdlbi1VUyc6ICdZb3UgYXJlIGNyZWF0aW5nIHRoaXMgYWNjb3VudCBmb3IgYSBDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgY3LDqWV6IGNlIGNvbXB0ZSBwb3VyIHVuIFxcXCJDaGV2cm9uIE1ham9yIENhcGl0YWwgUHJvamVjdFxcXCIuJ1xcbiAgICB9LFxcbiAgICBDSEVWUk9OX3JlZ2lzdHJhdGlvblBpZHhpZFZlbmRvcmlkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQSURYIElEIC8gRVJQIFZlbmRvciBJRCBhcmUgbm90IGNvcnJlY3QuIFBsZWFzZSBjaGVjayB0aGUgdmFsdWVzIHlvdSBwcm92aWRlZCBhbmQgcmV0cnkuJyxcXG4gICAgICAgICdmci1GUic6ICdcXFwiUElEWCBJRFxcXCIgLyBcXFwiRVJQIFZlbmRvciBJRFxcXCIgaW5jb3JyZWN0cy4gTWVyY2kgZGUgdsOpcmlmaWVyIGxlcyB2YWxldXJzIHNhaXNpZXMgYXZhbnQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIENIRVZST05fcmVnaXN0cmF0aW9uUGlkeGlkUGFzc3dvcmRFcnJvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BJRFggSUQgLyBDaGV2cm9uIFBhc3N3b3JkIGFyZSBub3QgY29ycmVjdC4gUGxlYXNlIGNoZWNrIHRoZSB2YWx1ZXMgeW91IHByb3ZpZGVkIGFuZCByZXRyeS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1xcXCJQSURYIElEXFxcIiAvIE1vdCBkZSBwYXNzZSBpbmNvcnJlY3RzLiBNZXJjaSBkZSB2w6lyaWZpZXIgbGVzIHZhbGV1cnMgc2Fpc2llcyBhdmFudCBkZSByw6llc3NheWVyLidcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldFRvb2x0aXBEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZSBncm91cGUgZGUgcGVybWlzc2lvbnMnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRUb29sdGlwRWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VkaXQgcGVybWlzc2lvbiBzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgY2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcENsb25lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIGEgbmV3IHBlcm1pc3Npb24gc2V0IHdpdGggcHJlZmlsbGVkIGRhdGEgZnJvbSB0aGlzIG9uZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuIG5vdXZlYXUgZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGF2ZWMgbGVzIGRvbm7DqWVzIGRlIGNlbHVpLWNpJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0VG9vbHRpcENyb3NzSW5zdGFuY2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBpcyBhIGdsb2JhbCBwZXJtaXNzaW9uIHNldCcsXFxuICAgICAgICAnZnItRlInOiAnQ2UgZ3JvdXBlIGRlIHBlcm1pc3Npb25zIGVzdCBnbG9iYWwnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRBdExlYXN0T25lU2NvcGVSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F0IGxlYXN0IG9uZSBzY29wZSBzdHJpbmcgaXMgcmVxdWlyZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1IG1vaW5zIHVuIHNjb3BlIGRvaXQgw6p0cmUgcmVuc2VpZ27DqSdcXG4gICAgfSxcXG4gICAgcGVybWlzc2lvblNldHNEZWxldGVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHBlcm1pc3Npb24gc2V0PycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIGdyb3VwZSBkZSBwZXJtaXNzaW9ucyA/J1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYXNzb2NpYXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzYXNzb2NpYXRlIHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXNhc3NvY2llciBjZXQgdXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIHJlYWxtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVhbG0nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RvbWFpbmUnXFxuICAgIH0sXFxuICAgIGVtYWlsVmVyaWZpZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbWFpbCB2ZXJpZmllZCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgY29uZmlybcOpJ1xcbiAgICB9LFxcbiAgICBwb2xpY2llczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BvbGljaWVzJyxcXG4gICAgICAgICdmci1GUic6ICdEcm9pdHMgZFxcXFwnYWNjw6hzJ1xcbiAgICB9LFxcbiAgICBvcmdQb3NpdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcmdhbml6YXRpb24gcG9zaXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdQb3NpdGlvbnMgZFxcXFwnb3JnYW5pc2F0aW9uJ1xcbiAgICB9LFxcbiAgICB1c2VyUmVsb2FkT3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIHVzZXIgb3JnYW5pemF0aW9uIHBvc2l0aW9ucycsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgbGVzIHBvc2l0aW9ucyBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldCcsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlIGRlIHBlcm1pc3Npb25zJ1xcbiAgICB9LFxcbiAgICB1c2VyUmVzZW5kQWN0aXZhdGlvbkVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVzZW5kIGFjdGl2YXRpb24gZW1haWwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbnZveWVyIGxcXFxcJ2VtYWlsIGRcXFxcJ2FjdGl2YXRpb24nXFxuICAgIH0sXFxuICAgIHVzZXJTaG93T3JnUG9zaXRpb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyB1c2VyIG9yZ2FuaXphdGlvbiBwb3NpdGlvbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGVzIHBvc2l0aW9ucyBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRzRm9ySW5zdGFuY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldHMgZm9yIGluc3RhbmNlJyxcXG4gICAgICAgICdmci1GUic6ICdHcm91cGVzIGRlIHBlcm1pc3Npb25zIHBvdXIgbFxcXFwnaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIG90aGVyUHJvcGVydGllczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ090aGVyIHByb3BlcnRpZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1dHJlcyBwcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIHBlcm1pc3Npb25TZXRSZXF1aXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F0IGxlYXN0IG9uZSBwZXJtaXNzaW9uIHNldCBtdXN0IGJlIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdSBtb2lucyB1biBncm91cGUgZGUgcGVybWlzc2lvbnMgZG/DrnQgw6p0cmUgYXNzaWduw6kgw6AgbFxcXFwndXRpbGlzYXRldXInXFxuICAgIH0sXFxuICAgIG9yZ1Bvc2l0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3JnYW5pemF0aW9uIHBvc2l0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdQb3NpdGlvbiBkYW5zIGxcXFxcJ29yZ2FuaXNhdGlvbidcXG4gICAgfSxcXG4gICAgdXNlcnNFbWFpbFBsYWNlaG9sZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRW1haWwuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsLi4uJ1xcbiAgICB9LFxcbiAgICBzZWFyY2hCeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCBieScsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlciBwYXInXFxuICAgIH0sXFxuICAgIHRvb2x0aXBBZGRVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZSB0aGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgbmV3IHVzZXIgeW91IHdhbnQgdG8gYXNzb2NpYXRlIHRvIHRoaXMgaW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VudHJlciBsXFxcXCdhZHJlc3NlIGVtYWlsIGR1IG5vdXZlbCB1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0ZXogYXNzb2NpZXIgw6AgY2V0dGUgaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIGFzc29jaWF0ZVVzZXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBc3NvY2lhdGUgbmV3IHVzZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fzc29jaWVyIG5vdXZlbCB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgdXNlckRlbGV0ZUNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgdXNlcj8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgdXRpbGlzYXRldXIgPydcXG4gICAgfSxcXG4gICAgdXNlckRpc2Fzc29jaWF0ZUNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGlzYXNzb2NpYXRlIHRoaXMgdXNlciBmcm9tIHRoZSBjdXJyZW50IGluc3RhbmNlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgZMOpc2Fzc29jaWVyIGNldCB1dGlsaXNhdGV1ciBkZSBsXFxcXCdpbnN0YW5jZSA/J1xcbiAgICB9LFxcbiAgICBzaG93QWxsVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHVzZXJzIG9mIGFsbCBpbnN0YW5jZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyB1dGlsaXNhdGV1cnMgZGUgdG91dGVzIGxlcyBpbnN0YW5jZXMnXFxuICAgIH0sXFxuICAgIHNob3dTY29wZWxlc3NVc2Vyczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ09ubHkgZGlzcGxheSB1c2VycyB3aXRob3V0IGFueSBwZXJtaXNzaW9uJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBzZXVsZW1lbnQgbGVzIHV0aWxpc2F0ZXVycyBzYW5zIGRyb2l0cyBkXFxcXCdhY2PDqHMnXFxuICAgIH0sXFxuICAgIHNob3dPcmdsZXNzVXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmx5IGRpc3BsYXkgdXNlcnMgd2l0aG91dCBhbnkgYXNzb2NpYXRlZCBvcmcgbm9kZScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgc2V1bGVtZW50IGxlcyB1dGlsaXNhdGV1cnMgc2FucyBwb3NpdGlvbiBkXFxcXCdvcmdhbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIGRpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2Fzc29jaWF0ZScsXFxuICAgICAgICAnZnItRlInOiAnRMOpc2Fzc29jaWVyJ1xcbiAgICB9LFxcbiAgICBwZXJtaXNzaW9uU2V0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Blcm1pc3Npb24gc2V0cycsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlcyBkZSBwZXJtaXNzaW9ucydcXG4gICAgfSxcXG4gICAgdXNlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VycycsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXJzJ1xcbiAgICB9LFxcbiAgICBmaWVsZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWVsZHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wcydcXG4gICAgfSxcXG4gICAgaXNLZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdLZXk/JyxcXG4gICAgICAgICdmci1GUic6ICdDbMOpID8nXFxuICAgIH0sXFxuICAgIGFkZEZpZWxkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgZmllbGQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gY2hhbXAnXFxuICAgIH0sXFxuICAgIGNyZWF0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3JlYXRlIGEgbmV3IHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdDcsOpZXIgdW5lIG5vdXZlbGxlIHRhYmxlJ1xcbiAgICB9LFxcbiAgICBlZGl0VGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVcGRhdGUgdGhlIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2RpZmllciBsYSB0YWJsZSdcXG4gICAgfSxcXG4gICAgaW52YWxpZFhtbFRhZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgdmFsdWUuIEFsbG93ZWQgY2hhcnM6IGEteiBBLVogMC05IF8gOiAtIC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZhbGV1ciBpbnZhbGlkZS4gQ2FyYWN0w6hyZXMgYXV0b3Jpc8OpcyA6IGEteiBBLVogMC05IF8gOiAtIC4nXFxuICAgIH0sXFxuICAgIHdpZHRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2lkdGgnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhcmdldXInXFxuICAgIH0sXFxuICAgIGhlaWdodDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hlaWdodCcsXFxuICAgICAgICAnZnItRlInOiAnSGF1dGV1cidcXG4gICAgfSxcXG4gICAgc21hbGxTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU21hbGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BldGl0J1xcbiAgICB9LFxcbiAgICBtZWRpdW1TaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVkaXVtJyxcXG4gICAgICAgICdmci1GUic6ICdNb3llbidcXG4gICAgfSxcXG4gICAgbGFyZ2VTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFyZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dyYW5kJ1xcbiAgICB9LFxcbiAgICBmdWxsU2l6ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Z1bGwnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BsZWluJ1xcbiAgICB9LFxcbiAgICBlZGl0RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICfDiWRpdGVyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICB2aWV3RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIGRvY3VtZW50J1xcbiAgICB9LFxcbiAgICByZXByb2Nlc3NEb2N1bWVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcHJvY2VzcyBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnUmVsYW5jZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHJlbG9hZERvY3VtZW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIGRvY3VtZW50JyxcXG4gICAgICAgICdmci1GUic6ICdSZWNoYXJnZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHByaW50RG9jdW1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmludCBkb2N1bWVudCcsXFxuICAgICAgICAnZnItRlInOiAnSW1wcmltZXIgbGUgZG9jdW1lbnQnXFxuICAgIH0sXFxuICAgIHZpZXdGb3JtSnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IHRoZSBmb3JtJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlIGZvcm11bGFpcmUnXFxuICAgIH0sXFxuICAgIGVkaXRGb3JtSnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHVzaW5nIHRoZSBmb3JtJyxcXG4gICAgICAgICdmci1GUic6ICdFZGl0ZXIgw6AgbFxcXFwnYWlkZSBkdSBmb3JtdWxhaXJlJ1xcbiAgICB9LFxcbiAgICB2aWV3U291cmNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyB0aGUgc291cmNlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxhIHNvdXJjZSdcXG4gICAgfSxcXG4gICAgZWRpdE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJZGl0ZXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgdmlld01lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3IG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvaXIgbGUgbWVzc2FnZSdcXG4gICAgfSxcXG4gICAgcmVwcm9jZXNzTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcHJvY2VzcyBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZWxhbmNlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICByZWxvYWRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlY2hhcmdlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBwcmludE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmludCBtZXNzYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdJbXByaW1lciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBsb2NrZWRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhpcyBtZXNzYWdlIGlzIGN1cnJlbnRseSBsb2NrZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIG1lc3NhZ2UgZXN0IHZlcnJvdWlsbMOpJ1xcbiAgICB9LFxcbiAgICBiYWNrVG9MaXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmV0dXJuIHRvIGxpc3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBsaXN0ZSdcXG4gICAgfSxcXG4gICAgZW1wdHlBcHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb25lJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1bmUnXFxuICAgIH0sXFxuICAgIG5vQXBwU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBhcHBsaWNhdGlvbiBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIGFwcGxpY2F0aW9uIHPDqWxlY3Rpb25uw6llJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RBcHA6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYW4gYXBwbGljYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgdW5lIGFwcGxpY2F0aW9uJ1xcbiAgICB9LFxcbiAgICBsb2dvdXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaWduIG91dCcsXFxuICAgICAgICAnZnItRlInOiAnRMOpY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBsYXN0U3luY0RhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXN0IHN5bmNocm9uaXphdGlvbiBkYXRlJyxcXG4gICAgICAgICdmci1GUic6ICdEYXRlIGRlIGRlcm5pw6hyZSBzeW5jaHJvbmlzYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVDb25maWd1cmF0aW9uSW52YWxpZE5hbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlLiBBdXRob3JpemVkIGNoYXJhY3RlcnMgOiBhLXogQS1aIDAtOSBfIDogLSAuJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIgaW52YWxpZGUuIENhcmFjdMOocmVzIGF1dG9yaXPDqXMgOiBhLXogQS1aIDAtOSBfIDogLSAuJ1xcbiAgICB9LFxcbiAgICBob21lQ29uZmlndXJhdGlvbk5hbWVBbHJlYWR5VXNlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSBuYW1lIGB7bmFtZX1gaXMgYWxyZWFkeSBpbiB1c2UgYnkgYW5vdGhlciBjb25maWd1cmF0aW9uLCBjaG9vc2UgYW5vdGhlciBvbmUgcGxlYXNlJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gYHtuYW1lfWAgZXN0IGTDqWrDoCB1dGlsaXPDqSBwb3VyIHVuZSBhdXRyZSBjb25maWd1cmF0aW9uLCB2ZXVpbGxleiBlbiBjaG9pc2lyIHVuIGF1dHJlJ1xcbiAgICB9LFxcbiAgICBpbnN0YW5jZUNoYW5nZURpc2FibGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW5zdGFuY2UgY2hhbmdlIGlzblxcXFwndCBwb3NzaWJsZSB3aGVuIHlvdSBhcmUgZWRpdGluZyB1c2VycyBvciBwZXJtaXNzaW9uIHNldHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW5nZXIgZFxcXFwnaW5zdGFuY2UgZXN0IGltcG9zc2libGUgcGVuZGFudCBsXFxcXCfDqWRpdGlvbiBkXFxcXCd1dGlsaXNhdGV1cnMgb3UgZGUgZ3JvdXBlcyBkZSBwZXJtaXNzaW9ucy4nXFxuICAgIH0sXFxuICAgIHF1aXRFZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUXVpdCBlZGl0JyxcXG4gICAgICAgICdmci1GUic6ICdBbm51bGVyIMOpZGl0aW9uJ1xcbiAgICB9LFxcbiAgICByZWxvYWRJbnN0YW5jZXNMaXN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVsb2FkIGluc3RhbmNlcyBsaXN0JyxcXG4gICAgICAgICdmci1GUic6ICdSYWZyYcOuY2hpciBsYSBsaXN0ZSBkZXMgaW5zdGFuY2VzJ1xcbiAgICB9LFxcbiAgICBpbnN0YW5jZUZldGNoV2FybmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FwcCBlbmRwb2ludHMgbm90IGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGVzIFxcXFwnZW5kcG9pbnRzXFxcXCcgbmUgc29udCBwYXMgY2hhcmfDqXMnXFxuICAgIH0sXFxuICAgIG1lbnU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZW51JyxcXG4gICAgICAgICdmci1GUic6ICdNZW51J1xcbiAgICB9LFxcbiAgICBob21lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG9tZScsXFxuICAgICAgICAnZnItRlInOiAnQWNjdWVpbCdcXG4gICAgfSxcXG4gICAgcmVwb3J0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlcG9ydHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhcHBvcnRzJ1xcbiAgICB9LFxcbiAgICB3b3JrSXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdXb3JrIEl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdUw6JjaGVzJ1xcbiAgICB9LFxcbiAgICB0YWJsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUYWJsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1RhYmxlcydcXG4gICAgfSxcXG4gICAgZG9jdW1lbnRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRG9jdW1lbnRzJyxcXG4gICAgICAgICdmci1GUic6ICdEb2N1bWVudHMnXFxuICAgIH0sXFxuICAgIG9hdXRoU2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPQXV0aCBTZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZXMgT0F1dGgnXFxuICAgIH0sXFxuICAgIG9yZ2FuaXNhdGlvbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPcmdhbml6YXRpb25zJyxcXG4gICAgICAgICdmci1GUic6ICdPcmdhbmlzYXRpb25zJ1xcbiAgICB9LFxcbiAgICBsb2NhbFRlc3Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMb2NhbCB0ZXN0JyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0IGxvY2FsJ1xcbiAgICB9LFxcbiAgICByZXRyeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHJ5PycsXFxuICAgICAgICAnZnItRlInOiAnUsOpZXNzYXllciA/J1xcbiAgICB9LFxcbiAgICBub01lbnVFbnRyeToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGVudHJ5IGZvdW5kJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtZW51IGFjY2Vzc2libGUnXFxuICAgIH0sXFxuICAgIGNyZWF0ZWRNZXNzYWdlc0lkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZWQgbWVzc2FnZShzKSBJRChzKTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEKHMpIGR1L2RlcyBtZXNzYWdlKHMpIGNyw6nDqShzKSA6J1xcbiAgICB9LFxcbiAgICBmbGFnTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZsYWcgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnTWFycXVlciBsZSBtZXNzYWdlJ1xcbiAgICB9LFxcbiAgICBmbGFnczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZsYWdzJyxcXG4gICAgICAgICdmci1GUic6ICdNYXJxdWV1cnMnXFxuICAgIH0sXFxuICAgIGF2YWlsYWJsZUZpZWxkczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F2YWlsYWJsZSBmaWVsZHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NoYW1wcyBkaXNwb25pYmxlcydcXG4gICAgfSxcXG4gICAgYWx3YXlzVmlzaWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fsd2F5cyB2aXNpYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdUb3Vqb3VycyB2aXNpYmxlJ1xcbiAgICB9LFxcbiAgICB2aXNpYmxlSWZPcGVuZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaXNpYmxlIGlmIG9wZW5lZCcsXFxuICAgICAgICAnZnItRlInOiAnVmlzaWJsZSBzaSBvdXZlcnQnXFxuICAgIH0sXFxuICAgIGJhY2tncm91bmRDb2xvcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2tncm91bmQgY29sb3InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvdWxldXIgZHUgZm9uZCdcXG4gICAgfSxcXG4gICAgZm9udENvbG9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVmYXVsdCBmb250IGNvbG9yJyxcXG4gICAgICAgICdmci1GUic6ICdDb3VsZXVyIGRlIGJhc2UgZHUgdGV4dGUnXFxuICAgIH0sXFxuICAgIGNyZWF0ZU1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDcmVhdGUgbWVzc2FnZScsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIHVuIG1lc3NhZ2UnXFxuICAgIH0sXFxuICAgIHVwbG9hZEZpbGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBsb2FkIGZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnZveWVyIGRlcyBmaWNoaWVycydcXG4gICAgfSxcXG4gICAgZW5kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ2xvc2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlcm1pbmVyJ1xcbiAgICB9LFxcbiAgICBwcm9jZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJvY2VzcycsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgZmlsZXNEcm9wcGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnZmlsZShzKSBkcm9wcGVkJyxcXG4gICAgICAgICdmci1GUic6ICdmaWNoaWVyKHMpIGTDqXBvc8OpKHMpJ1xcbiAgICB9LFxcbiAgICBmaWxlc1VwbG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnZmlsZShzKSB1cGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnZmljaGllcihzKSBlbnZvecOpKHMpJ1xcbiAgICB9LFxcbiAgICBzaG93UHJvY2Vzc2VkRmlsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgZmlsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBmaWNoaWVycyB0cmFpdMOpcyBhdmVjIHN1Y2PDqHMnXFxuICAgIH0sXFxuICAgIGhpZGVQcm9jZXNzZWRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGUgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnTWFzcXVlciBsZXMgZmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzJ1xcbiAgICB9LFxcbiAgICBmaWxlc1N1Ym1pdFN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllcnMgdHJhaXTDqXMgYXZlYyBzdWNjw6hzICEnXFxuICAgIH0sXFxuICAgIGhpZGRlbkNvbHVtbnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIaWRkZW4gY29sdW1ucycsXFxuICAgICAgICAnZnItRlInOiAnQ29sb25uZXMgY2FjaMOpZXMnXFxuICAgIH0sXFxuICAgIGhpZGRlbkNvbHVtbnNUaXA6IHtcXG4gICAgICAgICdlbi1VUyc6ICcoY2xpY2sgdG8gcmUtZGlzcGxheSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJyhjbGlxdWVyIHBvdXIgcsOpLWFmZmljaGVyKSdcXG4gICAgfSxcXG4gICAgYWxsQ29sdW1uc1Zpc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbGwgY29sdW1ucyBhcmUgY3VycmVudGx5IGRpc3BsYXllZC4gSGlkZGVucyBjb2x1bW5zIGNhbiBiZSBmb3VuZCBoZXJlIGFuZCByZS1kaXNwbGF5ZWQuJyxcXG4gICAgICAgICdmci1GUic6ICdUb3V0ZXMgbGVzIGNvbG9ubmVzIHNvbnQgYWN0dWVsbGVtZW50IHZpc2libGVzLiBMZXMgY29sb25uZXMgY2FjaMOpZXMgYXBwYXJhaXRyb250IGljaSBldCBwb3Vycm9udCDDqnRyZSByw6ktYWZmaWNow6llcy4nXFxuICAgIH0sXFxuICAgIGRhdGVGcm9tOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJvbScsXFxuICAgICAgICAnZnItRlInOiAnRMOpYnV0J1xcbiAgICB9LFxcbiAgICBkYXRlVG86IHtcXG4gICAgICAgICdlbi1VUyc6ICdUbycsXFxuICAgICAgICAnZnItRlInOiAnRmluJ1xcbiAgICB9LFxcbiAgICBkb2N1bWVudFR5cGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWaWV3JyxcXG4gICAgICAgICdmci1GUic6ICdWdWUnXFxuICAgIH0sXFxuICAgIGNvbGxhcHNlT3B0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29sbGFwc2UgYWZ0ZXIgc2VhcmNoJyxcXG4gICAgICAgICdmci1GUic6ICdSw6lkdWlyZSBhcHLDqHMgcmVjaGVyY2hlJ1xcbiAgICB9LFxcbiAgICByZXNldFNlYXJjaE9wdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhdW5jaCBzZWFyY2ggYWZ0ZXIgcmVzZXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmNlciBsYSByZWNoZXJjaGUgYXByw6hzIHLDqWluaXRpYWxpc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5TGFiZWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IGxhYmVsJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsYWJlbCdcXG4gICAgfSxcXG4gICAgd29ya2Zsb3dJblByb2dyZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW4gYSB3b3JrZmxvdycsXFxuICAgICAgICAnZnItRlInOiAnRmx1eCBlbiBjb3VycydcXG4gICAgfSxcXG4gICAgYXNzaWduVXNlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fzc2lnbiB1c2VyJyxcXG4gICAgICAgICdmci1GUic6ICdBc3NpZ25lciB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgYXNzaWduZWRVc2Vyczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Fzc2lnbmVkIHVzZXIocyknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyKHMpIGFzc2lnbsOpKHMpJ1xcbiAgICB9LFxcbiAgICBhc3NpZ25Vc2VyVG9Qb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCB0aGlzIHVzZXIgdG8gdGhpcyBwb3NpdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciBjZXQgdXRpbGlzYXRldXIgw6AgY2V0dGUgcG9zaXRpb24nXFxuICAgIH0sXFxuICAgIHJlbW92ZVVzZXJPcmdQb3NpdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlbW92ZSB0aGlzIHVzZXIgZnJvbSB0aGlzIHBvc2l0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgY2V0IHV0aWxpc2F0ZXVyIGRlIGNldHRlIHBvc2l0aW9uJ1xcbiAgICB9LFxcbiAgICBsYXlvdXRCdWlsZGVyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGF5b3V0IGJ1aWxkZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BlcnNvbm5hbGlzYXRpb24gZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICB0aGVtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZW1lJyxcXG4gICAgICAgICdmci1GUic6ICdUaMOobWUnXFxuICAgIH0sXFxuICAgIGZvbnRTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRm9udCBzaXplJyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUgY2FyYWN0w6hyZXMnXFxuICAgIH0sXFxuICAgIHNob3dJbnZpc2libGVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyBpbnZpc2libGVzJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsZXMgY2FyYWN0w6hyZXMgaW52aXNpYmxlcydcXG4gICAgfSxcXG4gICAgc2hvd0d1dHRlcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgZ3V0dGVyJyxcXG4gICAgICAgICdmci1GUic6ICdBZmZpY2hlciBsYSBtYXJnZSdcXG4gICAgfSxcXG4gICAgc2hvd0luZGVudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaW5kZW50IGd1aWRlcycsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgbGVzIGd1aWRlcyBkXFxcXCdpbmRlbnRhdGlvbidcXG4gICAgfSxcXG4gICAgd3JhcDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dyYXAnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWJvcmRlbWVudCdcXG4gICAgfSxcXG4gICAgcHJldmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ByZXZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byw6l2aXN1YWxpc2F0aW9uJ1xcbiAgICB9LFxcbiAgICBzaG93SGlkZGVuQ29sdW1uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Nob3cgaGlkZGVuIGNvbHVtbnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBjb2xvbm5lcyBjYWNow6llcydcXG4gICAgfSxcXG4gICAgcmVzZXREaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBhbGwgZGlzcGxheSBzZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUsOpaW5pdGlhbGlzZXIgbGVzIHByw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5SGlkZGVuQ29sdW1uczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZGRlbiBjb2x1bW5zIChjbGljayB0byByZS1kaXNwbGF5KScsXFxuICAgICAgICAnZnItRlInOiAnQ29sb25uZXMgY2FjaMOpZXMgKGNsaXF1ZXIgcG91ciByw6ktYWZmaWNoZXIpJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3NDaGFuZ2VkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBzZXR0aW5ncyBjaGFuZ2VkIScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqWbDqXJlbmNlcyBkXFxcXCdhZmZpY2hhZ2UgbW9kaWZpw6llcyAhJ1xcbiAgICB9LFxcbiAgICBkaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEaXNwbGF5IHNldHRpbmdzIScsXFxuICAgICAgICAnZnItRlInOiAnUHLDqWbDqXJlbmNlcyBkXFxcXCdhZmZpY2hhZ2UnXFxuICAgIH0sXFxuICAgIGRhdGFncmlkU2F2ZURpc3BsYXlTZXR0aW5nczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIlxcXFxuICAgICAgICAgICAgPGRpdj5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5EbyB5b3Ugd2FudCB0byBzYXZlIHlvdXIgbW9kaWZpY2F0aW9ucz88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPllvdXIgcHJlZmVyZW5jZXMgKHByZXNlbmNlLCB3aWR0aCBhbmQgb3JkZXIgb2YgY29sdW1ucy4uLikgd2lsbCBiZSBzYXZlZCBpbiB5b3VyIHVzZXIgcHJvZmlsZS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiXFxcXG4gICAgICAgICAgICA8ZGl2PlxcXFxuICAgICAgICAgICAgICAgIDxzcGFuPlZvdWxlei12b3VzIHNhdXZlZ2FyZGVyIHZvcyBtb2RpZmljYXRpb25zID88L3NwYW4+PGJyLz5cXFxcbiAgICAgICAgICAgICAgICA8ZW0gY2xhc3M9XFxcXFxcXCJ0ZXh0LW1lZGl1bVxcXFxcXFwiPlZvcyBwclxcXFx1MDBFOWZcXFxcdTAwRTlyZW5jZXMgZCdhZmZpY2hhZ2UgKHByXFxcXHUwMEU5c2VuY2UsIGxhcmdldXIgZXQgb3JkcmUgZGVzIGNvbG9ubmVzLi4uKSBzZXJvbnQgZW5yZWdpc3RyXFxcXHUwMEU5ZXMgZGFucyB2b3RyZSBwcm9maWwgdXRpbGlzYXRldXIuPC9lbT5cXFxcbiAgICAgICAgICAgIDwvZGl2PlxcXFxuICAgICAgICBcXFwiXFxuICAgIH0sXFxuICAgIGRpc3BsYXlTZXR0aW5nc1Jlc2V0Q29uZmlybToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXNldCBhbGwgeW91ciBkaXNwbGF5IHNldHRpbmdzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcsOpaW5pdGlhbGlzZXIgdm9zIHByw6lmw6lyZW5jZXMgZFxcXFwnYWZmaWNoYWdlID8nXFxuICAgIH0sXFxuICAgIGRpc3BsYXlNb2RlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGlzcGxheSBtb2RlOicsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoYWdlIDonXFxuICAgIH0sXFxuICAgIGRpc3BsYXlMYXB0b3A6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNZWRpdW0gc2NyZWVuIHNpemUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3JhbiBkZSB0YWlsbGUgbW95ZW5uZSdcXG4gICAgfSxcXG4gICAgZGlzcGxheURlc2t0b3A6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYXJnZSBzY3JlZW4gc2l6ZScsXFxuICAgICAgICAnZnItRlInOiAnw4ljcmFuIGRlIGdyYW5kZSB0YWlsbGUnXFxuICAgIH0sXFxuICAgIHVuZXhwZWN0ZWRFcnJvckNoZWNrVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQW4gdW5leHBlY3RlZCBlcnJvciBoYXMgb2NjdXJlZC4gUGxlYXNlIHJldHJ5IGFuZCBjaGVjayBmb3IgdGhlIFVSTCB5b3UgcmVxdWVzdGVkIG9yIGNvbnRhY3QgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvci4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1VuZSBlcnJldXIgZXN0IHN1cnZlbnVlLiBNZXJjaSBkZSByw6llc3NheWVyIGVuIHbDqXJpZmlhbnQgbFxcXFwnVVJMIG91IGNvbnRhY3RleiB2b3RyZSBhZG1pbmlzdHJhdGV1ciBzeXN0w6htZS4nXFxuICAgIH0sXFxuICAgIHNlZUVycm9yRGV0YWlsczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlZSBlcnJvciBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxlcyBkw6l0YWlscyBkZSBsXFxcXCdlcnJldXInXFxuICAgIH0sXFxuICAgIHNlY29uZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlY29uZCcsXFxuICAgICAgICAnZnItRlInOiAnU2Vjb25kZSdcXG4gICAgfSxcXG4gICAgbWludXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWludXRlJyxcXG4gICAgICAgICdmci1GUic6ICdNaW51dGUnXFxuICAgIH0sXFxuICAgIGhvdXI6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIb3VyJyxcXG4gICAgICAgICdmci1GUic6ICdIZXVyZSdcXG4gICAgfSxcXG4gICAgZGF5T2ZNb250aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RheSBvZiBtb250aCcsXFxuICAgICAgICAnZnItRlInOiAnSm91ciBkdSBtb2lzJ1xcbiAgICB9LFxcbiAgICBtb250aDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vbnRoJyxcXG4gICAgICAgICdmci1GUic6ICdNb2lzJ1xcbiAgICB9LFxcbiAgICBkYXlPZldlZWs6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEYXkgb2Ygd2VlaycsXFxuICAgICAgICAnZnItRlInOiAnSm91ciBkZSBsYSBzZW1haW5lJ1xcbiAgICB9LFxcbiAgICB5ZWFyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWWVhcicsXFxuICAgICAgICAnZnItRlInOiAnQW5uw6llJ1xcbiAgICB9LFxcbiAgICBpbnB1dEludmFsaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIGlucHV0JyxcXG4gICAgICAgICdmci1GUic6ICdDaGFtcCBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgaW1wb3J0RGF0YUZyb21GaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0IGRhdGEgZnJvbSBhIGZpbGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyIGRlcyBkb25uw6llcyBkZXB1aXMgdW4gZmljaGllcidcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgZmlsZScsXFxuICAgICAgICAnZnItRlInOiAnRmljaGllciBzw6lsZWN0aW9ubsOpJ1xcbiAgICB9LFxcbiAgICBmaWxlVHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGUgdHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSBkdSBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBmaWVsZHNTZXBhcmF0b3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWVsZHMgc2VwYXJhdG9yJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lwYXJhdGV1ciBkZSBjb2xvbm5lcydcXG4gICAgfSxcXG4gICAgZW5jb2Rpbmc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbmNvZGluZycsXFxuICAgICAgICAnZnItRlInOiAnRW5jb2RhZ2UnXFxuICAgIH0sXFxuICAgIHF1b3RlQ2hhcjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1b3RlIGNoYXJhY3RlcicsXFxuICAgICAgICAnZnItRlInOiAnQ2FyYWN0w6hyZSBkZSBndWlsbGVtZXQnXFxuICAgIH0sXFxuICAgIGhlYWRlck9uRmlyc3RSb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdIZWFkZXJzIG9uIGZpcnN0IHJvdycsXFxuICAgICAgICAnZnItRlInOiAnRW50w6p0ZXMgc3VyIGxhIHByZW1pw6hyZSBsaWduZSdcXG4gICAgfSxcXG4gICAgb3ZlcndyaXRlRXhpc3RpbmdEYXRhOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT3ZlcndyaXRlIGV4aXN0aW5nIGRhdGEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY3Jhc2VyIGxlcyBkb25uw6llcyBleGlzdGFudGVzJ1xcbiAgICB9LFxcbiAgICBkcm9wWm9uZVRpdGxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRHJvcCBmaWxlcyBoZXJlIHRvIHVwbG9hZCB0aGVtJyxcXG4gICAgICAgICdmci1GUic6ICdEw6lwb3NlciBsZXMgZmljaGllcnMgw6AgZW52b3llciBpY2knXFxuICAgIH0sXFxuICAgIGRyb3Bab25lU3VidGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICcob3IgY2xpY2spJyxcXG4gICAgICAgICdmci1GUic6ICcob3UgY2xpcXVlciknXFxuICAgIH0sXFxuICAgIGludmFsaWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCBmaWxlKHMpJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVyKHMpIGludmFsaWRlKHMpJ1xcbiAgICB9LFxcbiAgICBjb250ZW50VHlwZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FjY2VwdGVkIENvbnRlbnQtdHlwZXM6JyxcXG4gICAgICAgICdmci1GUic6ICdDb250ZW50LXR5cGVzIGFjY2VwdMOpcyA6J1xcbiAgICB9LFxcbiAgICBtYXhTaXplOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWF4IHNpemU6JyxcXG4gICAgICAgICdmci1GUic6ICdUYWlsbGUgbWF4IDonXFxuICAgIH0sXFxuICAgIHVua25vd25Gb3JtYXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd1bmtub3duIGZvcm1hdCcsXFxuICAgICAgICAnZnItRlInOiAndW5rbm93biBzaXplJ1xcbiAgICB9LFxcbiAgICBhZGRUZXh0UHJvcGVydHk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgYSB0ZXh0IHByb3BlcnR5JyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSB2YWxldXIgZGUgdHlwZSB0ZXh0ZSdcXG4gICAgfSxcXG4gICAgYWRkRmlsZVByb3BlcnR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgZmlsZSBwcm9wZXJ0eScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1biBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgZmlsZTonLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW4gZmljaGllciA6J1xcbiAgICB9LFxcbiAgICBkb3dubG9hZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rvd25sb2FkJyxcXG4gICAgICAgICdmci1GUic6ICdUw6lsw6ljaGFyZ2VyJ1xcbiAgICB9LFxcbiAgICB1cGxvYWRGaWxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBsb2FkIGEgZmlsZScsXFxuICAgICAgICAnZnItRlInOiAnRW52b3llciB1biBmaWNoaWVyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RlZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZSBzw6lsZWN0aW9ubsOpZSdcXG4gICAgfSxcXG4gICAgYWRkTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgYSBsYW5ndWFnZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICByZW1vdmVMYW5ndWFnZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVtb3ZlIHNlbGVjdGVkIGxhbmd1YWdlJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgbGEgbGFuZ3VlIHPDqWxlY3Rpb25uw6llJ1xcbiAgICB9LFxcbiAgICBjbG9zZUxhbmd1YWdlU2VsZWN0b3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDbG9zZSBsYW5ndWFnZSBzZWxlY3RvcicsXFxuICAgICAgICAnZnItRlInOiAnRmVybWVyIGxhIHPDqWxlY3Rpb24gZGUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICBzZWFyY2hMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlYXJjaCBsYW5ndWFnZS4uLicsXFxuICAgICAgICAnZnItRlInOiAnUmVjaGVyY2hlciB1bmUgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICBwYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUGFnZSdcXG4gICAgfSxcXG4gICAgb2Y6IHtcXG4gICAgICAgICdlbi1VUyc6ICdvZicsXFxuICAgICAgICAnZnItRlInOiAnc3VyJ1xcbiAgICB9LFxcbiAgICBwZGZMb2FkaW5nRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQREYgbG9hZGluZyBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyIGRlIGNoYXJnZW1lbnQgZHUgUERGJ1xcbiAgICB9LFxcbiAgICBub0ZpbGVDaG9zZW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyBmaWxlIGNob3NlbicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gZmljaGllciBjaG9pc2knXFxuICAgIH0sXFxuICAgIGZpbGVVcGxvYWRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGUgdXBsb2FkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ZpY2hpZXIgdMOpbMOpY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgcHJldmlld0xvd2VyQ2FzZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3ByZXZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2FwZXLDp3UnXFxuICAgIH0sXFxuICAgIGZpbGVVcGxvYWRGYWlsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGaWxlIHVwbG9hZCBmYWlsZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJY2hlYyBkdSB0w6lsw6ljaGFyZ2VtZW50IGR1IGZpY2hpZXInXFxuICAgIH0sXFxuICAgIHJlc3RhcnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXN0YXJ0JyxcXG4gICAgICAgICdmci1GUic6ICdSZWTDqW1hcnJlcidcXG4gICAgfSxcXG4gICAgc2hvd1N0YXR1c0NvbnRyb2xzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2hvdyBzdGF0dXMgY29udHJvbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyIGxlcyBjb250csO0bGVzIGRlIHN0YXR1dCdcXG4gICAgfSxcXG4gICAgaGlkZVN0YXR1c0NvbnRyb2xzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSGlkZSBzdGF0dXMgY29udHJvbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NhY2hlciBsZXMgY29udHLDtGxlcyBkZSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIHJlZnJlc2hTdGF0dXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWZyZXNoIHN0YXR1cycsXFxuICAgICAgICAnZnItRlInOiAnUmFmcmHDrmNoaXIgc3RhdHV0J1xcbiAgICB9LFxcbiAgICBydW5uaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVubmluZycsXFxuICAgICAgICAnZnItRlInOiAnRW4gY291cnMnXFxuICAgIH0sXFxuICAgIHN0b3BwZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdG9wcGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBcnLDqnTDqSdcXG4gICAgfSxcXG4gICAgc29ydEJ5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU29ydCBieScsXFxuICAgICAgICAnZnItRlInOiAnVHJpZXIgcGFyJ1xcbiAgICB9LFxcbiAgICBjcmVhdGVDaGlsZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZSBjaGlsZCcsXFxuICAgICAgICAnZnItRlInOiAnQ3LDqWVyIGVuZmFudCdcXG4gICAgfSxcXG4gICAgdmFsaWRhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWYWxpZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgdHJlZVVwZGF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZScsXFxuICAgICAgICAnZnItRlInOiAnVmFsaWRlcidcXG4gICAgfSxcXG4gICAgaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJRCcsXFxuICAgICAgICAnZnItRlInOiAnSUQnXFxuICAgIH0sXFxuICAgIHByb3BlcnRpZXNLZXk6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9wZXJ0aWVzIGtleShzKScsXFxuICAgICAgICAnZnItRlInOiAnQ2zDqShzKSBkZSBwcm9wcmnDqXTDqXMnXFxuICAgIH0sXFxuICAgIGludmFsaWRVbmlxdWVOb2RlTmFtZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vZGUgbmFtZSBtdXN0IGJlIHVuaXF1ZSBhbW9uZyBkaXJlY3QgY2hpbGRyZW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG5vbSBkdSBub2V1ZCBkb2l0IMOqdHJlIHVuaXF1ZSBwYXJtaSBsZXMgZW5mYW50cyBkaXJlY3RzJ1xcbiAgICB9LFxcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZGl0aW9uYWwgcHJvcGVydGllcycsXFxuICAgICAgICAnZnItRlInOiAnUHJvcHJpw6l0w6lzIGFkZGl0aW9ubmVsbGVzJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RlZE5vZGVEZXRhaWxzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0ZWQgbm9kZSBkZXRhaWxzJyxcXG4gICAgICAgICdmci1GUic6ICdEw6l0YWlscyBkdSBub2V1ZCBzw6lsZWN0aW9ubsOpJ1xcbiAgICB9LFxcbiAgICBleHBhbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFeHBhbmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXBsaWVyJ1xcbiAgICB9LFxcbiAgICBjb2xsYXBzZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbGxhcHNlJyxcXG4gICAgICAgICdmci1GUic6ICdQbGllcidcXG4gICAgfSxcXG4gICAgdXNlckRldGFpbHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyIGRldGFpbHMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm9ybWF0aW9ucydcXG4gICAgfSxcXG4gICAgdmlld0J5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBieScsXFxuICAgICAgICAnZnItRlInOiAnQWZmaWNoZXIgcGFyJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RVc2VyOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgdXNlcicsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1biB1dGlsaXNhdGV1cidcXG4gICAgfSxcXG4gICAgdXNlckVtYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBlbWFpbCcsXFxuICAgICAgICAnZnItRlInOiAnRW1haWwgZGUgbFxcXFwndXRpbHNhdGV1cidcXG4gICAgfSxcXG4gICAgc2VsZWN0VmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgYSB2YWx1ZScsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm5lciB1bmUgdmFsZXVyJ1xcbiAgICB9LFxcbiAgICBhZGRGaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FkZCBmaWxlcycsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciBkZXMgZmljaGllcnMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1Vc2Vyc0Rpc2Fzc29jaWF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkaXNhc3NvY2lhdGUgdGhlIHNlbGVjdGVkIHVzZXIocykgZnJvbSB0aGUgY3VycmVudCBpbnN0YW5jZT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGTDqXNhc3NvY2llciBsXFxcXCcobGVzKSB1dGlsaXNhdGV1cihzKSBzw6lsZWN0aW9ubsOpKHMpIGRlIGxcXFxcJ2luc3RhbmNlID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1Vc2Vyc0RlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHNlbGVjdGVkIHVzZXIocyk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbFxcXFwnKGxlcykgdXRpbGlzYXRldXIocykgc8OpbGVjdGlvbm7DqShzKSA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtUGVybXNldHNEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCBwZXJtaXNzaW9uIHNldChzKT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBsZShzKSBncm91cGUocykgZGUgcGVybWlzc2lvbnMgc8OpbGVjdGlvbm7DqShzKSA/J1xcbiAgICB9LFxcbiAgICBwZXJtc2V0c0RlbGV0ZVN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQZXJtaXNzaW9uIHNldChzKSBkZWxldGVkIScsXFxuICAgICAgICAnZnItRlInOiAnR3JvdXBlKHMpIGRlIHBlcm1pc3Npb25zIHN1cHByaW3DqXMgISdcXG4gICAgfSxcXG4gICAgcGVybXNldHNEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAncGVybWlzc2lvbiBzZXQocykgbm90IGRlbGV0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ2dyb3VwZShzKSBkZSBwZXJtaXNzaW9ucyBub24gc3VwcHJpbcOpKHMpJ1xcbiAgICB9LFxcbiAgICB1c2Vyc0RlbGV0ZVN1Y2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyKHMpIGRlbGV0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1cihzKSBzdXBwcmltw6kocykgISdcXG4gICAgfSxcXG4gICAgdXNlcnNEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAndXNlcihzKSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAndXRpbGlzYXRldXIocykgbm9uIHN1cHByaW3DqShzKSdcXG4gICAgfSxcXG4gICAgdXNlcnNEaXNhc3NvY2lhdGVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlcihzKSBkaXNhc3NvY2lhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIocykgZMOpc2Fzc29jacOpKHMpICEnXFxuICAgIH0sXFxuICAgIHVzZXJzRGlzYXNzb2NpYXRlRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ3VzZXIocykgbm90IGRpc2Fzc29jaWF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ3V0aWxpc2F0ZXVyKHMpIG5vbiBkw6lzYXNzb2Npw6kocyknXFxuICAgIH0sXFxuICAgIHJlY29yZHM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZWNvcmRzJyxcXG4gICAgICAgICdmci1GUic6ICdFbnRyw6llcydcXG4gICAgfSxcXG4gICAgbm9BdmFpbGFibGVUYWJsZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyB0YWJsZXMgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW5lIHRhYmxlIGRpc3BvbmlibGUuJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RUYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhIHRhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuZSB0YWJsZSdcXG4gICAgfSxcXG4gICAgZGVsZXRlVGFibGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgdGhpcyB0YWJsZScsXFxuICAgICAgICAnZnItRlInOiAnU3VwcHJpbWVyIGNldHRlIHRhYmxlJ1xcbiAgICB9LFxcbiAgICBkZWxldGVBbGxSZWNvcmRzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGFsbCByZWNvcmRzJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgdG91dCBsZSBjb250ZW51J1xcbiAgICB9LFxcbiAgICBleHBvcnRUb0V4Y2VsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRXhwb3J0IHRvIEV4Y2VsJyxcXG4gICAgICAgICdmci1GUic6ICdFeHBvcnRlciB2ZXJzIEV4Y2VsJ1xcbiAgICB9LFxcbiAgICBpbXBvcnREYXRhOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW1wb3J0IGRhdGEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcG9ydGVyIGRlcyBkb25uw6llcydcXG4gICAgfSxcXG4gICAgYWRkUmVjb3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGEgbmV3IHJlY29yZCcsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgZW50csOpZSdcXG4gICAgfSxcXG4gICAgdGFibGVOYW1lSW52YWxpZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RhYmxlIG5hbWUgaXMgZW1wdHkgb3IgaW5jb3JyZWN0JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBub20gZGUgbGEgdGFibGUgZXN0IHZpZGUgb3UgaW52YWxpZGUnXFxuICAgIH0sXFxuICAgIHRhYmxlRmllbGRzRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdObyB0YWJsZSBmaWVsZHMgYWRkZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIGNoYW1wIHJlbnNlaWduw6knXFxuICAgIH0sXFxuICAgIHRhYmxlS2V5c0Vycm9yOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8ga2V5IGZvdW5kIGZvciB0aGUgdGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBjbMOpIHJlbnNlaWduw6llJ1xcbiAgICB9LFxcbiAgICB0YWJsZUludmFsaWRWYWx1ZXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbnZhbGlkIHZhbHVlKHMpIHN1cHBsaWVkIGZvciB0aGUgdGFibGUgc3RydWN0dXJlJyxcXG4gICAgICAgICdmci1GUic6ICdWYWxldXIocykgaW52YWxpZGUocykgZm91cm5pZShzKSBwb3VyIGTDqWZpbmlyIGxhIHN0cnVjdHVyZSBkZSBsYSB0YWJsZSdcXG4gICAgfSxcXG4gICAgbm90aGluZ1RvU2F2ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vdGhpbmcgdG8gc2F2ZSBoZXJlIScsXFxuICAgICAgICAnZnItRlInOiAnUmllbiDDoCBlbnJlZ2lzdHJlciAhJ1xcbiAgICB9LFxcbiAgICBjb25maXJtUmVjb3JkRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHJlY29yZD8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXR0ZSBlbnRyw6llID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1BbGxSZWNvcmRzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBhbGwgcmVjb3JkcyBpbiB0aGlzIHRhYmxlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIHRvdXRlcyBsZXMgZG9ubsOpZXMgZGUgY2V0dGUgdGFibGUgPydcXG4gICAgfSxcXG4gICAgY29uZmlybURlbGV0ZVRhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHRhYmxlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNldHRlIHRhYmxlID8nXFxuICAgIH0sXFxuICAgIGRvd25sb2FkV2lsbFN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIGRvd2xvYWQgd2lsbCBzdGFydCBhdXRvbWF0aWNhbGx5JyxcXG4gICAgICAgICdmci1GUic6ICdMZSB0w6lsw6ljaGFyZ2VtZW50IHZhIGTDqW1hcnJlciBhdXRvbWF0aXF1ZW1lbnQnXFxuICAgIH0sXFxuICAgIHJlY29yZHNQcm9jZXNzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICd7bmJSZWNvcmRzfSByb3cocykgcHJvY2Vzc2VkLicsXFxuICAgICAgICAnZnItRlInOiAne25iUmVjb3Jkc30gZW5yZWdpc3RyZW1lbnQocykgdHJhaXTDqShzKS4nXFxuICAgIH0sXFxuICAgIG9rOiB7XFxuICAgICAgICAnZW4tVVMnOiAnT0snLFxcbiAgICAgICAgJ2ZyLUZSJzogJ09LJ1xcbiAgICB9LFxcbiAgICBjb25maXJtQ2hhbmdlV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHZpZXcgYW5kIGxvb3NlIHRoZSBjaGFuZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnTGUgY29udGVudSBhIMOpdMOpIGNoYW5nw6kuIMOKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIGNoYW5nZXIgZGUgdnVlIGV0IHBlcmRyZSBjZXMgY2hhbmdlbWVudHMgPydcXG4gICAgfSxcXG4gICAgY29uZmlybURlbGV0ZUl0ZW06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OKdGVzLXZvdXMgc8O7cihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1SZWxvYWRXaXRob3V0U2F2aW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlcmUgYXJlIHVuc2F2ZWQgY2hhbmdlcy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbG9hZCB0aGlzIGl0ZW0/JyxcXG4gICAgICAgICdmci1GUic6ICdMZSBjb250ZW51IGEgw6l0w6kgY2hhbmfDqS4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVjaGFyZ2VyIGNldCDDqWzDqW1lbnQgPydcXG4gICAgfSxcXG4gICAgY29uZmlybVJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXByb2Nlc3MgdGhpcyBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVsYW5jZXIgY2V0IMOpbMOpbWVudCA/J1xcbiAgICB9LFxcbiAgICBjb25maXJtU2F2ZUFuZFJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBoYXZlIG1hZGUgc29tZSBjaGFuZ2VzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gc2F2ZSBBTkQgcmVwcm9jZXNzIHRoaXMgaXRlbT8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIGNvbnRlbnUgYSDDqXTDqSBjaGFuZ8OpLiDDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzYXV2ZWdhcmRlciBFVCByZWxhbmNlciBjZXQgw6lsw6ltZW50ID8nXFxuICAgIH0sXFxuICAgIGl0ZW1SZXByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gcmVwcm9jZXNzZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCByZWxhbmPDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlcHJvY2Vzc0ZhaWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCByZXByb2Nlc3NlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiByZWxhbmPDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSByZWxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IHJlY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgaXRlbVJlbG9hZEZhaWw6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJdGVtIG5vdCByZWxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiByZWNoYXJnw6knXFxuICAgIH0sXFxuICAgIGl0ZW1TYXZlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gc2F2ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBlbnJlZ2lzdHLDqSdcXG4gICAgfSxcXG4gICAgaXRlbVNhdmVGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3Qgc2F2ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudCBub24gZW5yZWdpc3Ryw6knXFxuICAgIH0sXFxuICAgIGl0ZW1EZWxldGVGYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXRlbSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnw4lsw6ltZW50IG5vbiBzdXBwcmltw6knXFxuICAgIH0sXFxuICAgIHJlc2V0Q2hhbmdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc2V0IGNoYW5nZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FubnVsZXIgbGVzIGNoYW5nZW1lbnRzJ1xcbiAgICB9LFxcbiAgICBlcnJvck9jY3VyZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbiBlcnJvciBvY2N1cmVkJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZSdcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Db25maXJtVGV4dFN0YXJ0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvJyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pcidcXG4gICAgfSxcXG4gICAgd29ya0l0ZW1Db25maXJtVGV4dEVuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ3RoaXMgd29yayBpdGVtPycsXFxuICAgICAgICAnZnItRlInOiAnY2V0dGUgdMOiY2hlID8nXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybVRpdGxlTGFuZ3VhZ2VTc2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYW5ndWFnZSBzZXR0aW5ncycsXFxuICAgICAgICAnZnItRlInOiAnUGFyYW3DqHRyZSBkZXMgbGFuZ3VlcydcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVfYWRkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBam91dGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtVGl0bGVfZWRpdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VwZGF0ZSBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnTWlzZSDDoCBqb3VyIGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1UaXRsZUZvcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZSBpbicsXFxuICAgICAgICAnZnItRlInOiAnRnJhbWUgZW4nXFxuICAgIH0sXFxuICAgIGZyYW1lRm9ybUhlbHBlckVtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRmllbGQgbXVzdCBiZSBwcm92aWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnQ2UgY2hhbXAgZG9pdCDDqnRyZSByZW5zZWlnbsOpJ1xcbiAgICB9LFxcbiAgICBpZFVuaXF1ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgSUQgbXVzdCBiZSB1bmlxdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIElEIGRvaXQgw6p0cmUgdW5pcXVlJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1IZWxwZXJMYW5ndWFnZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGNhbiBzZWxlY3QgdGhlIGxhbmd1YWdlIHRvIGVkaXQgYW5kIHJlbW92ZSB0aGUgb25lIHlvdSBkb25cXFxcJ3Qgd2FudCBhbnltb3JlIGhlcmUuIFlvdSBtdXN0IGZpbGwgYXQgbGVhc3QgdGhlIEVOIGxhbmd1YWdlIHRvIGJlIGFibGUgdG8gc2F2ZSB5b3VyIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIHBvdXZleiBzw6lsZWN0aW9ubmVyIGxhIGxhbmd1ZSDDoCBlZGl0ZXIgZXQgc3VwcHJpbWVyIGNlbGxlcyBkb250IHZvdXMgblxcXFwnYXZleiBwbHVzIGJlc29pbiBpY2kuIFZvdXMgZGV2ZXogcmVuc2VpZ25lciBhdSBtb2lucyBsYSBsYW5ndWUgRU4gcG91ciBwb3V2b2lyIHNhdXZlZ2FyZGVyIHVuZSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVGb3JtR3JpZExhbmd1YWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGFuZ3VhZ2UgY2hvaWNlIChJU08gY29kZSknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2l4IGRlIGxhIGxhbmd1ZSAoY29kZSBJU08pJ1xcbiAgICB9LFxcbiAgICBmcmFtZUZvcm1HcmlkTGFuZ3VhZ2VzU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMYW5ndWFnZXMgc2VsZWN0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZXMgc8OpbGVjdGlvbm7DqWVzJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJEYXRhTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFTicsXFxuICAgICAgICAnZnItRlInOiAnRlInXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlclRleHRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIGZyYW1lIHRvIGRpc3BsYXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSBmcmFtZSDDoCBhZmZpY2hlcidcXG4gICAgfSxcXG4gICAgZnJhbWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRnJhbWVzJyxcXG4gICAgICAgICdmci1GUic6ICdGcmFtZXMnXFxuICAgIH0sXFxuICAgIHVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1VSTCcsXFxuICAgICAgICAnZnItRlInOiAnVVJMJ1xcbiAgICB9LFxcbiAgICBmcmFtZW1hbmFnZXJCdXR0b25FZGl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnRWRpdCBmcmFtZScsXFxuICAgICAgICAnZnItRlInOiAnw4lkaXRlciBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVsZXRlIGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdTdXBwcmltZXIgbGEgZnJhbWUnXFxuICAgIH0sXFxuICAgIGZyYW1lbWFuYWdlckJ1dHRvblByZXZpZXc6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmV2aWV3IGZyYW1lJyxcXG4gICAgICAgICdmci1GUic6ICdBcGVyw6d1IGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICByZWZyZXNoRnJhbWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVmcmVzaCBmcmFtZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FjdHVhbGlzZXIgbGVzIGZyYW1lcydcXG4gICAgfSxcXG4gICAgYWRkRnJhbWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBZGQgZnJhbWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Fqb3V0ZXIgdW5lIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBjYW5jZWxGcmFtZUVkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDYW5jZWwgZnJhbWUgZWRpdCcsXFxuICAgICAgICAnZnItRlInOiAnQW5udWxlciBsXFxcXCfDqWRpdGlvbiBkZSBsYSBmcmFtZSdcXG4gICAgfSxcXG4gICAgZnJhbWVtYW5hZ2VyQnV0dG9uQmFjazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JldHVybiB0byBIb21lIHBhZ2VzIGNvbmZpZ3VyYXRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JldG91ciDDoCBsYSBwYWdlIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHBhZ2VzIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGRhdGFMYW5ndWFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0VOJyxcXG4gICAgICAgICdmci1GUic6ICdGUidcXG4gICAgfSxcXG4gICAgZnJhbWVwcmV2aWV3VGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdGcmFtZSBwcmV2aWV3JyxcXG4gICAgICAgICdmci1GUic6ICdBcGVyw6d1IGRlIGxhIGZyYW1lJ1xcbiAgICB9LFxcbiAgICBmcmFtZXByZXZpZXdUaXRsZVNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IHlvdXIgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb24gZGUgbGEgbGFuZ3VlJ1xcbiAgICB9LFxcbiAgICB1bmlxdWVJZFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSUQgbXVzdCBiZSB1bmlxdWUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xcXFxcJ0lEIGRvaXQgw6p0cmUgdW5pcXVlJ1xcbiAgICB9LFxcbiAgICBodHRwc1VybFJlcXVpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTXVzdCBiZSBhIHZhbGlkIEhUVFBTIFVSTCcsXFxuICAgICAgICAnZnItRlInOiAnVVJMIEhUVFBTIHZhbGlkZSByZXF1aXNlJ1xcbiAgICB9LFxcbiAgICBub01vZHVsZVNlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gbW9kdWxlIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtb2R1bGUgc8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgc2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnU8OpbGVjdGlvbm7DqSdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVIZWFkZXJMYXlvdXRUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpZ3VyZSBsYXlvdXQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvbmZpZ3VyYXRpb24gZGUgbGEgcHLDqXNlbnRhdGlvbidcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVNb2R1bGVzQXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBhdmFpbGFibGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vZHVsZXMgZGlzcG9uaWJsZXMnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc1NlbGVjdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTW9kdWxlcyBzZWxlY3RlZCcsXFxuICAgICAgICAnZnItRlInOiAnTW9kdWxlcyBzw6lsZWN0aW9ubsOpcydcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVCdXR0b25Db25maWd1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOpdHJhZ2UgZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvbkRlZmF1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXN0b3JlIGRlZmF1bHQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmUgcGFyIGTDqWZhdXQnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lQnV0dG9uU2VsZWN0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IG1vZHVsZXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nob2l4IGRlcyBtb2R1bGVzJ1xcbiAgICB9LFxcbiAgICBlZGl0b3duaG9tZUJ1dHRvbkJhY2s6IHtcXG4gICAgICAgICdlbi1VUyc6ICdCYWNrIHRvIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnUmV0b3VyIMOgIGxhIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgZWRpdG93bmhvbWVTZWxlY3RlZEVtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRpZG5cXFxcJ3Qgc2VsZWN0IGFueSBtb2R1bGVzJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogc8OpbGVjdGlvbm7DqSBhdWN1biBtb2R1bGUnXFxuICAgIH0sXFxuICAgIGVkaXRvd25ob21lTW9kdWxlc0VtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gbW9kdWxlcyBhdmFpbGFibGUgaW4gdGhpcyBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdBdWN1biBtb2R1bGUgZGlzcG9uaWJsZSBkYW5zIGNldHRlIGNvbmZpZ3VyYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVQYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdQYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVOYXZpZ2F0ZURlZmF1bHQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgSG9tZSBwYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJhdGlvbiBkZXMgcGFnZXMgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZU5hdmlnYXRlT3duOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ3VzdG9taXplIHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdDb25maWd1cmVyIGNldHRlIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZVN0YXR1c0VtcHR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRvblxcXFwndCBoYXZlIGFueSBtb2R1bGVzIHRvIGRpc3BsYXknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdXMgblxcXFwnYXZleiBhdWN1biBtb2R1bGUgw6AgYWZmaWNoZXInXFxuICAgIH0sXFxuICAgIGhvbWVTZWxlY3ROb25lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IHlvdXIgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdDaG9pc2lzc2V6IHZvdHJlIHBhZ2UgZFxcXFwnYWNjdWVpbCdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0hlYWRlckF2YWlsYWJsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01vZHVsZXMgYXZhaWxhYmxlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIGRpc3BvbmlibGVzJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzSGVhZGVyU2VsZWN0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNb2R1bGVzIHNlbGVjdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNb2R1bGVzIHPDqWxlY3Rpb25uw6lzJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzSGVhZGVyQ29uZmlndXJhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NvbmZpZ3VyZWQgSG9tZSBwYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnUGFnZXMgZFxcXFwnYWNjdWVpbCBjb25maWd1cmFibGVzJ1xcbiAgICB9LFxcbiAgICB0eXBlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVHlwZScsXFxuICAgICAgICAnZnItRlInOiAnVHlwZSdcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0VkaXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFZGl0IHRoaXMgSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdNb2RpZmllciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NEdXBsaWNhdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEdXBsaWNhdGUgdGhpcyBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0R1cGxpcXVlciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NEZWxldGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdEZWxldGUgdGhpcyBIb21lIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1N1cHByaW1lciBjZXR0ZSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NDb25maWd1cmVsYXlvdXQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb25maWd1cmUgbGF5b3V0JyxcXG4gICAgICAgICdmci1GUic6ICdQZXJzb25hbGlzYXRpb24gZGUgbFxcXFwnYWZmaWNoYWdlJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzU2F2ZXNlbGVjdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NhdmUgeW91ciBzZWxlY3Rpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1NhdXZlZ2FyZGVyIHZvdHJlIHPDqWxlY3Rpb24nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NBZGREZWZhdWx0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWRkIEhvbWUgcGFnZScsXFxuICAgICAgICAnZnItRlInOiAnQWpvdXRlciB1bmUgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzQnV0dG9uQmFjazoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0JhY2sgdG8gSG9tZSBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdSZXRvdXIgw6AgbGEgcGFnZSBkXFxcXCdhY2N1ZWlsJ1xcbiAgICB9LFxcbiAgICBob21lZGVmYXVsdHNldHRpbmdzRnJhbWVzcGFnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZyYW1lcyBtYW5hZ2VyJyxcXG4gICAgICAgICdmci1GUic6ICdHZXN0aW9ubmFpcmUgZGVzIEZyYW1lcydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc1RleHRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGlzIG5vIG1vZHVsZXMgYXZhaWxhYmxlIGluIHlvdXIgY3VycmVudCBjb25maWd1cmF0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdJbCBuXFxcXCd5IGEgYXVjdW4gbW9kdWxlcyBkaXNwb25pYmxlcyBwb3VyIGNldHRlIGNvbmZpZ3VyYXRpb24nXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NTZWxlY3REZWZhdWx0dmFsdWU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgaG9tZScsXFxuICAgICAgICAnZnItRlInOiAnQ2hvaXNpc3NleiBsYSBwYWdlIGRcXFxcJ2FjY3VlaWwnXFxuICAgIH0sXFxuICAgIGhvbWVkZWZhdWx0c2V0dGluZ3NNb2RhbERlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSBhYm91dCBkZWxldGluZyB0aGlzIHNldHRpbmcgPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNldHRlIGNvbmZpZ3VyYXRpb24gPydcXG4gICAgfSxcXG4gICAgaG9tZWRlZmF1bHRzZXR0aW5nc0Vycm9ySW5Vc2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgbmFtZSBge25hbWV9YGlzIGFscmVhZHkgaW4gdXNlIGJ5IGFub3RoZXIgY29uZmlndXJhdGlvbiwgY2hvb3NlIGFub3RoZXIgb25lIHBsZWFzZScsXFxuICAgICAgICAnZnItRlInOiAnTGUgbm9tIGB7bmFtZX1gIGVzdCBkw6lqw6AgdXRpbGlzw6kgcG91ciB1bmUgYXV0cmUgY29uZmlndXJhdGlvbiwgdmV1aWxsZXogZW4gY2hvaXNpciB1biBhdXRyZSdcXG4gICAgfSxcXG4gICAgYXBwTG9hZGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXBwIGxvYWRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FwcCBsYW5jw6llICEnXFxuICAgIH0sXFxuICAgIGludmFsaWRQYXNzd29yZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgcGFzc3dvcmQgbXVzdCBiZSA4IHRvIDMyIGNoYXJhY3RlcnMgbG9uZyBhbmQgY29udGFpbnMgYXQgbGVhc3QgMSB1cHBlci9sb3dlciBjYXNlIGxldHRlciBhbmQgMSBudW1iZXInLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIG1vdCBkZSBwYXNzZSBkb2l0IGNvbnRlbmlyIGVudHJlIDggZXQgMzIgY2FyYWN0w6hyZXMgZXQgYXUgbW9pbnMgMSBtYWp1c2N1bGUvbWludXNjdWxlIGV0IDEgY2hpZmZyZSdcXG4gICAgfSxcXG4gICAgY2FyZFRlbXBsYXRlRnVsbDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgYXJlYSBjYW5ub3QgY29udGFpbiBtb3JlIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdDZXQgem9uZSBuZSBwZXV0IHBhcyBjb250ZW5pciBwbHVzIGRcXFxcJ8OpbMOpbWVudHMnXFxuICAgIH0sXFxuICAgIGludmFsaWRDb2xvckNvZGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb2xvciBjb2RlIGlzIGludmFsaWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NvZGUgY291bGV1ciBpbnZhbGlkZSdcXG4gICAgfSxcXG4gICAgbWFuZGF0b3J5VmFsdWVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWFuZGF0b3J5IHZhbHVlKHMpOicsXFxuICAgICAgICAnZnItRlInOiAnVmFsZXVyKHMpIG9ibGlnYXRvaXJlKHMpIDonXFxuICAgIH0sXFxuICAgIHBhc3N3b3JkVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Bhc3N3b3JkIHVwZGF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vdCBkZSBwYXNzZSBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBkZXRhaWxzVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RldGFpbHMgdXBkYXRlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqXRhaWxzIG1pcyDDoCBqb3VyICEnXFxuICAgIH0sXFxuICAgIHNldHRpbmdzVXBkYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NldHRpbmdzIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdQYXJhbcOodHJlcyBtaXMgw6Agam91ciAhJ1xcbiAgICB9LFxcbiAgICBhdmF0YXJVcGRhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXZhdGFyIHVwZGF0ZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdBdmF0YXIgbWlzIMOgIGpvdXIgISdcXG4gICAgfSxcXG4gICAgdXNlckFzc29jaWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdVc2VyIHN1Y2Nlc3NmdWxseSBhc3NvY2lhdGVkIScsXFxuICAgICAgICAnZnItRlInOiAnVXRpbGlzYXRldXIgYXNzb2Npw6kgYXZlYyBzdWNjw6hzICEnXFxuICAgIH0sXFxuICAgIHVzZXJBc3NvY2lhdGVSZXNlbmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdFbWFpbCBzZW50JyxcXG4gICAgICAgICdmci1GUic6ICdFbWFpbCBlbnZvecOpICEnXFxuICAgIH0sXFxuICAgIHVzZXJEaXNhc3NvY2lhdGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBkaXNhc3NvY2lhdGVkJyxcXG4gICAgICAgICdmci1GUic6ICdVdGlsaXNhdGV1ciBkw6lzYXNzb2Npw6knXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VEZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZShzKSBkZWxldGVkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlKHMpIHN1cHByaW3DqXMnXFxuICAgIH0sXFxuICAgIG1lc3NhZ2VSZXByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbnQgbWVzc2FnZShzKSBmb3IgcmVwcm9jZXNzaW5nJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlKHMpIMOgIHJlbGFuY2VyIGVudm95w6lzJ1xcbiAgICB9LFxcbiAgICB1c2VyQWxyZWFkeUV4aXN0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZSB1c2VyIHlvdSB3YW50IHRvIGFzc29jaWF0ZSB0byB0aGlzIGluc3RhbmNlIGFscmVhZHkgZXhpc3RzIG9uIHRoZSBzeXN0ZW0gKGFuZCBtYXliZSBhbHJlYWR5IGFzc29jaWF0ZWQgdG8gb3RoZXIgaW5zdGFuY2VzKS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xcXFxcJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHZvdWxleiBhc3NvY2llciBzdXIgY2V0dGUgaW5zdGFuY2UgZXhpc3RlIGTDqWrDoCBzdXIgbGUgc3lzdMOobWUuIElsIGVzdCBwZXV0IMOqdHJlIMOpZ2FsZW1lbnQgZMOpasOgIGFzc29jacOpIMOgIGRcXFxcJ2F1dHJlcyBpbnN0YW5jZXMuJ1xcbiAgICB9LFxcbiAgICB1bmV4cGVjdGVkRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VyZWQuIFBsZWFzZSB0cnkgYWdhaW4uJyxcXG4gICAgICAgICdmci1GUic6ICdVbmUgZXJyZXVyIGVzdCBzdXJ2ZW51ZS4gTWVyY2kgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHJlZ2lzdHJhdGlvblVuYXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUmVnaXN0cmF0aW9uIGlzIG5vdCBhdmFpbGFibGUuJyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXOKAmWVucmVnaXN0cmVtZW50IG5cXFxcJ2VzdCBwYXMgZGlzcG9uaWJsZS4nXFxuICAgIH0sXFxuICAgIGZvcmdvdFBhc3N3b3JkVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXNldCBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnUsOpaW5pdGlhbGlzZXIgbW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICBmb3Jnb3RQYXNzd29yZE1lc3NhZ2VTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnV2VcXFxcJ3ZlIHNlbnQgeW91IGFuIGVtYWlsLiBDbGljayB0aGUgbGluayBpbiB0aGUgZW1haWwgdG8gcmVzZXQgeW91ciBwYXNzd29yZC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ05vdXMgdm91cyBhdm9ucyBlbnZvecOpIHVuIGVtYWlsLiBDbGlxdWV6IHN1ciBsZSBsaWVuIGRhbnMgbFxcXFwnZW1haWwgcG91ciByw6lpbml0aWFsaXNlciB2b3RyZSBtb3QgZGUgcGFzc2UuJ1xcbiAgICB9LFxcbiAgICBydW5uaW5nSm9iczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1J1bm5pbmcgam9icycsXFxuICAgICAgICAnZnItRlInOiAnVMOiY2hlcyBlbiBjb3VycydcXG4gICAgfSxcXG4gICAgbm9SdW5uaW5nSm9iOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTm8gcnVubmluZyBqb2InLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuZSB0w6JjaGUgZW4gY291cnMnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpb3JpdHknLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ByaW9yaXTDqSdcXG4gICAgfSxcXG4gICAgY3JlYXRlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0NyZWF0ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6nDqSBsZSdcXG4gICAgfSxcXG4gICAgbGFzdFN0YXR1c01vZGlmaWNhdGlvbjoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0xhc3Qgc3RhdHVzIG1vZGlmaWNhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnRGVybmnDqHJlIG1vZGlmaWNhdGlvbiBkdSBzdGF0dXQnXFxuICAgIH0sXFxuICAgIHN0YWNrdHJhY2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTdGFja3RyYWNlJyxcXG4gICAgICAgICdmci1GUic6ICdTdGFja3RyYWNlJ1xcbiAgICB9LFxcbiAgICBmaWxlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ZpbGVzJyxcXG4gICAgICAgICdmci1GUic6ICdGaWNoaWVycydcXG4gICAgfSxcXG4gICAgdmlld0xhc3RNZXNzYWdlczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcgbGFzdCBtZXNzYWdlcycsXFxuICAgICAgICAnZnItRlInOiAnVm9pciBsZXMgZGVybmllcnMgbWVzc2FnZXMnXFxuICAgIH0sXFxuICAgIHZpZXdTdGFja3RyYWNlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVmlldyBzdGFja3RyYWNlJyxcXG4gICAgICAgICdmci1GUic6ICdWb2lyIGxhIHN0YWNrdHJhY2UnXFxuICAgIH0sXFxuICAgIHByaW9yaXR5SGlnaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0hpZ2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0hhdXRlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eU1lZGl1bToge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lZGl1bScsXFxuICAgICAgICAnZnItRlInOiAnTW95ZW5uZSdcXG4gICAgfSxcXG4gICAgcHJpb3JpdHlMb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMb3cnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Jhc3NlJ1xcbiAgICB9LFxcbiAgICBwcmlvcml0eVZlcnlMb3c6IHtcXG4gICAgICAgICdlbi1VUyc6ICdWZXJ5IGxvdycsXFxuICAgICAgICAnZnItRlInOiAnVHLDqHMgYmFzc2UnXFxuICAgIH0sXFxuICAgIGpvYlN0YXR1c0NvbXBsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29tcGxldGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlcm1pbsOpJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNRdWV1ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdRdWV1ZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VuIGF0dGVudGUnXFxuICAgIH0sXFxuICAgIGpvYlN0YXR1c0luRXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdJbiBlcnJvcicsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVyJ1xcbiAgICB9LFxcbiAgICBqb2JTdGF0dXNSdW5uaW5nOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUnVubmluZycsXFxuICAgICAgICAnZnItRlInOiAnRW4gY291cnMnXFxuICAgIH0sXFxuICAgIG1hcmtBc1JlYWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdNYXJrIGFzIHJlYWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01hcnF1ZXIgY29tbWUgbHUnXFxuICAgIH0sXFxuICAgIGNhbmNlbEpvYkNvbmZpcm06IHtcXG4gICAgICAgICdlbi1VUyc6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY2FuY2VsIHRoaXMgam9iPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgYW5udWxlciBjZXR0ZSB0w6JjaGUgPydcXG4gICAgfSxcXG4gICAgcGFzc3dvcmRFbXB0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1BsZWFzZSBlbnRlciB5b3VyIHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXJjaSBkZSBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICByZW1lbWJlck1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnS2VlcCBtZSBzaWduZWQgaW4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0dhcmRlciBtYSBjb25uZXhpb24nXFxuICAgIH0sXFxuICAgIGZvcmdvdFBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRm9yZ290IHBhc3N3b3JkPycsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlIG91Ymxpw6kgPydcXG4gICAgfSxcXG4gICAgbm90UmVnaXN0ZXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vdCBhbHJlYWR5IHJlZ2lzdGVyZWQ/JyxcXG4gICAgICAgICdmci1GUic6ICdQYXMgZW5jb3JlIGVucmVnaXN0csOpKGUpID8nXFxuICAgIH0sXFxuICAgIGludmFsaWRMb2dpblVybDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0ludmFsaWQgbG9naW4gVVJMIScsXFxuICAgICAgICAnZnItRlInOiAnVVJMIGRlIGxvZ2luIGludmFsaWRlICEnXFxuICAgIH0sXFxuICAgIHVzZXJBbHJlYWR5UmVnaXN0ZXJlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoaXMgdXNlciBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1V0aWxpc2F0ZXVyIGTDqWrDoCBlbnJlZ2lzdHLDqSdcXG4gICAgfSxcXG4gICAgdXNlckFscmVhZHlSZWdpc3RlcmVkVGVzdFByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgb24gdGVzdCBvciBwcm9kdWN0aW9uIGVudmlyb25tZW50JyxcXG4gICAgICAgICdmci1GUic6ICcgc3VyIHVuIGRlcyBlbnZpcm9ubmVtZW50cyAodGVzdCBvdSBwcm9kdWN0aW9uKSdcXG4gICAgfSxcXG4gICAgc2VsZWN0RW52aXJvbm1lbnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZWxlY3QgZW52aXJvbm1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1PDqWxlY3Rpb25uZXIgZW52aXJvbm5lbWVudCdcXG4gICAgfSxcXG4gICAgdGVzdDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Rlc3QnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Rlc3QnXFxuICAgIH0sXFxuICAgIHByb2Q6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9kdWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9kdWN0aW9uJ1xcbiAgICB9LFxcbiAgICB0ZXN0QW5kUHJvZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Rlc3QgJiBQcm9kdWN0aW9uJyxcXG4gICAgICAgICdmci1GUic6ICdUZXN0ICYgUHJvZHVjdGlvbidcXG4gICAgfSxcXG4gICAgZW52RXJyb3I6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQbGVhc2Ugc2VsZWN0IHRoZSByZWdpc3RyYXRpb24gZW52aXJvbm1lbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lcmNpIGRlIHPDqWxlY3Rpb25uZXIgc3VyIHF1ZWwgZW52aXJvbm5lbWVudCB2b3VzIHNvdWhhaXRleiB2b3VzIGVucmVnaXN0cmVyJ1xcbiAgICB9LFxcbiAgICBsb2dvdXRNZXNzYWdlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTG9nZ2luZyBvdXQuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0TDqWNvbm5leGlvbi4uLidcXG4gICAgfSxcXG4gICAgbG9nb3V0U3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBoYXZlIGJlZW4gc2lnbmVkIG91dCcsXFxuICAgICAgICAnZnItRlInOiAnVm91cyDDqnRlcyBtYWludGVuYW50IGTDqWNvbm5lY3TDqSdcXG4gICAgfSxcXG4gICAgbG9nb3V0QnV0dG9uTG9naW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdHbyB0byBzaWduIGluIHBhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FsbGVyIMOgIGxhIHBhZ2UgZGUgY29ubmV4aW9uJ1xcbiAgICB9LFxcbiAgICBzZXJ2ZXJDb25uZXhpb25GYWlsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ291bGQgbm90IGNvbm5lY3QgdG8gdGhlIHNlcnZlciBmb3IgaW5zdGFuY2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1Byb2Jsw6htZSBsb3JzIGRlIGxhIGNvbm5leGlvbiBzZXJ2ZXVyIHBvdXIgbFxcXFwnaW5zdGFuY2UnXFxuICAgIH0sXFxuICAgIHN0YWxlTG9naW5TZXNzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBsb2dpbiBzZXNzaW9uIGlzIGV4cGlyZWQuIFBsZWFzZSB3YWl0LCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVmcmVzaGVkIGluIDUgc2Vjb25kcy4uLicsXFxuICAgICAgICAnZnItRlInOiAnVm90cmUgc2Vzc2lvbiBkZSBjb25uZXhpb24gYSBleHBpcsOpLiBNZXJjaSBkZSBwYXRpZW50ZXIsIGNlbGxlLWNpIHNlcmEgYXV0b21hdGlxdWVtZW50IGFjdHVhbGlzw6llIGRhbnMgNSBzZWNvbmRlcy4uLidcXG4gICAgfSxcXG4gICAgd3JvbmdVc2VybmFtZVBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSW52YWxpZCB1c2VybmFtZS9wYXNzd29yZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0VtYWlsIGV0L291IG1vdCBkZSBwYXNzZSBpbnZhbGlkZSAhJ1xcbiAgICB9LFxcbiAgICB1c2VyRGlzYWJsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIHVzZXIgYWNjb3VudCBpcyBkaXNhYmxlZCEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0NlIGNvbXB0ZSB1dGlsaXNhdGV1ciBlc3QgZMOpc2FjdGl2w6kgISdcXG4gICAgfSxcXG4gICAgbWVtYmVyc2hpcEVleHBpcmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91ciBjb21wYW55IE1lbWJlcnNoaXAgZXhwaXJlZCBvbiA8c3Ryb25nPntleHBpcnlEYXRlfTwvc3Ryb25nPi4gUGxlYXNlIGFzayB5b3VyIGNvbXBhbnnigJlzIENvbW11bml0eSBhZG1pbmlzdHJhdG9yPHN0cm9uZz57YWRtaW5Db250YWN0fTwvc3Ryb25nPiB0byByZW5ldyB0aGUgTWVtYmVyc2hpcC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIGFib25uZW1lbnQgYSBleHBpcsOpIGxlIDxzdHJvbmc+e2V4cGlyeURhdGV9PC9zdHJvbmc+LiBNZXJjaSBkZSBjb250YWN0ZXIgdm90cmUgYWRtaW5pc3RyYXRldXI8c3Ryb25nPnthZG1pbkNvbnRhY3R9PC9zdHJvbmc+IHBvdXIgcmVub3V2ZWxlciBsZSBzZXJ2aWNlLidcXG4gICAgfSxcXG4gICAgdW5zdWJzY3JpYmVGYWlsZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdDb3VsZCBub3QgdW5zdWJzY3JpYmUgdGhpcyBhY2NvdW50IGZyb20gdGhpcyBpbnN0YW5jZS9jb21tdW5pdHkuJyxcXG4gICAgICAgICdmci1GUic6ICdQcm9ibMOobWUgbG9ycyBkZSBsYSBkw6lzYXNzb2NpYXRpb24gZGUgY2UgY29tcHRlIHN1ciBjZXR0ZSBpbnN0YW5jZS9jb21tdW5hdXTDqS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkQjJhdXRoOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIEltcG9zc2libGUgdW5zdWJzY3JpcHRpb246IHRoZXJlIGlzIG5vIHN1YnNjcmlwdGlvbiBvbiBpbnN0YW5jZSAoKikuJyxcXG4gICAgICAgICdmci1GUic6ICcgSW1wb3NzaWJsZSBkZSBzZSBkw6lzaW5zY3JpcmU6IGlsIG5cXFxcJ3kgYSBwYXMgZFxcXFwnaW5zY3JpcHRpb24gcG9zc2libGUgc3VyIGxcXFxcJ2luc3RhbmNlICgqKS4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkSW5zdGFuY2VOb3RGb3VuZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJyBDb3VsZCBub3QgZmluZCBzZWxlY3RlZCBpbnN0YW5jZSBkZWZpbml0aW9uLiBQbGVhc2UgcmVsb2FkIHRoZSBwYWdlIGFuZCByZXRyeS4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJyBJbXBvc3NpYmxlIGRlIHRyb3V2ZXIgbGVzIHByb3ByacOpdMOpcyBkZSBsXFxcXCdpbnN0YW5jZSBzw6lsZWN0aW9ubsOpZS4gTWVyY2kgZGUgcmVjaGFyZ2VyIGxhIHBhZ2UgZXQgZGUgcsOpZXNzYXllci4nXFxuICAgIH0sXFxuICAgIHVuc3Vic2NyaWJlRmFpbGVkTm9CYXNlVXJsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnIEludmFsaWQgYmFzZVVybCBmb3VuZCBmb3IgdGhlIGN1cnJlbnQgaW5zdGFuY2UuJyxcXG4gICAgICAgICdmci1GUic6ICcgVVJMIGRlIGxcXFxcJ2luc3RhbmNlIHPDqWxlY3Rpb25uw6llIGludmFsaWRlLidcXG4gICAgfSxcXG4gICAgdXNlck5vdEFzc29jaWF0ZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICcgVXNlciBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgaW5zdGFuY2UuJyxcXG4gICAgICAgICdmci1GUic6ICcgVXRpbGlzYXRldXIgbm9uIGFzc29jacOpIMOgIGNldHRlIGluc3RhbmNlLidcXG4gICAgfSxcXG4gICAgdW5zdWJzY3JpYmVTdWNjZXNzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXNlciBzdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIGZyb20gY29tbXVuaXR5JyxcXG4gICAgICAgICdmci1GUic6ICdMXFxcXCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZMOpc2Fzc29jacOpIGRlIGNldHRlIGluc3RhbmNlLidcXG4gICAgfSxcXG4gICAgbm9QZXJtaXNzaW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnWW91IGRvblxcXFwndCBoYXZlIGFjY2VzcyB0byBhbnkgaW5zdGFuY2UhIFBsZWFzZSBjaGVjayB5b3VyIGFjY291bnQgc2V0dGluZ3Mgd2l0aCB5b3VyIGFkbWluaXN0cmF0b3IuJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYXVjdW4gZHJvaXQgZW5yZWdpc3Ryw6kuIE1lcmNpIGRlIHbDqXJpZmllciBsZSBwYXJhbcOpdHJhZ2UgZGUgdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyIGF2ZWMgdm90cmUgYWRtaW5pc3RyYXRldXIuJ1xcbiAgICB9LFxcbiAgICBuZXdWZXJzaW9uQXZhaWxhYmxlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVGhlIHBvcnRhbCBuZWVkcyB0byBiZSB1cGRhdGVkIHRvIGEgbmV3IHZlcnNpb24uIFBsZWFzZSBzYXZlIHlvdXIgY3VycmVudCB3b3JrLCB0aGUgdXBkYXRlIHdpbGwgYmUgZG9uZSBhdXRvbWF0aWNhbGx5IGluIDkwIHNlY29uZHMuLi4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xlIHBvcnRhaWwgZG9pdCDDqnRyZSBtaXMgw6Agam91ciB2ZXJzIHVuIG5vdXZlbGxlIHZlcnNpb24uIE1lcmNpIGRlIHNhdXZlZ2FyZGVyIHZvcyB0cmF2YXV4IGVuIGNvdXJzLCBsYSBtaXNlIMOgIGpvdXIgc2UgZmVyYSBhdXRvbWF0aXF1ZW1lbnQgZGFucyA5MCBzZWNvbmRlcy4uLidcXG4gICAgfSxcXG4gICAgdXBkYXRlTm93OiB7XFxuICAgICAgICAnZW4tVVMnOiAnVXBkYXRlIG5vdyEnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01ldHRyZSDDoCBqb3VyIG1haW50ZW5hbnQgISdcXG4gICAgfSxcXG4gICAgbm90Rm91bmRUaXRsZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jlc291cmNlIG5vdCBmb3VuZCcsXFxuICAgICAgICAnZnItRlInOiAnUmVzc291cmNlIGludHJvdXZhYmxlJ1xcbiAgICB9LFxcbiAgICBub3RGb3VuZE1lc3NhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGUgcmVxdWVzdGVkIHJlc291cmNlIHdhcyBub3QgZm91bmQuJyxcXG4gICAgICAgICdmci1GUic6ICdMYSByZXNzb3VyY2UgZGVtYW5kw6llIGVzdCBpbnRyb3V2YWJsZS4nXFxuICAgIH0sXFxuICAgIHNldHRpbmdzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2V0dGluZ3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1BhcmFtw6h0cmVzJ1xcbiAgICB9LFxcbiAgICBvdGhlcnM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPdGhlcnMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1dHJlcydcXG4gICAgfSxcXG4gICAgZGV2ZWxvcG1lbnRUb29sczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0RldmVsb3BtZW50IHRvb2xzJyxcXG4gICAgICAgICdmci1GUic6ICdPdXRpbHMgZGUgZMOpdmVsb3BwZW1lbnQnXFxuICAgIH0sXFxuICAgIGNvZGVFZGl0b3JDb25maWd1cmF0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29kZSBlZGl0b3IgY29uZmlndXJhdGlvbicsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlndXJhdGlvbiBkZXMgw6lkaXRldXJzIGRlIGNvZGUnXFxuICAgIH0sXFxuICAgIG5ld1Bhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTmV3IHBhc3N3b3JkJyxcXG4gICAgICAgICdmci1GUic6ICdOb3V2ZWF1IG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgY29uZmlybVBhc3N3b3JkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQ29uZmlybSBwYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnQ29uZmlybWVyIG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcmVmcmVzaFBlcm1pc3Npb25zOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPGRpdj5SZWZyZXNoPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+UmFmcmFcXFxcdTAwRUVjaGlyPGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiXFxuICAgIH0sXFxuICAgIGN0eVVuc3Vic2NyaWJlOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPGRpdj5VbnN1YnNjcmliZSBmcm9tPGJyIC8+dGhpcyBDb21tdW5pdHk8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+TWUgZFxcXFx1MDBFOXNpbnNjcmlyZTxiciAvPmRlIGNldHRlIENvbW11bmF1dFxcXFx1MDBFOTwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgZGVsZXRlQWNjb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+RGVsZXRlPGJyIC8+bXkgYWNjb3VudDwvZGl2PlxcXCIsXFxuICAgICAgICAnZnItRlInOiBcXFwiPGRpdj5TdXBwcmltZXIgbW9uPGJyIC8+Y29tcHRlIHV0aWxpc2F0ZXVyPC9kaXY+XFxcIlxcbiAgICB9LFxcbiAgICBleHBvcnRQZXJtaXNzaW9uczoge1xcbiAgICAgICAgJ2VuLVVTJzogXFxcIjxkaXY+RXhwb3J0PGJyIC8+cGVybWlzc2lvbnM8L2Rpdj5cXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIjxkaXY+RXhwb3J0ZXI8YnIgLz5wZXJtaXNzaW9uczwvZGl2PlxcXCJcXG4gICAgfSxcXG4gICAgbWVzc2FnZXNBdXRvcmVmcmVzaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0F1dG8tcmVmcmVzaCBtZXNzYWdlcyBsaXN0IGRlbGF5JyxcXG4gICAgICAgICdmci1GUic6ICdEw6lsYWkgZGUgcmFmcmHDrmNoaXNzZW1lbnQgZGUgbGEgbGlzdGUgZGVzIG1lc3NhZ2VzJ1xcbiAgICB9LFxcbiAgICBkaXNhYmxlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ2Rpc2FibGVkJyxcXG4gICAgICAgICdmci1GUic6ICdkw6lzYWN0aXbDqSdcXG4gICAgfSxcXG4gICAgcHJlZmVycmVkTGFuZ3VhZ2U6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcmVmZXJyZWQgbGFuZ3VhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0xhbmd1ZSBwcsOpZsOpcsOpZSdcXG4gICAgfSxcXG4gICAgdXNlckRlbGV0ZUFjY291bnRDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiBcXFwiPHA+QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB5b3UgYWNjb3VudD88L3A+XFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCI8cD5cXFxcdTAwQ0F0ZXMtdm91cyBzXFxcXHUwMEZCcihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIgPzwvcD5cXFwiXFxuICAgIH0sXFxuICAgIHVzZXJEZWxldGVBY2NvdW50Q29uZmlybVN1cmU6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxwPlxcXFxuICAgICAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9XFxcXFxcXCJkYW5nZXItY29sb3IgYm90dG9tLW1hcmdpbiB0ZXh0LXh4bGFyZ2VcXFxcXFxcIj5XQVJOSU5HPC9oMz5cXFxcbiAgICAgICAgICAgICAgICA8c3Bhbj5BcmUgeW91IDxzdHJvbmc+UkVBTExZPC9zdHJvbmc+IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHlvdSBhY2NvdW50PyBZb3Ugd29uJ3QgYmUgYWJsZSB0byBhY2Nlc3MgdGhlIHBvcnRhbCBhbnltb3JlLi4uPC9zcGFuPlxcXFxuICAgICAgICAgICAgPC9wPlxcXFxuICAgICAgICBcXFwiLFxcbiAgICAgICAgJ2ZyLUZSJzogXFxcIlxcXFxuICAgICAgICAgICAgPHA+XFxcXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT1cXFxcXFxcImRhbmdlci1jb2xvciBib3R0b20tbWFyZ2luIHRleHQteHhsYXJnZVxcXFxcXFwiPkFUVEVOVElPTjwvaDM+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+XFxcXHUwMENBdGVzLXZvdXMgPHN0cm9uZz5WUkFJTUVOVDwvc3Ryb25nPiBzXFxcXHUwMEZCcihlKSBkZSB2b3Vsb2lyIHN1cHByaW1lciB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIgPyBWb3VzIG5lIHBvdXJyZXogcGx1cyBhY2NcXFxcdTAwRTlkZXIgYXUgcG9ydGFpbC4uLjwvc3Bhbj5cXFxcbiAgICAgICAgICAgIDwvcD5cXFxcbiAgICAgICAgXFxcIlxcbiAgICB9LFxcbiAgICB1c2VyVW5zdWJzY3JpYmVDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBjb21tdW5pdHk/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgdm90cmUgY29tcHRlIGluc2NyaXB0aW9uIMOgIGNldHRlIGNvbW11bmF1dMOpID8nXFxuICAgIH0sXFxuICAgIHNldHBhc3N3b3JkVGl0bGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXQgYSBuZXcgcGFzc3dvcmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Nyw6llciB1biBub3V2ZWF1IG1vdCBkZSBwYXNzZSdcXG4gICAgfSxcXG4gICAgcGFzc3dvcmQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQYXNzd29yZCcsXFxuICAgICAgICAnZnItRlInOiAnTW90IGRlIHBhc3NlJ1xcbiAgICB9LFxcbiAgICBzaWduSW46IHtcXG4gICAgICAgICdlbi1VUyc6ICdTaWduIGluJyxcXG4gICAgICAgICdmci1GUic6ICdTZSBjb25uZWN0ZXInXFxuICAgIH0sXFxuICAgIHNldHBhc3N3b3JkU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdXIgcGFzc3dvcmQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHNldC4nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1ZvdHJlIG1vdCBkZSBwYXNzZSBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuJ1xcbiAgICB9LFxcbiAgICBpbnZhbGlkUGFzc3dvcmRDb25maXJtOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGFzc3dvcmRzIGFyZSBub3QgaWRlbnRpY2FsJyxcXG4gICAgICAgICdmci1GUic6ICdMZXMgMiBtb3RzIGRlIHBhc3NlIG5lIHNvbnQgcGFzIGlkZW50aXF1ZXMnXFxuICAgIH0sXFxuICAgIGNvbmZpcm1NdWx0aXBsZU1lc3NhZ2VzRGVsZXRlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgbWVzc2FnZXM/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciBzdXBwcmltZXIgbGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzID8nXFxuICAgIH0sXFxuICAgIGNvbmZpcm1NdWx0aXBsZVJlcHJvY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZXByb2Nlc3MgdGhlIHNlbGVjdGVkIG1lc3NhZ2VzPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcmVsYW5jZXIgbGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzID8nXFxuICAgIH0sXFxuICAgIG11bHRpcGxlUmVwcm9jZXNzU3VjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ01lc3NhZ2VzIHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICdNZXNzYWdlcyByZWxhbmPDqXMnXFxuICAgIH0sXFxuICAgIG11bHRpcGxlUmVwcm9jZXNzRmFpbHVyZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ21lc3NhZ2Uocykgbm90IHJlcHJvY2Vzc2VkJyxcXG4gICAgICAgICdmci1GUic6ICdtZXNzYWdlKHMpIG5vbiByZWxhbmPDqShzKSdcXG4gICAgfSxcXG4gICAgZmV0Y2htc2dGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZSBjYW5ub3QgYmUgbG9hZGVkJyxcXG4gICAgICAgICdmci1GUic6ICdMZSBtZXNzYWdlIG5lIHBldXQgw6p0cmUgY2hhcmfDqSdcXG4gICAgfSxcXG4gICAgbWVzc2FnZXNEZWxldGVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTWVzc2FnZXMgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTWVzc2FnZXMgc3VwcHJpbcOpcydcXG4gICAgfSxcXG4gICAgbWVzc2FnZVNhdmVEaXNwbGF5U2V0dGluZ3M6IHtcXG4gICAgICAgICdlbi1VUyc6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+RG8geW91IHdhbnQgdG8gc2F2ZSB5b3VyIG1vZGlmaWNhdGlvbnM/PC9zcGFuPjxici8+XFxcXG4gICAgICAgICAgICAgICAgPGVtIGNsYXNzPVxcXFxcXFwidGV4dC1tZWRpdW1cXFxcXFxcIj5Zb3VyIHByZWZlcmVuY2VzIChwcmVzZW5jZSwgd2lkdGggYW5kIG9yZGVyIG9mIGNvbHVtbnMsIGFjdGlvbiByZWxhdGVkIHRvIFxcXFx1MjAxQ1NlYXJjaFxcXFx1MjAxRCBhbmQgXFxcXHUyMDFDUmVzZXRcXFxcdTIwMUQgYnV0dG9ucy4uLikgd2lsbCBiZSBzYXZlZCBpbiB5b3VyIHVzZXIgcHJvZmlsZS4gTm90ZSB0aGF0IHlvdSBjYW4gc2F2ZSBzcGVjaWZpYyBzZXR0aW5ncyBmb3IgZWFjaCBkaXNwbGF5IG1vZGUgKG1vYmlsZSwgbWVkaXVtIGFuZCBsYXJnZSBzY3JlZW4pLjwvZW0+XFxcXG4gICAgICAgICAgICA8L2Rpdj5cXFxcbiAgICAgICAgXFxcIixcXG4gICAgICAgICdmci1GUic6IFxcXCJcXFxcbiAgICAgICAgICAgIDxkaXY+XFxcXG4gICAgICAgICAgICAgICAgPHNwYW4+Vm91bGV6LXZvdXMgc2F1dmVnYXJkZXIgdm9zIG1vZGlmaWNhdGlvbnMgPzwvc3Bhbj48YnIvPlxcXFxuICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cXFxcXFxcInRleHQtbWVkaXVtXFxcXFxcXCI+Vm9zIHByXFxcXHUwMEU5ZlxcXFx1MDBFOXJlbmNlcyBkJ2FmZmljaGFnZSAocHJcXFxcdTAwRTlzZW5jZSwgbGFyZ2V1ciBldCBvcmRyZSBkZXMgY29sb25uZXMsIGFjdGlvbiBkZXMgYm91dG9ucyBcXFxcdTIwMUNSZWNoZXJjaGVyXFxcXHUyMDFEIGV0IFxcXFx1MjAxQ1JcXFxcdTAwRTlpbml0aWFsaXNlclxcXFx1MjAxRC4uLikgc2Vyb250IGVucmVnaXN0clxcXFx1MDBFOWVzIGRhbnMgdm90cmUgcHJvZmlsIHV0aWxpc2F0ZXVyLiBWb3VzIHBvdXZleiBzYXV2ZWdhcmRlciBkZXMgcGFyYW1cXFxcdTAwRTh0cmVzIHNwXFxcXHUwMEU5Y2lmaXF1ZXMgcG91ciBjaGFxdWUgbW9kZSBkJ2FmZmljaGFnZSAobW9iaWxlLCBtb3llbiBldCBncmFuZCBcXFxcdTAwRTljcmFuKS48L2VtPlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIFxcXCJcXG4gICAgfSxcXG4gICAgbXVsdGlwbGVEZWxldGVGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnbWVzc2FnZShzKSBub3QgZGVsZXRlZCcsXFxuICAgICAgICAnZnItRlInOiAnbWVzc2FnZShzKSBub24gc3VwcHJpbcOpcydcXG4gICAgfSxcXG4gICAgZmV0Y2hkb2NGYWlsdXJlOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRG9jdW1lbnQgY2Fubm90IGJlIGxvYWRlZCcsXFxuICAgICAgICAnZnItRlInOiAnTGUgZG9jdW1lbnQgbmUgcGV1dCDDqnRyZSBjaGFyZ8OpJ1xcbiAgICB9LFxcbiAgICBjb25maXJtQ2xvc2VNZXNzYWdlU3VibWl0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNsb3NlIHRoaXMgbWVzc2FnZSBzdWJtaXNzaW9uIHNlc3Npb24/JyxcXG4gICAgICAgICdmci1GUic6ICfDinRlcy12b3VzIHPDu3IoZSkgZGUgdm91bG9pciB0ZXJtaW5lciBjZXR0ZSBzZXNzaW9uIGRlIGNyw6lhdGlvbiBkZSBtZXNzYWdlID8nXFxuICAgIH0sXFxuICAgIG5vVmlld0FjY2Vzczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1lvdSBkb25cXFxcJ3QgaGF2ZSBhY2Nlc3MgdG8gYW55IHZpZXcgb24gdGhpcyBwYWdlJyxcXG4gICAgICAgICdmci1GUic6ICdWb3VzIG5cXFxcJ2F2ZXogYWNjw6hzIMOgIGF1Y3VuZSB2dWUgc3VyIGNldHRlIHBhZ2UnXFxuICAgIH0sXFxuICAgIG5vUmVzdWx0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlc3VsdHMgZm91bmQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0F1Y3VuIHLDqXN1bHRhdCdcXG4gICAgfSxcXG4gICAgcmVmcmVzaDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1JlZnJlc2gnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JhZnJhw65jaGlyJ1xcbiAgICB9LFxcbiAgICByZXByb2Nlc3M6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSZXByb2Nlc3MnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ1JlbGFuY2VyJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZU1zZ1JlcHJvY2Vzc0ltcG9zc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmUgb3IgbW9yZSBvZiB0aGUgc2VsZWN0ZWQgbWVzc2FnZXMgY2Fubm90IGJlIHJlcHJvY2Vzc2VkLiBQbGVhc2UgY2hlY2sgeW91ciBzZWxlY3Rpb24gYW5kIHJldHJ5IScsXFxuICAgICAgICAnZnItRlInOiAnVW4gb3UgcGx1c2lldXJzIGRlcyBtZXNzYWdlcyBzw6lsZWN0aW9ubsOpcyBuZSBwZXV2ZW50IHBhcyDDqnRyZSByZWxhbmPDqXMuIE1lcmNpIGRlIHZlcmlmaWVyIHZvdHJlIHPDqWxlY3Rpb24gZXQgZGUgcsOpZXNzYXllciAhJ1xcbiAgICB9LFxcbiAgICBtdWx0aXBsZU1zZ0RlbGV0ZUltcG9zc2libGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdPbmUgb3IgbW9yZSBvZiB0aGUgc2VsZWN0ZWQgbWVzc2FnZXMgY2Fubm90IGJlIGRlbGV0ZWQuIFBsZWFzZSBjaGVjayB5b3VyIHNlbGVjdGlvbiBhbmQgcmV0cnkhJyxcXG4gICAgICAgICdmci1GUic6ICdVbiBvdSBwbHVzaWV1cnMgZGVzIG1lc3NhZ2VzIHPDqWxlY3Rpb25uw6lzIG5lIHBldXZlbnQgcGFzIMOqdHJlIHN1cHByaW3DqXMuIE1lcmNpIGRlIHZlcmlmaWVyIHZvdHJlIHPDqWxlY3Rpb24gZXQgZGUgcsOpZXNzYXllciAhJ1xcbiAgICB9LFxcbiAgICBjb25maXJtTm9kZURlbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBub2RlPycsXFxuICAgICAgICAnZnItRlInOiAnw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIG5vZXVkID8nXFxuICAgIH0sXFxuICAgIHJvb3RUcmVlRGlzcGxheToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1Jvb3QgdHJlZSBkaXNwbGF5ZWQ6JyxcXG4gICAgICAgICdmci1GUic6ICdBcmJyZSByYWNpbmUgYWZmaWNow6kgOidcXG4gICAgfSxcXG4gICAgb3JnYW5pc2F0aW9uc0NvbmZpcm1EZWxldGVMYXN0UG9zaXRpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIGlzIHRoZSBvbmx5IG9yZ2FuaXphdGlvbiBwb3NpdGlvbiBoZWxkIGJ5IHRoaXMgdXNlci4gSWYgeW91IGRlbGV0ZSBpdCwgeW91IHdvblxcXFwndCBiZSBhYmxlIHRvIHJlLWFzc2lnbiB0aGlzIHVzZXIgYW55d2hlcmUgaW4gdGhlIHRyZWUuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjb21wbGV0ZWx5IHJlbW92ZSB0aGlzIHVzZXIgZnJvbSB0aGUgb3JnYW5pemF0aW9uPycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyDDqnRlcyBzdXIgbGUgcG9pbnQgZGUgc3VwcHJpbWVyIGxhIHNldWxlIHBvc2l0aW9uIHRlbnVlIHBhciBjZXQgdXRpbGlzYXRldXIgZGFucyBsXFxcXCdvcmdhbmlzYXRpb24uIFNpIHZvdXMgbGEgc3VwcHJpbWV6LCB2b3VzIG5lIHBvdXJyZXogcGx1cyBkdSB0b3V0IHLDqWFzc2lnbmVyIGNldCB1dGlsaXNhdGV1ciBkYW5zIGxcXFxcJ2FyYnJlLiDDinRlcy12b3VzIGNlcnRhaW4gZGUgdm91bG9pciBzdXBwcmltZXIgY29tcGzDqHRlbWVudCBjZXQgdXRpbGlzYXRldXIgZGUgbFxcXFwnb3JnYW5pc2F0aW9uID8nXFxuICAgIH0sXFxuICAgIG5vQXZhaWxhYmxlUmVwb3J0czoge1xcbiAgICAgICAgJ2VuLVVTJzogJ05vIHJlcG9ydHMgYXZhaWxhYmxlLicsXFxuICAgICAgICAnZnItRlInOiAnQXVjdW4gcmFwcG9ydCBkaXNwb25pYmxlLidcXG4gICAgfSxcXG4gICAgc2VsZWN0UmVwb3J0OiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VsZWN0IGEgcmVwb3J0JyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmVyIHVuIHJhcHBvcnQnXFxuICAgIH0sXFxuICAgIHByaW50OiB7XFxuICAgICAgICAnZW4tVVMnOiAnUHJpbnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0ltcHJpbWVyJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlQ29uZmlybUxlYXZlV2l0aG91dFNhdmluZzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RoZXJlIGFyZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBsZWF2ZSB0aGlzIHBhZ2UgYW5kIGxvc2UgeW91ciB1cGRhdGVzPycsXFxuICAgICAgICAnZnItRlInOiAnVm91cyBhdmV6IGVmZmVjdHXDqSBkZXMgbW9kaWZpY2F0aW9ucyBzYW5zIGxlcyBlbnJlZ2lzdHJlci4gw4p0ZXMtdm91cyBzw7tyKGUpIGRlIHZvdWxvaXIgcXVpdHRlciBjZXR0ZSBwYWdlIGV0IHBlcmRyZSBsZXMgZG9ubsOpZXMgbm9uIHNhdXZlZ2FyZMOpZXMgPydcXG4gICAgfSxcXG4gICAgc2VydmljZVZlcnNpb246IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlIHZlcnNpb246JyxcXG4gICAgICAgICdmci1GUic6ICdWZXJzaW9uIGR1IHNlcnZpY2UgOidcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25Db21wbGV0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ09wZXJhdGlvbiBjb21wbGV0ZScsXFxuICAgICAgICAnZnItRlInOiAnT3DDqXJhdGlvbiB0ZXJtaW7DqWUnXFxuICAgIH0sXFxuICAgIGJhdGNoT3BlcmF0aW9uUHJvY2Vzc2VkSXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdQcm9jZXNzZWQgaXRlbXMnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ8OJbMOpbWVudHMgdHJhaXTDqXMnXFxuICAgIH0sXFxuICAgIGVycm9yczoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Vycm9ycycsXFxuICAgICAgICAnZnItRlInOiAnRXJyZXVycydcXG4gICAgfSxcXG4gICAgc3VjY2Vzc2VzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU3VjY2Vzc2VzJyxcXG4gICAgICAgICdmci1GUic6ICdSw6l1c3NpcydcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25BbGxHb29kOiB7XFxuICAgICAgICAnZW4tVVMnOiAnQWxsIGl0ZW1zIGhhdmUgYmVlbiBwcm9jZXNzZWQuIEV2ZXJ5dGhpbmcgd2VudCB3ZWxsIScsXFxuICAgICAgICAnZnItRlInOiAnVG91cyBsZXMgw6lsw6ltZW50cyBvbnQgw6l0w6kgdHJhaXTDqXMgISdcXG4gICAgfSxcXG4gICAgYmF0Y2hPcGVyYXRpb25FcnJvcnNPY2N1cmVkOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU29tZSBlcnJvcnMgb2NjdXJlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uJyxcXG4gICAgICAgICdmci1GUic6ICdEZXMgZXJyZXVycyBzb250IHN1cnZlbnVlcyBsb3JzIGRlcyB0cmFpdGVtZW50cy4nXFxuICAgIH0sXFxuICAgIGl0ZW1JZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0l0ZW0gSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lEIMOpbMOpbWVudCdcXG4gICAgfSxcXG4gICAgc3RhdHVzQ29kZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1N0YXR1cyBjb2RlJyxcXG4gICAgICAgICdmci1GUic6ICdDb2RlIEhUVFAnXFxuICAgIH0sXFxuICAgIGVycm9yTWVzc2FnZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Vycm9yIG1lc3NhZ2UnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01lc3NhZ2UgZFxcXFwnZXJyZXVyJ1xcbiAgICB9LFxcbiAgICB3b3JrSXRlbVByb2Nlc3NlZDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1dvcmsgaXRlbSBwcm9jZXNzZWQhJyxcXG4gICAgICAgICdmci1GUic6ICdUw6JjaGUgdHJhaXTDqWUgISdcXG4gICAgfSxcXG4gICAgdmlldzoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1ZpZXcnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0FmZmljaGVyJ1xcbiAgICB9LFxcbiAgICBuYW1lQWxyZWFkeVVzZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdUaGlzIG5hbWUgaXMgYWxyZWFkeSB1c2VkLicsXFxuICAgICAgICAnZnItRlInOiAnQ2Ugbm9tIGVzdCBkw6lqw6AgdXRpbGlzw6kuJ1xcbiAgICB9LFxcbiAgICB1bmtub3duOiB7XFxuICAgICAgICAnZW4tVVMnOiAnVW5rbm93bicsXFxuICAgICAgICAnZnItRlInOiAnSW5jb25udSdcXG4gICAgfSxcXG4gICAgc2VydmljZVN0YXR1c0NvbmZpZ0NoYW5nZWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdTZXJ2aWNlIGNvbmZpZ3VyYXRpb24gaGFzIGNoYW5nZWQgc2luY2UgbGFzdCBzdGFydCcsXFxuICAgICAgICAnZnItRlInOiAnTGEgY29uZmlndXJhdGlvbiBkdSBzZXJ2aWNlIGEgY2hhbmfDqSBkZXB1aXMgbGUgZGVybmllciBkw6ltYXJyYWdlJ1xcbiAgICB9LFxcbiAgICBzZXJ2aWNlU3RhdHVzOiB7XFxuICAgICAgICAnZW4tVVMnOiAnU2VydmljZSBzdGF0dXM6JyxcXG4gICAgICAgICdmci1GUic6ICfDiXRhdCBkdSBzZXJ2aWNlIDonXFxuICAgIH1cXG59O1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI3MCAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5leHBvcnRzLkFWQUlMQUJMRV9MQU5HVUFHRVMgPSBbXFxuICAgIHtcXG4gICAgICAgIGxhYmVsOiAnRU4nLFxcbiAgICAgICAgbG9jYWxlOiAnZW4tVVMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhYmVsOiAnRlInLFxcbiAgICAgICAgbG9jYWxlOiAnZnItRlInXFxuICAgIH1cXG5dO1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNvbmZpZy5qcy5tYXBcXG5cXG4vKioqLyB9KSxcXG4vKiAyNzEgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5mbGFnc0RlZiA9IHtcXG4gICAgJ2V1bnJlYWQnOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtZW52ZWxvcGUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZm9udC1jb2xvci1saWdodGVyJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdVbnJlYWQnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdOb24gbHUnXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgICdkd2FybmluZyc6IHtcXG4gICAgICAgIGljb25TaGFwZTogJ2ZhcyBmYS1leGNsYW1hdGlvbi10cmlhbmdsZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdkYW5nZXItY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ1dhcm5pbmcnLFxcbiAgICAgICAgICAgICdmci1GUic6ICdBdHRlbnRpb24nXFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgICdjaW1wb3J0YW50Jzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLXN0YXInLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnd2FybmluZy1jb2xvcicsXFxuICAgICAgICBmbGFnTGFiZWw6IHtcXG4gICAgICAgICAgICAnZW4tVVMnOiAnSW1wb3J0YW50JyxcXG4gICAgICAgICAgICAnZnItRlInOiAnSW1wb3J0YW50J1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYmluZm8nOiB7XFxuICAgICAgICBpY29uU2hhcGU6ICdmYXMgZmEtc3F1YXJlJyxcXG4gICAgICAgIGljb25Db2xvcjogJ2luZm8tY29sb3InLFxcbiAgICAgICAgZmxhZ0xhYmVsOiB7XFxuICAgICAgICAgICAgJ2VuLVVTJzogJ0luZm8nLFxcbiAgICAgICAgICAgICdmci1GUic6ICdJbmZvJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYW9rJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWNpcmNsZScsXFxuICAgICAgICBpY29uQ29sb3I6ICdwcmltYXJ5LWNvbG9yJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdPSycsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ09LJ1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICAnYWF2aXNpYmxlJzoge1xcbiAgICAgICAgaWNvblNoYXBlOiAnZmFzIGZhLWFyY2hpdmUnLFxcbiAgICAgICAgaWNvbkNvbG9yOiAnZm9udC1jb2xvci1saWdodGVyJyxcXG4gICAgICAgIGZsYWdMYWJlbDoge1xcbiAgICAgICAgICAgICdlbi1VUyc6ICdBcmNoaXZlZCcsXFxuICAgICAgICAgICAgJ2ZyLUZSJzogJ0FyY2hpdsOpJ1xcbiAgICAgICAgfSxcXG4gICAgICAgIGludmVyc2VkOiB0cnVlLFxcbiAgICAgICAgZGVmYXVsdFNlYXJjaFN0YXRlOiB0cnVlXFxuICAgIH0sXFxufTtcXG5leHBvcnRzLmxhbmd1YWdlSXNvID0gW1xcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBZmFyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBQicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBYmtoYXonXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F2ZXN0YW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FGJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0FmcmlrYWFucydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQWthbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQU0nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQW1oYXJpYydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQU4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJhZ29uZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBcmFiaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Fzc2FtZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdBVicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBdmFyaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0FZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0F5bWFyYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQVonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXplcmJhaWphbmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jhc2hraXInXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0JlbGFydXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0J1bGdhcmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQkgnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQmloYXJpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCaXNsYW1hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCYW1iYXJhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCZW5nYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaWJldGFuIFN0YW5kYXJkJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdCUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdCcmV0b24nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0JTJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jvc25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NhdGFsYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoZWNoZW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoYW1vcnJvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdDTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdDb3JzaWNhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ1InLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3JlZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnQ1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3plY2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09sZCBDaHVyY2ggU2xhdm9uaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NodXZhc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0NZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dlbHNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdEQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdEYW5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0RFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dlcm1hbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRFYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRGl2ZWhpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdEWicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdEem9uZ2toYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRUUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXdlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdFTCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdFd2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VuZ2xpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0VzcGVyYW50bydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRVMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3BhbmlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRVQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRXN0b25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0VVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Jhc3F1ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGVyc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRnVsYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmlubmlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnRkonLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRmlqaWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdGYXJvZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdGUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdGcmVuY2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0ZZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dlc3Rlcm4gRnJpc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR0EnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSXJpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Njb3R0aXNoIEdhZWxpYydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnR2FsaWNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0dOJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0d1YXJhbsOtJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdHVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHdWphcmF0aSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnR1YnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFueCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSGF1c2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hlYnJldydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSGluZGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hpcmkgTW90dSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSFInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ3JvYXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hhaXRpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0hVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0h1bmdhcmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSFknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQXJtZW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0haJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0hlcmVybydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSW50ZXJsaW5ndWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0luZG9uZXNpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lFJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludGVybGluZ3VlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJRycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJZ2JvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOdW9zdSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSUsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSW51cGlhcSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSU8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSWRvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdJUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdJY2VsYW5kaWMnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0l0YWxpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0lVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0ludWt0aXR1dCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnSkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnSmFwYW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0pWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0phdmFuZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdHZW9yZ2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0cnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS29uZ28nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tpa3V5dSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0onLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS3dhbnlhbWEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0themFraCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FsYWFsbGlzdXQnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tNJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tobWVyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLYW5uYWRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdLTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLb3JlYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0thbnVyaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnS1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2FzaG1pcmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t1cmRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0tvbWknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0Nvcm5pc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0tZJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0t5cmd5eidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGF0aW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xCJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0x1eGVtYm91cmdpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0dhbmRhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaW1idXJnaXNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMaW5nYWxhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdMTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdMYW8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0xpdGh1YW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ0xVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0x1YmEtS2F0YW5nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTFYnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTGF0dmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsYWdhc3knXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01IJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hcnNoYWxsZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNxIFvcmknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01LJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hY2Vkb25pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ01MJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ01hbGF5YWxhbSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTU4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTW9uZ29saWFuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNUicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYXJhdGhpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdNUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdNYWxheeKAjidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVQnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTWFsdGVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTVknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQnVybWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTmF1cnUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05CJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcndlZ2lhbiBCb2ttw6VsJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J0aGVybiBOZGViZWxlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdORScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOZXBhbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05HJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05kb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTkwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnRHV0Y2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05OJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05vcndlZ2lhbiBOeW5vcnNrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdOTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdOb3J3ZWdpYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05SJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvdXRoZXJuIE5kZWJlbGUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ05WJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ05hdmFqbydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnTlknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnQ2hpY2hld2EnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09DJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09jY2l0YW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09KJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09qaWJ3ZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnT00nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnT3JvbW8nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ09SJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ09yaXlhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdPUycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdPc3NldGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUEEnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGFuamFiaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUEknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUMSBbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1BMJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1BvbGlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUFMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUGFzaHRvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdQVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdQb3J0dWd1ZXNlJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdRVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdRdWVjaHVhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdSb21hbnNoJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdLaXJ1bmRpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdSTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdSb21hbmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUlUnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnUnVzc2lhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnUlcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnS2lueWFyd2FuZGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NhbnNrcml0J1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTQycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTYXJkaW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NEJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NpbmRoaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0UnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnTm9ydGhlcm4gU2FtaSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0cnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2FuZ28nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NJJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NpbmhhbGEnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NLJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1Nsb3ZhaydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU0wnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2xvdmVuZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU00nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2Ftb2FuJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTTicsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTaG9uYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU08nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU29tYWxpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTUScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdBbGJhbmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1InLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU2VyYmlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnU1MnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnU3dhdGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NUJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1NvdXRoZXJuIFNvdGhvJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdTVScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdTdW5kYW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NWJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3ZWRpc2gnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1NXJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1N3YWhpbGknXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhbWlsJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdURScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUZWx1Z3UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1RHJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1RhamlrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaGFpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUSScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUaWdyaW55YSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEsnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHVya21lbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVEwnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVGFnYWxvZydcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVE4nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHN3YW5hJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUTycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUb25nYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFInLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHVya2lzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFMnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHNvbmdhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUVCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYXRhcidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVFcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVHdpJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdUWScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdUYWhpdGlhbidcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVUcnLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVXlnaHVyJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdVSycsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdVa3JhaW5pYW4nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VSJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1VyZHUnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1VaJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1V6YmVrJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdWRScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdWZW5kYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVkknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVmlldG5hbWVzZSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnVk8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnVm9sYXDDvGsnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1dBJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dhbGxvb24nXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1dPJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1dvbG9mJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdYSCcsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdYaG9zYSdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWUknLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWWlkZGlzaCdcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiAnWU8nLFxcbiAgICAgICAgbGFuZ3VhZ2VOYW1lOiAnWW9ydWJhJ1xcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBsYW5ndWFnZUNvZGU6ICdaQScsXFxuICAgICAgICBsYW5ndWFnZU5hbWU6ICdaaHVhbmcnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1pIJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ0NoaW5lc2UnXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIGxhbmd1YWdlQ29kZTogJ1pVJyxcXG4gICAgICAgIGxhbmd1YWdlTmFtZTogJ1p1bHUnXFxuICAgIH1cXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzSXNvID0gW1xcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQURcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFuZG9ycmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVW5pdGVkIEFyYWIgRW1pcmF0ZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBRlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWZnaGFuaXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW50aWd1YSBhbmQgQmFyYnVkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbmd1aWxsYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBbGJhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFybWVuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQW5nb2xhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFudGFyY3RpY2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXJnZW50aW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFtZXJpY2FuIFNhbW9hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkF1c3RyaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJBVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQXVzdHJhbGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkFydWJhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQVhcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIsOFbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkFaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJBemVyYmFpamFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvc25pYSBhbmQgSGVyemVnb3ZpbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFyYmFkb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmFuZ2xhZGVzaFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCZWxnaXVtXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQkZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJ1cmtpbmEgRmFzb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCdWxnYXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCYWhyYWluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQklcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJ1cnVuZGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVuaW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgQmFydGjDqWxlbXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVybXVkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcnVuZWlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQm9saXZpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJRXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb25haXJlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJyYXppbFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCYWhhbWFzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQlRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJodXRhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkJWXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCb3V2ZXQgSXNsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJvdHN3YW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQllcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkJlbGFydXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJCWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQmVsaXplXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhbmFkYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb2NvcyBbS2VlbGluZ10gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDZW50cmFsIEFmcmljYW4gUmVwdWJsaWNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUmVwdWJsaWMgb2YgdGhlIENvbmdvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlN3aXR6ZXJsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkl2b3J5IENvYXN0XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ0tcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNvb2sgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGlsZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYW1lcm9vblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDaGluYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb2xvbWJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDb3N0YSBSaWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1VcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN1YmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ2FwZSBWZXJkZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkNXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDdXJhY2FvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNocmlzdG1hcyBJc2xhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJDWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQ3lwcnVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiQ1pcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkN6ZWNoIFJlcHVibGljXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiREVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdlcm1hbnlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJESlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGppYm91dGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJES1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRGVubWFya1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEb21pbmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkRPXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJEb21pbmljYW4gUmVwdWJsaWNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJEWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQWxnZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFY3VhZG9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRUVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVzdG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRWd5cHRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiV2VzdGVybiBTYWhhcmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJFUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRXJpdHJlYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTcGFpblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkVUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJFdGhpb3BpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGaW5sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRkpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZpamlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRmFsa2xhbmQgSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkZNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNaWNyb25lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiRk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkZhcm9lIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJGUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJhbmNlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdhYm9uXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVuaXRlZCBLaW5nZG9tXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0RcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdyZW5hZGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR2VvcmdpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGcmVuY2ggR3VpYW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1ZXJuc2V5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdoYW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdpYnJhbHRhclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHcmVlbmxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR2FtYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR05cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1aW5lYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWFkZWxvdXBlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1FcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVxdWF0b3JpYWwgR3VpbmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkdyZWVjZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWF0ZW1hbGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJHVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiR3VhbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkdXXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJHdWluZWEtQmlzc2F1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiR1lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkd1eWFuYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkhLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJIb25nIEtvbmdcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJITVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSGVhcmQgSXNsYW5kIGFuZCBNY0RvbmFsZCBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkhvbmR1cmFzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSFJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNyb2F0aWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSGFpdGlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJIVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSHVuZ2FyeVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklEXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJbmRvbmVzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXJlbGFuZFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJc3JhZWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXNsZSBvZiBNYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSW5kaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIklyYXFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJJUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiSXJhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIklTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJJY2VsYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSVRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkl0YWx5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkplcnNleVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKYW1haWNhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiSk9cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkpvcmRhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkpQXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJKYXBhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLZW55YVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLeXJneXpzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS0hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNhbWJvZGlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS0lcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIktpcmliYXRpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS01cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNvbW9yb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJLTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FpbnQgS2l0dHMgYW5kIE5ldmlzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1BcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5vcnRoIEtvcmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1JcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIEtvcmVhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiS1dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkt1d2FpdFxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJDYXltYW4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIktaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJLYXpha2hzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxhb3NcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGViYW5vblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxDXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBMdWNpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxJXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWVjaHRlbnN0ZWluXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNyaSBMYW5rYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIkxSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJMaWJlcmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxlc290aG9cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGl0aHVhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkx1eGVtYm91cmdcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJMVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTGF0dmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTFlcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkxpYnlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vcm9jY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9uYWNvXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTURcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbGRvdmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW9udGVuZWdyb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1GXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBNYXJ0aW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFkYWdhc2NhclxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1IXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXJzaGFsbCBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTUtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hY2Vkb25pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1MXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWxpXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTU1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk15YW5tYXIgW0J1cm1hXVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1OXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNb25nb2xpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1PXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYWNhb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1QXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOb3J0aGVybiBNYXJpYW5hIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNUVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFydGluaXF1ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1SXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXVyaXRhbmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1vbnRzZXJyYXRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsdGFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWF1cml0aXVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGRpdmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTVdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk1hbGF3aVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk1YXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNZXhpY29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTWFsYXlzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJNWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTW96YW1iaXF1ZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5BXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOYW1pYmlhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTkNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5ldyBDYWxlZG9uaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJORVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmlnZXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJORlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9yZm9sayBJc2xhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOR1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmlnZXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIk5JXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJOaWNhcmFndWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmV0aGVybGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTm9yd2F5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlBcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5lcGFsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlJcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5hdXJ1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiTlVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIk5pdWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJOWlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiTmV3IFplYWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJPTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiT21hblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYW5hbWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGVydVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBGXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJGcmVuY2ggUG9seW5lc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUEdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlBhcHVhIE5ldyBHdWluZWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGhpbGlwcGluZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQS1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQTFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUG9sYW5kXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUE1cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IFBpZXJyZSBhbmQgTWlxdWVsb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGl0Y2Fpcm4gSXNsYW5kc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBSXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQdWVydG8gUmljb1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlBTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJQYWxlc3RpbmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUG9ydHVnYWxcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFsYXVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJQWVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUGFyYWd1YXlcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJRQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUWF0YXJcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUsOpdW5pb25cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJST1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUm9tYW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlJTXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZXJiaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJSVVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiUnVzc2lhXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiUldcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlJ3YW5kYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYXVkaSBBcmFiaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTQlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU29sb21vbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNleWNoZWxsZXNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTRFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3VkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTRVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3dlZGVuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU0dcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNpbmdhcG9yZVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNIXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTYWludCBIZWxlbmFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2xvdmVuaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTbG92YWtpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNMXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTaWVycmEgTGVvbmVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU2FuIE1hcmlub1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNOXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTZW5lZ2FsXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU09cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvbWFsaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU3VyaW5hbWVcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU291dGggU3VkYW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJTVFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiU8OjbyBUb23DqSBhbmQgUHLDrW5jaXBlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVsIFNhbHZhZG9yXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiU1hcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNpbnQgTWFhcnRlblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTeXJpYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlNaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJTd2F6aWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUQ1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVERcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkNoYWRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJURlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiRnJlbmNoIFNvdXRoZXJuIFRlcnJpdG9yaWVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVEdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRvZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUSFxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGhhaWxhbmRcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUSlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVGFqaWtpc3RhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRLXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUb2tlbGF1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVExcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIkVhc3QgVGltb3JcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUTVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya21lbmlzdGFuXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVE5cXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlR1bmlzaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUT1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVG9uZ2FcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUUlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHVya2V5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFRcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRyaW5pZGFkIGFuZCBUb2JhZ29cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJUVlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVHV2YWx1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVFdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlRhaXdhblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlRaXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJUYW56YW5pYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVBXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVa3JhaW5lXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVUdcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlVnYW5kYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJVU1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVW5pdGVkIFN0YXRlc1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlVZXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJVcnVndWF5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVVpcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlV6YmVraXN0YW5cXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWQVxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmF0aWNhbiBDaXR5XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkNcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVkVcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlZlbmV6dWVsYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZHXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJCcml0aXNoIFZpcmdpbiBJc2xhbmRzXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiVklcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlUuUy4gVmlyZ2luIElzbGFuZHNcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJWTlxcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiVmlldG5hbVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlZVXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJWYW51YXR1XFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiV0ZcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIldhbGxpcyBhbmQgRnV0dW5hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiV1NcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNhbW9hXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWEtcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIktvc292b1xcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIllFXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJZZW1lblxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIllUXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJNYXlvdHRlXFxcIlxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBcXFwiY291bnRyeUNvZGVcXFwiOiBcXFwiWkFcXFwiLFxcbiAgICAgICAgXFxcImNvdW50cnlOYW1lXFxcIjogXFxcIlNvdXRoIEFmcmljYVxcXCJcXG4gICAgfSxcXG4gICAge1xcbiAgICAgICAgXFxcImNvdW50cnlDb2RlXFxcIjogXFxcIlpNXFxcIixcXG4gICAgICAgIFxcXCJjb3VudHJ5TmFtZVxcXCI6IFxcXCJaYW1iaWFcXFwiXFxuICAgIH0sXFxuICAgIHtcXG4gICAgICAgIFxcXCJjb3VudHJ5Q29kZVxcXCI6IFxcXCJaV1xcXCIsXFxuICAgICAgICBcXFwiY291bnRyeU5hbWVcXFwiOiBcXFwiWmltYmFid2VcXFwiXFxuICAgIH1cXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzTmFtZVByZVNlbGVjdGlvbiA9IFtcXG4gICAgXFxcIlVuaXRlZCBTdGF0ZXNcXFwiLFxcbiAgICBcXFwiQ2FuYWRhXFxcIixcXG4gICAgXFxcIkZyYW5jZVxcXCIsXFxuICAgIFxcXCJHZXJtYW55XFxcIixcXG4gICAgXFxcIk1leGljb1xcXCJcXG5dO1xcbmV4cG9ydHMuY291bnRyaWVzTmFtZSA9IFtcXG4gICAgXFxcIkFmZ2hhbmlzdGFuXFxcIixcXG4gICAgXFxcIsOFbGFuZFxcXCIsXFxuICAgIFxcXCJBbGJhbmlhXFxcIixcXG4gICAgXFxcIkFsZ2VyaWFcXFwiLFxcbiAgICBcXFwiQW1lcmljYW4gU2Ftb2FcXFwiLFxcbiAgICBcXFwiQW5kb3JyYVxcXCIsXFxuICAgIFxcXCJBbmdvbGFcXFwiLFxcbiAgICBcXFwiQW5ndWlsbGFcXFwiLFxcbiAgICBcXFwiQW50YXJjdGljYVxcXCIsXFxuICAgIFxcXCJBbnRpZ3VhIGFuZCBCYXJidWRhXFxcIixcXG4gICAgXFxcIkFyZ2VudGluYVxcXCIsXFxuICAgIFxcXCJBcm1lbmlhXFxcIixcXG4gICAgXFxcIkFydWJhXFxcIixcXG4gICAgXFxcIkF1c3RyYWxpYVxcXCIsXFxuICAgIFxcXCJBdXN0cmlhXFxcIixcXG4gICAgXFxcIkF6ZXJiYWlqYW5cXFwiLFxcbiAgICBcXFwiQmFoYW1hc1xcXCIsXFxuICAgIFxcXCJCYWhyYWluXFxcIixcXG4gICAgXFxcIkJhbmdsYWRlc2hcXFwiLFxcbiAgICBcXFwiQmFyYmFkb3NcXFwiLFxcbiAgICBcXFwiQmVsYXJ1c1xcXCIsXFxuICAgIFxcXCJCZWxnaXVtXFxcIixcXG4gICAgXFxcIkJlbGl6ZVxcXCIsXFxuICAgIFxcXCJCZW5pblxcXCIsXFxuICAgIFxcXCJCZXJtdWRhXFxcIixcXG4gICAgXFxcIkJodXRhblxcXCIsXFxuICAgIFxcXCJCb2xpdmlhXFxcIixcXG4gICAgXFxcIkJvbmFpcmVcXFwiLFxcbiAgICBcXFwiQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYVxcXCIsXFxuICAgIFxcXCJCb3Rzd2FuYVxcXCIsXFxuICAgIFxcXCJCb3V2ZXQgSXNsYW5kXFxcIixcXG4gICAgXFxcIkJyYXppbFxcXCIsXFxuICAgIFxcXCJCcml0aXNoIEluZGlhbiBPY2VhbiBUZXJyaXRvcnlcXFwiLFxcbiAgICBcXFwiQnJpdGlzaCBWaXJnaW4gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJCcnVuZWlcXFwiLFxcbiAgICBcXFwiQnVsZ2FyaWFcXFwiLFxcbiAgICBcXFwiQnVya2luYSBGYXNvXFxcIixcXG4gICAgXFxcIkJ1cnVuZGlcXFwiLFxcbiAgICBcXFwiQ2FtYm9kaWFcXFwiLFxcbiAgICBcXFwiQ2FtZXJvb25cXFwiLFxcbiAgICBcXFwiQ2FuYWRhXFxcIixcXG4gICAgXFxcIkNhcGUgVmVyZGVcXFwiLFxcbiAgICBcXFwiQ2F5bWFuIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljXFxcIixcXG4gICAgXFxcIkNoYWRcXFwiLFxcbiAgICBcXFwiQ2hpbGVcXFwiLFxcbiAgICBcXFwiQ2hpbmFcXFwiLFxcbiAgICBcXFwiQ2hyaXN0bWFzIElzbGFuZFxcXCIsXFxuICAgIFxcXCJDb2NvcyBbS2VlbGluZ10gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJDb2xvbWJpYVxcXCIsXFxuICAgIFxcXCJDb21vcm9zXFxcIixcXG4gICAgXFxcIkNvb2sgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJDb3N0YSBSaWNhXFxcIixcXG4gICAgXFxcIkNyb2F0aWFcXFwiLFxcbiAgICBcXFwiQ3ViYVxcXCIsXFxuICAgIFxcXCJDdXJhY2FvXFxcIixcXG4gICAgXFxcIkN5cHJ1c1xcXCIsXFxuICAgIFxcXCJDemVjaCBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nb1xcXCIsXFxuICAgIFxcXCJEZW5tYXJrXFxcIixcXG4gICAgXFxcIkRqaWJvdXRpXFxcIixcXG4gICAgXFxcIkRvbWluaWNhXFxcIixcXG4gICAgXFxcIkRvbWluaWNhbiBSZXB1YmxpY1xcXCIsXFxuICAgIFxcXCJFYXN0IFRpbW9yXFxcIixcXG4gICAgXFxcIkVjdWFkb3JcXFwiLFxcbiAgICBcXFwiRWd5cHRcXFwiLFxcbiAgICBcXFwiRWwgU2FsdmFkb3JcXFwiLFxcbiAgICBcXFwiRXF1YXRvcmlhbCBHdWluZWFcXFwiLFxcbiAgICBcXFwiRXJpdHJlYVxcXCIsXFxuICAgIFxcXCJFc3RvbmlhXFxcIixcXG4gICAgXFxcIkV0aGlvcGlhXFxcIixcXG4gICAgXFxcIkZhbGtsYW5kIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiRmFyb2UgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJGaWppXFxcIixcXG4gICAgXFxcIkZpbmxhbmRcXFwiLFxcbiAgICBcXFwiRnJhbmNlXFxcIixcXG4gICAgXFxcIkZyZW5jaCBHdWlhbmFcXFwiLFxcbiAgICBcXFwiRnJlbmNoIFBvbHluZXNpYVxcXCIsXFxuICAgIFxcXCJGcmVuY2ggU291dGhlcm4gVGVycml0b3JpZXNcXFwiLFxcbiAgICBcXFwiR2Fib25cXFwiLFxcbiAgICBcXFwiR2FtYmlhXFxcIixcXG4gICAgXFxcIkdlb3JnaWFcXFwiLFxcbiAgICBcXFwiR2VybWFueVxcXCIsXFxuICAgIFxcXCJHaGFuYVxcXCIsXFxuICAgIFxcXCJHaWJyYWx0YXJcXFwiLFxcbiAgICBcXFwiR3JlZWNlXFxcIixcXG4gICAgXFxcIkdyZWVubGFuZFxcXCIsXFxuICAgIFxcXCJHcmVuYWRhXFxcIixcXG4gICAgXFxcIkd1YWRlbG91cGVcXFwiLFxcbiAgICBcXFwiR3VhbVxcXCIsXFxuICAgIFxcXCJHdWF0ZW1hbGFcXFwiLFxcbiAgICBcXFwiR3Vlcm5zZXlcXFwiLFxcbiAgICBcXFwiR3VpbmVhXFxcIixcXG4gICAgXFxcIkd1aW5lYS1CaXNzYXVcXFwiLFxcbiAgICBcXFwiR3V5YW5hXFxcIixcXG4gICAgXFxcIkhhaXRpXFxcIixcXG4gICAgXFxcIkhlYXJkIElzbGFuZCBhbmQgTWNEb25hbGQgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJIb25kdXJhc1xcXCIsXFxuICAgIFxcXCJIb25nIEtvbmdcXFwiLFxcbiAgICBcXFwiSHVuZ2FyeVxcXCIsXFxuICAgIFxcXCJJY2VsYW5kXFxcIixcXG4gICAgXFxcIkluZGlhXFxcIixcXG4gICAgXFxcIkluZG9uZXNpYVxcXCIsXFxuICAgIFxcXCJJcmFuXFxcIixcXG4gICAgXFxcIklyYXFcXFwiLFxcbiAgICBcXFwiSXJlbGFuZFxcXCIsXFxuICAgIFxcXCJJc2xlIG9mIE1hblxcXCIsXFxuICAgIFxcXCJJc3JhZWxcXFwiLFxcbiAgICBcXFwiSXRhbHlcXFwiLFxcbiAgICBcXFwiSXZvcnkgQ29hc3RcXFwiLFxcbiAgICBcXFwiSmFtYWljYVxcXCIsXFxuICAgIFxcXCJKYXBhblxcXCIsXFxuICAgIFxcXCJKZXJzZXlcXFwiLFxcbiAgICBcXFwiSm9yZGFuXFxcIixcXG4gICAgXFxcIkthemFraHN0YW5cXFwiLFxcbiAgICBcXFwiS2VueWFcXFwiLFxcbiAgICBcXFwiS2lyaWJhdGlcXFwiLFxcbiAgICBcXFwiS29zb3ZvXFxcIixcXG4gICAgXFxcIkt1d2FpdFxcXCIsXFxuICAgIFxcXCJLeXJneXpzdGFuXFxcIixcXG4gICAgXFxcIkxhb3NcXFwiLFxcbiAgICBcXFwiTGF0dmlhXFxcIixcXG4gICAgXFxcIkxlYmFub25cXFwiLFxcbiAgICBcXFwiTGVzb3Rob1xcXCIsXFxuICAgIFxcXCJMaWJlcmlhXFxcIixcXG4gICAgXFxcIkxpYnlhXFxcIixcXG4gICAgXFxcIkxpZWNodGVuc3RlaW5cXFwiLFxcbiAgICBcXFwiTGl0aHVhbmlhXFxcIixcXG4gICAgXFxcIkx1eGVtYm91cmdcXFwiLFxcbiAgICBcXFwiTWFjYW9cXFwiLFxcbiAgICBcXFwiTWFjZWRvbmlhXFxcIixcXG4gICAgXFxcIk1hZGFnYXNjYXJcXFwiLFxcbiAgICBcXFwiTWFsYXdpXFxcIixcXG4gICAgXFxcIk1hbGF5c2lhXFxcIixcXG4gICAgXFxcIk1hbGRpdmVzXFxcIixcXG4gICAgXFxcIk1hbGlcXFwiLFxcbiAgICBcXFwiTWFsdGFcXFwiLFxcbiAgICBcXFwiTWFyc2hhbGwgSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJNYXJ0aW5pcXVlXFxcIixcXG4gICAgXFxcIk1hdXJpdGFuaWFcXFwiLFxcbiAgICBcXFwiTWF1cml0aXVzXFxcIixcXG4gICAgXFxcIk1heW90dGVcXFwiLFxcbiAgICBcXFwiTWV4aWNvXFxcIixcXG4gICAgXFxcIk1pY3JvbmVzaWFcXFwiLFxcbiAgICBcXFwiTW9sZG92YVxcXCIsXFxuICAgIFxcXCJNb25hY29cXFwiLFxcbiAgICBcXFwiTW9uZ29saWFcXFwiLFxcbiAgICBcXFwiTW9udGVuZWdyb1xcXCIsXFxuICAgIFxcXCJNb250c2VycmF0XFxcIixcXG4gICAgXFxcIk1vcm9jY29cXFwiLFxcbiAgICBcXFwiTW96YW1iaXF1ZVxcXCIsXFxuICAgIFxcXCJNeWFubWFyIFtCdXJtYV1cXFwiLFxcbiAgICBcXFwiTmFtaWJpYVxcXCIsXFxuICAgIFxcXCJOYXVydVxcXCIsXFxuICAgIFxcXCJOZXBhbFxcXCIsXFxuICAgIFxcXCJOZXRoZXJsYW5kc1xcXCIsXFxuICAgIFxcXCJOZXcgQ2FsZWRvbmlhXFxcIixcXG4gICAgXFxcIk5ldyBaZWFsYW5kXFxcIixcXG4gICAgXFxcIk5pY2FyYWd1YVxcXCIsXFxuICAgIFxcXCJOaWdlclxcXCIsXFxuICAgIFxcXCJOaWdlcmlhXFxcIixcXG4gICAgXFxcIk5pdWVcXFwiLFxcbiAgICBcXFwiTm9yZm9sayBJc2xhbmRcXFwiLFxcbiAgICBcXFwiTm9ydGggS29yZWFcXFwiLFxcbiAgICBcXFwiTm9ydGhlcm4gTWFyaWFuYSBJc2xhbmRzXFxcIixcXG4gICAgXFxcIk5vcndheVxcXCIsXFxuICAgIFxcXCJPbWFuXFxcIixcXG4gICAgXFxcIlBha2lzdGFuXFxcIixcXG4gICAgXFxcIlBhbGF1XFxcIixcXG4gICAgXFxcIlBhbGVzdGluZVxcXCIsXFxuICAgIFxcXCJQYW5hbWFcXFwiLFxcbiAgICBcXFwiUGFwdWEgTmV3IEd1aW5lYVxcXCIsXFxuICAgIFxcXCJQYXJhZ3VheVxcXCIsXFxuICAgIFxcXCJQZXJ1XFxcIixcXG4gICAgXFxcIlBoaWxpcHBpbmVzXFxcIixcXG4gICAgXFxcIlBpdGNhaXJuIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiUG9sYW5kXFxcIixcXG4gICAgXFxcIlBvcnR1Z2FsXFxcIixcXG4gICAgXFxcIlB1ZXJ0byBSaWNvXFxcIixcXG4gICAgXFxcIlFhdGFyXFxcIixcXG4gICAgXFxcIlJlcHVibGljIG9mIHRoZSBDb25nb1xcXCIsXFxuICAgIFxcXCJSb21hbmlhXFxcIixcXG4gICAgXFxcIlJ1c3NpYVxcXCIsXFxuICAgIFxcXCJSd2FuZGFcXFwiLFxcbiAgICBcXFwiUsOpdW5pb25cXFwiLFxcbiAgICBcXFwiU2FpbnQgQmFydGjDqWxlbXlcXFwiLFxcbiAgICBcXFwiU2FpbnQgSGVsZW5hXFxcIixcXG4gICAgXFxcIlNhaW50IEtpdHRzIGFuZCBOZXZpc1xcXCIsXFxuICAgIFxcXCJTYWludCBMdWNpYVxcXCIsXFxuICAgIFxcXCJTYWludCBNYXJ0aW5cXFwiLFxcbiAgICBcXFwiU2FpbnQgUGllcnJlIGFuZCBNaXF1ZWxvblxcXCIsXFxuICAgIFxcXCJTYWludCBWaW5jZW50IGFuZCB0aGUgR3JlbmFkaW5lc1xcXCIsXFxuICAgIFxcXCJTYW1vYVxcXCIsXFxuICAgIFxcXCJTYW4gTWFyaW5vXFxcIixcXG4gICAgXFxcIlNhdWRpIEFyYWJpYVxcXCIsXFxuICAgIFxcXCJTZW5lZ2FsXFxcIixcXG4gICAgXFxcIlNlcmJpYVxcXCIsXFxuICAgIFxcXCJTZXljaGVsbGVzXFxcIixcXG4gICAgXFxcIlNpZXJyYSBMZW9uZVxcXCIsXFxuICAgIFxcXCJTaW5nYXBvcmVcXFwiLFxcbiAgICBcXFwiU2ludCBNYWFydGVuXFxcIixcXG4gICAgXFxcIlNsb3Zha2lhXFxcIixcXG4gICAgXFxcIlNsb3ZlbmlhXFxcIixcXG4gICAgXFxcIlNvbG9tb24gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJTb21hbGlhXFxcIixcXG4gICAgXFxcIlNvdXRoIEFmcmljYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBHZW9yZ2lhIGFuZCB0aGUgU291dGggU2FuZHdpY2ggSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJTb3V0aCBLb3JlYVxcXCIsXFxuICAgIFxcXCJTb3V0aCBTdWRhblxcXCIsXFxuICAgIFxcXCJTcGFpblxcXCIsXFxuICAgIFxcXCJTcmkgTGFua2FcXFwiLFxcbiAgICBcXFwiU3VkYW5cXFwiLFxcbiAgICBcXFwiU3VyaW5hbWVcXFwiLFxcbiAgICBcXFwiU3ZhbGJhcmQgYW5kIEphbiBNYXllblxcXCIsXFxuICAgIFxcXCJTd2F6aWxhbmRcXFwiLFxcbiAgICBcXFwiU3dlZGVuXFxcIixcXG4gICAgXFxcIlN3aXR6ZXJsYW5kXFxcIixcXG4gICAgXFxcIlN5cmlhXFxcIixcXG4gICAgXFxcIlPDo28gVG9tw6kgYW5kIFByw61uY2lwZVxcXCIsXFxuICAgIFxcXCJUYWl3YW5cXFwiLFxcbiAgICBcXFwiVGFqaWtpc3RhblxcXCIsXFxuICAgIFxcXCJUYW56YW5pYVxcXCIsXFxuICAgIFxcXCJUaGFpbGFuZFxcXCIsXFxuICAgIFxcXCJUb2dvXFxcIixcXG4gICAgXFxcIlRva2VsYXVcXFwiLFxcbiAgICBcXFwiVG9uZ2FcXFwiLFxcbiAgICBcXFwiVHJpbmlkYWQgYW5kIFRvYmFnb1xcXCIsXFxuICAgIFxcXCJUdW5pc2lhXFxcIixcXG4gICAgXFxcIlR1cmtleVxcXCIsXFxuICAgIFxcXCJUdXJrbWVuaXN0YW5cXFwiLFxcbiAgICBcXFwiVHVya3MgYW5kIENhaWNvcyBJc2xhbmRzXFxcIixcXG4gICAgXFxcIlR1dmFsdVxcXCIsXFxuICAgIFxcXCJVLlMuIE1pbm9yIE91dGx5aW5nIElzbGFuZHNcXFwiLFxcbiAgICBcXFwiVS5TLiBWaXJnaW4gSXNsYW5kc1xcXCIsXFxuICAgIFxcXCJVZ2FuZGFcXFwiLFxcbiAgICBcXFwiVWtyYWluZVxcXCIsXFxuICAgIFxcXCJVbml0ZWQgQXJhYiBFbWlyYXRlc1xcXCIsXFxuICAgIFxcXCJVbml0ZWQgS2luZ2RvbVxcXCIsXFxuICAgIFxcXCJVbml0ZWQgU3RhdGVzXFxcIixcXG4gICAgXFxcIlVydWd1YXlcXFwiLFxcbiAgICBcXFwiVXpiZWtpc3RhblxcXCIsXFxuICAgIFxcXCJWYW51YXR1XFxcIixcXG4gICAgXFxcIlZhdGljYW4gQ2l0eVxcXCIsXFxuICAgIFxcXCJWZW5lenVlbGFcXFwiLFxcbiAgICBcXFwiVmlldG5hbVxcXCIsXFxuICAgIFxcXCJXYWxsaXMgYW5kIEZ1dHVuYVxcXCIsXFxuICAgIFxcXCJXZXN0ZXJuIFNhaGFyYVxcXCIsXFxuICAgIFxcXCJZZW1lblxcXCIsXFxuICAgIFxcXCJaYW1iaWFcXFwiLFxcbiAgICBcXFwiWmltYmFid2VcXFwiXFxuXTtcXG5leHBvcnRzLmRlZmF1bHRVc2VySW1nID0gJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBWkFBQUFHUUNBSUFBQUFQM2FHYkFBQUFDWEJJV1hNQUFBc1RBQUFMRXdFQW1wd1lBQUFBQjNSSlRVVUg0UW9MRHlJaTlmTzkzZ0FBSUFCSlJFRlVlTnJ0blhlVVhkVjk3Mzk3NzNOdW5WdW1GMDFSUTcwZ0licHBCbVBjNHVRUmg0UmsyWDR2TG5pWjkzQVN4M0ZjMG9peFk4ZTQ0Zm9TbHpoT0NQYXpEUVNiSWhBZ0MxR0VoQW9hamRwbzJwMTI1NWE1OWJTOTN4OGpJU0hUWmpUbG5IdS9uNFZsekRKYW1uM08vcHp2YjFlV3llVUlBQUM4QUVjVEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUNBc0FBQ0VCUUFBRUJZQUFFQllBQUFJQ3dBQUlDd0FBSUN3QUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUY0TkRVMEFwb3M2NDcvVXFYL0lHRTJhenFSaDVTeG4wbkJzS2NPNkNQdEVSQk1obnhiMUNhVk8vdzdzNUgrbWZnRUF3Z0t6Z1ZTa1NDbEZpa2d3R3N3YlBhbmlrV3p4Y0tiWWt5NGRMeHFqcGsybVE0Wk5sbnlkMzRzUkJUVFNCUGxFbXk2V1J3S1hORVhQYjZqWjJGVFRHdlpMUll3Ukk4YmhNUEFhTDFFbWwwTXJnRFBUazFUS1VZb1JHOG9iMjRmU3o0M2xEcVNLQjdJbE0xc2lSeEk3TXhyTktDYTlsTkNtL2tZcEN1a2JtNk52YW9wc2FJaGMwQlJ0cS9FSnpqaGpnaEZuRUJpQXNNQVp1VWNTMlZMWlVsbFNEZVdOSndmVGp5WFNUdzVtUzlrU01acEtQa1JzYnV1M3FSU25GQ2xGdW1odmlMeDFVZnpxOXZnRkxkRzRYOU1ZMHdYbloxU2dBTUlDMWVVcFJWUjJaTUZ5K3JMbGJRUHBSeFBwcDRhemxDc1Q1OFRZS1U4dFZOSlRVMkdQU0xVMFJtNWMzblRUaXVhdXFEOGd1Rjl3Qm5OQldLQktQTVVZbVk3S1c4NXd3Zmp4b2RFZmRBK1hKZ3FrdVVCU3J5RXZxVWlxenRiWUh5eHYvTDNsVFcwMS9ocGQrQVZUQ3VhQ3NFQWx3aGtwUlRuTFNSblc4OE9UM3o0dzlPenhKQkVqd2NncjQwUlNrVlNrMU9iRjlSOWF2K2pTUmJGNnZ4N1JCV01FYzBGWW9HSlV4WlJTeWJMVk4xbSsrOURJOXc0TlU3Wk1taUR2VHNoSlJiWkRzY0F0cTl0dVd0bXlLT0tyOStzK3dhVlMwQmFFQmJ5S1lFd3FOVm95ajZaTFgzK2gvOEdESThROEZhbGV0MVIwSkJGZHRxenhnMnZiTnJWRTI4UCtnTVlkQ1cxQldNQnJxbEtraHZKbVQ2cndyWDBERDNlUEVtT2tWZWpHQmtlU0kxdGJZbjk3MGVLTFcyTmRFYjlQUUZzUUZ2REVFMldrYzViSW0zdkhjOS9aTi9oSXp4Z1JWYXlxenE0VDViTDIrS2N1Nkx5Z05kWVZDZWljMlJMV2dyQ0FXL0VKbmpQdFBSUDVIKzVQM0wxdmlLU3FDbFdkbGJha09uOUovVzBiMmk5dWl5Mk9CbTJwRUxZZ0xPQXVOTTZJcUR0ZGZLUjM0bFBQSEtlOFFVSlU3MVk5UnhMUjIxYTFmUGo4am9zYWErb0NldG1SZUVrZ0xMRHdjRVord2Z0ejVaMko3SmYzRE96dFN4Rm5oQzE1aXNpUkZQWjljbFBuTzFjMGJhd1BNeUpVaUJBV1dFajhndWN0NXplamsvZDBELy9uaThOa09sVlhBNzQyVXBGU3k5dmluOXJTZVcxblhVdklWN0lSdFNBc01QOVBqaWlraVVPWndpOFBqOTN4d2tBcFhTVEJDVnVGWHhGYmlvRDJnWTN0NzF2YnRybWh4c1NvRm9RRjVoUEJtR0MwZFRoNzErNytodytQa1NOSklGaTlYdFFpMnRCZSs0a3RuVGQwMVlkMVlXQlVDOElDODFNRzVpem52cU5qbjM2dWIzUjBramhEc0hwREtDTEhpVVdEdDU3ZjhVZXJXMWJHUTBYYlFkQ0NzTUFjVXFPTHc1bmlEdzhrdnJ0M01Kc3pNR0kxYlJ6Sk5ISE5zb2JidG5TOXRTMk84aERDQW5NQ1o2UnovbkFpODdYbis1ODROdTVZRHNyQW1VWXRSVkoxdEVUdnVHVHA3eXh0MERpek1Ic0lZWUZaUkRER0dOMTNmUHl2bmpvK01JSXk4SnpmZXlKbHkrYmEwSjl0Nlh6dm1yWTZ2NGFGV2hBV21CMDB6bXlwZm5aazdMTTdqZzFQNUprbWtBZG15MW1Sc08vbXRXMS9ka0hua21nQUt4NGdMREFMdGpJZDlSK0hSdjcrcVdQam1STFRPR3cxbXpoUzZPS0c4NXB1djJ6WnVycFFFYzZDc01DTTBUa3IyZkpITHlidTJOazdrU3ZEVm5PQ1ZNVFlWY3NiNzd6eXZIVjFJZVFzQ0F2TUJCOW5rNWJ6blJjR3Y3cXJMNVBIaE9CY29oUXhkdkhpK3J1dVhybStMb1R4TEFnTFROTldncWZLMXBkMm5malhGd2J6SlFzVGd2UGhMR0lidTJyLzc1dFhiYWdMdzFrUUZwaUdyY1pLNW1kM0hMdm40TEJoT3RqSlBGL09JaUsxdktQMng5ZXQzbGdiTXJIV3dYM2d1KzA2ZE03R1MrWm5kaHo3eWY0RWJEVy9uMjhpWWtjSDBqYy9jckE3Vy9aeDlBNElDN3dtZ3JGSjAvbnE3djUvM3o4a3BZU3RGc1JadlFPWld4NDdOSkF2NjJoL0NBdTg2c05nWkRqeVJ3ZUh2LzVjMzlUVUZkcGtZWnpGMkhPOUU3ZHM2eGt2V1JxY0JXR0JWK2dtakd4SlB6ODYvdGtuRGp1MmhLMFdPbWZSdGlQakg5OStaTkswQlo0RmhBWE82aUJTMFVNbmtoOTk1S0Jsb3hKMGk3Tis5dUx3NTU4OVVYSWtIZ2lFQlU2amlKNUpaUDdrVndjc0M2UHNibktXb204ODEvZWR2UU9XVkhncUVCWTR5WXNUaGJmZnY4K3hIRlNDTG5UVzN6eDU5SjZlVVFlbjBFQllnQkdObCszTDczdEJsaXpZeXJYTytzakQzYnRISjJFc0NLdmFNUno1cDFzUFVxWU1XN25hV1ZKZTk5LzdKOG9XR2dQQ3FsNGNwYjYzZitqSkkrTVl0M0s5c3hqbGpac2ZPb2lMd2lDc0trVVJ2VENXKzh6amgyRXJyempyMmVQSnIrL3BoN0lnckdva2JUalgzcmNYbGFDbnVndjdoKzFIZDQ5T29pVWdyS29yQm05OFlCOFZURFNGNTNMV2RmZnZUUmsyV2dMQ3FpSyt1bnRnVDE4SzhjcVRGTXozL09vQUNrTUlxenErMEVUSE02WGJmM01VUTFmZURWblBuNWo0bHdNSlBFQUlxL0tSaXY3NGtZTm9CNC8zRy9hSjdVZEdpeGFVQldGVk1vS3hmenMwMGoyVVFWTjRIc3Y1K1BZanFPa2hyQXF1SkdpaWJOMzJ4R0VNWFZVRzl4NGNlV1F3Zy9ObklLeEtiV3YyVnp1T2Nrd3dWYzRuaUc3YzJsMjJKWXdGWVZVYU9tZmJoN1AvZFNDQnV3MHFDUzFiK3NLdUV6b09VNGF3S3V0TFRDVmIvdW1qaHdoejRaV0ZyZWpPWFgzZDZRSU8rWU93S2dlLzRIZnU2UitmS0tBcEtsSmFmL0hrRVF4a1FWaVYwc1NNSnNyV2wxOFl0SEdnVWlVaWxkclpsM3A4S09PRHRDQ3NDaUNvaVR2M0RsSUpKNU5VTEpaVS8vVGNpWlBIS2dNSXk3c3dSdW15OWQwRFF3WnVFcTdna0NYVjg0T1o3Y01JV1JDV3h3bHI0czc5UXpZMk9WZjRkNG5LanZ6SzgvMEN3b0t3UEIydnNvYjkzUmNUWlJ2eHFzSnhIUG4wUVBxNTBVbmN2UXBoZVpXUUpyN2ZQV0pueTFqTlVBMWZwN3hwZjNsM3YxK2dUMEZZM294WGVkUDUwY0hobk9WZ05MWWFzQjI1dlQrOWV6eUh6VG9RbHZmd2MzNWZiM0l3bFNlc1pxaWFiMVMyWkgxbHowQllGMmdNQ010cnd0TDRUN3BIc2dhdUdxd2lMTnQ1YWpBOVVqQTRIanFFNVNFRVkwZlRwVVBqT1lYVkRGVkdvV1Q5ZCsrRVgwQllFSlozQ0dqOG5tUGpHY1BHNkZXMVZZVVRodjNMWStNK0RMMURXRjVxVnNZZTZSMmZMT015NTZwRDJmTFFlUDV3dW9TaGR3akxHK2ljN1JtYlBKRXFFaTRxcU1hUVJhbWllZS94Y2F4dmdMQzhRVkFUZHg4ZEh5c2hYbFZwVlpndVcxdjdKcEN3SUN4UGZGL0pzT1hUQSttaVlXRUFxMHFScWpkVmZINDBoMVh2RUpicjYwSEJueHViSEo0c1lYVjdOWCsxeG9ybXIvdFRxQW9oTE5jTGk3TWRJOWtVNWdlcnV5ck1scTJuRXhtaG9YOUJXTzVHRTN4SElwdkdBRmFWNDhpeFhIbXNZR0lGS1lUbDR0WmtMRlUweDdNbHduclJxZzlaNlpLMWR3ekRXQkNXbStNVlovc204dW15alhoVjljS2laTm5hTlE1aFFWZ3VSdWRzMTFnK1djYjhJSVRGTWlYcjZkRkpnWEYzQ011OUNVdnc3U1BaVk5GRXdnTGt5TlJrZVJ3Ym9TRXNsellsWTZtaW1jWUFGamdWc3BKRmMzOHlqNm9Rd25KcFBiZ3ZtVThpWG9HVHdxS3hrclVid29LdzNJbGdyQ2RUVEJzMm1nSk1HU3RWdHA1S0YzRXpCWVRsU21GeDZpc1lremdRR1p4S1dHUTZUczVBNG9hd1hObVVqQjNNR1VYTHdZV2E0Q1dLcHAwdVlma29oT1hHTHlxanZFRW1FaFk0SGJKeXBwM0ltemgvRk1KeVhieEtGbzI4aVFFczhMSnYyS1RwSkxDeUFjSnlHNExSY01ITUlWNkJsNU16N2FHaUlTQXNDTXR0Q1N0Uk1ITVc3c2dCTHlzSk02WXprRGRRRWtKWWJrdFliQ2hmbmtSSkNGNXVyTHhwSDhrYkhDc2JJQ3kzbFlTRFJUT0xraEM4UEdHUjZSZ0ZFeTBCWWJtdUpFd2FkaEdiY3NEWktNdHlERWZpUXdaaHVZdXNMYVZVV0lRRnprcFp0bEtHb3pDMkNXRzVLL3lYSFlsN3ZjQnZZMGxwMkZoT0RHRzVEVnVTbEhndHdXOEppMG9vQ1NFc2x5VXNSa2hZNEJVL1pJNHMyeElsSVlUbEtoUlpEb1FGZm51c3dKSUtnKzRRbHF2ZVNiSWQ1V0RBSGJ4eVNhaVFzQ0FzZDVXREpWdWFVc0pZNEJWS1Fxa01CKzhHaE9VbVpabFNPcWdId2FzSXE0eVNFTUp5V1ZYSXNJc1F2TWFnQVlDdzNJSWk1ZU5NWTR3SUlRdWNqY2FaWHdpOEdSQ1dpNHpsMTdpR0RhN2dsZEE1OHd0OHpDQXNGL21LZE00Z0xQQnFDU3VnY1FWZlFWZ3VnakVTR01ZQ3IvQTEwemtMQ0E1ZlFWaXVlaThWQ1U0SVdlQ1ZFcFpmSUdGQldPNTdNWWt4akZTQXM5QTU5d3QwTkFqTGJiNUN3Z0t2a2JEd0tZT3czRlFTVXAwdW1PQ1lEQUpualJYNEJBdjdCRXBDQ010Rk9FcDFCSDB4WGFBcHdGbjVpZ2QwblRQNENzSnlsN0Rhd3I2b0xoQ3d3Sm54aW5UUkdQYmpyWUN3M0lWVTFCYjJSM3lDRVAzQkdjUjkydUtRejhGYkFXRzVMV0cxaFBRSVNrTHdzb1JGVVYyMGhTRXNDTXQ5Q2FzMTdJL29Hc0kvT0xNa2pQaEVXOGlQZ3p3Z0xMY0pTOVVHOUlCUFlHTStPSk9JTGxxUnNDQXNkK0lMKzBqakNGbmdwWkl3NHROYWF2d1N3b0t3WEJleXBGb1RDOVg0ZFN6RkFpOTFMMTlBcS9WcktBa2hMTmRoSzdXK0x0Z1F3REFXbUlwWEtoRFFWOWVGa2E0Z0xEZGlTYlcrcnFZaG9HTmxBNWlxQnhzQ3ZnME5OWmFVYUF3SXkzMEpTNnFWZGVGNHlJZW1BRk1KcXlHb3Jhc0wyeWdJSVN4M3dvamFhMFBjaDZvUUVDbXE5K3ZyNm1zZ0xBakxyU0ZMcWMwTk5mVUJEZVB1c0JYNVJMZzJxQXZzSW9TdzNJb2wxWWI2bWpxL0RsL0JXTFYrN2ZJR3hDc0l5ODBKUzhyTlRaSDZJTWJkNFN1cUMrZ2I2aUFzQ012RlNFVVJuL0RWaGdpYkNxdGRXS29wNkx1MExZWXBRZ2pMM1ZXaG8yN3VyRzBPK2hDeXFqbGVrVS9yYUluRXNHUVV3bkk1aGlPdjdhaHRDbUVZcTZyajFhS1E3M2M3Nnd3SDhRckNjamVPVWt2ajRYaGRtQVMyUVZjdnpXSGZEWjExSm9RRllYbWdLclRsZXhiWDE2TXFyRm8wSG11c3FRM29xQWNoTEE5Z1NubDlaMTFkQUZWaGxkYUR6VUg5L1YzMXFBY2hMRzh3dFVlbk1SN0VyVjlWS1N5cURmcmUzRkZyT2ZoZVFWamVxUXB2WE5ZUXgwYm9La1R3NXZwUWV6U0lRL3NnTE05Z09QTDNsamJXaDdFUnV1cnF3YWFRZnV1YXRyTGxvREVnTE0vZ0tMVWtGbHpYVVNzMHJDQ3RKaGpycWcyL2Uya2o1Z2NoTEk5UnNKeFBiMmh2Q0dHdXNIcmlGVVg5Mmsycld3aDczeUVzejJGTGRXRkw3THptQ09ObzVHcWhPZUwva3hWTlpjUXJDTXVMbEd6bjR4dmJZMzRjajFVVitIVis5ZExHNWhDdW5JQ3d2SW5weUxjdmFWaGNHOExkWDlWUUQ5WUVmZjluWFZ2ZXhuQTdoT1hkMTFpcDk2OXZDK0x1cjRydlNJSnRXQlJiMXhCeHNMd2R3dkl1WlVmKzBYbk5iVEdFckFxUFZ3R2Y5cW56TzR1V2pjYUFzRHlkc0tnMm9IOXdVNGVHdmRDVmkrRHNpczdhcTl2akZ1SVZoT1YxU3Jaenk5clc5VTBSR0t0aWhSWFVQbmZwVW13ZWhMQXFvMXdnditDZnZIZ3BFMmp0Q29ReCt2MVZMWnViSWpnTkdjS3FFQXhIdm10SncxVmRkV2p1eXFNeEdyemp3c1Y1N01XQnNDb0pTZW9mTDFzbWZkaXBVMm44eFlWZGJUVUJwQ3NJcTZLd3BkclNITGxwZFN0MjZsUk9NVWkwcmpuNm9UVnRSYXk5Z3JBcWo3SWpiNzlvY1YwOGhLYW9EQlNqZjNqVE1oL21meUdzeW55L0ZYVkVBbCs2WWptaGZxaUVJbDk5YUhQWFd6cnFzSlFCd3FwWURFZStaMW5qSDI5b0p4eEg2ZkdQejhxVzZLY3Y3SkxZd1FCaFZYd2Q4YmVYTG1tdUQrRlY5ekNDZi9XYWxmVkJIUU9TRUZibEY0WnROZjY3cmxtRjBYZXZZanVmdW56WjVhMHhMTHlDc0tyamhaZnF1bzdhMnk1ZFFwaGQ4aHhTYmU2cS8rajZSVGhEQnNLcUloaWpqNTNmc2JJdGpnRjRMejAxSWhMc3E5ZXNyTUY2T2dpcjJxZ0w2TisrYmpYNU5ZWnZ0VWRzcFN6bjY5ZXZXVjhmeGhPRHNLb09SYlNwb2ViSGIxK3JGTTZlOGNMek11eS92bXJGSHl4dndzT0NzS3EzTUx5aHMvN0wxNjlXcG8xdTRHb3M1OFpON1IvZXNDaW9vY3RBV0ZXTXp0bE5LNXB2dld5NU1uSDJtMXR4NUtyMitPMlhMYXYxYTZnRklheHFKNktMMnpaM3ZIVk5LMkhIdnd1UlNrUURQM2pyMmtWaFAyd0ZZUUZTUkUxQi9ZdFhubmRlZTV4d0NKeXJhbmFsU09lL2VNZUdWYlVoMkFyQ0FxZWR0VGdhK09IMWEwUHhFQlk2dU9pNUtQVWY3OXh3ZVF0T2k0V3d3Tmw5ZzliVmhmN3JIZXNvcUdNUnZDdXduVy9lc1BhNmpscU53VmNRRm5pbG5QV201dWgvdm1NZDZRTE9XbUFzNTR0dldYUGppbWEvNEhnU0VCWjQxZWR4UTN2ZEQ5NjJsampEN3VnRnROVmZYN25pNXRVdFFRMjJnckRBYTRZc3p1aGRpeHUrOXBiVnhBbk9XcEJLOEphTGwzeDQ0NktvVDBQTWRSc2Ftc0NGenRJNWUvL3FWcDhtUHZMSVFUSWxGc0xQSDQ3ODJLWEwvbUpMVjl5dk9kQVZoQVhlb0xNWTBYdFhOT3VhK01EV2Jpb1loSEhmK1doMDlja3JsdCsycWJOR0Y3QVZTa0l3dmU1aktmVW55eHQvK3JhMThWZ0lZL0J6WDRyVDMxMjE0dU1YZE1GV0VCYVlJV1ZIdm50eC9VL2V0bVpwWXdUT210TWkvSE5Yci9qWXhnNmY0TEFWaEFWbVR0R1cxM2ZVL2V2MWF6WXZpcE5TR0lhZmRVU043MHZYcmY3WStSMmNFNDdsZzdEQXVWS3duRGUxeGI1MTNhcnJsall3emhDMVppbFlLU0phMFZSenp3M3IvbXhkbXkwVnRoaTRINWJKNWRBS25pQ2c4ZUc4ZWZzengzLzA0ckJqT3BnNlBFZGJjYzZ2VzFKLyt4WEx0elJGY2lhMm5VTllZTGJST1NORmQrd2Z2R3RYZnpaYk9qbWJDS1p2SzgydnZYOXQyMmN1WHRJYTloVnRpVmFFc01EY1BEQkdVVjM3NWZIeGYzcm14SE9Kak9OSXJIaVlscW9ZWXcyMW9ROXU3dmowK25aaWhHdFFJU3h3V2k2YzJKUlBwcVRDNk5UL0ppSWlXNnFaelVsRmZPSklwdnk1cDQvZmZYalVLbG5FNGF3M2dGU2FMcTdwcXZ2NFJZdXY3NnliTk8wWnREMW5wUFBUSTcrSzFOUnZvazc2a0JSaExBekM4a1JURWpIR09DTkdKQmhUUkRuTHlScFcwWmFHSTIycExLa01xY3BTT1ZLU1ZDVFZpcnJ3a2xqUW5ORVpXRDdCbFZSL3YzZmdwd2NTdmVONWtncmFlbzFnUlVTMWtjQWZybW45N0piRmpTRzlNS096RWdWakJkdDVlamlycHRURldZaHpIMk82WUZPL0JqVVI5V2xSbjlBWWswUlNLYVZJS3N5U1FGaHVpbEdDTVowencxRlp3ODZZVnRxd3h3eTdWTGI3czZYRDZVS2lhS1lOTzI4Nk9kdkpXakp2T1dUWlpEbGt5ZC9kc09qVGx5eGQzeEF1MnpOeEZpT0tCdlFuQmxQZjJqM3dZRjlxTW05TVdSTVA1YXhnUlJxL3RDMyt2ZzJMUHJDbXRlekltVjJBcW5FMmFUci9zbi9vYjdiMWtGTGswMGdYZmszVTZqemlFeEZOaS9oNFU4aDNYankwSkJhc0RmbHFmVnBkUUl2NzliaGZDMnJja2NwUkNGOFExc0xsS2NHWmovT0M3ZlJObG85TmxnYXk1UlBaMHJGczhVaW1kQ2hib2x6NTVGWm14azRWaE96MHYweU1HSkVqdDNUV2ZmR3FGWmUzUmtzemNwWWlDbXBjS3ZybWk0bGZIQng1YWloTnRrVFVPcTBxb3E3NjhQWExHbS9iMEw2MkladzFabmh3dmsvd3NhTDVyVDJEWDl4NTdHVHpubFVLVHYyOVVpZlh5Z1gxam5od1pUeTBQQlpjRWd0MnhvSmRzZUN5YUNEdTF4eXBMSVhRQldITnI2Y01SL1pPbG5xeXBlN3gvTTZoek1PRGFTZFhQalZ3eFU1NjZvMTFxcTZtbXE5ZHMvTHRuZlVsMjFFei9WTkYvZHFMRTRWdjdCOTYrT2hZNzNoK0duK0F5cXdCaWFTa2tPLzNsOVQvNFpyVy83R3NxV1E3cGxRemE1R2d4ZzluaXQvWVBmQzlYWDNFK1J1YW1WV0s1TlN2aXBTaW9INVJXL3lhOXZpNnBzaDU4ZEI1OFdCRTF5d3BiWmdMd3BvN1Zma0VWMHIxNXNvSFVvV0RFNFhkaWV6V29Vd3BXeUlpRW56bXVVYXFlRzNvbjY5ZThjZExHeTJsWnJ6WVd1Y3NxSW1mSHh1L3AzdjRubVBqTkRVWVg0WGFjaVJ4ZGxGSDNWVXJtajY1cmkzcTB3cm5jTHRIalM1MmplWHVlUHI0ZmQwakpHYTYwRm9wY2hRNWtvVjlsN2ZGTDIrTHJXMnNXVlVYWGhrUCtUVnVPaEtsSW9RMW0vZ0ZsMHJ0R3M5dkhVd2ZTR1MzRFdjeTZTS3BjL1BVV2NWTGpmOXJWeXovbjZ0YkdHUE9PYnkvWVYxa0RQdUxCeEs3ZTVPUEpqSlVORW53YXRHV0k0bXhkUzNSSzd2cTNydTY5ZUtXYU01MHptVzNUZFFudGc1bS9uYkhzWjBuSm1iblFaOHlsei9pdjZ3dHZyazFlbFY3N1JXdHNaQXV5ZzcyQlVGWTU0ek9tV0JzWDZyd2kyUGpEeDlQUGorWUprdVN4bWQvbkVncUZ0UnZ2MlRKaHplMDErakNPSWZyY3poakVWMjhPRkg0enhQSmZmM3BCd2RUVnM2WU5iZTZWbFZFR3hmRnIraXNlOGVTK212YjYyeWx6SE5ydzZEZ1ArMU4vdDF2amg0ZW1aejlwbE9LYkVsRVMxdWliMTNXK0s0bDlWZTJ4alhPREFkaEM4S2FFWUl4bjJBOW1kSXZqbzF2UFo3YzNqOUJsaVJOek9IaWNxbTRUM3hzYytjSE43YXZpQVZ6NTNaTm9jNVpTQk5ITXFYNytpYWU3VS85dWorVnk1VG1STFVMaUZKVHFXcHplL3lxcnZxM0xhNi9hbEd0VXVwY3VyMGlDZ2hlZHVUM3UwZis4Wm5lZExvNGR5M0dpSlFqaVdoMVMrektwZlUzTG0yOHNqVW1sVEpoTFFocldxK1JUL0MwWWYrb2UzaHJiL0xSL2pTVnJibFYxWm0xb2VEdlh0SDB3WTN0TjNUV0ZXMTVqbldDeGxsUThQNTgrYUgrOU03KzFBTjlFOGxrZ1FRbjRmSGhMVWVTSXluc3YzWlI3WmIyMlBVZHRaZTN4WlVpODV3VFNrUVhoekxGNys4Yit0cmVRWHRlRnVVeUltVkw0clN4TGI1bGNmMnRhOXBXeDRPR1JJVUlZYjNoWUxWdE1QT3RmWU1QSDB1Vzh3YnA4enNHcEJRcFd0b2MrY2ltemcrc2FnbG92T3ljNjJZM3daaGY4TEdTdVcwd3N6dVIyVEdTZlhZNFMwV0xOTTQ0Vng0U2wxUlQxZCtTNXNoYnUrcFhOMGN2YTQ2dWJ3alBpcW9ZVWRTblBUeVF1bXQzLy8ySHgrWjVMZTVKYlduOFRaMTE3MXZYZXZPS0Z1d2NnckJlQjcvZ09jdjV5cDZCKzN0R0R3eG5UeTVRV0tDZUdRajdQclN1N1NQbnQ2K01oeWROKzl4L3l5a1hGeXpuUUtxd081ay9OcDUvZERCemNEUkxwa09DTXpmZlozWEtVMDMxNFRlMXhqYTFSRGMyUlM1c2lqWUVkRk5LZXpheWlNNlp6dG0zZTBidmV1N0VrWkZKb29WWmdzc1VLZHRwclF0ZHRxeng3eTdvV2hFUGxtMUlDOEw2TFRoaklZMC9PcEMrYzAvL1k3MFRWc2tpalM5NEw5VTBmdldTaG85dTdueFhWMTNKbHJOeUdDWm5wSEd1TVpvbzJ5K21DM3RUaFo3aHlZY0dVMzFqZWJMbHliSDVseGE3THF5a3BDSXBpYkhtaHBxckY4VTN0MFpYeEVNcjRxRWwwUUJuekpScXRxcW1xRStjbUN4L2IvL1FYZnVIOHRueXd2LzRVaEdqeXpycTNydSs3WCt0YmpXVmdyVWdySmNOOUppMnZHTjMvd005bzkyamt5NWF2cVFVRWJYWDE5eTZ1Zk9XdGExQmpjOXNRZnlyT1ZybmpCR05GTTJlVFBGSXB0UTdrZDgzVVhnbW1aOU1GMCt1bU9kVC9wcVhuMVNxazR2RnBTTEJRckhnbG9hYWpRMDE1elhVTElzRmw4YUNuVFYrd1prdDFTd3VBTkE0QzNCK2I5L0VkL2NNUE40M1lacU9peVlsYktlbE5uVEI0dnAvdm1UcGtraWc3RWgwVlFpTC9JS2ZtQ3g5Wk52aG5RTXBvMlROZkhIZ1hINXZhMEsrM3oydjZhT2JPaTV1amhZc1ozYlBIUmVNYVp3UlVhcHNqUmJONFpJMVZqUUhNc1VYeG5JN3gzUER5UUlaOXVuWU5lVXZkZzVPVjZmRTlKS2VHS093YjBrc3VDSWE2SXdHV2tLK1JiSGdva2lnSmFnM2gzd05BWjB6WmlzMTZ3dVZhblNSS0JqZjJqdjA0NFBEUStraWtYTGRSSVJVeE5tRnJiSFBYTGIwSFVzYThwWURZVlcxc0VLNmVDcVIrZlBIZW5ZUFp4ZHEyT0lOdnJoQzQ0dnJ3emV2YWZ2b3VyYUdvRjZ3bkZrdkVqaGpuSkZnakloeWxwTXNtaU5sSzF1MjBrVXpVVENHQzlad3dSZ3FHRU1GYzdCbzBHUjVhck1lblQ1QWg1MCtSb2RlZHVUS1MybVJkRUYralh6YTBwQytQQlpjRmdzdGl3WGJvb0VhdnhiVFJkeW5SWHdpcElrYW45QVljNVJ5MUp5Y3M2NXhGaEQ4Vi8ycE8zZjFQVDJRTHBkZCthRjZDVWN1YlFoLzdLTEZ0MjdvbUpYUlRBakxrOFQ4Mm84UERYL3VOOGQ3eG5PdWZsL3BWUDlYS2h6UU55MkszN2E1NDUxZDlWS3B1WnRGbWpyTVN6Q2FHaTBxMlU3SmxpVmJGbTJuYU11YzR6aVdOR3hadEp5ODVSUXNwMmc3T2RQSlc3Sm9XbmxiU3FWaVBoSHo2YkdBSHZieHVFK0wrdlNvVHloT3hMbVBzNGpHSTdxbzhXa1JYWVIwd2Vqa01TeHpmYVRVMUFtSS9mbnluYy8zM1hOb2RIaXlURXA1WUlXSFZJMFIvODBiMnI5eStmS2NiVmZ0aW9jcUZkYlVidUhQUHQzNy9UMERpV3pKUzJzcGxTTEdHc1ArZHkxdi9NUkZpNWZIZ2tWN1BoWkhNMFpUUmVCVVhUaDErSmVqbEtPVUxaV2p5SkhLbG1xcWNKdnFUenBqR21lNjRJS1J6cm5HbWM2Wk92VlRLRHE1TzNnKzkvOEdOVjZ5NVBjT0RYOW4zOUJ3TWw5eTFZalZHM2owUWI5K3ljcW0rOTY4aWppcnppWHgxU2dzUmhUU3hQdTI5ZHgvY0RoWE1qMjVmbElxdnk3cWEwTzNuZC8rNFRWdFUydTFGckE5NlhRNXlNNnFDT25sWjNJdUZCcG5HbU5iQjlPZmYvYkV2dUZzcm15NWVnVGdOVksyeGkvcHF2MS9ONnlMK2JVcW5EcXNSbUZGZEhIZGd5OXU3eG0xUFgzM2pDSWlWZVBYMTdURjdyaHM2Uld0c2FsRFRRbThITUZZUU9OSHM2WFBQWDM4VjBlVHFiSjVjcGpmeTUvY0N4YkY3MzNYaG5oQXJ6Wm5WWjJ3WWo3dHBxM2RQOXVma0haRlRMZ29SWnpWQm4xdlhsei81eGQwYm1tS1FGdG5xc292ZUgrdS9NOTcrbjdXTXpaWk1FM0xxWkN0bEl3dTZLeDk1TjNuYTV4WDFSYWU2aEpXeks5OWVGdlB2KzBkTEZmWVBYUkthUnFQNk5yNTdmR1BiK3E4dHFOV2tqS2Q2dFhXMUpyKzNtejVDN3RPM0h0NHJHamFodVZVMmhrN25GMjB0T0h4ZDI2d3ErbmFpeW9TVml5Zy8rVnZqbjVuVjEvZXFOQ0pZYVc0NEdHTmR6UkhQN1dwODhibGphcjY5djNybkdtY0hVb1g3M2oyeEsrUGpwY3R4N1NkaWowT1RMQkx6MnQrNHUzclMwNjFmSjJxUlZoUm4vYWwzWDMvdExNM1ZUQXIvUEpSUmNSWldIQldGL3JDNW83M3JXN1ZHSnZ4ZldMZVNSdWtjVTZrZm5FMCtlMERReThNcE11T3RCMVYrUmZOYXZ6YTFTMlAzTEN1U3RablZZV3dBaHAvcUcvaWZ6L2MzWjh0VmRXUndYN0J0WkIrMDNuTjcxM1Zja2xyZEdyQlFZV0phK3JLb3Q3Sjh2Y09ESDYzZTFUbWpWbmNZK2lKNzFNb29IMTBTOWNYTDErV05TcmZXWlV2TE1IWXBHbS84eGN2N0Vsa3F2TmVCc0daeHBpSUJXNWQxWHp6aXBaVmRXRkxLcTlmbHNjWkU0eVVVdmNlbi9qSy9xSDkvYW1pZ3ZpbUFBQUxmMGxFUVZTcEpXQlYrSHhKcWE1NDZCdHZXWFY5VjMzWnJ2RDloaFV1TEVZVTFzVTFEK3pmZm1pVXF2NDhOTTRZNXl6WVZQUFoxUzN2V2RIY0hQVFo4N3R1YzFaS1A4NVl3WklQOTZkK2ZtenMxOGVUbG1GTDNEMmoxSlpGdGI5ODk0YVlYNi9zMnIvQ2hWV2ppeS9zN3YvU3p1UFpvb2tiUnMvMHVPSXMwbGp6M3M2NnQzVFVYOXdhRGV2Q3piMSs2bmExZ2NueWcvMFQvMzQwdVhjZzVlQzhsZDlxbzJ2V3RENTh3N3FpWGNrRDhKVXNMSi9nejR4TTN2TFFpejFUOS9TQlYvazRreVlhbXlQdjY2aDljMmY5cHFaSVVPT0tGbmkwZXFyTFNhV09aa283aHpOUEpySVBKYktGVEducW9Dandpczh4SHZKOTRyS2xmN21wczFDNWh6cFVyTEFFWXpuTGZzOS83OS9SbXlUTzhUNi9BVU1vVWtRK3NhSTFkbU5IN1hXZDlhdnJ3ejdPNlBSeERHd3VEcmFiMnUxODVua3plOGR6RC9kUGJFMWs5dzVQeXJMMXNuTWd3R3ZneURWTjBXOWV2L3JpMXBoWm9ZZG5WYXl3b2o3eCs0OGUrdmtMZytUZ216d1RoWkJTcEhGZkpMQXFGbHdaQ3l5TGhwWkdBMHRpd1dYeFlGQVRkTVl1YUNKaTdQUVd3cGVrZHZZdDd2VFN0c0tUdjcwdDFXalI3RWtWam1XTGh6T2xnNW5Td1V5cFBGbWF1Z2puNUtsYllKck91bnA1NDMrOGZYMUVGeFU1bUZXWndncG8vUDdlNUNlM0hUNldMSkRBU3o4YnlldE1rWVgwK21pd0thREZkUzJxaTdET0luNDlvb2thamRmNDlCcWRSM3lhenRta2FlY3RXYkRzdk8wVVRHZlNzbk9Xekp0MnpwWVp3MG1VekhLMlRNNnBWWjBuUFlja2RhNGZHOTJuM1haaDErY3ZXMWFSaGFGV2VUOFNaeXh2T3QvZm56aVd6SHZnbEN1M2Y5SE9sTWdwbDFoeUlwbWZvRE5PWUZEMHN1TVkxSm4vK2t0L3oxN2h0OVVFMm5oV254ZXpTdGJXWThuZldkSndZWFBVcUxqQ3NBTDdjMEN3N3g5TVBEV1lSa0V4cHgyREdEdDVxeEJuSkJnSmZ2b3Y3ZFJmWi81RGZzYi9ueUZKelYwSTRTOE1aNzUrWUVncVZYazlvTktFNWVQc1lLWjQ3K0d4N0dRWk00T2dXZ3REOXV5SjFNK1BqUWNxcnNLb3FKK0hFWEhHN3R5ZjJER1FScTBCcWhmQitwUDV1N3RIUm91bVZsbWY3WW9TbGwvanYrNmJlUHJZT0RrU0ZRZW84c0x3MGY3VXYvZU1DbFpSZFdIbENFc3dsaldjdTN0R0Q0OU1ZcXdkVkR1TWxmUEdMM3ZHbmsvbWZSWFVIU3JuSi9FTC9xc1R5VzE5RTdBVkFFVEVOUEhzWU9ydW8yT01LcWZlcUpDK0xSaExHZFpqZmFteGlRTEcyZ0VnSXNXSUhQbHNYK3Jac1Z6RmhLd0srVEg4Z2o4NmtIN2tSQkpqN1FDYzhTVVh6dzZsSCt5ZlVFcFZ4bWU4RW9URlQ4V3JFY1FyQUY1V0ZoSlo4c2tUcVgycFFtV0VyRXI0R2Z5Q1B6bVVlZUQ0T09JVkFHZWo4ZDhNcEI4ZlNNdUtDRm1lRnhabkxGVzJIdTFQalNUekRQRUtnTE5ERmlQVGZxZzMyWjBwNnQ0UFdaNy9BZnlDUHpNMmVlK3hjUkljSjdvQjhJb2hhOXVKMUZORG1RbzRtTlhid21LTWlwYnpUQ0k3TXA1aldNMEF3S3YxRThQYTNwOGV5QnRlWC9qdTdVNnVjMzR3WGRqYWx5S0dlQVhBYTRRczhVQnZjbDh5cjBOWUMvbmxJRHFZekQ4M21NWmlVUUJlczZPejRtVHB1VVFtWGJZOXJTd1A5M1BCMkdEQmVISXdUWWFObllNQXZHN0krcmVqNDN2VEJaK1hUd3ozOEIvZEoxaDNxdkRUbytPa1l6VURBSzlYamdnK09wbzdNSll6SE9uZDc3dFhoY1VaWlF6N21hRnNPVnZDWWxFQVhwZXBNL1VmNjB2MTV3M2gyUzdqVldGcG5CL09sbjU2YkF5alZ3Qzg4Vzd6d1BIazBYU1JNd2hyZnBGSzlhYUxoeE5aQ0F1QU4xd1dNaXFaTzRZeXFiTGxVV2Q1c3JkenhzYUs1dmJCREZYbzVXc0F6QldDMzk4M01aQTNQSHFabENlRnBURjJvbURjMDRlekdRQ1liby9uUFlsTUltZWdKSncvSEtXR3MrVXNMcUFIWU5wVklaRXRkd3lsVTk1Y2tPVTlZWEhHeGt2bVl3TXBRamtJd0l5cXdudFBUQXdYVFM4T1kzbFBXSUxSUU5IOFNXK1NOQXkzQXpBVFlSMUxaRWJ5bnF3S3ZkZm5IYVZHc3FWeUVtZjFBVEJUSkQwK2tFcVhMYy8xSVk4Sml6T1dMRmtQOWszZ2xRUGdYT3FVbi9VbVJ6MjR1SUY3cloxcHVHejk4RGl1eGdIZ25LckMva1IyTkdkS3J4MXk0ckZ1YjBrMW5DbXJDY3dQQW5DdWJPMmZ5QnEydHpLV2w0VEZHT1ZNNTZsRWhoaHNCY0E1ZG4zMitGQW1hOXJjVTBlZGNFLzlXVm5Pc25lTVpCR3ZBRGpuN3NUM0RHWnlKaExXWENhc2pHRS9NNWdtamdFc0FNNnhPeEdaOXBGMDBmRFUvall2OVh6VGtYMlpFcFZ4WEI4QXMxTVY3a2hrQ3Biam9aRGxHV0V4UmdWTFBqV01laENBV2FzS24waGs4NWJEdkJNQnZDTXNZbm5iZVRLUmdiQUFtQjBFTzVUSUZpekhRejNLUThLaW5HbnZUV1F3Z0FYQXJHRTdCNUo1RHcxamVhYnptMUllbmlpUTZXQUFDNEJackFxZkhFcVhiTStFTEc4SWl4RVZiZm5FRU9JVkFMTXJBTFp0S0Z1MHBWZkczVDBpTEVZbDIza2NBMWdBekxhd1RpU3lPZE5CU1RqTDVFem55QkNFQmNCc28yajNhTlowdkxHcjBCdkNNaDIxZHp5SEUvc0FtSXVROWZoUXB1eVJ5d285SUN4R1ZIYms0NE5weENzQTVrSllqdzVsREVkNllqckxDd21Ma2VISXh3WlJEd0l3SjhJYUhjMWx5alo1b1NqMGdyQVVaUTE3Y0hRU3dnSmdqdGlaeUhqaWNDd1BDTXVTYXRkSWxoUmVLZ0Rtc0NvMHBRZUdzZHd1TEVaa1N0U0RBTXl0c0xZTnBpMEhDV3MyTUIyMUZTdXdBSmpEWE1BeXljSkV5WFMvc2J4UkVpWW5DamhsRklBNXJXVU9UT1FkNVhabHVWMVlrbWlrWUpEbDRJMENZRTVEVmsrNjZQNWhkN2NMeTVGcS8zZ2VXd2dCbUd0aGRhZUxTRmpubkxDVTZra1hjRUlEQUhOZEV1NUtGV3dKWVoxandsSjBNRjNFQUJZQWM1MndCaWFLUkc3UEJ1NFhsbm9tWFVUQ0FtQ3VFeGFWckd6WmNubkU0aTV2UTZWb01vVXBRZ0RtQWVYK2NYZFhDMHNSalJRTk1qQkZDTUI4VklYZHFZSnk5N2k3cTRVbGxUbzRVY0NTVVFEbVNWanBnc3ZQY0hLNXNLZzdoU2xDQU9hSnZhbVNSTUthdWJCSWRhY3dSUWpBUENXc0F4TjVETHFmVThMYWlZUUZ3RHdKaTFUQmNQbFp5VzZmSlJ4TDVwR3dBSmkzb3FZblZYQ3pzVnd0ck5HQ1FTYW1DQUdZdjR6dzRrVGV6YU5ZN2hXV1V0U0RKYU1Bekt1dzJNRk1VYm40dEV3WEM0dFVkNnBBTUJZQTg1bXdVa1VrckprSml3Nm1TL0FWQVBOcHJLZmNQVkhvNnBLd1AxZUdzQUNZejRTbHNtVTMvd0ZkbmJBR1NoWmVJUURtRlVmbUxSdkNtZ2tESlJOaldBRE1NeE5GRThLYUVTVUx2Z0pnbnN2Q01SZFhOdTRWbGkwVmxWRVNBakRQdnFMeG9udFB4WEt2c01aZG5Fc0JxR0RHU3lnSnA4OVlDY0lDQU1MeVRNS3lzSXNRZ1BrdkNVZkttQ1djSm9wb3JHamc1UUZnSVJJV0J0MW5VQktXVVJJQ3NBQWtpb1pyZHhPNnVDVEVxbEVBRnFJbVBGRTBNVXM0YlVhTFdJUUZ3UHo3aWpJb0NhZU5vbUVrTEFBV2hKSkZicTBKM1p1dytvdllsd1BBUW1ETHN1M1MyM1BjTzBzNGduMDVBQ3dRd3dXWHp0RzdWRmpzWkM0RkFDd0FycDN5Y3Ftd1RLbklnTEFBV0ppOE1GNkVzS2JEYU1IQU1uY0FGb3BrR2NLYURublR4a3NEd0lKMVFMZWU0ZWZXa2xBcHZEUUFMRmdIbEpnbG5BNkdXMmRWQWFnR3lnN1dZVTJ2dlNBc0FCWXVNVGhJV05OS3BJN0NJaXdBRml3eDJDNjljZDJ0SlNFU0ZnQW9DU0VzQU1EcndWQVNUbGZ3RUJZQVNBeGVTVmlZSlFRQUphRm5oQ1VoTEFBV1RsZzRyV0ZhbUNnSkFWaEFZV0hoYUdXVTBBQlVBeVdVaE5Nc0NiRTFCNEFGZ2xFSkplRTBTMmdIcncwQUMwVWVKZUgwaE9VZ1lRR3dZR1NRc0taWEVtSU1DNENGbzRTRU5jMkVKWEVEQlFBTGhjS2dPMHBDQUR3RE5qOVBUMWhZNlE3QUFvS0VOYjFFaWpjR2dBVUVZMWpUSXFoeHZETUFMQmpDclJjQVpuSTVQQjBBZ0NkQWtBRUFRRmdBQUFCaEFRQWdMQUFBZ0xBQUFBRENBZ0JBV0FBQUFHRUJBQUNFQlFDQXNBQUFBTUlDQUFBSUN3QUFZUUVBQUlRRkFBQVFGZ0FBd2dJQUFBZ0xBQUFnTEFBQWhBVUFBQkFXQUFCQVdBQUFDQXNBQUNBc0FBQ0FzQUFBRUJZQUFFQllBQUFBWVFFQUlDd0FBSUN3QUFBUUZwb0FBQUJoQVFBQWhBVUFnTEFBQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQThLcjhmOXJIc1V5WnlhMlZBQUFBQUVsRlRrU3VRbUNDJztcXG5leHBvcnRzLmRlZmF1bHRLZXlJbWcgPSAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFaQUFBQUdRQ0FJQUFBQVAzYUdiQUFBQUNYQklXWE1BQUFzVEFBQUxFd0VBbXB3WUFBQUFCM1JKVFVVSDRRb1JEUUFCekFicEdRQUFJQUJKUkVGVWVOcnR2ZGwzRzhtVnI1c1JPWStZUVFBa1JVbFdsVjIyKzV3K2E1My8vL0U4M0xQNjluWGJWYlpWVWtrY01BT0pSQ2FRYzBiY2g1QlVkbFc1U3dNSll2aDl5NnNmWkRjSjVzYitZc2dkTzBnUVJSSUFBQndDRkk4QUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBRUJZQUFBQVlRRUFBSVFGQUlDd0FBQUF3Z0lBUUZnQUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBRUJZQUFBQVlRRUFBSVFGQUlDd0FBQUF3Z0lBUUZnQUFBQmhBUUFBaEFVQWdMQUFBQURDQWdBQUNBc0FBR0VCQUFDRUJRQUFFQllBQU1JQ0FBQUlDd0FBSUN3QUFJUUZBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUErRFVVUEFMd2hSQkNPT2ViS0FyWDZ5ekw4aXpMODV4enJxcXFwdXU2cnR1TzQ5VnFxcW95eHZDNHdCZDkyWUlvd2xNQW53ZG5MRW1TMlhUcUx4YWNjeXJMd2w4Ly9nODRGLytYVlpYcmVXZjl2dU82aW9KaEVrQllZRmNUS3M1WVdaYmJLSnFNeDFFVUtZcnlqNUw2bDNianZLb3FWZFA2L1g2OTBWQlVsVkxzU0FBSUN6ek11aytTcEtvczB5eUx0OXU3Mjl1eUtHUlovaGhWL1lTcXFpckdMaTR2YTdXYXB1dWFwbjJZaXdFQVlZRXZWUlVoSkVtU1BNdWlLTHE3dVZGa1dheit2Z1RHV0ZtV3pXYnpyTitYRmNXMmJXZ0xRRmpnODZHVWl0MzBxcW9tbzFFWWhwVFMrMTNIaVhXaXBtbVhWMWVLb3RpT0kvYm1ZUzRBWVlHUG5WSlJXYzZ6Ykx2WnBHazZtMHl5TktXZnRmcjdlRzB4eGhSRmFYYzZ0dXRhcG1uWmRsVlYwQmFBc01DLy9qWlFLbE9heEhFVVJWRVVoVUdRNXptbDlPRlU5Uk52TWNhb0xMdWVWNnZYYmR0MkhJZExFb29oQUlRRmZycjZJNFNJV3FwTkZHMmlxR0pNN0Y3dC9zTXd4aVJDYk10eVBjOXgzWHFqUVFpcHFncGhBaERXcVNQTHNrVElhcmxjQjhGbXM4blNsREcyRHdVSGpERkNpS1pwbG0zWDZ2VkdzNmtvQ3JhM0lDd0k2eVFEVHdpVjViSW9WcjYvbU0rTFBCZmw2ZnRXRzhVNTU1eHJtcVpxV3ExZWI3YmJ0bVdWWlFsdFFWamdWRlFsSzBxYXB0UEpKRnl0cXFySzgveXhWbitmTk9GU0ZFVlJWY00wenk4dUxOdm1qR0Y3QzhJQ3h4dHNTZ2toV1pyZS9QQkRtbVZsVmJHcTJuTlAvWHpDUlFoUlZaVlNlbmwxNWRWcTJONkNzTUF4TGdBcERWYXJ1OXZib2lqWVVXUTRwVlNXNVhhMzJ6OC9GMjhZRVdnSUN4eThxZ2doMDhsa1BCcnhZOXl4RnIwaVd1MzIrY1dGZ29ZUUVCWTQzRlN1eW5KOGR6ZWJ6K2xCcmZzK2U3Vm9PODdWczJlR1lXQkxIc0lDaDVPNmpKVmwrZWIxNisxMksvMXp2NWRUMEphcUtNOWV2TEJzKzlUK2RnZ0xITkxLU093OWI2TG85dm82VGRQZFZhai9zeTlrUlpFWUU2cW9HSk00bDNiK01hcXFVbFgxN095c094andxcElWQlhNdUNBdnNoYWNrU1NyTGtralNiRHBkekdacGx1MitRNTU0ZVNmTHNpekwvWXVMUnFPaEtNbzZDRWJEWVpva2pERlJCYnA3YlZGS204MW0vK0pDZkRheDRZV3ZEWVFGSGtGVm5QT3lMUE1zV3k0V2kvbGNWS2p2MkF1aTFsVDBoMmwzT28xbWs3MHZqeElLMjI0Mmk5bHNIWVpsVVlnNTRJNC9vZmc4eldhejFXNWJqcU1vQ3BWbGpyMTVDQXZzQmtvcFl5ekxzbml6V2ExV0s5K1h4QW1iM1hxS2N5N0xzbTRZcnVlMTJtM0hjZGd2VlhJS2JXVlp0cHpQd3pCTWsrUlI2bFRGWjNNY3A5VnVPNTZuRzRZaXkrS3Z3RGNLd2dJUE1xZWloRlJWRmNmeEpvcUMxU3A2Z0FaVkg2a3FWVlV0MjNZY3A5RnFXYlpkL2RwWkdhR3RzaXhYdmgrRm9UaTBLSEZPZHY3aHk3SzBMS3ZSYk5xTzQ3aXVxbWtjNXhNaExIQy9xejlLYVZFVXdXb1ZiN2ZoZXIzZGJqK3lrL3E5cTByVHRFYXphVnBXclY3WGRmMVR1MWJKc2t3a2FiVmF4WEVjQnNGbXM5bjlBVWJPZVZXV3FxYlZtMDNUTkJ2TnBxN3JtRzFCV09BZVZuK0VrQ3pMcHVOeFZWVys3MzkySi9VdlhFOXh6bDNQYTdaYXFxbzJtazFDeUpjMFRpQ1VLckljaHVGMnMwbVRaRDZiUGNvR1hGVlZFdWZOZGx2VHRGcWpVYXZWdUNReEhQU0JzTUJucUVxVzVlVmlzUTZDUE04RDN5ZVBzZm9UVnVvUEJvWnBXcmJ0dWk2N3Z5UEhIMmFPNjlXcUtNdlplSnhtbVV6cGp0ZUo0bSswSGNlMmJjTTB6L3A5OHY0ZjhUMkVzTUN2NWJBc1M1eVBSNk1ramtXVFlpSko1REVXVFpxdW4vWDdobUU0cnF1cTZzTXRtaWlsalBOdEZLVnB1bG91ZmQ5WEZPVlI5dVlVUlhFOVQ5ZjFzMTdQTUUzMHNZR3d3TDlVbGFLcVNaTE1KcE40czBtU3BDeExhZWRGQUdKYjJxdlZPdDJ1YVpxR2FZcXJLSGJ6QkRqbmVaNm5hYnJ5L2NWMEtoR3k0N2VmMHZ0Q0RjTXdUTXZxZEx1MWVyMG9DbWdMd2dJL29xanFkck1aM2QwbFNWTGsrYU9VV2JLcTRwdzNtczF1cjZjYmhxcXFqMUptK2U0Q3hLckswblFkQkpQeHVDekx4eXFGVlZWVk40eXpmcjllcjJPUkNHRUJpVkphRnNYdDlmVjZ2WDZzVGdQaTkvYjYvV2FycFJ2Ry9weS9FeXZUTUF4SHcySDJTSWVOaEVOTnkzcnk5S2xsV2VnR0FXR2Q5REp3SFFSdlhyOStyS0ZidFBIc0RRYnRUbWR2TDQ0WGs1MXd2WjVPSnVGNi9WamFZb3oxQjRQQnhRWG1XUkRXaWRwcWRIYzN2THZiL1hwSHJMa2MxejNyOVZydDlxRjA3S1NVcGtreUdnNTkzeWVQMFltQk1lYTQ3b3ZmL3BhaUNRU0VkV3EydW43elpqNmI3ZjVJRGFYVWRwd25UNThhcG5tSU5VZUVFSW1RbTdkdjE2dFZVUlM3ZnltaDZmbzNmL2pEM2s1SUlTeHcvem4zOXZYcjVXS3hTMXVKd3pGZXZYNTVkU1ZUZXVoN01jSVh5L2w4TkJ4V1ZiWFRQNGR6V1ZYLytELytCNXB0UVZnbk1iZGErZjdyNzcvZmhhMDRsOTUzZmVuMmV0MnpNNG1RWTZya0ZoWmVyOWVqMjlzc3o2dXkzTkVMVnM0Tnkvcm1EMy9BZmhhRWRlUzZLdlA4ejMvNjAwTW5sZGlvMW5SZFU5VnVyOWZxZEVReUgrc1lJTXR5SE1majRUQkpFbkVYN0E2ZThMUGYvS2JaYXVHOUlZUjF0TWl5L0YvLytaOUZVVHhjRm9tdUw1WmxhYnJlUHorM0xLdGk3QlRhUDRtRFBseVM3cTZ2NHpqTzBqVExzZ2Z0WTBNby9jTy8vWnM0QTREdk5vUjFoQmtWckZadmYvamhJYjdmblBPcXFpekxNa3pUdEt6K1lDREw4bW5XT29xMTluS3hXQzRXVlZWRllTaGM5aEMvcTFhdnYvajZhMXlNdURNVVBJSmRKdEx0OWZXOUcrUkRLd1ZOMDVxdGxsZXZLN0pjbHVYSlpwSDR3MXZ0ZHJQZGpyZmIrWFNhWmRsMnN5bkw4dDVydUxhYlRaN25DbnJHWTRaMWZOT3JKRWxlL2YzdjRvVGcvV1JtV2NxSzRyaXViZHVOUnNOeUhPbDkyVHI0Y1owb3kya2NyOWZyVFJSdG9paE4wM3ZzejBNSWFYVTZWMCtmWXBLRkdkWlJRU2tWUGEzdWEvV25hVnFqMi9VOHozWWMwN0x1c2V2TE1mRmoyNGxlcjlGc3hwdE5GRVhCYXBVa3liMnNFeGxqNFhxTjV3eGhIV0hxSkhIOGhXK3ZPR01WWTZacGlxV2ZZUmhpeHhmRCs4Y29YbEdVV3JQcGVGNmoyZHh1dC81aUVkNUhqMmxLU0ZXV0VtcXlJS3hqb3ZxeTZZOUlPZHR4enZwOXk3STBUVk5VbFdOVzlZblBrRmNWSVVUTVNWM1BLNHRpTWg2SDZ6Vmo3UFBLNGtUbjFUaU9iY2ZCTmhhRWRWVFpJa2tTK2J6L1I4NmRXdTNKa3ljU3BicW1pYTR2Nk9UN0plczRTWklNd3lDbXFlazZaMncybXkzZXQybitqSitXWlpuamVSd1JnYkNPQTBKSVdaWmNrajVqNFdDYTVsZS8rNTJvamVUdjVna1l5ZTlwd3NXNWFQdDFmbkhSSHd3bTQvRjBQUDVVWndsaFlVRUlZUjNYa3ZBVGI1ZjVRSlpsZi8zTFgyelhmZkgxMTZMRk9oN21mWTRsbE1xVXpxYlQ2V1RDcXVvelpsaGl0WTV6aFJEV3NRM29uejBSS010eXZWcjl2Ly8zLzVxbStmVDVjOU95cXZ1cmpUaFpSRTNXRDY5ZWlUMnNMNXEzWWhTQnNNQlBrNEt4ZUx2OTlyLyt5ekROOC9QelJxdUZsNE9maHpoNGVIZHpFNjdYbUJsQldPQWhsekNFWkduNit0VXI5ZnE2TnhpMDJtMmszQ2M5dlNnTTcyNXU0amgrMEdPR0FNSUMvNVI0WlZsZS8vREQ4UGEyMVc2ZjlmdXlMS09sM0w5NlZxeXFLc2FDMVdveUdxVnB1dnM3eEFDRUJTUlpVVGpuczhsa09wbTBXcTF1cjZmcHVpTExaRmNYYysyNXA4UjJlRm1XeS9sOE1admxSYUVveXFNMHBBWVFGbmdIbFdWSmtsYXIxV3c2YmJiYnpWYkxkaHhOMCtpcGFvdFN5aGpMOHp5SjQyQzFtazJub2lnRXFvS3d3QjVOS0RSZGo4SXc4SDNkTkh1OW5tbFpsbVVwRDNsajgzNnFhcnZaeEhIc0w1ZUI3OHVZVWtGWVlKKzFwYWhxV1JRMzE5ZVUwdTdabVdYYnR1TVlobkhFMmhMYjUyVlpyb01nUzlQWmRKcW1xVXlwcW1uNFNrQlk0QUFTV0p5TW00ekhsTkphdlc0N2p1dDVqdXRLbkIvVDhVUFJjU0ZOa3ZWNm5jU3g3L3RGbm1QMUIyR0JnMFJvSzFpdGZOLzNYTmQySE50eG1xMFdJZVRRYTdoRTJlY21pbGErbjZicE9nZzRZeFNxZ3JEQW9TUDZwMnkzMnlpS2RNTllyOWU2cm9zZXlwOTlZT2h4TFV3SW1VMm5teWhLa21RVFJXS2VSWFo3d3lPQXNNQ0RyeE9MUEYvTzU3SXNiNkxJTU0xT3QrczR6cTd2OWZ1Q3oxOVYxZDNOVFpxbW9qZnhoOFV2Z0xEQWNXcExGQ2lGNi9VbWlxTDEyclR0UnJQWjZYYkxvdGhQYllrM0Nac3duTS9uMnloS3M0eFZGWGwvbHlxQXNNQkpyQk1sU1VyVE5NdXlhTDJlanNmdFRxZlY2VkJLOStka3RXZ0h1bHF0NXJOWnN0Mlc3KzlKeFpFYUNBdWM2SVJMa3FTcXF1THQ5amFPeDhOaHU5UHA5SHFxcWo2dXRzUWRaZjVpTVpsTThpejdNUFdEcWlBc0FDUkprampuUlZHTVI2UHhhTlJxdDN1RGdhN3J1Ni9lb3BSV1ZUVWFEdWVUU1lsMkZBRENBci9LY3JHWVRhZjFlcjEvZnI2emJ1V0VrRHpQWjlQcFpEVENWanFBc01DbkxjcWlLRnAvOTUyaUtNOWZ2TEJzKytFMnVUbm5XWmJkM2R3RXE1V2lLSTlvSzAzVDhqeEg5Q0VzY0pDSTAza3YvL2EzcXFxZXYzaFJxOWNwcGJJczM4dWNTM1JUeU5MMDFjdVhvc3Z3bzVSOWl0b0lYZGRmL1BhM2xOTC81Ly84SDV6cGdiREFZV3VMVW5yOTVvMGtTWTFHNDhuVHArejk5UTJmWWE1M1YzSnc3aStYdzl0YlVhRys0eG9GOGJGVlZaVUk2WFM3L2NGQUVtMnowSHNhd2dKSG95MUprb0lnV1A3SGZ6aU9jLzdraWE3cnFxcCtaQjhiWWJjaXp4bm40N3U3bGU5emNjSm10d3RBenJub2JDSEw4dm5GUmExZWw5NWYvQ1UrSlFJTllZRjN1WElFZjRSWXVDVko4dks3N3d6VDdKeWRlWjZuNmJxaUtQL3FsYUpZVjZaSmtxYnBiRElKdy9EZFlacmRlb3B6THN1eVlSaUdaZlY2UGR0MTJjOXVvaVdTOUJsQndoVVVFTll4Y2tTak55RkVWcFE4ejIrdnIxVk42M1M3anV1YWhxRWJ4b2NiYUQ1MGZkbHVOdHZ0ZGpHYkpVbXkrOE0wSCs0Zk5DM0xkcHhPdHl2S05YNXg5Y2M1LzR3Z1lWWUdZV0dHZFNEYWt1V3FMSWUzdDZxcTFtbzFyMTYzYk50eEhFbVNraVNKdDlzb2lnTGZUOU5VbHVYZHE0cFZsV1hibG0yN3RWcTlYdGMwcmFvcTNEWUVZWUZUbmpnU3NSNWNMcGVyMWNweFhjZDFGVVdKd25BVFJmbGpOS2hpVlVVSXNSM0hyZFZjMTNWY1YxYVVxaXpMWDkxVC82eFpNSmFFRUJhV2hJZUhtRUJGWWJnT0FpckxFdWVVMGgycnFpeExSVkVhclZhOVh0ZE4wM1ZkempsakRLLy9JQ3dBZmdGUkE3RmpRUXNyS1lweWZubnBPSTVobW9aaE1NWStlZlgzV2N0MjdHRkJXQUI4Z3FwTTB6enI5eTNMMGcxRHJFOC9jNk1LWlEwUUZnQVBnU2hLcU5WcWc0c0xWVlhWOXplYkhWUFRlZ0JoZ1dOUWxTUko3VzYzUHhpSUxYOVJsWXJyWXlFc0FQWkxWWnl4NTE5OTVYcmVqNXRsNzQvYUFBZ0xnTDJncWlyTE5KODhmMjVaRnRyNFFWZ0E3SytxMnUxMnQ5KzNMQXN6S1FnTGdEMkZFTkx1ZEhxRGdhcXFIMDc4QUFnTGdQM3lsS2JyN1U2bjIrMVNXVDZJVzhnQWhBVk9DTkgxUlZFVTB6VGJuVTZyMjJWVjlUbVZud0RDQXVCQlZVVXBOVTNUdEt4MnU5MW90Zkk4TDRzQ1R3WkFXR0NQUENXNnZqaU9vK2w2Ly94YzAvV3FMTE1zdzhNQkVCYllHMVV4VmpIbXVLNWxXWlpsbmZYN2tpUXh4dlppVm9WOWZRZ0xnQitGSUVtMWVsMDNqSHF6NmJxdUpFbjd0VXVGOWpJUUZnQWZsb0dxcHAzMSs3VjZIZS8rd0dkQThRakFMbEVWUmR6dHZLZEZWV2d2QTJFQmNEQ3JKeHo2Z2JBQUFBRENBZ0JBV0FBQUFHRUJBQUNFQlFDQXNBQUFBTUlDQUFBSUN3QUFZUUVBQUlSMVFxQ0VHc0VGRU5aQklNc3lad3l0Uy9aY09ySXNmK1lKUjg0cHBiakxad2VnVzhPRHBnQ2hsQlpGNFMrWHdXcFZsaVdleVg2R1NaYmxMTXZXVVJTRm9heDhXbEp3emplYnpXd3lzVjFYMTNYcC9UMnZBTUk2TUZXbFNiSU9nczEyRzYzWGVaN0xzb3duczEvckMwb2xTY3J6ZkRJZWkyRGxlYTRvbjV3VTI4M203WGJyMVdxV2JkY2FEY2R4T09mUUZvUjFHRGxBQ05sdXQ0dlpMRTNUN1daVGxxVk1LV3kxaDJHS3d0QmZMTEk4WHdlQitNZlBzTlVIOFFWQkVBUkJ1RjdyaHRGc3RieGFqVkRLY0lrR2hMV2ZpQjJRbGU4djV2T3lMTGViamZncVExWDdwU3BabGpoZnpPZnJJTWpTTklsai90NDQ5ekpmMjI2M1VSUnR0MXRkMTEzWFBldjF4RTFsZVBJUTFoNnQvcmdrM1Z4Zng5dHRudWRabW9wL3hNUFpxemdwc2x3VXhlanVMbHl2OHl6TDg1d1FRaWdsOS8xOWtHVTVTOU0wU2VMTlpoMEVpcW8rZmY1Y1ZkWDliVnNJWVoySXFtUkZ5WkxrN2R1M1paNm5hY29ZSS9jMFhJUDdOVWllWlMrLy8xNTRxcXFxaHg1UkNDR0VrSXF4eldaRENQbjdkOS9KaXRJZkRKcXRWbG1XMk42Q3NIYWRBNXFteldlejJXU1NwbWxabHVJZVVMelkza05WcllQZzl1YW1Lc3VpS0NUT3BkMkdTZnl1TkVra1F0Nys4TVB3N3E3WmFnM096OUhTSHNMYXlRNElwWklrelNhVCtXeFdGTVdIN3h4VXRWK3FvbFNSNWVIZDNYS3h5TFBzeDRYWVk0V0pFRW1TeXJJc3kzS1VKTlBKcE5sdTkzbzlzVTVFdkNDc0IxRlZVUlRENGRDZno4dXloS0gyRTFtV2l6d2YzOTR1Rnd1eDlOdTNUOGc1TDR0aU5oNHZwdE5hclRhNHVOQk5FeThUSWF6N0pNdXk4WEM0OHYwUDJ4TjRKbnVuS2tvMzIrMTBQRDZVTURIR2ZOOWZMcGVlNS9YUHp4M1h4Wlk4aFBWRkk2RWtTVkVZVGllVHRlL0xtZ1pQN1cya3Rwdk44TzV1RTBXSGRVUkdXSFd6Mlh6M2w3ODRqbk0yR0RRYURld3dRRmlmT1BSeFhwWGxKb3B1YjI3eUxKTmxXZEUwUEpiOVhGdUZVVFFaRHVQdFZ0VzB3eTE1VTFVMXk3STNyMTY5bGFUTHAwKzlXazFUVlVLcFJBaU9vRUpZdnp6V1NaSlVGa1dXWlZFWTNsNWZVMHFwTEg5ZTZUTjQyRENWWlpabG16QWMzdDVXakNtS29oN0ZpQ0tFZTN0OXphcnFyTjl2dGxxNnJpdXFTZ2pCYWhIQytxY2NTSk1rTDRyNWRMcGFMaVZDRkZYRms5bkQxVk1jeDNtV3JZTmdQQm9waWtJcFZZNnU2bzFTU2ltZHoyYlR5Y1R6dk41Z29HbWFicG95cGFpRU9HbGhpVHZUdDV0TmxxYXoyVXpzZ01pN25WSnh6bEhEOWF1ZTRveUZZY2lxYWp3Y2JxS0l5cksyMnluVjdzTWt0TFhkYmwvKzlhK21aWFY3UGNNMGJkdFdGRVY4R0FqcmhISkExQ2lzZkQvTHN2bDBtb21OcXQycWlqSEdPVGRNMC9XOFBFMmpLT0tjbzByK0g4TWt5N0k0UUo1bDJXUTBLdktjeXZLT0o3K01NY2FZNDdxV1phVnB1b2tpYVllSEdRZ2hpcXJtZVg3ejVvMnNxdDF1MXpCTjEzVjF3NUJPc28vTmFRbExqRnBSRkcyaUtFbVN4V3dtSExGN1ZiR3FxamVicG1VNXJ0dG9OTklrV2ZsK0hNZmhlbDBXQlpYbFU1NXdpVGQ5OFhhNzNXeWlLQkt0eEhZLythMnFpbExxZVo1cFdmVm0wM1hkN1hZYitINmU1OHZGZ3Urd2FaODRCQ1p4UGg2TmlDUTFtazNIZFhYRGFEU2JwOWJIaGdSUmRBcC9weXpMRWlHcjVUS080ekFJdHRzdFkyekhMNVU0NTZ5cXFDeTMybTNETU9xTmhtR2F3bDlpclZFVVJiaGV4OXZ0eXZmVE5KVXBKY2MxNGVLY201WjE5ZlNwWmR1L3VLaWhzaXhKVWhRRVlSUnRvbWp6R0xOT3pubFZWWXFpTkpwTjI3YmRXczE4SHlieFNZcWlDRmFySkk2RElFampXRmFVSFk4dTRndWo2M3F0MFRBTm85RnVxNHB5SWllcmoxeFlZbWpLc3l4WXJhSXczRzQyYVpaSmo1RURaVm1hbGxXdjExM1BzeDFIMDNYTzJFKytZZTlPekZaVnZOMXVOcHRndFFyWGExbVdqMmFkK0srRTlhN2pCZWZMeGVKZG1OTDBzVlJsR0VhejFYSmMxN1p0VmROK1ljT0lFSm5Tb2loRW1OWkJFQWFCckNpNy83U2NjMVZWYmNjUjgzVGJjWXFpT0c1dEhhMnd4T0kvMlc0WDgza1loaisyRTluNVlNaXF5bmFjZHFmanVLNm02NnFxL3VxbUthVzBZaXpQc2lTTy9lVlNsRzRmUVYrdG53dUxFS0lvU3BxbS9uSVorSDZXNTBXZVN6dXZuQlFsWFY2OTNteTFYTS9UTk8xajlyWS9oQ25lYnBlTFJSZ0VmUGRoNHB4eHJpaUtydXUyNDNTNlhkdDEyZkdlckQ1Q1lWRktDYVhieldZNkhtODJtL0w5RWVWZHE2cXF1Q1RWYXJYTzJabGxXWXFxaWtuRUp6bFhrcVE4ejh1cW1rOG1LOTh2OHZ5ZzZ5MytVVmlTSkNtS3N0MXNwdE5wdEY1WFZWVVV4ZTdua2xWVlNZVFVQSzkvZnE1cG1xS3FzaXgvVXJhTE1CVkZrYVhwY3JGWUxoYTczMjBRejVZUW9tcWFhVm5kYnJkV3EzRkNqdStJNGxFSlMyeUNybGFyNldpVXBtbkZHR2RzOTd2WDR1dmVhclhPQmdOVlZXVlovc0xDUDBKSVdaYXNxdFpCTUJvT1JXSWY0cTY4RU5hejU4OHQyNDZpNk83NlduU25ZbzhScHFxcVpGbHVkVHBudlI2bFZGVlY2ZjE1ck0rTGtTUkpWVmt5emhmeitXdzZMZko4OTJFUzJwSmxXZFcwczE2djJXb1JRbzVwdG5Va3doSkc4SmZMdTV1YmQ4cmdYSG9NVmNtSzB1bDBCaGNYSC9abzczM2JJdDV1YjY2dmt5U2hoMWE5eFRtM2JkdHgzWFVRL0dOem5rY0owL25GUmFQUklKVGViNWpFTGlRaFpCMEV3OXZiTE1zZWF3dFN6T2dIRnhldGRsdFIxZU9ZYlIyOHNFUlY0WHcydTd1OS9kUTExLzJtb3F3b1Q1ODk4Mm8xTWNvOTlHL01zK3oyK25xOVhoOWMwZWtqSGpSaGpCbW1lWGwxNVhuZUxxWjFuRmVNL2YydmY4M1RsRC9Ta1dhUklMVkc0K256NTQrWUlCRFd1Mmk4ZnZreUNzUEhuVFVZaHZIMU45ODh5cVk0SWVUMjdkdmxjb216WnI4YUpzdTJmL1BWVitLbHg2N0RKRWszMTlmejJleHhYL2dxaXZMTjczOHZIL0kyNktFS0s4L3pWMy8vZTVabGp6VzVJSVJVWmRudDl3Zm41NTkvWS9BOWZSSkprdnpGNHZiMmxuUE8wWGozSncrSGtHYXplZlgwS2YrQ0xhcjdtbGNHUVhEOXd3L1M0MzBTc1JTNGZQS2sxVzd2WjRQRG94SVc1enhMMCtzM2J6YWJ6V050UEl2ZmUzNXgwV3EzSlVyM1JCQmlZWmdreVEvZmZ5K0tjUjVsSjN0L0VCUGV5NnVyZXJNcFU3b25uWWhGbU1MMWVuaDNseWFKSkVtY3NVZlpiTlUwYlhCKzN1cDBEdXQ3Y2tqQ3FxcHFkSGMzbTA0ZjdlV0xvaGlHY2RicjFSc05hUzlQY29rM1JFa2NqOGZqOVdyRkphazZwVzdPb3RhVVVxb2J4c1hscGV0NTdHZlZ1WHNTSmtwcEhNZmlMRGVycW1ybjFoQkRtbTNiNTVlWHJ1Y2RTZ2ViZ3hIV2RyTzV1N25aYkRhN1BrL0RtS3dvaXFwYWx0WHI5KzFEdUlYOHcrbnV4WHkrWEN6S29pakxVanJlUHBZaTAyUkZrU210TlJxZFRzZDJuUDAvcXZMaC9ySHBkQ3BlbTVaRnNlTXdNY1lVUlRtL3ZHeTEyd2Zock1NUTFpYUticSt2NHpqZW1hMUVBWUdtcXJwaHVMVmFxOVd5SEtjOHRITVBvZ1pTRkpISFNaSm4yWkZwUzRSRFZWWGRNR3ExV3J2YjFUVHQ0RTdWS2FwYTVQbHF0Vm90bDFtYVpyc05rL2lxbjE5Y25QWDcrKytzZlJjV0lTU0pZN0ZwdFJ0YmlTVzlwbW1PNjdxdTIyeTFsQU8vczFlOEV3alg2M1VRYkRhYkpJNGZva1pzOTdzd0VpR0dZVGlPNDNwZW85bFVGRVZNSkE4M1RJUlNmN0dJd2xCMEU5bGxtQmhqVDY2dTJ0MHVabGhmUkZtVzF6LzhFQVRCRG16RnFvcFFhanVPNjdxVzQ3UmFMWEVhOWpnbUk1UlNXWmJETUJSZEVNTDFXdlJzT2JnSmw2aFF0eXpMcTlkdDJ4YjdpY2NVSmlyTFVSaEc2L1YydXcyRG9Lb3E4dkJoNHB6THN2enN4UXZYZFNHc3ozK0lOMi9menFaVDlTRXJSOFNlbEN6TDRyeTc3YnJPSVd4VWZmNitpYUtrU1JLdTEzbWV6eWFUUXpub0l5SkNLVzExT3JadFc3YnRlVjVaVmZ4SXcwUXBMZkk4V0szRXlYQlJNZitnWVdLTVdaYjFtNisvVnZlNFVHdXZoWlVreVhkLy92UER6YTNFQkVyWDlYYW5ZMXFXNjdxYXJ1L25lNlY3endkQ3FjVDV5dmZMc2x3dUZ1RjZUZS83a01yOWhrblQ5WDYvTHl0S3JkSFFWUFVVd2lUNjJGUlZGWVZobHFhTHhVSjA4WDY0TUpWbDJUOC9QNys0Z0xBK2g3OSsrMjJhSkE4eHFvaSt0N1p0OXdZRFZkTnMyeFliUGFkV0x5NisrbkVjaXpuWGJEb1ZyNjcyNU9NeHhzcXliRFNiclhaYjB6VHg5djBFK3dLTEl6WHhkcHZudWI5Y3JwYkxCKzFqODgwZi82anJPb1QxeWRPcnYvenBUL2MrTzJWVnhUaHZ0bHJkYmxmUk5ORk04c1RQdFh4b2tKSW15U2FLcHBOSmtlZTdiNlQ1ajFSVnhTV3AwK2swbWszZE1BekRRSmhFMFdtV1pWbVdiYUxvN3VibUlVWVh4dGo1NWVWWnJ3ZGhmUm8zYjk4dUY0dDd6Qm54cHUvaTZzcHpYWEhkRzNMZzV5bkJxaXJQOHppT2g3ZTNhWnJLTys4dVg1YWxvaWk5ZnI5V3IydTZMdHJ0STB3L0dWNnFxc3F5TEluam03ZHZ5N0s4OXpEOXIvLzl2L2Z6bWUvcEpSU0Uwc1Y4Zmk5cjlROTlieStmUG5WZFYzbmZ5aFk1OEl2UGlsQ3FHNGFtNjE2dGxzVHhhRGdVYlpwMzhKWktuQmQ1K3Z5NWJkdmk5bENFNlplZmxDUlJTazNUTkF6RHE5ZTNtODFzTXZHWFMwM1Q3aVZNVlZsdU54dlJaQkV6ckk4aVM5TS8vK2xQWDM2WlRWRVU5VWJqck5kelBVODYzbEx2QnlWTmt2bHNOcHRPSDI3VHBLb3FyMWJyRFFhdTYrNm1PYy94U1N4TDArbDR2Rmd1djd4TEd1Zjg4dXFxM2VsQVdCL0xhclY2OCtyVkY4NndXRlgxejg4SDUrY1NidnIrd25tNHFxNTgvL1hMbHcrVWJMMSsvL0xxNmtUdWZYbTRsU0loeEY4dTM3NTVJMzNaWStTY04xdXRxMmZQc0NUODZJMk1QUC95WVpiSzhtUTBtazRtdmNHZzAra29pb0pzK05Ra2tEZ1AxK3ViNitzOFRlbkR6TEFJSWRQeGVEb2Vuejk1MG1nMkg2VmYxUkhNc0lMVmFqSWNicmJiZTdsa2MyL1BET3pwREdzeUdvMUhvL3RhR25ET2k2SVF6VFFNdzhDSzQyT2VXRm1Xd1dvMXZMbGh1N3B1UzlRcnRMdmRzMTd2dnJaampqNU1WVm1HWVhqejlxMjQ4dksrZnJKbFdWOS84dzFtV0IrOXFYR3Z0VGJpYk9COE5wdU1ScmJyWGoxOXFtcWEySDNIWVA3VEoxOVZaVkhNWnJQNWRDcU9hOUJkaVVOb2NUbWJ6Y2JqZXFNeHVMelVORTFjeTRndy9kTzNXWkxLc2l5S0l2RDkyNXNiOFlqdWQvNjd0MGVkbEQwT3l2My9URVZWMHlUNTY3ZmZ5ckw4OVBsend6UlZWWDIzVkR6aGxCQm45UE1zeTdKc05wMzZ5K1VqM3Q1S0tGVW9qYUxvMnovOXlYYWN3Y1dGWVpxNnJrTmJvbWcyenpMRzJOdlhyN2ZiN1lmTGZrNEg1UVNqTHQ1MnZmN1g1c051QUFBWU1VbEVRVlQrZTFtV08yZG5qVVpEMVRSZDEwK3QwbDFzMHpMR05sRlVGTVh3N2k3ZWJoVkYyWWNjRUZmc1pWbjIrdVZMUXVtVHAwOE4welFNUS92RnE1aFBJRXhGVVlqQ3E5SGRYWlpsc2l6ZnkxNFZoSFV3Q0cySjdkNUdzOWxzdFhSZE55M3JGQTUvaUxPMWFab21jWnhsMmUzMU5XZU15dksrRGRmaXFMWWtTZGR2M2tpUzFPbDJhL1c2NlB4ektrYytDY215TEUyU01Bd1hzNWxvc0hHYXFqcDFZZjNqdnNuSzkvM2wwbkhkWnF0bEdJWlhxeEZLK1RHbWhEanhIMFZSbnFhcjFTcFlyYXFxVWhSRjJ1LzJXR0owV2N6bmkvbmNzdTN1MlptcXFsNnRKaTZMbDQ0M1RHa2NoK3UxNy90aVAzRi9qbmxDV0krdnJlMW1zNGtpWGRlYjdiWnBtbDZ0cHV2NjBSUUhLWXBTVlZXNFhzZHh2UEw5N1dZamNVNFBhbVVod3BURThadlhydzNEYURTYnR1TTRybnMwWVJJelg4NzV5dmZUSkZtdFZzbDJ5emlIcHlDc2Y1a1BSVkdNaDBOTjAyekhjVDNQOVR6WGRjdXlQTkI4RUh0Mm9yOTdGSVpSRklrR0dJZmJjZlJkSy9ROEg0OUdtcTQ3anVPNmJxMWVOMHp6Y0x1WUVVSVVXVTZ6TEF5Q0tJcWlNRXpUVklRSnJvS3dmajBmcXFwYStYNFVob1pwMnJiZGJMWEU0WjRENm13cHZ1NVpsazBua3pBSWtqUXQ4dnlnVmZYek1KVkZzZkw5Y0wwV0svcEdzK200N21GcFMxUWt4TnZ0WkxrVWE4QXN6MFY3V0NRamhQVnAreWFpQ1ZHODNVWmhxQmxHdTkxdU5CcFVsdmU4ZDdoSTVrMFV6ZWZ6VFJRVmVWNlc1ZEdvNmlkL3FhakpFTDNxZ3lBd0RhTjlkbGF2MS9kL2RQbXdFVEdielpJNHp0SlUzR3dLVlVGWVg1UVNraVNsYVpxbWFiTGRqb2ZEWnJ2ZFBUdWpzcnlIdS9KVWxpWE9OMUYwZDN0YkZrVlJGRlZWN1cwcjBmdE5maTVKV1pwbWFSb255UjBoWjROQnM5bVVGYVhhdjlGRjdLbjd5K1ZzT3MyelRGeDhlNVFqeXYzbjQzNGV6UmtOaDlQeGVBOFBaNGlYTllTUVJxUFJPejhYTFpYMzRTMlYyS3hkekdiajhWaVNwQ0xQcFJQdVRzRTVWeFNGRU9MVmFsZlBudEc5dWZuNXh6Q05ScUx4MFg1MnA5QjEvWnMvL2hFenJHT1ljSWtLb09WeTZmdStydXZQWDd6UURlTVJxeG5GY1AzRDk5K0hZU2h5Z0h4eGc1RWpDSk13bE5qaFVsWDFOMTk5cFQxcWJUQ2x0Q3pMbTdkdlY3NHZQcDZJRVk1TVFsaTd5QWZ4MVUrUzVMdS8vSVVROHV6RmkxcXR0dU44RUxmU3YzM3pKb25qRDc4WENmQ1RxVlpabG1WWmZ2dm5QMnVhMXIrNGFMVmFPeTQ2SllTVVJmSFh2Lzg5enpMeGU5SHpDOEo2ekpUZ25MOSsrWkpTMnU1MG5qeDl1b010ZVVwcHNGcmQzZDZLeTV6Qng0UXB5N0szcjEvZnZIblRHd3pPZXIwZE9FdVc1ZVZpY1hkemM5QTN2RUpZeHdsamJEcVpUQ2VUV3IxKzllelpRN3pyRWZNM2Y3RVkzZDJKVXhxUE5jRWtoRFJiTFVWUlJuZDM5S0RlYWpIRzdtNXVSbmQzclhaN2NINHV5N0owNzVNZHpnbWx3OXZiNVdJaHJuMThSRTFmUFh0MmQzTnpOS2ZOSUt4N3ptUkprdFpCOFAvOXgzOTR0VnAvTUxBZDUxNldhZUt5bi9GdzZDOFdaVlU5VmpjRktzc3lwYjErdjlsdXE2bzZ1cnM3eEhwYThlam1zOWw4Tm5OZDk4blRwNnFtZmFneS8wSkI1SGsrR1kyV3k2WEUrU084bitWY2pDZWFycC8xZXVLRTdQRDJWdnc3aEFWK1dWdWlET3J2MzMxbjJuYXYzM2M5VHh3RSs2UjhFQnY4VlZVVmVUNGFEb1BWNmwzcDgyNW5OSnh6OFVzMXcrajMrL1ZHZzBzU3E2cER2eDFlcUdTejJmelhmLzZuVjZ0MWV6M1g4OFJmK25saFN1SjRPcG1zMTJzaWZ2aHVCU0hDUkJYRnNxeGV2Ky9XYWhMbmpERjJYQWN0SWF5SDFKYWlaR242K3Z2dlRkTnN0ZHYxUnVOajdxMGloRWlFc0xMTXl6S0tvdVZzRmdTQnFxcTc5NVFvRGxBVXhmVzhWcWRUcTlmTG9qaDBULzM4YWF1YUZzZnhxNWN2TGROc2RidjFlbDMwZDVSKzdjNGU4ZUt2eVBQTlpqT2ZUcU1va21WWjN2bk1WNVRhcUpybXVtNm4yM1U4cnlwTGRseGhnckIybUErcVdoYkY4TzV1TWg2M094MnZWck5zVzdRQS9zbk9nbGc1Vm1XWkpNbDJzNWxOcCtKbVFFM1RkcHdBa2lRcGltSmFsdTA0b21HeG1PZ2RkNWp5b2hqZTNvNkh3ODdabWV1Nklrdy8xOWFIQmxWUkZHM0MwRjh1NHpqZWZSOHg4YWxVVmJWczIzR2NWcnR0V0ZaWkZFY2NKZ2hyZHdraFJ1elpkRG9lRHJ1OW51MDR0bTNiamlPMDlhN3pVWnBHVWJUZGJKYUxSVldXdTIrbElHWlZobWs2anVNNFRxdlRvYkxNcXVwRVhuSjlPQll6SFk5bjQzRzkyZlJxTmR0eHJQZGQwc1FxTWt2VDlYcWRKc2wwT2hVYlZUdFdGYXNxUXFscG1vN3JXcGJWT1R1VEpJa3hkdHlxZ3JBZUFiR1Q1UytYaS9sY25LbldkTDNlYUtSSnNnNkM3WFlickZidk9oL3RWbFZDbXJiamVKNW51MjZ0WGhmWEMxY24rVDVlYUN0WXJmemwwdlU4cjFhemJkdXIxOFAxZXJ2ZGJqZWI1WHd1SzhxT1YzK2NjOUZuc2QzcGFJYmhlWjVYcngvQlppS0V0ZStJbDBkcG10N2QzcXFxdW9taU5Fblc2L1dqdkZTcUdDT0VkTHBkeTdJc3gzRmRsekhHVGlrSC92c3d4ZHR0dEY2YnRsMWJyOE13VE9KWWJIdnRXRlZWVlptbTJXZzJkY01RQlNXTXNiSW9UaTBvRU5ZakwwQVlZL1Baakx4Zk0rNDRCMVJOdTNyeVJGWVVyMWJUTkkweGhoTEhuNGRKVWRVOHkyYlQ2ZTViS1RER09HT081NGxldUs3bmlVVjZkYW9qQ29TMUZ5UDVqbk9nTE10M2Jld053M1hkRHkvbUVZdi9SbHM3UGt3and0RnN0UnJOcG1FWXBtV0pZZWJFSjc4UTFna2hlZ09jOVhwZXJXWlpscWlXUExWTGFQWWNvU1F1U1pkWFY3WnRpNXZvcEY4cnNJQ3d3RkZSRklXbTY0Tit2MUd2cTdvdU91UkFWZnVtcXJJc1RkUHNYMTA1bnZlaDhnNHhnckJPS0FmRVp1MlRwMCs5V2sxNDZzTi9oZWV6VjZwcU5CcmRYczl4SEVLcE9DU0VHRUZZSjVRRG5IUEg4L3I5dmxlcmlhb0ZQSlo5Z3pFbUVkSm9OQVlYRjdxbVNSaE9JS3pUcE41b25GOWVHb1loZWovQlZudW9LbGxSZW1kbnZYNWZWaFFZQ3NJNnlYQXFTcjNSdUhyMlROd2NjL1JYV0I4aW9vU2wyK3VKbmx4WStrRllKNGZvK25KK2VkbnVkS29UTHRMWmM4U3gwUDVnME81Mmk2TEFjQUpoblJDaW5Zam9wdkRzeFF2VE5GSDJ1YmRoVWxWVjFiVG5MMTZJUzZyekV6ajBCMkdCZHdrZ2xuNmk2MHYvL0Z6a0FHWlYreFltenJtbWFiS2l1SjczNU9wS1hEeUJFUVhDT2lWVmNhNFpocVpwOVhxOTIrdFJTakdyMmpmRWl6L1ROQ21sWjcxZW85bmNuMHZHSUN5d3F4eVFKTWQxTlUxcnRkdTFSdU5kS3dXa3dWNkZxYXFvTE51T294dEc5K3pNZFYzeDZnTmhnckJPU0ZXeW90UTh6elNNVnJkcm1hWm9UNHduczIrVFgxbVdYYzl6SEtmUmJKcVdKVXAyOFdRZ3JOTktBOGQxMjUyTzUzbUdaVlZsV2VHOTBsNWkyZlpacitkNm51aDRBVlZCV0NjNnZhbzNHcDF1OXpRN0h4MEtoQkRIZGM5NnZTelBvU29JNjlSQkRoekVaTGlzS2duMW53OFB4U01BNEI3bVdYZ0VFQllBQUVCWUFBQUlDd0FBSUN3QUFJQ3dBQUFRRmdBQVFGZ0FBQWdMQUFBZ0xBQUFnTEFBQUJBV0FBQkFXQUFBQUdFQkFDQXNBQUNBc0FBQUFNSUNBUHdDeDlWV2tPSXBnOC84NmxCS0tFV2M5aHhabGlWSk9wb3c3V3VMWklJT2p2c0xJWVFRNHZ2K1lqNFgrWERxazVoOUhWRWtTWnFPeDV4ejhva0pSZlkxQWZkVVdBclNZSThuVm1FWTN0M2NKSEVzeklWbnNtK1BRTVFsQ0lMYjYrc2l6ejluWHFic3F4bjJkQjZyNEhhTWZaeFlKVW55NXZYck5FbWdxbjFHakNocEhCUDZPWHMrbkhNVnd2b2tUTXVxcWtxQnR2Wmt5Y041V1piZi8rMXZhWnBTU3FHcXZRMVRITWQzTnplYktKSmwrZk5zOVNFQklheFBlVjZtaWUvZlBzeXBXRmxLaFB6dDIyK0ZxaWpGYStWOWhER1daZG5OOWZVbURHVkt2M0Jqa1RGbTJUYUU5UWxRU2gzWEZic2srRG8reXVxdkxBb3VTVDk4LzMwVVJWRFYzb2FwS0lxcUxOKytlYk9KSXZyRnF2b0FoUFhKazl0K3YvL3ErKy94RW1ySENTQkpVbG1XUlo2UGhzT1Y3OTlqRG9CN2pCTWxKRXRUeHRpOXE0cHozbXkxRkVYaGUxbGF0TCtiUkxiaklGVjJyNm9rU1pieitXSStKNFRnK1g5c2t1OHdUSlRTTkVuS3FocmUzS3pYNjNzZlVhcXE2cDZkOFgwdGhOeGZZU21xT3JpNHVIbnpSbEZWcE1TRDVvQllXV3czbTlWcTVTOFdqREdvNnRPZTRhNVVsYVZwbXFiejZkVDNmZm9BSXdybjNIWGR2VjBQN3JXd0pFbHFOcHVMMlN6TE11eGtQUkNVMHJJc296QU1WcXNnQ0lvOFZ4UUZ0dHE3RVlYU0lzOUZtRmErenpsL3VCZzllZlpzbjlOdHI0V2xxT3JGa3lldlhyNkVzTzRkV1piTHNsd3VGdXYxT2x5djh5eFRGQVYxSkh1b3FySW8xc3Rsc0ZxRjYzVlpscklzUDFBNkZFVnhmbkZoR01aZU8ySFBZK2E2Ym44d0dBMkhHUGJ2VVZXTXNmbHNGZ1pCRkVWNW5zdVVRbFg3T2FJRWk0WHYrL0YybTJlWi9KQ1QzN0lzTzkxdWJ6RFk4OG5Cdm45TnFTejNCZ1BPK1dnNFJGSjkrUUtRRURLZlR0ZEJzTmx1aXp6SHp2cCtob2x6dnBqTkZvdEZscVpabHNteS9LQm5QOHF5YkxmYkYwK2V5TExNOTd2dndMNHJnSE5PS1IxY1hFaVNOQjZOVUdiOTJUa2d5L0owUFBaOVA0bmpzaXpKKzhPeFlPOUdsTmxzTVovbldaYm4rUTdLU3NxeWJIYzZGNWVYcXFyeXZlK1NjZ0J6Rm5IV3ZIOStybW5hYURnc2k0SmlVdkFwK3lDS29pd1dpK2xvbEdWWldaYTdPUWJJR0lNUVAyMUVVWlRKYUxTWXovTThMNHRDdkJaODZNemluUGZQendmbjU0UVFmZ2c5blE1amtTV2MxZXAwNnMzbTdjM05hcm5FNGR1UFVaVXN5K3YxK3VidDI3SW9kcWFxcXFvMFRldDB1K1BoVUZhVVV3Z1QvN0l3aVpGNE1adGxlVjd0S2t4bFdUcU9jL1g4dVdFWVloRjZFSTlhT2F3TVZCVGw2Yk5uZy9QenR6LzhzTjFzTUliL0syUlozbTYzUDd4NlZlUzUrQzd1UmxXcXF2N202Njl0MnlhUzFHeTM3NjZ2MTBGdzlKVjBuLzFrTlUyYlRhZVQwU2pMc3AyRmlUR21LTXJ2ZnY5N3k3WkZCdkhENlpkNWVOdlloQkJkMTMvMys5L0hjU3hhblVCYlAxbGNwRW55NXZYcmVJY25NYXVxMG5YOTJZc1h0VnJ0d3orYXB2blY3MzYzM1c1SHQ3ZnI5UnJ2VFA0cDhXUjVIUVIvdTdsSjAzVEhLNVd2ZnZ0YjEvTU85YmtkNmlTY2M5TTAvKzEvL3M5MUVOeGVYNmRwaWhVaUlTUk5rdHVibTNVUVBGeTF6cytIYThNdytoY1h6V2J6RjhkcTI3YS8vdWFiS0lxR3Q3ZWk3UW5DbE1UeHpaczNtKzEyWjJPdFVOWFQ1ODliN1RaajdJQkZmOUN4cjZyS2NkMC8vdnUvcjViTDRkMmRhQ3gzbW1tUUpvazRyaXpMOHM2a29HbGFiekJvdGR1RWtQOG1EY1NCajIvKzhJZjFlbjEzYzVQdGNFNnhJeDE4ZkpqU2RIaDc2eStYcXFydXpGYXlMUGZQejN2OWZsVlZCMjJyZ3hmV08yMlZaYTFlYjdaYWkvbDhNaDVuYWNwUDVnNEx6bm1hcHJQSlpER2Y3Nnl6QWlGRVZkWHUyVm4zN0V3aWhESDJxdzljdkpEeVBPL2YvdjNmRjdQWlpEek9zK3pRaytmSEIvS3JZV0lzemJMWmVEeWRUbFZWVlhleXFTZjJmRnZ0OXZubHBXakJlQXhMNmFQSjI3SXNtNjFXczlWYXp1ZXoyU3hMMDZxcWpuWENSUWlwcWlwTFUxR3pJNzIvSE9XaEh6S2xWRGVNZXFNaFhvUlhWZlZKOXh0eHpzdWlhRFNiM2JPejBYRG9MNWRwa2h4OW1KSWs4UmVMOFdpa3FxcW1hYnNKazZicklreVUwcXFxanVhUkh0VStxQml4VzkxdXE5Tlp6R2JMeFNKSlUvR2UrSGh5Z05LcUxOTWs4WmZMMlhUNm9PZGdmNUlEdHVOWXR2M2s2a29zeHIva3ArVjUzajA3RzV5ZjMxNWZiemFiN1daelZOb2loRWhTV1pacEhQdStQeG1QWlZuZW1hcE0wL1RxOWJOZVQ5TzBzaXlQeVZiSEpxeDMycW9xU1pJNloyZnRzN1BwZUJ5RjRTYUt5ckk4OUplSllxZ01nMkFUUmRQUmlPMUVWYUwrMDZ2VkRNTzR2THA2TjZ1NnA1K2M1M24vL0Z5VzVkdWJteVNPb3pBOGpqQVZlUjdIOFhxMW1zMW1raVR0WUFISUdTT1VPbzdqdUc3bjdNd3dqTElzajJNTmVQekNFb2k4NnZYN1o3M2VaRFJLa21UbCt3ZGFmaTNxK3BhTFJaYW00K0ZRcU9xaFhjVVlJNFRVR3czRE5BY1hGL0xEckN3WVk0eXg4NHNMenZsa1BONXVObEVZRmtWeGlDOFRaVm5POHp3TWd2VjZ2WnpQcTUyMEZST3JpbHE5YmxwV3A5czFUYk9xcXFOVTFaRUw2eCsxMVQ4L1o0eVpscFdsNldJKzU0d2R5dUVlMFV4OU1admxXVFllajBWcnZaMnB5cmJ0ZHJlcmFWcFZWUSs2c25nWHBzR2dMRXQvdVl6Q01GeXZEMGhiVkpZNTU0djVQQXJEbGU5WFpVa2YvbDJ0Y0gycjFUSXNxOTNwR0liQkdEdGlWYjFiYlFkUkpKMEdzaXhYWmJsY0xPSTRucy9uZk8vN2FuTE82NDJHcXFyTHhVSTBRdHJGYXBxUVdyMHUvaU55WU1ldlhLbm9BTFZlcjRNZ1dLMnFxdHJ6TUJGQ2JOczJUSE81V0ZSVnRZTXBQR2VzS010T3QydFpWcXZkMWd5RDd6eE1FTmJ1QnNNaXo4UDFPZ3pEL1c4SFRBalprYW9ZRTM1c3RGcXU2K3E2TGdvUkh1dXZGbDJiTjFFVXJGYkx4V0kzN3hhKzhBSHVRbFdjbDBYUmJMZTlXcTNlYUR4dW1DQ3NuUTdqZVo3SGNld3ZGcXZsa3UxOVBqem9jRjB4Vm04MFdwMk82emlxcGtuN2NiaU1FQ0lSVWhaRnZObjR5K1Y4UGovbDI4WVlZMVZWMWV2MWRyZHJPNDZ1NjlKQm5RR0VzTzRqSDhROU1YRThuODFXdmkrZFdJc29VYnhXcTlmUCtuM2JzaFJWM2NNZUkrL0NWQlJabGszSDQ4VmlvWnhHQjRoL0RCT3JLdHR4ZW9PQnMwOGpDb1QxT1BuQU9XZU1wVWt5R1kxV3E5V0o5QWdzeTlKMm5Nc25UMHpURkUxZzlqa0hSRVNLc3F6Szh1YnQyMTBlbG54a1ZURm1tdWJnNHNLcjFjUTM4MlJWQldIOXd2Y2p6N0xydDIrak1EemlGV0pWVmJwaFBQdk5iMHpET01SV2lGVlZzYXA2L2VwVnZOMVNRcVFqMVJaalROZjF3Zmw1bzlVU0ZhRW5yaW9JNjEvUFBvcmk1ZC8rZG56WGl6SEdWRVY1OXRWWGxtVWQrdUtYYzE3aythdFhyN0k0SnNlMWtPZWNLNHB5Zm5rcE9pdWdEUW1FOVhFamVWbCs5NWUvSE1mSkJ2R1c3ZXJaczNxamNVd0ROU0ZrdTkyK2ZmTW1PNXBHSFlSY1BYMTY2RTFnSUt4SHk0Yzh6Ly8yN2Jmc2tPdGNaRmtlbko5M2VqM0dtSFNNeXdwS2FSQUV3OXZidzIxY0l6YW5uajUvM21nMnNmU0RzTDQwSHphYnpadlhyNnV5UEtCeFQzUVg2WFM3b3REL3VOTkFYTm5nTDVlajRiREk4ME1KazVqNWNzNmZQSG5TYUxleHB3NWgzVnMrRUVvRDN4OE5oM3ZleUVua2dLd296V2J6L1BMeUhvOHJIOFRRUWdoWkxoYmo0VkNjL3QzYmRhSUlFNkcwMSs5M3VsMUNLY2NhRU1LNjkzeVFKR201V014bnN5eE54Ym10L1VrSmNibUFxcXFOWnJNM0dNaXlmRHFxK3Fjd3lUTG5mT1g3NDd1N3FxckU3WDU3cFNvcXk2cXFObHV0WHI5UFpabWRaSmdnckIwaHJucGZMaGIrY3BuRWNWRVVqLzV5WGFoSzE3UjZzOWs1T3hPTmtCQW0wZUppUHAzbWVTN3VUMzU4VlZGcW1LWlhxMzNvVjRXRWdyQjJnYUlvUlZtdWxzdGd0ZHB1Tm5tZVAwbytpTE9RcG1YVmE3Vld0NnZyZWxWVjJBZjVpYmJtODNuZysvRjJXK1E1ZmFRd1VVcHQyL1pxdFdhblk1bG1VUlNJRG9UMUNOb3FpMkxwKzVzd0RGYXIzUnhVL3BBRGhCRFg4N3hhcmRscTZick9UdWJJL21jc0VobGp5L2s4Q3NOMUVPeW1wOEkvaHNseDNYcTlYbXMwYk5zdXl4SmhnckFlZFJoWGxLb28vT1V5VHBMNWRQclFIU0RFbHIvbmViVkdvOTVvUEVvVG1BT2RiUlZGc1E0QzBiam1vZnNyZkdpdFY2dlhYYzl6SEFlcWdyRDJiQml2cXBYdkozRThHWTM0QTF3TUlRNlh1WjdYN25Sc3g3RXNDNnI2REcxbFdiYmRidjNsTXZCOXNhOTA3NnJpbkRlYXpWcTk3cnF1aVRCQldQdXJMVXFycW9yQ01BckR5WGdzNm9QdVIxVlZaVG5PK2NXRnB1dVdaWjFhSTZUNy9OSVRRaWxOMDFSY08zU1BqVHBFQTR4V3U5MW9ObTNITVF3RFlZS3dEa05iUlZHa1NTSnFJTDVFVzJKV3BSdkdzK2ZQWlVXQnF1NVJXNFNRTE12eVBKOU5Kc3ZGNGt2NmJRbFYxUnVOYnE5bldaWjIyazFnSUt4RFRZbXlMUE1zbTR6SC9uSkpDZm1rWTdxYzg2cXFUTXU2ZXZaTTA3U1Q3ZG4yNEVHU3BLSW84alNkeldiejZWVDBCZnVFTUVsU1ZaYU82MTVjWGhxR29XZ2FRWmdncklOR1hHazF2TDBOUHJyZlZsRVU0aEpBMDdLVXZlOVhkVFJoU3BOa09wbk1wMU5WMDM0MVRHS2RMbnIxR0taNXNrMXJJYXdqaGZNMFRjZmo4V0kyKzlCLzdrTldDQitKbFlYbmVmMkxDOC96MEZya01hTEUwelNkanNlTCtmekRXdjdIUUx5UFUxbFZydXVlUDNuaXVDNkNCR0VkZVVxRTYzVVN4MG1TNUhuT0dSTUhsWFhETUMzTDh6eE4xekdmMm9jSlZ4aUc4WGFiSmtsUkZLeXFLS1d5b3BpV1pSaUdWNnRwbW9Zd1FWZ0FBUERMVUR3Q0FBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUVCWUFBQUFZUUVBQUlRRkFJQ3dBQUFBd2dJQUFBZ0xBQUJoQVFBQWhBVUFBQkFXQUFEQ0FnQUFDQXNBQUdFQkFBQ0VCUUFBRUJZQUFNSUNBQUFJQ3dBQUlDd0FBSVFGQUFBUUZnQUFRRmdBQUFnTEFBQWdMQUFBZ0xBQUFCQVdBQUJBV0FBQUFHRUJBQ0FzQUFDQXNBQUFBTUlDQUJ3Ti96OXRySGkwcVlad3NnQUFBQUJKUlU1RXJrSmdnZz09JztcXG4vLyMgc291cmNlTWFwcGluZ1VSTD1EYXRhLmpzLm1hcFxcblxcbi8qKiovIH0pLFxcbi8qIDI3MiAqL1xcbi8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pIHtcXG5cXG5cXFwidXNlIHN0cmljdFxcXCI7XFxuXFxuXFxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFxcXCJfX2VzTW9kdWxlXFxcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcXG5mdW5jdGlvbiBmb3JtYXRJdGVtc09wdGlvbnMoaXRlbXMpIHtcXG4gICAgcmV0dXJuIGl0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IGl0ZW0uaWQsIGxhYmVsOiBpdGVtLmlkICsgXFxcIiAoXFxcIiArIGl0ZW0ucHJpY2UgKyBcXFwiIFxcXCIgKyBpdGVtLmN1cnJlbmN5ICsgXFxcIilcXFwiIH07XFxuICAgIH0pO1xcbn1cXG5leHBvcnRzLmZvcm1hdEl0ZW1zT3B0aW9ucyA9IGZvcm1hdEl0ZW1zT3B0aW9ucztcXG5mdW5jdGlvbiBnZXRJdGVtc0Zyb21MaW5lKGxpbmVzLCBpbmRleCkge1xcbiAgICByZXR1cm4gbGluZXMuZmluZChmdW5jdGlvbiAobGluZSkge1xcbiAgICAgICAgcmV0dXJuIGxpbmUuaWQgPT09IGluZGV4O1xcbiAgICB9KS5pdGVtcztcXG59XFxuZXhwb3J0cy5nZXRJdGVtc0Zyb21MaW5lID0gZ2V0SXRlbXNGcm9tTGluZTtcXG5mdW5jdGlvbiBjYWxjdWxJdGVtQW1vdW50KGxpbmUsIGl0ZW0pIHtcXG4gICAgdmFyIGRpc2NvdW50ID0gbGluZS5kaXNjb3VudDtcXG4gICAgcmV0dXJuIHJvdW5kRGVjaW1hbChsaW5lLnF1YW50aXR5ICogaXRlbS5wcmljZSAqICgxIC0gKGRpc2NvdW50ID8gZGlzY291bnQgOiAwKSAvIDEwMCksIDIpO1xcbn1cXG5mdW5jdGlvbiBkaXNwbGF5SXRlbUFtb3VudChsaW5lKSB7XFxuICAgIGlmICghbGluZS5pdGVtKSByZXR1cm4gXFxcIjAgXFxcIiArIGxpbmUuaXRlbXNbMF0uY3VycmVuY3k7XFxuICAgIHZhciBpdGVtID0gbGluZS5pdGVtcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gbGluZS5pdGVtO1xcbiAgICB9KTtcXG4gICAgcmV0dXJuIGNhbGN1bEl0ZW1BbW91bnQobGluZSwgaXRlbSkgKyBcXFwiIFxcXCIgKyBpdGVtLmN1cnJlbmN5ICsgXFxcIiBcXFwiO1xcbn1cXG5leHBvcnRzLmRpc3BsYXlJdGVtQW1vdW50ID0gZGlzcGxheUl0ZW1BbW91bnQ7XFxuZnVuY3Rpb24gZGlzcGxheVRvdGFsQW1vdW50KGxpbmVzKSB7XFxuICAgIHZhciB0b3RhbCA9IGxpbmVzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBsaW5lKSB7XFxuICAgICAgICBpZiAoIWxpbmUuaXRlbSkgcmV0dXJuIGFjYztcXG4gICAgICAgIHZhciBpdGVtID0gbGluZS5pdGVtcy5maW5kKGZ1bmN0aW9uIChpdGVtKSB7XFxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT09IGxpbmUuaXRlbTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuIGNhbGN1bEl0ZW1BbW91bnQobGluZSwgaXRlbSkgKyBhY2M7XFxuICAgIH0sIDApO1xcbiAgICByZXR1cm4gdG90YWwgKyBcXFwiIFxcXCIgKyBsaW5lc1swXS5pdGVtc1swXS5jdXJyZW5jeTtcXG59XFxuZXhwb3J0cy5kaXNwbGF5VG90YWxBbW91bnQgPSBkaXNwbGF5VG90YWxBbW91bnQ7XFxuZnVuY3Rpb24gcm91bmREZWNpbWFsKG51bWJlciwgcHJlY2lzaW9uKSB7XFxuICAgIHZhciB0bXAgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDIpO1xcbiAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIgKiB0bXApIC8gdG1wO1xcbn1cXG5cXG4vKioqLyB9KSxcXG4vKiAyNzMgKi9cXG4vKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKSB7XFxuXFxuXFxcInVzZSBzdHJpY3RcXFwiO1xcblxcblxcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcXFwiX19lc01vZHVsZVxcXCIsIHsgdmFsdWU6IHRydWUgfSk7XFxuZXhwb3J0cy5kZWZhdWx0ID0ge1xcbiAgICBhbW91bnQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdBbW91bnQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ01vbnRhbnQnXFxuICAgIH0sXFxuICAgIGRlc2NyaXB0aW9uOiB7XFxuICAgICAgICAnZW4tVVMnOiAnRGVzY3JpcHRpb24nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0Rlc2NyaXB0aW9uJ1xcbiAgICB9LFxcbiAgICBkaXNjb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ0Rpc2NvdW50ICglKScsXFxuICAgICAgICAnZnItRlInOiAnUmFiYWlzICglKSdcXG4gICAgfSxcXG4gICAgaWQ6IHtcXG4gICAgICAgICdlbi1VUyc6ICdSRlEgSUQnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0lkZW50aWZpYW50IFJGUSdcXG4gICAgfSxcXG4gICAgaXNzdWVfZGF0ZToge1xcbiAgICAgICAgJ2VuLVVTJzogJ0lzc3VlIERhdGUnLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0RhdGUgZGUgY3LDqWF0aW9uJ1xcbiAgICB9LFxcbiAgICBpc3N1ZV90aW1lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnSXNzdWUgVGltZScsXFxuICAgICAgICAnZnItRlInOiAnSGV1cmUgZGUgY3LDqWF0aW9uJ1xcbiAgICB9LFxcbiAgICBsaW5lOiB7XFxuICAgICAgICAnZW4tVVMnOiAnTGluZScsXFxuICAgICAgICAnZnItRlInOiAnTGlnbmUnXFxuICAgIH0sXFxuICAgIGxpc3RfaXRlbXM6IHtcXG4gICAgICAgICdlbi1VUyc6ICdMaXN0IG9mIGl0ZW1zJyxcXG4gICAgICAgICdmci1GUic6ICdMaXN0ZSBkZXMgYXJ0aWNsZXMnXFxuICAgIH0sXFxuICAgIG5vdGU6IHtcXG4gICAgICAgICdlbi1VUyc6ICdOb3RlJyxcXG4gICAgICAgICdmci1GUic6ICdOb3RlJ1xcbiAgICB9LFxcbiAgICBxdWFudGl0eToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1F1YW50aXR5JyxcXG4gICAgICAgICdmci1GUic6ICdRdWFudGl0w6knXFxuICAgIH0sXFxuICAgIHJmcV9pbmZvOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUkZRIGluZm8nLFxcbiAgICAgICAgJ2ZyLUZSJzogJ0luZm8gZHUgUkZRJ1xcbiAgICB9LFxcbiAgICBzZWxlY3RfaXRlbToge1xcbiAgICAgICAgJ2VuLVVTJzogJ1NlbGVjdCBhbiBpdGVtJyxcXG4gICAgICAgICdmci1GUic6ICdTw6lsZWN0aW9ubmV6IHVuIGFydGljbGUnXFxuICAgIH0sXFxuICAgIHRvdGFsX2Ftb3VudDoge1xcbiAgICAgICAgJ2VuLVVTJzogJ1RvdGFsIGFtb3VudCcsXFxuICAgICAgICAnZnItRlInOiAnTW9udGFudCB0b3RhbCdcXG4gICAgfSxcXG4gICAgdmFsaWRhdGlvbl9jb2RlX2xhYmVsOiB7XFxuICAgICAgICAnZW4tVVMnOiAnUGxlYXNlIHZlcmlmeSB5b3VyIHZhbGlkYXRpb24gY29kZScsXFxuICAgICAgICAnZnItRlInOiAnTWVyY2kgZGUgdsOpcmlmaWVyIGxlIGNvZGUgZGUgdmFsaWRhdGlvbidcXG4gICAgfVxcbn07XFxuXFxuLyoqKi8gfSlcXG4vKioqKioqLyBdKTtcIixcImJ5dGVDb250ZW50XCI6bnVsbH1dfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM4OTg5NX0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUE8tQnVpbGRFbWFpbCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUE8tQnVpbGRFbWFpbFwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJCdWlsZCB0aGUgZW1haWwgbm90aWZpY2F0aW9uIHNlbnQgYnkgdGhlIEhhbmRsZVB1cmNoYXNlT3JkZXIgV29ya2Zsb3cgU3RlcFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM4OTk2OSxcInJldmlzaW9uSWRcIjpcIjE0MzIzM2Y2Zjg4NGM1Y2RjNmYyOWU4NDg3ZjhlNTFjXCIsXCJtYWluU2NyaXB0XCI6XCJpbXBvcnQgamF2YS5uZXQuVVJMRW5jb2RlclxcblxcbnA2LnBpcGVsaW5lLnB1dCAnU3ViamVjdCcsICdQbGF0Zm9ybSA2IERlbW8gQXBwIC0gUHVyY2hhc2UgT3JkZXIgdG8gcmV2aWV3J1xcblxcbnA2LnBpcGVsaW5lLnB1dCAnRnJvbScsICduby1yZXBseUBwbGF0Zm9ybTYuaW8nXFxuXFxuZGVmIGluc3RhbmNlSWQgPSBwNi5jb25maWd1cmF0aW9uLmdldChcXFwiaW5zdGFuY2UuaWRcXFwiKVxcblxcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIGl0ZW1JZHMgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG5kZWYgaXRlbVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgaXRlbUlkcylcXG5cXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmV4aXN0cyhpdGVtUGspXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoKVxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBzbHVycGVyLnBhcnNlVGV4dCh0cmFuc2FjdGlvbkluZm9Db250ZW50KVxcblxcbmRlZiB0cmFuc2FjdGlvbklkID0gdHJhbnNhY3Rpb25JbmZvLklkLnRleHQoKVxcblxcbmRlZiBwb3J0YWxCYXNlVVJMID0gJ3BvcnRhbC5wbGF0Zm9ybTYuaW8nXFxuaWYgKCdkZXYnLmVxdWFscyhpbnN0YW5jZUlkKSkge1xcbiAgICBwb3J0YWxCYXNlVVJMID0gJ2Rldi5wb3J0YWwuYW1hbHRvLmNvbSdcXG59XFxuXFxuZGVmIGh0bWxMaW5rID0gXFxcImh0dHBzOi8vJHBvcnRhbEJhc2VVUkwvIy9lZGl0LXRyYW5zYWN0aW9uLyRpbnN0YW5jZUlkL3A2X2RlbW8uVHJhbnNhY3Rpb25zL1xcXCIrVVJMRW5jb2Rlci5lbmNvZGUoJ1tcXFwiJyt0cmFuc2FjdGlvbklkKydcXFwiXScsICd1dGYtOCcpXFxucDYucGlwZWxpbmUucHV0ICdocmVmJywgaHRtbExpbmssICd0ZXh0L3BsYWluJ1xcblxcbmRlZiBkb2NOdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uQnVzaW5lc3NEb2NOdW1iZXIudGV4dCgpXFxuZGVmIHRvdGFsQW1vdW50ID0gdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlLmZpbmR7aXQuS2V5ID09ICdUb3RhbCBBbW91bnQnfS5WYWx1ZS50ZXh0KClcXG5cXG5pZiAoZG9jTnVtYmVyID09IG51bGwpIHtcXG4gICAgZG9jTnVtYmVyID0gJydcXG59XFxuXFxuaWYgKHRvdGFsQW1vdW50ID09IG51bGwpIHtcXG4gICAgdG90YWxBbW91bnQgPSAnJ1xcbn1cXG5cXG5cXG5wNi5waXBlbGluZS5wdXQgJ2RvY051bWJlcicsIGRvY051bWJlciwgJ3RleHQvcGxhaW4nXFxucDYucGlwZWxpbmUucHV0ICd0b3RhbEFtb3VudCcsIHRvdGFsQW1vdW50LCAndGV4dC9wbGFpbidcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1Mzg5OTY5fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVQTy1IYW5kbGVBY3Rpb25SZWplY3RPcmRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uUmVqZWN0T3JkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFBPIFRyYW5zYWN0aW9uSW5mbyB1cGRhdGVzIGZvciBhIFJlamVjdGVkIE9yZGVyIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgSGFuZGxlUHVyY2hhc2VPcmRlciBXb3JrZmxvdyBTdGVwXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1MzkwMDM4LFwicmV2aXNpb25JZFwiOlwiNzM0Zjg2MDcyNzNjMzUwM2ViNzAyYzE2MTliMGUwYTVcIixcIm1haW5TY3JpcHRcIjpcImltcG9ydCBncm9vdnkuanNvbi4qXFxuaW1wb3J0IGphdmEudGV4dC5TaW1wbGVEYXRlRm9ybWF0XFxuXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgaXRlbUlkcyA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuaWRzJ1xcblxcbmRlZiBpdGVtUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKGRhdGFUeXBlLCBpdGVtSWRzKVxcblxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZXhpc3RzKGl0ZW1QaylcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcigpXFxuZGVmIHRyYW5zYWN0aW9uSW5mbyA9IHNsdXJwZXIucGFyc2VUZXh0KHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQpXFxuXFxuZGVmIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxcblNpbXBsZURhdGVGb3JtYXQgdHJhbnNhY3Rpb25fc2RmID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoXFxcInl5eXlNTWRkJ1QnSEg6bW06c3NcXFwiKVxcblxcbmRlZiBmb3JtYXRlZERhdGUgPSB0cmFuc2FjdGlvbl9zZGYuZm9ybWF0KGN1cnJlbnREYXRlKVxcblxcbmRlZiByZWFzb24gPSBwNi5waXBlbGluZS5nZXQgJ3JlYXNvbidcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSAnUmVqZWN0ZWQnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlID0gcmVhc29uXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNEYXRlID0gZm9ybWF0ZWREYXRlXFxuXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0NvZGUgPSAnSGFuZGxlZCdcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG5kZWYgdHJhbnNhY3Rpb25JZCA9IHRyYW5zYWN0aW9uSW5mby5JZC50ZXh0KClcXG5cXG5kZWYgaXBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSygncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCB0cmFuc2FjdGlvbklkKVxcblxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIGlwaywgJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzOTAwMzh9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJIYW5kbGVRdW90ZVRyYW5zYWN0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiSGFuZGxlUXVvdGVUcmFuc2FjdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJIYW5kbGUgdGhlIHJlY2VwdGlvbiBvZiBhIFF1b3RlIChmbGlwIHRvIGEgUHVyY2hhc2VPcmRlciBVQkwgRG9jdW1lbnQsIGNyZWF0aW9uIG9mIHRoZSBjb3JyZXNwb25kaW5nIFRyYW5zYWN0aW9uSW5mbywgc3RvcmFnZSB0byBmaWxlIHN5c3RlbSkgLSBTY3JpcHQgY2FsbGVkIGJ5IHRoZSBCbG9ja2NoYWluRXZlbnRIYW5kbGVyIHNjcmlwdFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDE2MSxcInJldmlzaW9uSWRcIjpcImYxNWQ3OTFkYjBkYTg4YzZkYzAwZWNmMjhlOWQwZjg4XCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGphdmEudXRpbC5VVUlEXFxuaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5pby5GaWxlVXRpbHNcXG5pbXBvcnQgamF2YS50aW1lLmZvcm1hdC5EYXRlVGltZUZvcm1hdHRlclxcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiBxdW90ZUNvbnRlbnQgPSBwNi5waXBlbGluZS5nZXQgJ3VibCdcXG5cXG5YbWxTbHVycGVyIHNsdXJwZXIgPSBuZXcgWG1sU2x1cnBlcihmYWxzZSwgdHJ1ZSlcXG5kZWYgcXVvdGUgPSBzbHVycGVyLnBhcnNlVGV4dChxdW90ZUNvbnRlbnQpXFxuXFxuZGVmIGluc3RhbmNlSWQgPSBwNi5jb25maWd1cmF0aW9uLmdldChcXFwiaW5zdGFuY2UuaWRcXFwiKVxcblxcbi8vIENhbGN1bGF0ZSBpc3N1ZSBkYXRlIGFuZCB0aW1lXFxuZGVmIG5vdyA9IGhlbHBlci5ub3coKVxcbmRlZiBmb3JtYXR0ZWREYXRlID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJ5eXl5TU1kZCdUJ0hIOm1tOnNzXFxcIikuZm9ybWF0KG5vdylcXG5kZWYgaXNzdWVEYXRlID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJ5eXl5LU1NLWRkXFxcIikuZm9ybWF0KG5vdylcXG5kZWYgaXNzdWVUaW1lID0gRGF0ZVRpbWVGb3JtYXR0ZXIub2ZQYXR0ZXJuKFxcXCJISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxuZGVmIHNlbGxlck5hbWUgPSBxdW90ZS5TZWxsZXJTdXBwbGllclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiBidXllck5hbWUgPSBxdW90ZS5PcmlnaW5hdG9yQ3VzdG9tZXJQYXJ0eS5QYXJ0eS5QYXJ0eU5hbWUuTmFtZS50ZXh0KClcXG5kZWYgdG90YWxBbW91bnQgPSBxdW90ZS5RdW90ZWRNb25ldGFyeVRvdGFsLlBheWFibGVBbW91bnQudGV4dCgpXFxuZGVmIHRvdGFsQ3VycmVuY3kgPSBxdW90ZS5RdW90ZWRNb25ldGFyeVRvdGFsLlBheWFibGVBbW91bnQuJ0BjdXJyZW5jeUlEJy50ZXh0KClcXG5cXG5kZWYgcXVvdGVJZCA9IHF1b3RlLklELnRleHQoKVxcbmRlZiBjb21tZW50cyA9IHF1b3RlLk5vdGUudGV4dCgpXFxuXFxuaW50IG5iTGluZXMgPSBxdW90ZS5RdW90YXRpb25MaW5lLnNpemUoKVxcblxcbmRlZiB0cmFuc2FjdGlvblR5cGUgPSAnUHVyY2hhc2VPcmRlcidcXG5kZWYgcHVyY2hhc2VPcmRlcklkID0gVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKVxcbmRlZiBzdGF0dXMgPSAnUmVjZWl2ZWQnXFxuZGVmIHN0YXR1c01lc3NhZ2UgPSAnUmVjZWl2ZWQgYnkgRGVtbyBBcHAnXFxuXFxuZGVmIHNvdXJjZVVSSSA9IFxcXCJmaWxlOi8vJFA2X0RBVEEvcmVzb3VyY2VzL2RvY3VtZW50cy9RdW90ZS9cXFwiICsgcXVvdGVJZCArIFxcXCIueG1sXFxcIlxcbmRlZiB0YXJnZXRVUkkgPSBcXFwiZmlsZTovLyRQNl9EQVRBL3Jlc291cmNlcy9kb2N1bWVudHMvUHVyY2hhc2VPcmRlci9cXFwiICsgcHVyY2hhc2VPcmRlcklkICsgXFxcIi54bWxcXFwiXFxuXFxuZGVmIG9yZGVyTGluZXMgPSAnJ1xcblxcbnF1b3RlLlF1b3RhdGlvbkxpbmUuZWFjaCB7IG15TGluZSAtPlxcblxcbiAgICBvcmRlckxpbmVzICs9IFxcXCJcXFwiXFxcIjxjYWM6T3JkZXJMaW5lPlxcbiAgICA8Y2JjOk5vdGU+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLk5vdGUudGV4dCgpKX08L2NiYzpOb3RlPlxcbiAgICA8Y2FjOkxpbmVJdGVtPlxcbiAgICAgIDxjYmM6SUQ+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLklELnRleHQoKSl9PC9jYmM6SUQ+XFxuICAgICAgPGNiYzpRdWFudGl0eSB1bml0Q29kZT1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LidAdW5pdENvZGUnLnRleHQoKSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUXVhbnRpdHkudGV4dCgpKX08L2NiYzpRdWFudGl0eT5cXG4gICAgICA8Y2JjOkxpbmVFeHRlbnNpb25BbW91bnQgY3VycmVuY3lJRD1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLkxpbmVFeHRlbnNpb25BbW91bnQuJ0BjdXJyZW5jeUlEJy50ZXh0KCkpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLkxpbmVFeHRlbnNpb25BbW91bnQudGV4dCgpKX08L2NiYzpMaW5lRXh0ZW5zaW9uQW1vdW50PlxcbiAgICAgIDxjYWM6UHJpY2U+XFxuICAgICAgICA8Y2JjOlByaWNlQW1vdW50IGN1cnJlbmN5SUQ9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5QcmljZS5QcmljZUFtb3VudC4nQGN1cnJlbmN5SUQnLnRleHQoKSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUHJpY2UuUHJpY2VBbW91bnQudGV4dCgpKX08L2NiYzpQcmljZUFtb3VudD5cXG4gICAgICAgIDxjYmM6QmFzZVF1YW50aXR5IHVuaXRDb2RlPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUHJpY2UuQmFzZVF1YW50aXR5LidAdW5pdENvZGUnLnRleHQoKSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUHJpY2UuQmFzZVF1YW50aXR5LnRleHQoKSl9PC9jYmM6QmFzZVF1YW50aXR5PlxcbiAgICAgIDwvY2FjOlByaWNlPlxcbiAgICAgIDxjYWM6SXRlbT5cXG4gICAgICAgIDxjYmM6RGVzY3JpcHRpb24+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLkl0ZW0uRGVzY3JpcHRpb24udGV4dCgpKX08L2NiYzpEZXNjcmlwdGlvbj5cXG4gICAgICAgIDxjYmM6TmFtZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uSXRlbS5OYW1lLnRleHQoKSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpJdGVtPlxcbiAgICA8L2NhYzpMaW5lSXRlbT5cXG4gIDwvY2FjOk9yZGVyTGluZT5cXG4gICAgXFxcIlxcXCJcXFwiXFxufVxcblxcblxcbmRlZiBvcmRlckNvbnRlbnQgPSBcXFwiXFxcIlxcXCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiIGVuY29kaW5nPVxcXCJVVEYtOFxcXCI/PlxcbjxPcmRlciB4bWxucz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6T3JkZXItMlxcXCJcXG4gIHhtbG5zOmNhYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQWdncmVnYXRlQ29tcG9uZW50cy0yXFxcIlxcbiAgeG1sbnM6Y2JjPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25CYXNpY0NvbXBvbmVudHMtMlxcXCI+XFxuICA8Y2JjOlVCTFZlcnNpb25JRD4yLjE8L2NiYzpVQkxWZXJzaW9uSUQ+XFxuICA8Y2JjOkN1c3RvbWl6YXRpb25JRD51cm46d3d3LmNlbmJpaS5ldTp0cmFuc2FjdGlvbjpiaWljb3JldHJkbTAwMTp2ZXIxLjA8L2NiYzpDdXN0b21pemF0aW9uSUQ+XFxuICA8Y2JjOlByb2ZpbGVJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiQklJXFxcIiBzY2hlbWVJRD1cXFwiUHJvZmlsZVxcXCJcXG4gICAgPnVybjp3d3cuY2VuYmlpLmV1OnByb2ZpbGU6QklJMDE6dmVyMS4wPC9jYmM6UHJvZmlsZUlEPlxcbiAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChwdXJjaGFzZU9yZGVySWQpfTwvY2JjOklEPlxcbiAgPGNiYzpJc3N1ZURhdGU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVEYXRlKX08L2NiYzpJc3N1ZURhdGU+XFxuICAgPGNiYzpJc3N1ZVRpbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVUaW1lKX08L2NiYzpJc3N1ZVRpbWU+XFxuICA8Y2JjOk5vdGU+SW5mb3JtYXRpb24gdGV4dCBmb3IgdGhlIHdob2xlIG9yZGVyPC9jYmM6Tm90ZT5cXG4gIDxjYmM6RG9jdW1lbnRDdXJyZW5jeUNvZGU+U0VLPC9jYmM6RG9jdW1lbnRDdXJyZW5jeUNvZGU+XFxuICA8Y2JjOkFjY291bnRpbmdDb3N0Q29kZT5Qcm9qZWN0MTIzPC9jYmM6QWNjb3VudGluZ0Nvc3RDb2RlPlxcbiAgPGNhYzpRdW90YXRpb25Eb2N1bWVudFJlZmVyZW5jZT5cXG4gICAgPGNiYzpJRD5RdW90ZUlEMTIzPC9jYmM6SUQ+XFxuICA8L2NhYzpRdW90YXRpb25Eb2N1bWVudFJlZmVyZW5jZT5cXG4gIDxjYWM6T3JkZXJEb2N1bWVudFJlZmVyZW5jZT5cXG4gICAgPGNiYzpJRD5SamVjdGVkT3JkZXJJRDEyMzwvY2JjOklEPlxcbiAgPC9jYWM6T3JkZXJEb2N1bWVudFJlZmVyZW5jZT5cXG4gIDxjYWM6T3JpZ2luYXRvckRvY3VtZW50UmVmZXJlbmNlPlxcbiAgICA8Y2JjOklEPk1BRk88L2NiYzpJRD5cXG4gIDwvY2FjOk9yaWdpbmF0b3JEb2N1bWVudFJlZmVyZW5jZT5cXG4gIDxjYWM6Q29udHJhY3Q+XFxuICAgIDxjYmM6SUQ+MzQzMjI8L2NiYzpJRD5cXG4gICAgPGNiYzpDb250cmFjdFR5cGU+RnJhbWV3b3JrQWdyZWVtZW50SUQxMjM8L2NiYzpDb250cmFjdFR5cGU+XFxuICA8L2NhYzpDb250cmFjdD5cXG4gIDxjYWM6QnV5ZXJDdXN0b21lclBhcnR5PlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYmM6RW5kcG9pbnRJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+NzMwMDA3MjMxMTExNTwvY2JjOkVuZHBvaW50SUQ+XFxuICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+NzMwMDA3MDAxMTExNTwvY2JjOklEPlxcbiAgICAgIDwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgPGNiYzpJRD5QYXJ0eUlEMTIzPC9jYmM6SUQ+XFxuICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICA8Y2FjOlBhcnR5TmFtZT5cXG4gICAgICAgIDxjYmM6TmFtZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChidXllck5hbWUpfTwvY2JjOk5hbWU+XFxuICAgICAgPC9jYWM6UGFydHlOYW1lPlxcbiAgICAgIDxjYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjEyMzQ1Njc4OTAxMjM8L2NiYzpJRD5cXG4gICAgICAgIDxjYmM6UG9zdGJveD5Qb0JveDEyMzwvY2JjOlBvc3Rib3g+XFxuICAgICAgICA8Y2JjOlN0cmVldE5hbWU+UsOlZGh1c2dhdGFuPC9jYmM6U3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QWRkaXRpb25hbFN0cmVldE5hbWU+Mm5kIGZsb29yPC9jYmM6QWRkaXRpb25hbFN0cmVldE5hbWU+XFxuICAgICAgICA8Y2JjOkJ1aWxkaW5nTnVtYmVyPjU8L2NiYzpCdWlsZGluZ051bWJlcj5cXG4gICAgICAgIDxjYmM6RGVwYXJ0bWVudD5QdXJjaGFzaW5nIGRlcGFydG1lbnQ8L2NiYzpEZXBhcnRtZW50PlxcbiAgICAgICAgPGNiYzpDaXR5TmFtZT5TdG9ja2hvbG08L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgIDxjYmM6UG9zdGFsWm9uZT4xMTAwMDwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+UmVnaW9uWDwvY2JjOkNvdW50cnlTdWJlbnRpdHk+XFxuICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPlNFPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDxjYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgICAgIDxjYmM6UmVnaXN0cmF0aW9uTmFtZT5Kb2huc3NvbnMgQnlnZ3Zhcm9yIEFCPC9jYmM6UmVnaXN0cmF0aW9uTmFtZT5cXG4gICAgICAgIDxjYmM6Q29tcGFueUlEIHNjaGVtZUlEPVxcXCJTRTpPUkdOUlxcXCI+NTUzMjMzMTE4MzwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICAgIDxjYWM6UmVnaXN0cmF0aW9uQWRkcmVzcz5cXG4gICAgICAgICAgPGNiYzpDaXR5TmFtZT5TdG9ja2hvbG08L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgICAgPGNiYzpDb3VudHJ5U3ViZW50aXR5PlJlZ2lvblg8L2NiYzpDb3VudHJ5U3ViZW50aXR5PlxcbiAgICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+U0U8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICAgIDwvY2FjOkNvdW50cnk+XFxuICAgICAgICA8L2NhYzpSZWdpc3RyYXRpb25BZGRyZXNzPlxcbiAgICAgIDwvY2FjOlBhcnR5TGVnYWxFbnRpdHk+XFxuICAgIDwvY2FjOlBhcnR5PlxcbiAgPC9jYWM6QnV5ZXJDdXN0b21lclBhcnR5PlxcbiAgPGNhYzpTZWxsZXJTdXBwbGllclBhcnR5PlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYmM6RW5kcG9pbnRJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+NzMwMjM0NzIzMTExMTwvY2JjOkVuZHBvaW50SUQ+XFxuICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgPGNiYzpJRD5TZWxsZXJQYXJ0eUlEMTIzPC9jYmM6SUQ+XFxuICAgICAgPC9jYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICA8Y2FjOlBhcnR5TmFtZT5cXG4gICAgICAgIDxjYmM6TmFtZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChzZWxsZXJOYW1lKX08L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOlBhcnR5TmFtZT5cXG4gICAgICA8Y2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgICA8Y2JjOklEIHNjaGVtZUFnZW5jeUlEPVxcXCI5XFxcIiBzY2hlbWVJRD1cXFwiR0xOXFxcIj4wOTg3NjU0MzIxMTIzPC9jYmM6SUQ+XFxuICAgICAgICA8Y2JjOlBvc3Rib3g+MzIxPC9jYmM6UG9zdGJveD5cXG4gICAgICAgIDxjYmM6U3RyZWV0TmFtZT5LdW5nc2dhdGFuPC9jYmM6U3RyZWV0TmFtZT5cXG4gICAgICAgIDxjYmM6QWRkaXRpb25hbFN0cmVldE5hbWU+c3VpdGUxMjwvY2JjOkFkZGl0aW9uYWxTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj4yMjwvY2JjOkJ1aWxkaW5nTnVtYmVyPlxcbiAgICAgICAgPGNiYzpEZXBhcnRtZW50PlNhbGVzIGRlcGFydG1lbnQ8L2NiYzpEZXBhcnRtZW50PlxcbiAgICAgICAgPGNiYzpDaXR5TmFtZT5TdG9ja2hvbG08L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgIDxjYmM6UG9zdGFsWm9uZT4xMTAwMDwvY2JjOlBvc3RhbFpvbmU+XFxuICAgICAgICA8Y2JjOkNvdW50cnlTdWJlbnRpdHk+UmVnaW9uWDwvY2JjOkNvdW50cnlTdWJlbnRpdHk+XFxuICAgICAgICA8Y2FjOkNvdW50cnk+XFxuICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPlNFPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgPC9jYWM6Q291bnRyeT5cXG4gICAgICA8L2NhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgIDxjYWM6UGFydHlMZWdhbEVudGl0eT5cXG4gICAgICAgIDxjYmM6UmVnaXN0cmF0aW9uTmFtZT5Nb2Rlcm5hIFByb2R1a3RlciBBQjwvY2JjOlJlZ2lzdHJhdGlvbk5hbWU+XFxuICAgICAgICA8Y2JjOkNvbXBhbnlJRCBzY2hlbWVJRD1cXFwiU0U6T1JHTlJcXFwiPjU1MzIzMzIyODM8L2NiYzpDb21wYW55SUQ+XFxuICAgICAgICA8Y2FjOlJlZ2lzdHJhdGlvbkFkZHJlc3M+XFxuICAgICAgICAgIDxjYmM6Q2l0eU5hbWU+U3RvY2tob2xtPC9jYmM6Q2l0eU5hbWU+XFxuICAgICAgICAgIDxjYmM6Q291bnRyeVN1YmVudGl0eT5SZWdpb25YPC9jYmM6Q291bnRyeVN1YmVudGl0eT5cXG4gICAgICAgICAgPGNhYzpDb3VudHJ5PlxcbiAgICAgICAgICAgIDxjYmM6SWRlbnRpZmljYXRpb25Db2RlPlNFPC9jYmM6SWRlbnRpZmljYXRpb25Db2RlPlxcbiAgICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgICAgPC9jYWM6UmVnaXN0cmF0aW9uQWRkcmVzcz5cXG4gICAgICA8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICA8L2NhYzpQYXJ0eT5cXG4gIDwvY2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICA8Y2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lQWdlbmN5SUQ9XFxcIjlcXFwiIHNjaGVtZUlEPVxcXCJHTE5cXFwiPjA5ODc2NzgzMjExMjM8L2NiYzpJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgIDxjYWM6UGFydHlOYW1lPlxcbiAgICAgICAgPGNiYzpOYW1lPk1vZGVybmEgUHJvZHVrdGVyIEFCPC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgIDwvY2FjOlBhcnR5PlxcbiAgPC9jYWM6T3JpZ2luYXRvckN1c3RvbWVyUGFydHk+XFxuICA8Y2FjOkFudGljaXBhdGVkTW9uZXRhcnlUb3RhbD5cXG4gICAgPGNiYzpQYXlhYmxlQW1vdW50IGN1cnJlbmN5SUQgPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKHRvdGFsQW1vdW50KX08L2NiYzpQYXlhYmxlQW1vdW50PlxcbiAgPC9jYWM6QW50aWNpcGF0ZWRNb25ldGFyeVRvdGFsPlxcbiAgJHtvcmRlckxpbmVzfVxcbjwvT3JkZXI+XFxuXFxuXFxcIlxcXCJcXFwiXFxuXFxuXFxuZGVmIHRhcmdldEZpbGUgPSBwNi51cmkuZmlsZUZyb21VcmwodGFyZ2V0VVJJKVxcblxcbkZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZSh0YXJnZXRGaWxlLCBvcmRlckNvbnRlbnQsJ1VURi04JylcXG5cXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gXFxcIlxcXCJcXFwiPFRyYW5zYWN0aW9uSW5mbz5cXG4gICAgPElkPiR7cHVyY2hhc2VPcmRlcklkfTwvSWQ+XFxuICAgIDxDcmVhdGlvbkRhdGU+JHtmb3JtYXR0ZWREYXRlfTwvQ3JlYXRpb25EYXRlPlxcbiAgICA8VHJhbnNhY3Rpb25UeXBlPlB1cmNoYXNlIE9yZGVyPC9UcmFuc2FjdGlvblR5cGU+XFxuICAgIDxUcmFuc2FjdGlvbk51bWJlcj4ke3B1cmNoYXNlT3JkZXJJZH08L1RyYW5zYWN0aW9uTnVtYmVyPlxcbiAgICA8U291cmNlU3lzdGVtPkRlbW8gQXBwPC9Tb3VyY2VTeXN0ZW0+XFxuICAgIDxUYXJnZXRTeXN0ZW0vPlxcbiAgICA8U2VuZGVyLz5cXG4gICAgPEZpbmFsUmVjaXBpZW50PlN1cHBsaWVyPC9GaW5hbFJlY2lwaWVudD5cXG4gICAgPFRyYW5zZmVyUHJvdG9jb2w+QmxvY2tjaGFpbjwvVHJhbnNmZXJQcm90b2NvbD5cXG4gICAgPERlbGl2ZXJlZFZpYT5BbWFsdG88L0RlbGl2ZXJlZFZpYT5cXG4gICAgPFNvdXJjZURvY3VtZW50Rm9ybWF0PlVCTDwvU291cmNlRG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxTb3VyY2VEb2N1bWVudFVSST4ke3NvdXJjZVVSSX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1Bpdm90RG9jdW1lbnRVUkk+XFxuICAgIDxQaXZvdERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1Bpdm90RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRhcmdldERvY3VtZW50Rm9ybWF0PlVCTDwvVGFyZ2V0RG9jdW1lbnRGb3JtYXQ+XFxuICAgIDxUYXJnZXREb2N1bWVudFVSST4ke3RhcmdldFVSSX08L1RhcmdldERvY3VtZW50VVJJPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvVGFyZ2V0RG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFRlY2huaWNhbFN0YXR1c0NvZGU+JHtzdGF0dXN9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3N0YXR1c01lc3NhZ2V9PC9UZWNobmljYWxTdGF0dXNNZXNzYWdlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzRGF0ZT4ke2Zvcm1hdHRlZERhdGV9PC9UZWNobmljYWxTdGF0dXNEYXRlPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0NvZGUvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c01lc3NhZ2UvPlxcbiAgICA8RnVuY3Rpb25hbFN0YXR1c0RhdGUvPlxcbiAgICA8RmxhZ3M+e1xcXCJhYXZpc2libGVcXFwiOiB0cnVlfTwvRmxhZ3M+XFxuICAgIDxPcmdQYXRoPi8ke2luc3RhbmNlSWR9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICA8L0tleVZhbHVlPlxcbiAgIDxLZXlWYWx1ZT5cXG4gICAgICA8S2V5PkJ1eWVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoYnV5ZXJOYW1lKX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwodG90YWxBbW91bnQpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoJ3A2X2RlbW8uVHJhbnNhY3Rpb25JbmZvJywgcHVyY2hhc2VPcmRlcklkKVxcbnA2LnRyYW5zYWN0aW9uLnNhdmVBbmRSb3V0ZSh0cmFuc2FjdGlvbkluZm8sICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIGlwaywgJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzOTAxNjF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25EZWNsaW5lIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uRGVjbGluZVwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJIYW5kbGUgUkZRIFRyYW5zYWN0aW9uSW5mbyB1cGRhdGUgZm9yIERlY2xpbmVkIFJGUSAtIFNjcmlwdCBjYWxsZWQgYnkgdGhlIEhhbmRsZVJlcXVlc3RGb3JRdW90YXRpb24gV29ya2Zsb3cgU3RlcFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDE3MyxcInJldmlzaW9uSWRcIjpcIjE4YzFkZDRlYjE0YjU2NTg3M2VjNzg1ZDhmMGIzYmRkXCIsXCJtYWluU2NyaXB0XCI6XCIvKipcXG4gKiBZb3UgY2FuIGNhbGwgYW5vdGhlciBzY3JpcHQgYnkgdXNpbmcgJ0luY2x1ZGUnIHRhZ3NcXG4gKiBcXG4gKiBAaW5jbHVkZSBSRlFTbWFydENvbnRyYWN0SGVscGVyXFxuICovXFxuXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5pbXBvcnQgamF2YS51dGlsLlVVSURcXG5cXG5cXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG5kZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiByZnFJZCA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuaWRzJ1xcbmRlZiByZWFzb24gPSBwNi5waXBlbGluZS5nZXQgJ3JlYXNvbidcXG5cXG5kZWYgbm93ID0gaGVscGVyLm5vdygpXFxuXFxuLy8gRmV0Y2ggdGhlIFJGUSB0cmFuc2FjdGlvbiBpbmZvXFxuZGVmIHJmcVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgcmZxSWQpXFxuZGVmIHRyYW5zYWN0aW9uSW5mb0NvbnRlbnQgPSBwNi50cmFuc2FjdGlvbi5nZXQocmZxUGspXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoKVxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBzbHVycGVyLnBhcnNlVGV4dCh0cmFuc2FjdGlvbkluZm9Db250ZW50KVxcblxcbi8vIERlY2xpbmUgUkZRIGxvY2FsbHlcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gJ0RlY2xpbmVkJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZSA9IHJlYXNvblxcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZSA9ICdIYW5kbGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IGZvcm1hdHRlZERhdGVcXG5cXG5wNi50cmFuc2FjdGlvbi5zYXZlKGdyb292eS54bWwuWG1sVXRpbC5zZXJpYWxpemUodHJhbnNhY3Rpb25JbmZvKSwgJ3A2X2RlbW8uVHJhbnNhY3Rpb25JbmZvJywgcmZxUGspXFxuXFxuLy8gRGVjbGluZSBSRlEgb24gdGhlIGJsb2NrY2hhaW5cXG5kZWYgZGVjbGluZUlkID0gVVVJRC5yYW5kb21VVUlEKClcXG5oZWxwZXIuZGVjbGluZVJGUShkZWNsaW5lSWQsIFVVSUQuZnJvbVN0cmluZyhyZnFJZCksIG5vdylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1MzkwMTczfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiV0ZIYW5kbGVQTy1IYW5kbGVBY3Rpb25BY2NlcHRPcmRlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIFBPIFRyYW5zYWN0aW9uSW5mbyB1cGRhdGVzIGZvciBhbiBBY2NlcHRlZCBPcmRlciAtIFNjcmlwdCBjYWxsZWQgYnkgdGhlIEhhbmRsZVB1cmNoYXNlT3JkZXIgV29ya2Zsb3cgU3RlcFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDE4NSxcInJldmlzaW9uSWRcIjpcIjMyNDRkMTg5NTk4NTU0YzI0ZDViYTQ3YzUyMGQyNjdlXCIsXCJtYWluU2NyaXB0XCI6XCJpbXBvcnQgZ3Jvb3Z5Lmpzb24uKlxcbmltcG9ydCBqYXZhLnRleHQuU2ltcGxlRGF0ZUZvcm1hdFxcblxcbmRlZiBkYXRhVHlwZSA9IHA2LnBpcGVsaW5lLmdldCAncGxhdGZvcm02LnJlcXVlc3QuZGF0YVR5cGUnXFxuZGVmIGl0ZW1JZHMgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG5kZWYgaXRlbVBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgaXRlbUlkcylcXG5cXG5kZWYgdHJhbnNhY3Rpb25JbmZvQ29udGVudCA9IHA2LnRyYW5zYWN0aW9uLmV4aXN0cyhpdGVtUGspXFxuXFxuWG1sU2x1cnBlciBzbHVycGVyID0gbmV3IFhtbFNsdXJwZXIoKVxcbmRlZiB0cmFuc2FjdGlvbkluZm8gPSBzbHVycGVyLnBhcnNlVGV4dCh0cmFuc2FjdGlvbkluZm9Db250ZW50KVxcblxcbmRlZiBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKClcXG5TaW1wbGVEYXRlRm9ybWF0IHRyYW5zYWN0aW9uX3NkZiA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KFxcXCJ5eXl5TU1kZCdUJ0hIOm1tOnNzXFxcIilcXG5cXG5kZWYgZm9ybWF0ZWREYXRlID0gdHJhbnNhY3Rpb25fc2RmLmZvcm1hdChjdXJyZW50RGF0ZSlcXG5cXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSAnQWNjZXB0ZWQnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uRnVuY3Rpb25hbFN0YXR1c0RhdGUgPSBmb3JtYXRlZERhdGVcXG5cXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzQ29kZSA9ICdIYW5kbGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNNZXNzYWdlID0gJydcXG50cmFuc2FjdGlvbkluZm8uVGVjaG5pY2FsU3RhdHVzRGF0ZSA9IGZvcm1hdGVkRGF0ZVxcblxcblxcbmRlZiBzYWxlc29yZGVybnVtYmVyID0gcDYucGlwZWxpbmUuZ2V0ICdzYWxlc29yZGVybnVtYmVyJ1xcblxcbmlmIChzYWxlc29yZGVybnVtYmVyIT1udWxsICYmICEnJy5lcXVhbHMoc2FsZXNvcmRlcm51bWJlcikpIHtcXG4gICAgXFxuICAgIGludCBuYktleVZhbHVlcyA9IHRyYW5zYWN0aW9uSW5mby5LZXlWYWx1ZS5zaXplKClcXG4gICAgdHJhbnNhY3Rpb25JbmZvLktleVZhbHVlW25iS2V5VmFsdWVzLTFdICsge1xcbiAgICAgICAgICAgICBLZXlWYWx1ZSB7XFxuICAgICAgICAgICAgS2V5KFxcXCJTYWxlcyBPcmRlciBOdW1iZXJcXFwiKVxcbiAgICAgICAgICAgIFZhbHVlKHNhbGVzb3JkZXJudW1iZXIpXFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXFxuZGVmIHRyYW5zYWN0aW9uSWQgPSB0cmFuc2FjdGlvbkluZm8uSWQudGV4dCgpXFxuXFxuZGVmIGlwayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoJ3A2X2RlbW8uVHJhbnNhY3Rpb25JbmZvJywgdHJhbnNhY3Rpb25JZClcXG5cXG5wNi50cmFuc2FjdGlvbi5zYXZlQW5kUm91dGUoZ3Jvb3Z5LnhtbC5YbWxVdGlsLnNlcmlhbGl6ZSh0cmFuc2FjdGlvbkluZm8pLCAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nLCBpcGssICdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19EaXNwYXRjaGVyJylcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1MzkwMTg1fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnNjcmlwdHMiLCJuYW1lIjoiQmxvY2tjaGFpbkV2ZW50SGFuZGxlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkJsb2NrY2hhaW5FdmVudEhhbmRsZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSGFuZGxlIGV2ZW50cyByZWNlaXZlZCBmcm9tIHRoZSBibG9ja2NoYWluXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1MzkwMTk2LFwicmV2aXNpb25JZFwiOlwiNmFlYmVkNWIzZjdhMzFmMTc2MmI4M2Q4ZjMyZGVlMTJcIixcIm1haW5TY3JpcHRcIjpcIi8qKlxcbiAqIFlvdSBjYW4gY2FsbCBhbm90aGVyIHNjcmlwdCBieSB1c2luZyAnSW5jbHVkZScgdGFnc1xcbiAqIFxcbiAqIEBpbmNsdWRlIFJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcXG4gKi9cXG5cXG5pbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLkRlc2VyaWFsaXphdGlvbkZlYXR1cmVcXG5pbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlclxcbmltcG9ydCBvcmcud2ViM2oucHJvdG9jb2wuY29yZS5tZXRob2RzLnJlc3BvbnNlLkxvZ1xcblxcblxcbmRlZiBoZWxwZXIgPSBuZXcgUkZRU21hcnRDb250cmFjdEhlbHBlcih0aGlzKVxcblxcbmRlZiBtYXBwZXIgPSBuZXcgT2JqZWN0TWFwcGVyKCk7XFxubWFwcGVyLmNvbmZpZ3VyZShEZXNlcmlhbGl6YXRpb25GZWF0dXJlLkZBSUxfT05fVU5LTk9XTl9QUk9QRVJUSUVTLCBmYWxzZSk7XFxuXFxuZGVmIGV0aExvZyA9IG1hcHBlci5yZWFkZXJGb3IoTG9nLmNsYXNzKS5yZWFkVmFsdWUocDYucGlwZWxpbmUuZ2V0KCdib2R5JykpXFxuZGVmIHRvcGljcyA9IGV0aExvZy5nZXRUb3BpY3MoKVxcbmRlZiBldmVudEhhc2ggPSB0b3BpY3NbMF1cXG5kZWYgZGF0YSA9IGV0aExvZy5nZXREYXRhKClcXG5cXG5pZiAoZXZlbnRIYXNoID09IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIuUkZRUmVjZWl2ZWRFdmVudEhhc2gpIHtcXG4gICAgZGVmIChyZnFJZCwgaXNzdWVkQXQsIHVibCkgPSBoZWxwZXIucmVhZFJGUVJlY2VpdmVkRXZlbnQodG9waWNzLCBkYXRhKVxcblxcbiAgICBwNi5waXBlbGluZS5wdXQoXFxcInVibFxcXCIsIHVibClcXG4gICAgcDYuc2NyaXB0LmNhbGwgJ3A2X2RlbW8uUmVjZWl2ZVJGUVRyYW5zYWN0aW9uJ1xcbn1cXG5lbHNlIGlmIChldmVudEhhc2ggPT0gUkZRU21hcnRDb250cmFjdEhlbHBlci5SRlFEZWNsaW5lZEV2ZW50SGFzaCkge1xcbiAgICBkZWYgKHN1cHBsaWVyLCByZnFJZCwgcXVvdGVJZCwgaXNzdWVkQXQpID0gaGVscGVyLnJlYWRSRlFEZWNsaW5lZEV2ZW50KHRvcGljcywgZGF0YSlcXG5cXG4gICAgbG9nLmluZm8gXFxcIlJGUSBcXFwiICsgcmZxSWQgKyBcXFwiIHdhcyBkZWNsaW5lZC5cXFwiXFxufVxcbmVsc2UgaWYgKGV2ZW50SGFzaCA9PSBSRlFTbWFydENvbnRyYWN0SGVscGVyLlF1b3RlUmVjZWl2ZWRFdmVudEhhc2gpIHtcXG4gICAgZGVmIChzdXBwbGllciwgcmZxSWQsIHF1b3RlSWQsIGlzc3VlZEF0LCB1YmwpID0gaGVscGVyLnJlYWRRdW90ZVJlY2VpdmVkRXZlbnQodG9waWNzLCBkYXRhKVxcblxcbiAgICBwNi5waXBlbGluZS5wdXQoXFxcInVibFxcXCIsIHVibClcXG4gICAgcDYuc2NyaXB0LmNhbGwgJ3A2X2RlbW8uSGFuZGxlUXVvdGVUcmFuc2FjdGlvbidcXG59XFxuXCIsXCJjbGFzc1NjcmlwdHNcIjp7fSxcInJlc291cmNlc1wiOltdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM5MDE5Nn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5zY3JpcHRzIiwibmFtZSI6IldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvblByb3ZpZGVRdW90ZSIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIldGSGFuZGxlUkZRLUhhbmRsZUFjdGlvblByb3ZpZGVRdW90ZVwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJIYW5kbGUgUkZRIFRyYW5zYWN0aW9uSW5mbyB1cGRhdGUgYW5kIFF1b3RlIGNyZWF0aW9uIC0gU2NyaXB0IGNhbGxlZCBieSB0aGUgSGFuZGxlUmVxdWVzdEZvclF1b3RhdGlvbiBXb3JrZmxvdyBTdGVwXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1MzkwMjA3LFwicmV2aXNpb25JZFwiOlwiYWUxYzIwMTQxZTllMTk3OTVmNTY0MjI2YTIxOWU0NjFcIixcIm1haW5TY3JpcHRcIjpcIi8qKlxcbiAqIFlvdSBjYW4gY2FsbCBhbm90aGVyIHNjcmlwdCBieSB1c2luZyAnSW5jbHVkZScgdGFnc1xcbiAqIFxcbiAqIEBpbmNsdWRlIFJGUVNtYXJ0Q29udHJhY3RIZWxwZXJcXG4gKi9cXG5cXG5pbXBvcnQgZ3Jvb3Z5Lmpzb24uKlxcbmltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzXFxuXFxuaW1wb3J0IGphdmEudGltZS5mb3JtYXQuRGF0ZVRpbWVGb3JtYXR0ZXJcXG5pbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWxcXG5pbXBvcnQgamF2YS50ZXh0LkRlY2ltYWxGb3JtYXRcXG5cXG5cXG5kZWYgaGVscGVyID0gbmV3IFJGUVNtYXJ0Q29udHJhY3RIZWxwZXIodGhpcylcXG5cXG5kZWYgeG1sID0gcDYucGlwZWxpbmUuZ2V0WG1sICd4bWwnXFxuZGVmIGRhdGFUeXBlID0gcDYucGlwZWxpbmUuZ2V0ICdwbGF0Zm9ybTYucmVxdWVzdC5kYXRhVHlwZSdcXG5kZWYgcmZxSWQgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG4vLyBGZXRjaCBSRlEgZnJvbSBkYXRhYmFzZVxcbmRlZiByZnFQayA9IHA2LnRyYW5zYWN0aW9uLmJ1aWxkUEsoZGF0YVR5cGUsIHJmcUlkKVxcbmRlZiB0cmFuc2FjdGlvbkluZm9Db250ZW50ID0gcDYudHJhbnNhY3Rpb24uZ2V0KHJmcVBrKVxcblxcblhtbFNsdXJwZXIgc2x1cnBlciA9IG5ldyBYbWxTbHVycGVyKClcXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gc2x1cnBlci5wYXJzZVRleHQodHJhbnNhY3Rpb25JbmZvQ29udGVudClcXG5cXG4vLyBDYWxjdWxhdGUgaXNzdWUgZGF0ZSBhbmQgdGltZVxcbmRlZiBub3cgPSBoZWxwZXIubm93KClcXG5kZWYgZm9ybWF0dGVkRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eU1NZGQnVCdISDptbTpzc1xcXCIpLmZvcm1hdChub3cpXFxuZGVmIGlzc3VlRGF0ZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwieXl5eS1NTS1kZFxcXCIpLmZvcm1hdChub3cpXFxuZGVmIGlzc3VlVGltZSA9IERhdGVUaW1lRm9ybWF0dGVyLm9mUGF0dGVybihcXFwiSEg6bW06c3NcXFwiKS5mb3JtYXQobm93KVxcblxcbi8vIFVwZGF0ZSB0aGUgUkZRXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNDb2RlID0gJ1F1b3RlIHByb3ZpZGVkJ1xcbnRyYW5zYWN0aW9uSW5mby5GdW5jdGlvbmFsU3RhdHVzTWVzc2FnZSA9ICcnXFxudHJhbnNhY3Rpb25JbmZvLkZ1bmN0aW9uYWxTdGF0dXNEYXRlID0gZm9ybWF0dGVkRGF0ZVxcblxcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNDb2RlID0gJ0hhbmRsZWQnXFxudHJhbnNhY3Rpb25JbmZvLlRlY2huaWNhbFN0YXR1c01lc3NhZ2UgPSAnJ1xcbnRyYW5zYWN0aW9uSW5mby5UZWNobmljYWxTdGF0dXNEYXRlID0gZm9ybWF0dGVkRGF0ZVxcblxcbmRlZiBzcmNGaWxlID0gcDYudXJpLmZpbGVGcm9tVXJsKCB0cmFuc2FjdGlvbkluZm8uU291cmNlRG9jdW1lbnRVUkkudGV4dCgpKVxcblxcblN0cmluZyByZnFDb250ZW50ID0gRmlsZVV0aWxzLnJlYWRGaWxlVG9TdHJpbmcoc3JjRmlsZSlcXG5kZWYgcmZxID0gc2x1cnBlci5wYXJzZVRleHQocmZxQ29udGVudClcXG5cXG5kZWYgc2VsbGVyTmFtZSA9IHJmcS5TZWxsZXJTdXBwbGllclBhcnR5LlBhcnR5LlBhcnR5TmFtZS5OYW1lLnRleHQoKVxcbmRlZiBidXllck5hbWUgPSByZnEuT3JpZ2luYXRvckN1c3RvbWVyUGFydHkuUGFydHkuUGFydHlOYW1lLk5hbWUudGV4dCgpXFxuZGVmIHJmcUlzc3VlRGF0ZSA9IHJmcS5Jc3N1ZURhdGUudGV4dCgpXFxuXFxucDYudHJhbnNhY3Rpb24uc2F2ZShncm9vdnkueG1sLlhtbFV0aWwuc2VyaWFsaXplKHRyYW5zYWN0aW9uSW5mbyksICdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHJmcVBrKVxcblxcbmRlZiBsaW5lc0NvbnRlbnQgPSBwNi5waXBlbGluZS5nZXQgJ2xpbmVzJ1xcblxcbi8vIENyZWF0ZSBRdW90ZSBkb2N1bWVudFxcblxcbkpzb25TbHVycGVyIGpTbHVycGVyID0gbmV3IEpzb25TbHVycGVyKClcXG5kZWYgbXlMaW5lcyA9IGpTbHVycGVyLnBhcnNlVGV4dChsaW5lc0NvbnRlbnQpXFxuXFxuRGVjaW1hbEZvcm1hdCB1YmxfZGYgPSBuZXcgRGVjaW1hbEZvcm1hdChcXFwiIzAuMDBcXFwiKVxcblxcbmRlZiBxdW90YXRpb25MaW5lcyA9ICcnXFxuXFxuZGVmIHRvdGFsQW1vdW50ID0gbmV3IEJpZ0RlY2ltYWwoMClcXG5kZWYgdG90YWxDdXJyZW5jeSA9ICcnXFxuXFxuZGVmIHF1b3RlSWQgPSBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpXFxuXFxucmZxLlJlcXVlc3RGb3JRdW90YXRpb25MaW5lLmVhY2ggeyBteUxpbmUgLT4gXFxuXFxuICAgIGRlZiBpbnB1dExpbmUgPSBteUxpbmVzLmZpbmQgeyBpdC5pZCA9PSBteUxpbmUuSUQudGV4dCgpIH1cXG4gICAgZGVmIGl0ZW1EZXRhaWwgPSBpbnB1dExpbmUuaXRlbXMuZmluZCB7IGl0LmlkID09IGlucHV0TGluZS5pdGVtIH1cXG4gICAgXFxuICAgIEJpZ0RlY2ltYWwgdW5pdFByaWNlID0gbmV3IEJpZ0RlY2ltYWwoaXRlbURldGFpbC5wcmljZSlcXG4gICAgXFxuICAgIGlmIChpbnB1dExpbmUuZGlzY291bnQhPW51bGwgJiYgIScnLmVxdWFscyhpbnB1dExpbmUuZGlzY291bnQpICYmICEnMCcuZXF1YWxzKGlucHV0TGluZS5kaXNjb3VudCkpIHtcXG4gICAgICAgIEJpZ0RlY2ltYWwgZGlzY291bnQgPSAgbmV3IEJpZ0RlY2ltYWwoMTAwKS5cXHRzdWJ0cmFjdChuZXcgQmlnRGVjaW1hbChpbnB1dExpbmUuZGlzY291bnQpKVxcbiAgICAgICAgdW5pdFByaWNlID0gdW5pdFByaWNlLm11bHRpcGx5KGRpc2NvdW50KS5kaXZpZGUobmV3IEJpZ0RlY2ltYWwoMTAwKSlcXG4gICAgfVxcbiAgICBcXG4gICAgZGVmIGxpbmVRdHkgPSBuZXcgQmlnRGVjaW1hbChteUxpbmUuTGluZUl0ZW0uUXVhbnRpdHkudGV4dCgpKVxcbiAgICBcXG4gICAgZGVmIGxpbmVBbW1vdW50ID0gbGluZVF0eS5tdWx0aXBseSh1bml0UHJpY2UpXFxuICAgIFxcbiAgICB0b3RhbEFtb3VudCA9IHRvdGFsQW1vdW50LmFkZChsaW5lQW1tb3VudClcXG4gICAgdG90YWxDdXJyZW5jeSA9IGl0ZW1EZXRhaWwuY3VycmVuY3lcXG4gICAgXFxuICAgIHF1b3RhdGlvbkxpbmVzICs9ICBcXFwiXFxcIlxcXCI8Y2FjOlF1b3RhdGlvbkxpbmU+XFxuICAgICAgPGNiYzpJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuSUQudGV4dCgpKX08L2NiYzpJRD5cXG4gICAgICA8Y2JjOk5vdGU+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLk5vdGUudGV4dCgpKX08L2NiYzpOb3RlPlxcbiAgICAgIDxjYWM6TGluZUl0ZW0+XFxuICAgICAgICA8Y2JjOklEPiR7cDYudXRpbHMuZXNjYXBlWG1sKG15TGluZS5MaW5lSXRlbS5JRC50ZXh0KCkpfTwvY2JjOklEPlxcbiAgICAgICAgPGNiYzpRdWFudGl0eSB1bml0Q29kZT1cXFwiJHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLlF1YW50aXR5LidAdW5pdENvZGUnLnRleHQoKSl9XFxcIj4ke3A2LnV0aWxzLmVzY2FwZVhtbChteUxpbmUuTGluZUl0ZW0uUXVhbnRpdHkudGV4dCgpKX08L2NiYzpRdWFudGl0eT5cXG4gICAgICAgIDxjYmM6TGluZUV4dGVuc2lvbkFtb3VudCBjdXJyZW5jeUlEPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChpdGVtRGV0YWlsLmN1cnJlbmN5KX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKHVibF9kZi5mb3JtYXQobGluZUFtbW91bnQpKX08L2NiYzpMaW5lRXh0ZW5zaW9uQW1vdW50PlxcbiAgICAgICAgPGNhYzpQcmljZT5cXG4gICAgICAgICAgPGNiYzpQcmljZUFtb3VudCBjdXJyZW5jeUlEPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChpdGVtRGV0YWlsLmN1cnJlbmN5KX1cXFwiPiR7cDYudXRpbHMuZXNjYXBlWG1sKHVibF9kZi5mb3JtYXQodW5pdFByaWNlKSl9PC9jYmM6UHJpY2VBbW91bnQ+XFxuICAgICAgICAgIDxjYmM6QmFzZVF1YW50aXR5IHVuaXRDb2RlPVxcXCIke3A2LnV0aWxzLmVzY2FwZVhtbChpdGVtRGV0YWlsLnVvbSl9XFxcIj4xPC9jYmM6QmFzZVF1YW50aXR5PlxcbiAgICAgICAgPC9jYWM6UHJpY2U+XFxuICAgICAgICA8Y2FjOkl0ZW0+XFxuICAgICAgICAgIDxjYmM6RGVzY3JpcHRpb24+JHtwNi51dGlscy5lc2NhcGVYbWwoaW5wdXRMaW5lLml0ZW0pfTwvY2JjOkRlc2NyaXB0aW9uPlxcbiAgICAgICAgICA8Y2JjOk5hbWU+JHtwNi51dGlscy5lc2NhcGVYbWwobXlMaW5lLkxpbmVJdGVtLkl0ZW0uTmFtZS50ZXh0KCkpfTwvY2JjOk5hbWU+XFxuICAgICAgICA8L2NhYzpJdGVtPlxcbiAgICAgIDwvY2FjOkxpbmVJdGVtPlxcbiAgICA8L2NhYzpRdW90YXRpb25MaW5lPlxcbiAgICBcXFwiXFxcIlxcXCJcXG59XFxuXFxuZGVmIHF1b3RlVUJMID0gXFxcIlxcXCJcXFwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIiBlbmNvZGluZz1cXFwiVVRGLThcXFwiPz5cXG48UXVvdGF0aW9uIHhtbG5zPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpRdW90YXRpb24tMlxcXCIgeG1sbnM6Y2FjPVxcXCJ1cm46b2FzaXM6bmFtZXM6c3BlY2lmaWNhdGlvbjp1Ymw6c2NoZW1hOnhzZDpDb21tb25BZ2dyZWdhdGVDb21wb25lbnRzLTJcXFwiIHhtbG5zOmNiYz1cXFwidXJuOm9hc2lzOm5hbWVzOnNwZWNpZmljYXRpb246dWJsOnNjaGVtYTp4c2Q6Q29tbW9uQmFzaWNDb21wb25lbnRzLTJcXFwiPlxcbiAgPGNiYzpVQkxWZXJzaW9uSUQ+Mi4wPC9jYmM6VUJMVmVyc2lvbklEPlxcbiAgPGNiYzpDdXN0b21pemF0aW9uSUQ+T0lPVUJMLTIuMTwvY2JjOkN1c3RvbWl6YXRpb25JRD5cXG4gIDxjYmM6UHJvZmlsZUlEIHNjaGVtZUFnZW5jeUlEPVxcXCIzMjBcXFwiIHNjaGVtZUlEPVxcXCJ1cm46b2lvdWJsOmlkOnByb2ZpbGVpZC0xLjJcXFwiPlByb2N1cmVtZW50LVF1b1NpbS0xLjA8L2NiYzpQcm9maWxlSUQ+XFxuICA8Y2JjOklEPiR7cDYudXRpbHMuZXNjYXBlWG1sKHF1b3RlSWQpfTwvY2JjOklEPlxcbiAgPGNiYzpDb3B5SW5kaWNhdG9yPmZhbHNlPC9jYmM6Q29weUluZGljYXRvcj5cXG4gIDxjYmM6VVVJRD4ke3A2LnV0aWxzLmVzY2FwZVhtbChxdW90ZUlkKX08L2NiYzpVVUlEPlxcbiAgPGNiYzpJc3N1ZURhdGU+JHtwNi51dGlscy5lc2NhcGVYbWwoaXNzdWVEYXRlKX08L2NiYzpJc3N1ZURhdGU+XFxuICA8Y2JjOklzc3VlVGltZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZVRpbWUpfTwvY2JjOklzc3VlVGltZT5cXG4gIDxjYmM6Tm90ZSBsYW5ndWFnZUlEPVxcXCJkYS1ka1xcXCI+QmVzdGlsbGluZyBhZiBjb21wdXRlcmU8L2NiYzpOb3RlPlxcbiAgPGNhYzpSZXF1ZXN0Rm9yUXVvdGF0aW9uRG9jdW1lbnRSZWZlcmVuY2U+XFxuICAgIDxjYmM6SUQ+Rzg2N0I8L2NiYzpJRD5cXG5cXHQ8Y2JjOlVVSUQ+JHtwNi51dGlscy5lc2NhcGVYbWwocmZxSWQpfTwvY2JjOlVVSUQ+XFxuXFx0PGNiYzpJc3N1ZURhdGU+JHtwNi51dGlscy5lc2NhcGVYbWwocmZxSXNzdWVEYXRlKX08L2NiYzpJc3N1ZURhdGU+XFxuICA8L2NhYzpSZXF1ZXN0Rm9yUXVvdGF0aW9uRG9jdW1lbnRSZWZlcmVuY2U+XFxuICA8Y2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICAgIDxjYmM6Q3VzdG9tZXJBc3NpZ25lZEFjY291bnRJRD5MRVYwMDEyMzwvY2JjOkN1c3RvbWVyQXNzaWduZWRBY2NvdW50SUQ+XFxuICAgIDxjYWM6UGFydHk+XFxuICAgICAgPGNiYzpFbmRwb2ludElEIHNjaGVtZUlEPVxcXCJESzpDVlJcXFwiPkRLMTgyOTY3OTk8L2NiYzpFbmRwb2ludElEPlxcbiAgICAgIDxjYWM6UGFydHlJZGVudGlmaWNhdGlvbj5cXG4gICAgICAgIDxjYmM6SUQgc2NoZW1lSUQ9XFxcIkRLOkNWUlxcXCI+REsxODI5Njc5OTwvY2JjOklEPlxcbiAgICAgIDwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICA8Y2JjOk5hbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9jYmM6TmFtZT5cXG4gICAgICA8L2NhYzpQYXJ0eU5hbWU+XFxuICAgICAgPGNhYzpQb3N0YWxBZGRyZXNzPlxcbiAgICAgICAgPGNiYzpBZGRyZXNzRm9ybWF0Q29kZSBsaXN0QWdlbmN5SUQ9XFxcIjMyMFxcXCIgbGlzdElEPVxcXCJ1cm46b2lvdWJsOmNvZGVsaXN0OmFkZHJlc3Nmb3JtYXRjb2RlLTEuMVxcXCI+U3RydWN0dXJlZERLPC9jYmM6QWRkcmVzc0Zvcm1hdENvZGU+XFxuICAgICAgICA8Y2JjOlN0cmVldE5hbWU+QXJuZSBKYWNvYnNlbnMgQWxsw6k8L2NiYzpTdHJlZXROYW1lPlxcbiAgICAgICAgPGNiYzpCdWlsZGluZ051bWJlcj4xNTwvY2JjOkJ1aWxkaW5nTnVtYmVyPlxcbiAgICAgICAgPGNiYzpDaXR5TmFtZT5Lw7hiZW5oYXZuIFM8L2NiYzpDaXR5TmFtZT5cXG4gICAgICAgIDxjYmM6UG9zdGFsWm9uZT4yMzAwPC9jYmM6UG9zdGFsWm9uZT5cXG4gICAgICAgIDxjYWM6Q291bnRyeT5cXG4gICAgICAgICAgPGNiYzpJZGVudGlmaWNhdGlvbkNvZGU+REs8L2NiYzpJZGVudGlmaWNhdGlvbkNvZGU+XFxuICAgICAgICA8L2NhYzpDb3VudHJ5PlxcbiAgICAgIDwvY2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgPGNhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICAgICAgPGNiYzpSZWdpc3RyYXRpb25OYW1lPkRlbGNvbXB1dGVyIEEvUzwvY2JjOlJlZ2lzdHJhdGlvbk5hbWU+XFxuICAgICAgICA8Y2JjOkNvbXBhbnlJRCBzY2hlbWVJRD1cXFwiREs6Q1ZSXFxcIj4xODI5Njc5OTwvY2JjOkNvbXBhbnlJRD5cXG4gICAgICA8L2NhYzpQYXJ0eUxlZ2FsRW50aXR5PlxcbiAgICA8L2NhYzpQYXJ0eT5cXG4gIDwvY2FjOlNlbGxlclN1cHBsaWVyUGFydHk+XFxuICA8Y2FjOk9yaWdpbmF0b3JDdXN0b21lclBhcnR5PlxcbiAgICA8Y2FjOlBhcnR5PlxcbiAgICAgIDxjYmM6RW5kcG9pbnRJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+NTc5ODAwMDQxNjYwNDwvY2JjOkVuZHBvaW50SUQ+XFxuICAgICAgPGNhYzpQYXJ0eUlkZW50aWZpY2F0aW9uPlxcbiAgICAgICAgPGNiYzpJRCBzY2hlbWVBZ2VuY3lJRD1cXFwiOVxcXCIgc2NoZW1lSUQ9XFxcIkdMTlxcXCI+NTc5ODAwMDQxNjYwNDwvY2JjOklEPlxcbiAgICAgIDwvY2FjOlBhcnR5SWRlbnRpZmljYXRpb24+XFxuICAgICAgPGNhYzpQYXJ0eU5hbWU+XFxuICAgICAgICA8Y2JjOk5hbWU+JHtwNi51dGlscy5lc2NhcGVYbWwoYnV5ZXJOYW1lKX08L2NiYzpOYW1lPlxcbiAgICAgIDwvY2FjOlBhcnR5TmFtZT5cXG4gICAgICA8Y2FjOlBvc3RhbEFkZHJlc3M+XFxuICAgICAgICA8Y2JjOkFkZHJlc3NGb3JtYXRDb2RlIGxpc3RBZ2VuY3lJRD1cXFwiMzIwXFxcIiBsaXN0SUQ9XFxcInVybjpvaW91Ymw6Y29kZWxpc3Q6YWRkcmVzc2Zvcm1hdGNvZGUtMS4xXFxcIj5TdHJ1Y3R1cmVkREs8L2NiYzpBZGRyZXNzRm9ybWF0Q29kZT5cXG4gICAgICAgIDxjYmM6U3RyZWV0TmFtZT5CZXJuc3RvcmZmc3ZlajwvY2JjOlN0cmVldE5hbWU+XFxuICAgICAgICA8Y2JjOkJ1aWxkaW5nTnVtYmVyPjE2MTwvY2JjOkJ1aWxkaW5nTnVtYmVyPlxcbiAgICAgICAgPGNiYzpDaXR5TmFtZT5DaGFybG90dGVubHVuZDwvY2JjOkNpdHlOYW1lPlxcbiAgICAgICAgPGNiYzpQb3N0YWxab25lPjI5MjA8L2NiYzpQb3N0YWxab25lPlxcbiAgICAgICAgPGNhYzpDb3VudHJ5PlxcbiAgICAgICAgICA8Y2JjOklkZW50aWZpY2F0aW9uQ29kZT5ESzwvY2JjOklkZW50aWZpY2F0aW9uQ29kZT5cXG4gICAgICAgIDwvY2FjOkNvdW50cnk+XFxuICAgICAgPC9jYWM6UG9zdGFsQWRkcmVzcz5cXG4gICAgICA8Y2FjOlBhcnR5TGVnYWxFbnRpdHk+XFxuICAgICAgICA8Y2JjOlJlZ2lzdHJhdGlvbk5hbWU+R2VudG9mdGUgS29tbXVuZTwvY2JjOlJlZ2lzdHJhdGlvbk5hbWU+XFxuICAgICAgICA8Y2JjOkNvbXBhbnlJRCBzY2hlbWVJRD1cXFwiREs6Q1ZSXFxcIj5ESzEyMzQ1Njc4PC9jYmM6Q29tcGFueUlEPlxcbiAgICAgIDwvY2FjOlBhcnR5TGVnYWxFbnRpdHk+XFxuICAgIDwvY2FjOlBhcnR5PlxcbiAgPC9jYWM6T3JpZ2luYXRvckN1c3RvbWVyUGFydHk+XFxuXFx0PGNhYzpRdW90ZWRNb25ldGFyeVRvdGFsPlxcbiAgICA8Y2JjOlBheWFibGVBbW91bnQgY3VycmVuY3lJRCA9XFxcIiR7cDYudXRpbHMuZXNjYXBlWG1sKHRvdGFsQ3VycmVuY3kpfVxcXCI+JHtwNi51dGlscy5lc2NhcGVYbWwodWJsX2RmLmZvcm1hdCh0b3RhbEFtb3VudCkpfTwvY2JjOlBheWFibGVBbW91bnQ+XFxuICA8L2NhYzpRdW90ZWRNb25ldGFyeVRvdGFsPlxcbiAgJHtxdW90YXRpb25MaW5lc31cXG48L1F1b3RhdGlvbj5cXG5cXFwiXFxcIlxcXCJcXG5cXG5kZWYgdHJhbnNhY3Rpb25UeXBlID0gJ1F1b3RlJ1xcbmRlZiBjb21tZW50cyA9ICcnXFxuaW50IG5iTGluZXMgPSByZnEuUmVxdWVzdEZvclF1b3RhdGlvbkxpbmUuc2l6ZSgpXFxuXFxuZGVmIHN0YXR1cyA9ICdDcmVhdGVkJ1xcbmRlZiBzdGF0dXNNZXNzYWdlID0gJ0NyZWF0ZWQgYnkgRGVtbyBBcHAnXFxuXFxuZGVmIHNvdXJjZVVSSSA9IFxcXCJmaWxlOi8vJFA2X0RBVEEvcmVzb3VyY2VzL2RvY3VtZW50cy9cXFwiICsgdHJhbnNhY3Rpb25UeXBlICsgXFxcIi9cXFwiICsgcXVvdGVJZCArIFxcXCIueG1sXFxcIlxcblxcbmRlZiAgc291cmNlRmlsZSA9IHA2LnVyaS5maWxlRnJvbVVybChzb3VyY2VVUkkpXFxuRmlsZVV0aWxzLndyaXRlU3RyaW5nVG9GaWxlKHNvdXJjZUZpbGUsIHF1b3RlVUJMLCdVVEYtOCcpXFxuXFxuZGVmIGluc3RhbmNlSWQgPSBwNi5jb25maWd1cmF0aW9uLmdldChcXFwiaW5zdGFuY2UuaWRcXFwiKVxcblxcbmRlZiBuZXdUcmFuc2FjdGlvbkluZm8gPSBcXFwiXFxcIlxcXCI8VHJhbnNhY3Rpb25JbmZvPlxcbiAgICA8SWQ+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9JZD5cXG4gICAgPENyZWF0aW9uRGF0ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChmb3JtYXR0ZWREYXRlKX08L0NyZWF0aW9uRGF0ZT5cXG4gICAgPFRyYW5zYWN0aW9uVHlwZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0cmFuc2FjdGlvblR5cGUpfTwvVHJhbnNhY3Rpb25UeXBlPlxcbiAgICA8VHJhbnNhY3Rpb25OdW1iZXI+JHtwNi51dGlscy5lc2NhcGVYbWwocXVvdGVJZCl9PC9UcmFuc2FjdGlvbk51bWJlcj5cXG4gICAgPFNvdXJjZVN5c3RlbT5EZW1vIEFwcDwvU291cmNlU3lzdGVtPlxcbiAgICA8VGFyZ2V0U3lzdGVtLz5cXG4gICAgPFNlbmRlci8+XFxuICAgIDxGaW5hbFJlY2lwaWVudD5TdXBwbGllcjwvRmluYWxSZWNpcGllbnQ+XFxuICAgIDxUcmFuc2ZlclByb3RvY29sPkJsb2NrY2hhaW48L1RyYW5zZmVyUHJvdG9jb2w+XFxuICAgIDxEZWxpdmVyZWRWaWE+QW1hbHRvPC9EZWxpdmVyZWRWaWE+XFxuICAgIDxTb3VyY2VEb2N1bWVudEZvcm1hdD5VQkw8L1NvdXJjZURvY3VtZW50Rm9ybWF0PlxcbiAgICA8U291cmNlRG9jdW1lbnRVUkk+JHtwNi51dGlscy5lc2NhcGVYbWwoc291cmNlVVJJKX08L1NvdXJjZURvY3VtZW50VVJJPlxcbiAgICA8U291cmNlRG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvU291cmNlRG9jdW1lbnRDb250ZW50VHlwZT5cXG4gICAgPFBpdm90RG9jdW1lbnRGb3JtYXQ+VUJMPC9QaXZvdERvY3VtZW50Rm9ybWF0PlxcbiAgICA8UGl2b3REb2N1bWVudFVSST4ke3A2LnV0aWxzLmVzY2FwZVhtbChzb3VyY2VVUkkpfTwvUGl2b3REb2N1bWVudFVSST5cXG4gICAgPFBpdm90RG9jdW1lbnRDb250ZW50VHlwZT50ZXh0L3htbDsgY2hhcnNldD11dGYtODwvUGl2b3REb2N1bWVudENvbnRlbnRUeXBlPlxcbiAgICA8VGFyZ2V0RG9jdW1lbnRGb3JtYXQ+VUJMPC9UYXJnZXREb2N1bWVudEZvcm1hdD5cXG4gICAgPFRhcmdldERvY3VtZW50VVJJPiR7cDYudXRpbHMuZXNjYXBlWG1sKHNvdXJjZVVSSSl9PC9UYXJnZXREb2N1bWVudFVSST5cXG4gICAgPFRhcmdldERvY3VtZW50Q29udGVudFR5cGU+dGV4dC94bWw7IGNoYXJzZXQ9dXRmLTg8L1RhcmdldERvY3VtZW50Q29udGVudFR5cGU+XFxuICAgIDxUZWNobmljYWxTdGF0dXNDb2RlPiR7cDYudXRpbHMuZXNjYXBlWG1sKHN0YXR1cyl9PC9UZWNobmljYWxTdGF0dXNDb2RlPlxcbiAgICA8VGVjaG5pY2FsU3RhdHVzTWVzc2FnZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChzdGF0dXNNZXNzYWdlKX08L1RlY2huaWNhbFN0YXR1c01lc3NhZ2U+XFxuICAgIDxUZWNobmljYWxTdGF0dXNEYXRlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGZvcm1hdHRlZERhdGUpfTwvVGVjaG5pY2FsU3RhdHVzRGF0ZT5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNDb2RlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlLz5cXG4gICAgPEZ1bmN0aW9uYWxTdGF0dXNEYXRlLz5cXG4gICAgPEZsYWdzPntcXFwiYWF2aXNpYmxlXFxcIjogdHJ1ZX08L0ZsYWdzPlxcbiAgICA8T3JnUGF0aD4vJHtwNi51dGlscy5lc2NhcGVYbWwoaW5zdGFuY2VJZCl9LzwvT3JnUGF0aD5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+U2VsbGVyIE5hbWU8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwoc2VsbGVyTmFtZSl9PC9WYWx1ZT5cXG4gICAgPC9LZXlWYWx1ZT5cXG4gICAgPEtleVZhbHVlPlxcbiAgICAgIDxLZXk+QnV5ZXIgTmFtZTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChidXllck5hbWUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+Q29tbWVudDwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7cDYudXRpbHMuZXNjYXBlWG1sKGNvbW1lbnRzKX08L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICA8S2V5VmFsdWU+XFxuICAgICAgICA8S2V5Pklzc3VlIERhdGU8L0tleT5cXG4gICAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbChpc3N1ZURhdGUpfTwvVmFsdWU+XFxuICAgIDwvS2V5VmFsdWU+XFxuICAgIDxLZXlWYWx1ZT5cXG4gICAgICAgIDxLZXk+TGluZSBpdGVtczwvS2V5PlxcbiAgICAgICAgPFZhbHVlPiR7bmJMaW5lc308L1ZhbHVlPlxcbiAgICA8L0tleVZhbHVlPlxcbiAgICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5Ub3RhbCBBbW91bnQ8L0tleT5cXG4gICAgICA8VmFsdWU+JHtwNi51dGlscy5lc2NhcGVYbWwodWJsX2RmLmZvcm1hdCh0b3RhbEFtb3VudCkpfTwvVmFsdWU+XFxuICAgPC9LZXlWYWx1ZT5cXG4gICAgICA8S2V5VmFsdWU+XFxuICAgICAgPEtleT5DdXJyZW5jeTwvS2V5PlxcbiAgICAgIDxWYWx1ZT4ke3A2LnV0aWxzLmVzY2FwZVhtbCh0b3RhbEN1cnJlbmN5KX08L1ZhbHVlPlxcbiAgIDwvS2V5VmFsdWU+XFxuPC9UcmFuc2FjdGlvbkluZm8+XFxcIlxcXCJcXFwiXFxuXFxuZGVmIHF1b3RlUGsgPSBwNi50cmFuc2FjdGlvbi5idWlsZFBLKCdwNl9kZW1vLlRyYW5zYWN0aW9uSW5mbycsIHF1b3RlSWQpXFxucDYudHJhbnNhY3Rpb24uc2F2ZUFuZFJvdXRlKG5ld1RyYW5zYWN0aW9uSW5mbywgJ3A2X2RlbW8uVHJhbnNhY3Rpb25JbmZvJywgcXVvdGVQaywgJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzOTAyMDd9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJXRldvcmtmbG93VGFza0VuaGFuY2VyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJBZGQgQXR0cmlidXRlcyB0byBXb3JrZmxvdyBUYXNrc1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDI1NSxcInJldmlzaW9uSWRcIjpcIjg3OWE2MmI4NDM3NGI2ZjA4ZGUxYzY5ZDhhMjBlNWI0XCIsXCJtYWluU2NyaXB0XCI6XCJkZWYgZGF0YVR5cGUgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmRhdGFUeXBlJ1xcbmRlZiBpZHMgPSBwNi5waXBlbGluZS5nZXQgJ3BsYXRmb3JtNi5yZXF1ZXN0LmlkcydcXG5cXG5kZWYgaXBrID0gcDYudHJhbnNhY3Rpb24uYnVpbGRQSyhkYXRhVHlwZSwgaWRzKVxcbmRlZiBpdGVtID0gcDYudHJhbnNhY3Rpb24uZ2V0KGlwaylcXG5cXG5kZWYgdHJhbnNhY3Rpb25JbmZvID0gbmV3IFhtbFNsdXJwZXIoKS5wYXJzZVRleHQoaXRlbSlcXG5cXG5kZWYgdHJhbnNhY3Rpb25OdW1iZXIgPSB0cmFuc2FjdGlvbkluZm8uVHJhbnNhY3Rpb25OdW1iZXIudGV4dCgpXFxucDYucGlwZWxpbmUucHV0ICdUcmFuc2FjdGlvbk51bWJlcicsIHRyYW5zYWN0aW9uTnVtYmVyLCAndGV4dC9wbGFpbidcXG5cXG5kZWYgdHJhbnNhY3Rpb25UeXBlID0gdHJhbnNhY3Rpb25JbmZvLlRyYW5zYWN0aW9uVHlwZS50ZXh0KClcXG5wNi5waXBlbGluZS5wdXQgJ1RyYW5zYWN0aW9uVHlwZScsIHRyYW5zYWN0aW9uVHlwZSwgJ3RleHQvcGxhaW4nXFxuXFxuZGVmIGVuZHBvaW50ID0gdHJhbnNhY3Rpb25JbmZvLkVuZHBvaW50LnRleHQoKVxcbnA2LnBpcGVsaW5lLnB1dCAnRW5kcG9pbnQnLCBlbmRwb2ludCwgJ3RleHQvcGxhaW4nXFxuXFxuLy8gQWRkIGNvbW1vbiB3b3JrIGl0ZW0gYXR0cmlidXRlcyByZXF1aXJlZCBieSB0aGUgc3RhbmRhcmQgYjJib3ggJ1dvcmsgSXRlbXMnIHZpZXdcXG5kZWYgc3RlcFhtbCA9IHA2LnBpcGVsaW5lLmdldCAnX3dmX3N0ZXBYbWwnXFxuZGVmIHN0YXR1c01hcCA9IHA2LndvcmtmbG93LmxvY2FsZVRleHQgc3RlcFhtbCwgXFxcIlN0YXR1c0xhYmVscy9MYWJlbFtAbmFtZT0nXFxcIiArIHA2LnBpcGVsaW5lLmdldCgnX3dmX3N0YXR1c0lkJykgKyBcXFwiJ11cXFwiXFxucDYucGlwZWxpbmUucHV0ICdTdGF0dXMnLCBzdGF0dXNNYXAsICdhcHBsaWNhdGlvbi9iMmJveC5pMThuJ1xcblxcbmRlZiBhc3NpZ25lZU1hcCA9IHA2LndvcmtmbG93LmxvY2FsZVRleHQgc3RlcFhtbCwgJ0Fzc2lnbmVlL0xhYmVsJ1xcbnA2LnBpcGVsaW5lLnB1dCAnQXNzaWduZWRUbycsIGFzc2lnbmVlTWFwLCAnYXBwbGljYXRpb24vYjJib3guaTE4bidcXG5wNi5waXBlbGluZS5wdXQgJ19BU1NJR05FRFRPTkFNRScsIHA2LnBpcGVsaW5lLmdldCgnX3dmX2Fzc2lnbmVkVG9JZCcpLCAndGV4dC9wbGFpbidcXG5wNi5waXBlbGluZS5wdXQgJ1N0YXJ0RGF0ZScsIHA2LnBpcGVsaW5lLmdldCgnX3dmX2luc3RhbmNlU3RhcnREYXRlJyksICd0ZXh0L3BsYWluJ1xcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzOTAyNTV9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJQb3N0SW5zdGFsbEFwcGxpY2F0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUG9zdEluc3RhbGxBcHBsaWNhdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJTY3JpcHQgdG8gZGVwbG95IHRoZSBkZW1vIHNtYXJ0IGNvbnRyYWN0IGFuZCBpbml0aWFsaXplIHRhYmxlc1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDA4MyxcInJldmlzaW9uSWRcIjpcIjE4ZmU0NjlhZGYzOGU3YmRhMmUyMjZhZTliNTY5MDJiXCIsXCJtYWluU2NyaXB0XCI6XCIvLyBUaGlzIHNjcmlwdCBpcyBsYXVuY2hlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBpbnN0YWxsZWQgb24gdGhlIGluc3RhbmNlXFxuaW1wb3J0IGlvLnBsYXRmb3JtNi5kZW1vLnNjLlJlcXVlc3RGb3JRdW90YXRpb25zXFxuXFxuaW1wb3J0IG9yZy53ZWIzai50eC4qXFxuXFxuLy8gUG9wdWxhdGUgdGhlIEl0ZW1zIHRhYmxlIGZyb20gdGhlIHByb3ZpZGVkIENTViBmaWxlXFxuZGVmIGNzdkZpbGUgPSBbIHNraXBMaW5lczogMCwgc2VwYXJhdG9yOiAnLCcsIHVzZUZpcnN0TGluZUhlYWRlcnM6IHRydWUsIHVyaTogJ2ZpbGU6Ly8ke1RNUH0vcDZfZGVtb19pdGVtcy5jc3YnIF1cXG5cXG5wNi5jc3YucGFyc2UoY3N2RmlsZSkgeyByb3cgLT5cXG4gICAgZGVmIHJlY29yZHMgPSBuZXcgQXJyYXlMaXN0KClcXG4gICAgcmVjb3Jkc1swXSA9IHJvd1xcbiAgICBwNi50YWJsZS51cHNlcnQoJ3A2X2RlbW8uSXRlbXMnLCByZWNvcmRzKVxcbiAgICB0cnVlXFxufVxcbmxvZy5kZWJ1ZyAnUG9wdWxhdGVkIHRoZSBJdGVtcyB0YWJsZSBmcm9tIHRoZSBDU1YgZmlsZSdcXG5cXG4vLyBEZXBsb3kgdGhlIHNtYXJ0IGNvbnRyYWN0XFxuZGVmIHdlYjNqID0gcDYuZXRoZXJldW1ycGMuYnVpbGQocDYuYXBwY29uZmlnLmdldChcXFwiZXRoQ2xpZW50VVJMXFxcIikpXFxuZGVmIGNyZWRlbnRpYWxzID0gcDYuZXRoZXJldW1ycGMuZ2V0Q3JlZGVudGlhbHMocDYuYXBwY29uZmlnLmdldChcXFwiZGVtb1dhbGxldFxcXCIpLCBcXFwiQUR1bW15UGFzc3dvcmRcXFwiKVxcblxcbi8vIERlZmluZSBhIGN1c3RvbSB0cmFuc2FjdGlvbiBtYW5hZ2VyIHdpdGggYSBwb2xsaW5nIGZyZXF1ZW5jeSBvZiAyIHNlY29uZHNcXG5kZWYgdG0gPSBwNi5ldGhlcmV1bXJwYy5wb2xsaW5nVHJhbnNhY3Rpb25NYW5hZ2VyKHdlYjNqLCBjcmVkZW50aWFscywgMjAwMEwpXFxuZGVmIGNvbnRyYWN0ID0gUmVxdWVzdEZvclF1b3RhdGlvbnMuZGVwbG95KHdlYjNqLCB0bSwgcDYuZXRoZXJldW1ycGMuREVGQVVMVF9HQVNfUFJPVklERVIpLnNlbmQoKVxcblxcbi8vIFNhdmUgdGhlIGNvbnRyYWN0IGFkZHJlc3MgYW5kIEV0aGVyZXVtIGNsaWVudCBVUkwgaW4gY29uZmlnIHRhYmxlXFxucDYuYXBwY29uZmlnLm92ZXJyaWRlKFxcXCJjb250cmFjdEFkZHJlc3NcXFwiLCBjb250cmFjdC5nZXRDb250cmFjdEFkZHJlc3MoKSlcXG5cXG4vLyBOb3RpZnkgUDYgdGhhdCBpbnN0YWxsYXRpb24gd2FzIHN1Y2Nlc3NmdWxcXG5sb2cuZGVidWcgJ0RlbW8gYXBwIGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseSEnXFxucDYucGlwZWxpbmUucHV0KFxcXCJpbnN0YWxsU2NyaXB0UmVzdWx0XFxcIiwgXFxcInRydWVcXFwiKVxcblwiLFwiY2xhc3NTY3JpcHRzXCI6e30sXCJyZXNvdXJjZXNcIjpbXX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzOTAwODN9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuc2NyaXB0cyIsIm5hbWUiOiJQcmVJbnN0YWxsQXBwbGljYXRpb24iLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJQcmVJbnN0YWxsQXBwbGljYXRpb25cIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUHJlIGluc3RhbGwgYXBwbGljYXRpb24gc2NyaXB0IHdoZXJlIGJ1bmRsZWQgcmVzb3VyY2VzIGdldCBkZXBsb3llZFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDA2MixcInJldmlzaW9uSWRcIjpcIjU2OTVhN2IzOTYyMjZkMjJjMTMzMmNmOGFjOTAxYjBmXCIsXCJtYWluU2NyaXB0XCI6XCIvLyBEZXBsb3kgKGNvcHkgdG8gbG9jYWwgZmlsZSBzeXN0ZW0gYW5kIGxvYWQgSkFSIGNsYXNzZXMgaW50byBjbGFzc3BhdGgpIGJ1bmRsZWQgcmVzb3VyY2VzXFxucDYuYnVuZGxlZC5kZXBsb3koJ3A2X2RlbW8uRGVtb1NtYXJ0Q29udHJhY3QnKVxcbnA2LmJ1bmRsZWQuZGVwbG95KCdwNl9kZW1vLlBPUmV2aWV3JylcXG5wNi5idW5kbGVkLmRlcGxveSgncDZfZGVtby5UYWJsZUl0ZW1zRGF0YScpXFxubG9nLmRlYnVnICdEZXBsb3llZCBidW5kbGVkIHJlc291cmNlcydcXG5cIixcImNsYXNzU2NyaXB0c1wiOnt9LFwicmVzb3VyY2VzXCI6W119IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1MzkwMDYyfV0sInBsYXRmb3JtNi5hcHBjb25maWciOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmFwcGNvbmZpZyIsIm5hbWUiOiJkZW1vV2FsbGV0IiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiZGVtb1dhbGxldFwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJEZW1vIFdhbGxldFwifSxcImNvbnRlbnRNb2RlXCI6XCJSRUFEXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM4OTM0OCxcInJldmlzaW9uSWRcIjpcIjFhMTZkYjE4YzIxMWIyYmQxNjZhY2E1YWYxMDc2MGY3XCIsXCJ2YWx1ZVwiOlwie1xcXCJhZGRyZXNzXFxcIjpcXFwiNjI3MzA2MDkwYWJhYjNhNmUxNDAwZTkzNDViYzYwYzc4YThiZWY1N1xcXCIsXFxcImlkXFxcIjpcXFwiYzkxMzg2N2YtZTVlNC00YmU2LWE3ZGEtNjU0Y2U4MzNiZmI0XFxcIixcXFwidmVyc2lvblxcXCI6MyxcXFwiY3J5cHRvXFxcIjp7XFxcImNpcGhlclxcXCI6XFxcImFlcy0xMjgtY3RyXFxcIixcXFwiY2lwaGVydGV4dFxcXCI6XFxcIjRjMDYwNGNjYTMzMTQ4MzhkNjM4NDdiNGVkMDJlN2EyZDE3ZTUxMWVmZDQ0ZjYwNTBlMDljMjM4YTVkNTAwOTVcXFwiLFxcXCJjaXBoZXJwYXJhbXNcXFwiOntcXFwiaXZcXFwiOlxcXCJiNDhkODE3MzIwZWQ1YjQ1OWJiZGRmMTQwZTVmMDQ1M1xcXCJ9LFxcXCJrZGZcXFwiOlxcXCJzY3J5cHRcXFwiLFxcXCJrZGZwYXJhbXNcXFwiOntcXFwiZGtsZW5cXFwiOjMyLFxcXCJuXFxcIjoyNjIxNDQsXFxcInBcXFwiOjEsXFxcInJcXFwiOjgsXFxcInNhbHRcXFwiOlxcXCIzNWQ1MzM5YWNmNmE4ZjE1NDYyZmZjMGJiOTgxY2YzMTk3OTRhZTIzOWM1MTM0MWZiODU0YzE4ZWU0NThkNWM3XFxcIn0sXFxcIm1hY1xcXCI6XFxcIjc2YzFhNDdmNzEyNGNkNjM0NjBhZDI1ZmJiMGI5YzZlM2VhYjhlZDUwZDM2ZjY2ZTJkYzQwYzAzODg4MTEyM2VcXFwifX1cIixcInR5cGVcIjpcIlN0cmluZ1wifSIsImNvbnRlbnRNb2RlIjoiUkVBRCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM4OTM0OH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5hcHBjb25maWciLCJuYW1lIjoiY29udHJhY3RBZGRyZXNzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiY29udHJhY3RBZGRyZXNzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkNvbnRyYWN0IEFkZHJlc3NcIn0sXCJjb250ZW50TW9kZVwiOlwiUkVBRFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzODkzMzAsXCJyZXZpc2lvbklkXCI6XCIwODk0ZjZlODQzZjMxNzA5NGNjYTYxYzJjNjk2N2I4NVwiLFwidmFsdWVcIjpcIlwiLFwidHlwZVwiOlwiU3RyaW5nXCJ9IiwiY29udGVudE1vZGUiOiJSRUFEIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1Mzg5MzMwfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmFwcGNvbmZpZyIsIm5hbWUiOiJldGhDbGllbnRVUkwiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJldGhDbGllbnRVUkxcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRXRoZXJldW0gQ2xpZW50IFVSTFwifSxcImNvbnRlbnRNb2RlXCI6XCJSRUFEXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM4OTM2MSxcInJldmlzaW9uSWRcIjpcImQyYWM1NjQxYjdhMDdlMjg1NmM3NTVkZWYwN2E5NjJmXCIsXCJ2YWx1ZVwiOlwiaHR0cDovL2RlbW9iYzo4NTQ1XCIsXCJ0eXBlXCI6XCJTdHJpbmdcIn0iLCJjb250ZW50TW9kZSI6IlJFQUQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzODkzNjF9XSwicGxhdGZvcm02LmRhdGFtb2RlbHMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmRhdGFtb2RlbHMiLCJuYW1lIjoiVHJhbnNhY3Rpb25JbmZvIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiVHJhbnNhY3Rpb25JbmZvXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlRyYW5zYWN0aW9uSW5mbyBkYXRhbW9kZWxcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzODk2MzUsXCJyZXZpc2lvbklkXCI6XCIyYzUwMGNjZjY1ZTk1ODgzODNiZWNjODc4NzcwYTYzNlwiLFwic2NoZW1hXCI6XCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiIGVuY29kaW5nPVxcXCJVVEYtOFxcXCI/Plxcbjx4c2Q6c2NoZW1hIHhtbG5zOnhzZD1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWFcXFwiIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PVxcXCJ1bnF1YWxpZmllZFxcXCJcXG4gICAgICAgICAgICBibG9ja0RlZmF1bHQ9XFxcIlxcXCJcXG4gICAgICAgICAgICBlbGVtZW50Rm9ybURlZmF1bHQ9XFxcInF1YWxpZmllZFxcXCJcXG4gICAgICAgICAgICBmaW5hbERlZmF1bHQ9XFxcIlxcXCI+XFxuICAgPHhzZDplbGVtZW50IGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiVHJhbnNhY3Rpb25JbmZvXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiPlxcbiAgICAgIDx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIklkXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkNyZWF0aW9uRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUcmFuc2FjdGlvblR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHJhbnNhY3Rpb25OdW1iZXJcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiU291cmNlU3lzdGVtXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRhcmdldFN5c3RlbVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJTZW5kZXJcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiRmluYWxSZWNpcGllbnRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVHJhbnNmZXJQcm90b2NvbFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJEZWxpdmVyZWRWaWFcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiU291cmNlRG9jdW1lbnRGb3JtYXRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiU291cmNlRG9jdW1lbnRVUklcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiU291cmNlRG9jdW1lbnRDb250ZW50VHlwZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJQaXZvdERvY3VtZW50Rm9ybWF0XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlBpdm90RG9jdW1lbnRVUklcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiUGl2b3REb2N1bWVudENvbnRlbnRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRhcmdldERvY3VtZW50Rm9ybWF0XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRhcmdldERvY3VtZW50VVJJXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlRhcmdldERvY3VtZW50Q29udGVudFR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiQXR0YWNobWVudHNcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiQXR0YWNobWVudHNcXFwiLz5cXG5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlRlY2huaWNhbFN0YXR1c0NvZGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiVGVjaG5pY2FsU3RhdHVzTWVzc2FnZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJUZWNobmljYWxTdGF0dXNEYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZ1bmN0aW9uYWxTdGF0dXNDb2RlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZ1bmN0aW9uYWxTdGF0dXNNZXNzYWdlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZ1bmN0aW9uYWxTdGF0dXNEYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkZsYWdzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiT3JnUGF0aFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIktleVZhbHVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIktleVZhbHVlXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJJc3N1ZXNcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwiSXNzdWVzXFxcIi8+XFxuICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJBdWRpdFRyYWlsXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiPlxcbiAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiUmVjb3JkXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9XFxcImZhbHNlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiQ29kZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJEYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIk1lc3NhZ2VcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgICAgICAgICAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+XFxuICAgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiV29ya2Zsb3dcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwiV0ZJbnN0YW5jZXNcXFwiLz5cXG4gICAgICAgICAgICBcXG4gICAgICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICAgICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICAgICA8eHNkOnVuaXF1ZSBuYW1lPVxcXCJUcmFuc2FjdGlvbkluZm9cXFwiPlxcbiAgICAgICAgIDx4c2Q6c2VsZWN0b3IgeHBhdGg9XFxcIi5cXFwiLz5cXG4gICAgICAgICA8eHNkOmZpZWxkIHhwYXRoPVxcXCJJZFxcXCIvPlxcbiAgICAgIDwveHNkOnVuaXF1ZT5cXG4gICA8L3hzZDplbGVtZW50PlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIlRocmVhZFxcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJUcmFuc2FjdGlvbkluZm9JZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJCdXNpbmVzc0RvY05hbWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiTWVzc2FnZUNvbnRlbnRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiRGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiS2V5VmFsdWVcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiS2V5XFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIlZhbHVlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJBdHRhY2htZW50c1xcXCI+XFxuICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCI+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkF0dGFjaG1lbnRcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiQXR0YWNobWVudFxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIkF0dGFjaG1lbnRcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiVVJJXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkNvbnRlbnRUeXBlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJJc3N1ZXNcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJJc3N1ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJJc3N1ZVxcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIklzc3VlXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcIkxldmVsXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIlR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiTWVzc2FnZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGaWVsZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJGaWVsZFR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiVmFsdWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiUGF0aFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJMaXN0T2ZWYWx1ZXNcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwiTGlzdE9mVmFsdWVzXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiTGlzdE9mVmFsdWVzXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiVmFsdWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIldGSW5zdGFuY2VzXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiRmxvd05hbWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiQWN0aXZlSW5zdGFuY2VJZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcIkluc3RhbmNlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIldGSW5zdGFuY2VcXFwiLz5cXG4gICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICA8L3hzZDpjb21wbGV4VHlwZT5cXG4gICA8eHNkOmNvbXBsZXhUeXBlIGFic3RyYWN0PVxcXCJmYWxzZVxcXCIgbWl4ZWQ9XFxcImZhbHNlXFxcIiBuYW1lPVxcXCJXRkluc3RhbmNlXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcImlkXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInN0YXJ0RGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJlbmREYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImxhc3RVc2VyRW1haWxcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwic3RhdHVzXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImZsaW5rXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcIkZMSU5LXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcInN0ZXBcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwiV0ZTdGVwXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiV0ZTdGVwXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInN0ZXBJZFxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIiBuYW1lPVxcXCJzdGF0dXNcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCIgbmFtZT1cXFwiYWN0aW9uZWRCeUVtYWlsXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcInN0YXJ0RGF0ZVxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJlbmREYXRlXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcImFzc2lnbmVkVG9OYW1lXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcImFzc2lnbmVlc1xcXCIgbmlsbGFibGU9XFxcInRydWVcXFwiIHR5cGU9XFxcIldGQXNzaWduZWVzXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwiMVxcXCIgbWluT2NjdXJzPVxcXCIwXFxcIiBuYW1lPVxcXCJkZXNjcmlwdGlvblxcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVxcXCJXRkRlc2NyaXB0aW9uTWFwXFxcIi8+XFxuICAgICAgICAgPHhzZDplbGVtZW50IG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcInBhcmFtZXRlclxcXCIgbmlsbGFibGU9XFxcInRydWVcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XFxcIktleVZhbHVlXFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuICAgPHhzZDpjb21wbGV4VHlwZSBhYnN0cmFjdD1cXFwiZmFsc2VcXFwiIG1peGVkPVxcXCJmYWxzZVxcXCIgbmFtZT1cXFwiRkxJTktcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwidmlld1xcXCIgbmlsbGFibGU9XFxcImZhbHNlXFxcIiB0eXBlPVxcXCJ4c2Q6c3RyaW5nXFxcIi8+XFxuICAgICAgICAgPHhzZDpzZXF1ZW5jZSBtYXhPY2N1cnM9XFxcInVuYm91bmRlZFxcXCIgbWluT2NjdXJzPVxcXCIxXFxcIj5cXG4gICAgICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWU9XFxcImlkXFxcIiBuaWxsYWJsZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcInhzZDpzdHJpbmdcXFwiLz5cXG4gICAgICAgICA8L3hzZDpzZXF1ZW5jZT5cXG4gICAgICAgICA8eHNkOmVsZW1lbnQgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjBcXFwiIG5hbWU9XFxcInR5cGVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIldGQXNzaWduZWVzXFxcIj5cXG4gICAgICA8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz1cXFwidW5ib3VuZGVkXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiPlxcbiAgICAgICAgIDx4c2Q6ZWxlbWVudCBtYXhPY2N1cnM9XFxcIjFcXFwiIG1pbk9jY3Vycz1cXFwiMVxcXCIgbmFtZT1cXFwiYXNzaWduZWVcXFwiIG5pbGxhYmxlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwieHNkOnN0cmluZ1xcXCIvPlxcbiAgICAgIDwveHNkOnNlcXVlbmNlPlxcbiAgIDwveHNkOmNvbXBsZXhUeXBlPlxcbiAgIDx4c2Q6Y29tcGxleFR5cGUgYWJzdHJhY3Q9XFxcImZhbHNlXFxcIiBtaXhlZD1cXFwiZmFsc2VcXFwiIG5hbWU9XFxcIldGRGVzY3JpcHRpb25NYXBcXFwiPlxcbiAgICAgIDx4c2Q6c2VxdWVuY2UgbWF4T2NjdXJzPVxcXCJ1bmJvdW5kZWRcXFwiIG1pbk9jY3Vycz1cXFwiMFxcXCI+XFxuICAgICAgICAgPHhzZDphbnkgbWF4T2NjdXJzPVxcXCIxXFxcIiBtaW5PY2N1cnM9XFxcIjFcXFwiIG5hbWVzcGFjZT1cXFwiIyNhbnlcXFwiIHByb2Nlc3NDb250ZW50cz1cXFwibGF4XFxcIi8+XFxuICAgICAgPC94c2Q6c2VxdWVuY2U+XFxuICAgPC94c2Q6Y29tcGxleFR5cGU+XFxuPC94c2Q6c2NoZW1hPlwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM4OTYzNX1dLCJwbGF0Zm9ybTYud29ya2Zsb3dzdGVwcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYud29ya2Zsb3dzdGVwcyIsIm5hbWUiOiJIYW5kbGVSZXF1ZXN0Rm9yUXVvdGF0aW9uIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiSGFuZGxlUmVxdWVzdEZvclF1b3RhdGlvblwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJQcm92aWRlIFF1b3RlIG9yIERlY2xpbmUgUkZRXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1MzkwNTAxLFwicmV2aXNpb25JZFwiOlwiNzE4NjNkYzQ5NDUxZDVkNmJmMDNjM2QxOGJjNjA2ODdcIixcInhtbFN0ZXBcIjpcIjxXb3JrZmxvd1N0ZXAgZW5hYmxlZD1cXFwidHJ1ZVxcXCI+XFxuICAgIFxcbiAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICA8RU4+UmVxdWVzdEZvclF1b3RhdGlvbiAtIEFuc3dlciBvciBkZWNsaW5lPC9FTj5cXG4gICAgICAgIDxGUj5EZXZpcyAtIFLDqXBvbmRyZSBvdSBkw6ljbGluZXI8L0ZSPlxcbiAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICBcXG4gICAgPEFsbG93VHJhbnNhY3Rpb25FZGl0PkFTU0lHTkVFPC9BbGxvd1RyYW5zYWN0aW9uRWRpdD5cXG4gICAgPFRyYW5zYWN0aW9uRGF0YU1vZGVsPnA2X2RlbW8uVHJhbnNhY3Rpb25JbmZvPC9UcmFuc2FjdGlvbkRhdGFNb2RlbD5cXG4gICAgPFZpZXdOYW1lcz5cXG4gICAgICAgIDxJdGVtPnA2X2RlbW8uVHJhbnNhY3Rpb25zPC9JdGVtPlxcbiAgICAgICAgPFdvcmtJdGVtPnA2X2RlbW8uV29ya2Zsb3cgVGFza3M8L1dvcmtJdGVtPlxcbiAgICA8L1ZpZXdOYW1lcz5cXG5cXG4gICAgPEFsbG93UmVjYWxsPmZhbHNlPC9BbGxvd1JlY2FsbD5cXG4gICAgPEFsbG93QXBwcm92ZXJEZWxlZ2F0aW9uPmZhbHNlPC9BbGxvd0FwcHJvdmVyRGVsZWdhdGlvbj5cXG4gICAgXFxuICAgIDxTZW5kRW1haWxzPmZhbHNlPC9TZW5kRW1haWxzPlxcblxcbiAgICA8VHRsIGlkPVxcXCJleHBpcmVcXFwiPjEyMDwvVHRsPlxcbiAgICBcXG5cXHQ8V29ya0l0ZW0gc2NyaXB0PVxcXCJwNl9kZW1vLldGV29ya2Zsb3dUYXNrRW5oYW5jZXJcXFwiLz5cXG4gICAgXFxuICAgIDxBc3NpZ25lZSBuYW1lPVxcXCJEZW1vQXBwXFxcIiBwYXRoPVxcXCIvJHtJTlNUQU5DRV9JRH1cXFwiIHR5cGU9XFxcIlVOSVRcXFwiIHNjb3BlPVxcXCIqPSpcXFwiPlxcbiAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgIDxFTj5TdXBwbGllcjwvRU4+XFxuICAgICAgICAgICAgPEZSPkZvdXJuaXNzZXVyPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvQXNzaWduZWU+XFxuICAgIFxcblxcdDxTdGF0dXNMYWJlbHM+XFxuXFx0ICAgIDxMYWJlbCBuYW1lPVxcXCJSZWNlaXZlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5SZWNlaXZlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlJlw6d1ZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIkNyZWF0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+Q3JlYXRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPkNyw6nDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJEZXByZWNhdGVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPkRlcHJlY2F0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Bbm51bMOpZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIlByb3ZpZGVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPlF1b3RlIHByb3ZpZGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+UXVvdGF0aW9uIGZvdXJuaWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJEZWNsaW5lZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5EZWNsaW5lZDwvRU4+XFxuICAgICAgICAgICAgPEZSPkTDqWNsaW7DqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgPC9TdGF0dXNMYWJlbHM+XFxuICAgIFxcbiAgICA8QWN0aW9ucz5cXG4gICAgICAgIDxBY3Rpb24gaWQ9XFxcInNlbmRcXFwiIHN0YXR1cz1cXFwiUHJvdmlkZWRcXFwiIHR5cGU9XFxcIkZPUk1cXFwiIHN0b3A9XFxcInRydWVcXFwiIHNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVJGUS1IYW5kbGVBY3Rpb25Qcm92aWRlUXVvdGVcXFwiPlxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLWNoZWNrLGJ0bjpidG4tc3VjY2VzczwvU3R5bGU+XFxuXFxuICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICA8RU4+UHJvdmlkZSBRdW90ZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Gb3VybmlyIFF1b3RhdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9MYWJlbD5cXG5cXG4gICAgICAgICAgICA8Rm9ybUdlbmVyYXRvcj5wNl9kZW1vLldGSGFuZGxlUkZRLVByb3ZpZGVGb3JtRm9yUXVvdGVDcmVhdGlvbjwvRm9ybUdlbmVyYXRvcj5cXG4gICAgICAgICAgIFxcbiAgICAgICAgICAgPFBhcmFtZXRlcj5cXG4gICAgICAgICAgICAgICAgPE5hbWU+cmZxPC9OYW1lPlxcbiAgICAgICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICA8RU4+cmZxPC9FTj5cXG4gICAgICAgICAgICAgICAgICAgIDxGUj5yZnE8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVDwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcbiAgICAgICAgICAgIFxcbiAgICAgICAgICAgIDxQYXJhbWV0ZXI+XFxuICAgICAgICAgICAgICAgIDxOYW1lPmxpbmVzPC9OYW1lPlxcbiAgICAgICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgICAgICA8RU4+bGluZXM8L0VOPlxcbiAgICAgICAgICAgICAgICAgICAgPEZSPmxpbmVzPC9GUj5cXG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgPE1hbmRhdG9yeT5mYWxzZTwvTWFuZGF0b3J5PlxcbiAgICAgICAgICAgICAgICA8SW5wdXRUeXBlPlRFWFQ8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgIDwvQWN0aW9uPlxcbiAgICAgICAgICAgICAgICBcXG4gICAgICAgIDxBY3Rpb24gaWQ9XFxcImRlcHJlY2F0ZVxcXCIgc3RhdHVzPVxcXCJEZWNsaW5lZFxcXCIgdHlwZT1cXFwiQUNUSU9OXFxcIiBzdG9wPVxcXCJ0cnVlXFxcIiBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZIYW5kbGVSRlEtSGFuZGxlQWN0aW9uRGVjbGluZVxcXCI+XFxuICAgICAgICAgICAgPFN0eWxlPmljb246ZmEtdGltZXMsYnRuOmJ0bi1kYW5nZXIsY29sb3I6ZGFuZ2VyPC9TdHlsZT4gXFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICA8RU4+RGVjbGluZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Ew6ljbGluZXIgcXVvdC48L0ZSPlxcbiAgICAgICAgICAgIDwvTGFiZWw+XFxuICAgICAgICAgICAgXFxuICAgICAgICAgICAgPFBhcmFtZXRlcj5cXG5cXHQgICAgICAgICAgICA8TmFtZT5yZWFzb248L05hbWU+XFxuICAgICAgICAgICAgICAgIDxMYWJlbD5cXG4gICAgICAgICAgICAgICAgICAgIDxFTj5SZWFzb248L0VOPlxcbiAgICAgICAgICAgICAgICAgICAgPEZSPk1vdGlmPC9GUj5cXG4gICAgICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICAgICAgPE1hbmRhdG9yeT5mYWxzZTwvTWFuZGF0b3J5PlxcbiAgICAgICAgICAgICAgICA8SW5wdXRUeXBlPlRFWFRBUkVBPC9JbnB1dFR5cGU+XFxuICAgICAgICAgICAgPC9QYXJhbWV0ZXI+XFxuICAgICAgICA8L0FjdGlvbj5cXG4gICAgICAgIFxcbiAgICAgICAgPEFjdGlvbiBpZD1cXFwiZXhwaXJlXFxcIiBzdGF0dXM9XFxcIkVYUElSRURcXFwiIHR5cGU9XFxcIkVYUElSRVxcXCIgZGlzcGxheT1cXFwiZmFsc2VcXFwiPlxcblxcdFxcdFxcdDxFeHBpcnkgZXJyb3I9XFxcImZhbHNlXFxcIi8+XFxuICAgICAgICA8L0FjdGlvbj5cXG4gICAgPC9BY3Rpb25zPlxcbiAgICBcXG48L1dvcmtmbG93U3RlcD5cXG5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzOTA1MDF9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYud29ya2Zsb3dzdGVwcyIsIm5hbWUiOiJIYW5kbGVQdXJjaGFzZU9yZGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiSGFuZGxlUHVyY2hhc2VPcmRlclwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJBY2NlcHQgb3IgUmVqZWN0IHRoZSBPcmRlclwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDQ4NixcInJldmlzaW9uSWRcIjpcIjdjODFkMjU3ODdiOWMxMWQ2ZWE0MmY1YTY2NDFiNmQ5XCIsXCJ4bWxTdGVwXCI6XCI8V29ya2Zsb3dTdGVwIGVuYWJsZWQ9XFxcInRydWVcXFwiPlxcbiAgICBcXG4gICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgPEVOPlB1cmNoYXNlT3JkZXIgLSBBY2NlcHQgb3IgcmVqZWN0PC9FTj5cXG4gICAgICAgIDxGUj5Db21tYW5kZSAtIEFjY2VwdGVyIG91IHJlZnVzZXI8L0ZSPlxcbiAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICBcXG4gICAgPEFsbG93VHJhbnNhY3Rpb25FZGl0PkFTU0lHTkVFPC9BbGxvd1RyYW5zYWN0aW9uRWRpdD5cXG4gICAgPFRyYW5zYWN0aW9uRGF0YU1vZGVsPnA2X2RlbW8uVHJhbnNhY3Rpb25JbmZvPC9UcmFuc2FjdGlvbkRhdGFNb2RlbD5cXG4gICAgPFZpZXdOYW1lcz5cXG4gICAgICAgIDxJdGVtPnA2X2RlbW8uVHJhbnNhY3Rpb25zPC9JdGVtPlxcbiAgICAgICAgPFdvcmtJdGVtPnA2X2RlbW8uV29ya2Zsb3cgVGFza3M8L1dvcmtJdGVtPlxcbiAgICA8L1ZpZXdOYW1lcz5cXG5cXG4gICAgPEFsbG93UmVjYWxsPmZhbHNlPC9BbGxvd1JlY2FsbD5cXG4gICAgPEFsbG93QXBwcm92ZXJEZWxlZ2F0aW9uPmZhbHNlPC9BbGxvd0FwcHJvdmVyRGVsZWdhdGlvbj5cXG4gICAgXFxuICAgIDxTZW5kRW1haWxzPmZhbHNlPC9TZW5kRW1haWxzPlxcbiAgICA8RW1haWxUZW1wbGF0ZSBtb2RlbFNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUJ1aWxkRW1haWxcXFwiPmZpbGU6Ly8ke1A2X0RBVEF9L3Jlc291cmNlcy90ZW1wbGF0ZXMvcDZkZW1vX1BPUmV2aWV3LmZ0bDwvRW1haWxUZW1wbGF0ZT5cXG4gICAgXFxuICAgIDxUdGwgaWQ9XFxcImV4cGlyZVxcXCI+MTIwPC9UdGw+XFxuICAgIFxcblxcdDxXb3JrSXRlbSBzY3JpcHQ9XFxcInA2X2RlbW8uV0ZXb3JrZmxvd1Rhc2tFbmhhbmNlclxcXCIvPlxcbiAgICBcXG4gICAgPEFzc2lnbmVlIG5hbWU9XFxcIkRlbW9BcHBcXFwiIHBhdGg9XFxcIi8ke0lOU1RBTkNFX0lEfVxcXCIgdHlwZT1cXFwiVU5JVFxcXCIgc2NvcGU9XFxcIio9KlxcXCI+XFxuICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgPEVOPlN1cHBsaWVyPC9FTj5cXG4gICAgICAgICAgICA8RlI+Rm91cm5pc3NldXI8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgPC9Bc3NpZ25lZT5cXG4gICAgXFxuXFx0PFN0YXR1c0xhYmVscz5cXG5cXHQgICAgPExhYmVsIG5hbWU9XFxcIlJlY2VpdmVkXFxcIiA+XFxuICAgICAgICAgICAgPEVOPlJlY2VpdmVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+UmXDp3VlPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQ3JlYXRlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5DcmVhdGVkPC9FTj5cXG4gICAgICAgICAgICA8RlI+Q3LDqcOpZTwvRlI+XFxuICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgPExhYmVsIG5hbWU9XFxcIkRlcHJlY2F0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+RGVwcmVjYXRlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPkFubnVsw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgICAgICA8TGFiZWwgbmFtZT1cXFwiQWNjZXB0ZWRcXFwiID5cXG4gICAgICAgICAgICA8RU4+T3JkZXIgYWNjZXB0ZWQ8L0VOPlxcbiAgICAgICAgICAgIDxGUj5Db21tYW5kZSBhY2NlcHTDqWU8L0ZSPlxcbiAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgIDxMYWJlbCBuYW1lPVxcXCJSZWplY3RlZFxcXCIgPlxcbiAgICAgICAgICAgIDxFTj5SZWplY3RlZDwvRU4+XFxuICAgICAgICAgICAgPEZSPlJlZnVzw6llPC9GUj5cXG4gICAgICAgIDwvTGFiZWw+XFxuICAgIDwvU3RhdHVzTGFiZWxzPlxcbiAgICBcXG4gICAgPEFjdGlvbnM+XFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJhY2NlcHRcXFwiIHN0YXR1cz1cXFwiQWNjZXB0ZWRcXFwiIHR5cGU9XFxcIkFDVElPTlxcXCIgc3RvcD1cXFwidHJ1ZVxcXCIgc2NyaXB0PVxcXCJwNl9kZW1vLldGSGFuZGxlUE8tSGFuZGxlQWN0aW9uQWNjZXB0T3JkZXJcXFwiPlxcblxcbiAgICAgICAgICAgIDxTdHlsZT5pY29uOmZhLWNoZWNrLGJ0bjpidG4tc3VjY2VzczwvU3R5bGU+XFxuXFxuICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICA8RU4+QWNjZXB0IE9yZGVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjY2VwdGVyIGNvbW1hbmRlPC9GUj5cXG4gICAgICAgICAgICA8L0xhYmVsPlxcblxcbiAgICAgICAgICAgPFBhcmFtZXRlcj5cXG4gICAgICAgICAgICAgICAgPE5hbWU+c2FsZXNvcmRlcm51bWJlcjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlNhbGVzIE9yZGVyIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TnVtw6lybyBkZSBjb21tYW5kZSBjbGllbnQ8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVDwvSW5wdXRUeXBlPlxcbiAgICAgICAgICAgIDwvUGFyYW1ldGVyPlxcblxcbiAgICAgICAgPC9BY3Rpb24+XFxuICAgICAgICAgICAgICAgIFxcbiAgICAgICAgPEFjdGlvbiBpZD1cXFwicmVqZWN0XFxcIiBzdGF0dXM9XFxcIlJlamVjdGVkXFxcIiB0eXBlPVxcXCJBQ1RJT05cXFwiIHN0b3A9XFxcInRydWVcXFwiIHNjcmlwdD1cXFwicDZfZGVtby5XRkhhbmRsZVBPLUhhbmRsZUFjdGlvblJlamVjdE9yZGVyXFxcIj5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8U3R5bGU+aWNvbjpmYS10aW1lcyxidG46YnRuLWRhbmdlcixjb2xvcjpkYW5nZXI8L1N0eWxlPiBcXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8TGFiZWw+XFxuICAgICAgICAgICAgICAgIDxFTj5SZWplY3Q8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+UmVmdXNlcjwvRlI+XFxuICAgICAgICAgICAgPC9MYWJlbD5cXG4gICAgICAgICAgICBcXG4gICAgICAgICAgICA8UGFyYW1ldGVyPlxcblxcdCAgICAgICAgICAgIDxOYW1lPnJlYXNvbjwvTmFtZT5cXG4gICAgICAgICAgICAgICAgPExhYmVsPlxcbiAgICAgICAgICAgICAgICAgICAgPEVOPlJlYXNvbjwvRU4+XFxuICAgICAgICAgICAgICAgICAgICA8RlI+TW90aWY8L0ZSPlxcbiAgICAgICAgICAgICAgICA8L0xhYmVsPlxcbiAgICAgICAgICAgICAgICA8TWFuZGF0b3J5PmZhbHNlPC9NYW5kYXRvcnk+XFxuICAgICAgICAgICAgICAgIDxJbnB1dFR5cGU+VEVYVEFSRUE8L0lucHV0VHlwZT5cXG4gICAgICAgICAgICA8L1BhcmFtZXRlcj5cXG4gICAgICAgICAgICBcXG4gICAgICAgIDwvQWN0aW9uPlxcbiAgICAgICAgXFxuICAgICAgICA8QWN0aW9uIGlkPVxcXCJleHBpcmVcXFwiIHN0YXR1cz1cXFwiRVhQSVJFRFxcXCIgdHlwZT1cXFwiRVhQSVJFXFxcIiBkaXNwbGF5PVxcXCJmYWxzZVxcXCI+XFxuXFx0XFx0XFx0PEV4cGlyeSBlcnJvcj1cXFwiZmFsc2VcXFwiLz5cXG5cXHRcXHQ8L0FjdGlvbj5cXG4gICAgICAgIFxcbiAgICA8L0FjdGlvbnM+XFxuICAgIFxcbjwvV29ya2Zsb3dTdGVwPlxcblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM5MDQ4Nn1dLCJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyIsIm5hbWUiOiJEZW1vU21hcnRDb250cmFjdCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkRlbW9TbWFydENvbnRyYWN0XCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkRlbW8gU21hcnQgQ29udHJhY3QgSkFSIGdlbmVyYXRlZCBieSBodHRwczovL2dpdGh1Yi5jb20vYW1hbHRvL3NvbGlkaXR5LWphci1idWlsZGVyXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5NDYyLFwicmV2aXNpb25JZFwiOlwiYjdkMWU5NzQyOTRkYTlhZjU4NTJiZTAzOTA1MWIzYzJcIixcIml0ZW1CeXRlc1wiOlwiVUVzREJCUUFBQWdJQUlTUWFFOVFzUjE5b1FBQUFCTUJBQUFVQUFBQVRVVlVRUzFKVGtZdlRVRk9TVVpGVTFRdVRVYU56NzBLd2pBUUIvQTlrSGZJQzF4SnFvUE5xQzRXQ29MRndTMGtWd2ttYVVoVHdiYzMzU3hkaEp2dTQ4Zi9PaFhzZ0ZPR082Ykpqa0V5VVhGS0xqNDY5Qml5eXFVSnZjME9KVFBvUjFBeHd1UlZ5cURIa0pQU2ViUCtZOVdVM0NKcU8xajlIM1djclRQUW1oY3Nkd3R4MlBobmxRdFJjOUdBRU1DYm5uUEo5NlVlbEp3U2xxbUI0MGV5VHIweHNGWWxkblh6MHdhMnErcmx1M1dpZFZwS3ZsQkxBd1FLQUFBSUFBQ0VrR2hQQUFBQUFBQUFBQUFBQUFBQUNRQUFBRTFGVkVFdFNVNUdMMUJMQXdRS0FBQUlBQUNFa0doUEFBQUFBQUFBQUFBQUFBQUFBd0FBQUdsdkwxQkxBd1FLQUFBSUFBQ0VrR2hQQUFBQUFBQUFBQUFBQUFBQURRQUFBR2x2TDNCc1lYUm1iM0p0Tmk5UVN3TUVDZ0FBQ0FBQWhKQm9Ud0FBQUFBQUFBQUFBQUFBQUJJQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OVFTd01FQ2dBQUNBQUFoSkJvVHdBQUFBQUFBQUFBQUFBQUFCVUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5UVN3TUVDZ0FBQ0FBQWhKQm9Ud0FBQUFBQUFBQUFBQUFBQUE4QUFBQk5SVlJCTFVsT1JpOXRZWFpsYmk5UVN3TUVDZ0FBQ0FBQWhKQm9Ud0FBQUFBQUFBQUFBQUFBQUNRQUFBQk5SVlJCTFVsT1JpOXRZWFpsYmk5amIyMHVZVzFoYkhSdkxuQnNZWFJtYjNKdE5pOVFTd01FQ2dBQUNBQUFoSkJvVHdBQUFBQUFBQUFBQUFBQUFEd0FBQUJOUlZSQkxVbE9SaTl0WVhabGJpOWpiMjB1WVcxaGJIUnZMbkJzWVhSbWIzSnROaTlrWlcxdkxXRndjQzF6YldGeWRDMWpiMjUwY21GamRDOVFTd01FRkFBQUNBZ0FoSkJvVDlqenA4Q2lBUUFBNkFJQUFESUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXlOQzVqYkdGemM1VlNYVThUUVJROVU1YXVMYXRVVkJSUjR3TXhMWmdPUWVRRjBwZEdFazNWQ05qMzJkM2JNbVE3VTJkbk1md2pYbjB3SkR6NEEvaFJ4THNMRDhZWUE1bk0zSTg1OTg0NWszdHhlZjRMd0NaZU5EQ0R4U1lDUEE3eEpNU1NRTjBmNm54bFhXQnRvSzJjWnNxUHJKdHN5WlFtVnVhSjNLTnZCZVYrMTdvdmhmWEthMnZ5YlM3YjBVYjdua0MzZll1NnpsQWc2TnVVQk9ZSDJ0Q25ZaEtUTzFCeHhwbUZnVTFVTmxST2wvRjFNaWpwQ1VUdmpTSFh6MVNlRTRmZG03KzVzckhKZEJ2N2VteVVMeHkzL0RDd2JpeS9VL3ptU0twWXk0T1RLZTNSaUJ5WmhIYit1a3dWOTJGQUxzZkVESlNuVkg3VnhtKzgzZHJ1Y2VQbXZpMWNRcnU2Skx2MEx3TGRJM1dzV084N2syUTIxMmI4a2Z5aFRVTThqYkNNWnhGbVVZOFE0cm5BNjl1b0VsaitqdzZCem8yYkNjeVoySDBlbFpueWQxKzFPMy84d3RSWmJ4T2J5Y1E2NHZvSmcvb3F5MWo4VExzenhFc2VxWUNuUzdSYXBaVFM0eDNpRHRzR2V6M1VlQUhOMWJXZkVLdG5xUDNncUlZbW4vVUtlNG81UGhldlVJaHdENmk4MmVvK3dIeUZiK0YrWlJmd2dHMkFoM2lFdXhXT2lWUVYrQTFRU3dNRUZBQUFDQWdBaEpCb1Q4L0NvRTJnQVFBQTVRSUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4T1M1amJHRnpjNVZTWFU4VU1SUTlYWVlkZGgxbFJVRVJOVDd3c0F0bWk0RVFDR1FmM0VnMFdVM2tZMTk4NnM1Y2hwTFpkdWwwTVB3c0g0eUpEL3dBZmhUaHp1aURNY1pBbXZiZTI1NXplMDdUcSt1Zmx3QTI4TEtCS1N3MEVlQkppS2NoRmdYcS9rVG55MnNDcXdOdDVTUlQvdGk2OGFaTWFHeGxIc3Q5T2lzbzkzdldmUzZzVjE1YmsrOHdiVmNiN1hzQzNmWWRlSjJoUU5DM0NRbk1EclNoVDhWNFJPNVFqVExlbVJ2WVdHVkQ1WFJaLzk0TVNua0MwUWRqeVBVemxlZkVaZmYyZHk2LzJXYTVqUU9kR3VVTHh5M2ZENnhMNVZjYXJaOUtOZEx5OEdKQyszUk1qa3hNdTM4ZEpvcjdNQ0NYS2JFQzVTbVJSOXI0clowZXQyMGUyTUxGdEtkTHFZdi91cjU3cXM0VnUzMW40c3ptMnFRZnlaL1lKTVN6Q0V0NEhtRWE5UWdoWGdpOHZvc25nYVgvdUJEbzNMcVp3RXhLdnF5WjFtNS9lZHY1NHdrbXpub2IyMHpHMWhIVHg0enFxeXhqNzFQdHpoQ3YrRDhGL0xWRXExVTZLVE9lSVdZNE5qanJvY1lEYUs2c2ZvZFkrWUhhTjY1cWFQSmFyN0FXOTNoZCtJVkNoQWRBbFUxWDV3Rm1LM3dMRDZzNGgwY2NBenpHUE81WE9CWlNNWEFEVUVzREJCUUFBQWdJQUlTUWFFL0tNUE8rQmdRQUFNQUpBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpZdVkyeGhjM090VnZ0ekUxVVUvbTZhZEVtNlFLRXRVa1R3VVNGTkg3Y0Mxa2RydFkrTlJyZkJQaXdpSW01MkwrbDJ0bnZqN2swcC80OHovb3FPQlpFWmhuSEdGLzVQanVkdVlpTnRHSnFSSkhzZjU5ejduZk9kZSs3WlBQNzc1NGNBTHNITG9oK1RPUXpnclN4TjM4NVI4NDZCZDNQSWFFa0dVem1jeDNRUDNzT01nZmQ3a01NSEJtYTFaczdBdk80WERGaTZMeHI0TUVkb0h4a29HZmpZd0NjTTNXcmRqNGNtR0Vac1gvSmE0S2liTXRxYzVKN1lsRHgyK2JMNHBpNWlWWlRSVWwwcVIva3lqS2RvMjdRZittcUdZVHpmd2I3aE5ZYjB2UFFFdzFIYkQwVzV2bGtSMGFwVENVaHkzSmF1RTZ3NWthL25UV0ZhdThkZ2xzSlFSUE9CRThlQ3B1TUh0emwwWVpMY3pUaTFXbkNiNGVSeWNXbFp1TUxmRXA2MUpVSzFMT0lhclNKTEttL0xxTXB2aWNyRkRWNkxwSkt1RExnckk4RTNoVnFYWHN5ajVtSnV5K3JVY0FjK1BNMHFlZFlWeUtvbTFKRnRoaDZoY2RhY2dJd1pXS1RvV1MzQkZWK3QyeHEyOEI5WXRjM25aYWdpeDFWRCs5Y1M1R0YxdXlhOFZrQVduZy9CYzNsN3c5bHllT0NFVlg2NXNpRmNSYkhiSjJMSVdkdXVxQ1Y0QnNvTTJSVy9HanFxSHBFdjMrM2ZvTDJMQkxFaG85djhaajEwazYyODJCeE5keGJTNTBGMlJyTllrZlhJRlVWZlorOWd1LzNqbWdwZEFDdDBBeG43WVhVeDhjZkFaUk9mWXNuRUN6aHBZaERMSmxhd2F1SXowSzJaKy8vdW1SakM2eWF1NEhNRFYwMThnV3NNcDFzeGNpbys5eHdDb1N5SStTcTFKcjdFZFliVXRUa1RYMkdXb1Q4NWhFMUhyZk01djFvS2xhaUt5TVFOZk0zUTJ6cWdGUlVSS3hNT0tneWpuWnlDaVZmd0d1M3A1SFkvWWJxUkd3eG5uNUVjQmx5Ry9FRXZCME5meThSdWxqSU1IOWhQcWp6Um5tTXBCdkpXbzhiWkI2azhDU2EzMURwbGxoSlJvL3kwS1A2THBpdEtYcGZaWXpvTnJIbXJ0R1l0M0xEV3JQSXFSY1YrMm5Fbkh1bnNkVnhYeEJUV0NYb2pmTnRKYVg4R2RLZTF0WU82MVZjVnFpekRVdWlKYmVFMXRGUVA4ODBpVTFkK3dHMC8xdlNPUENtaFdORmVob0Y4cVcxRk9rVGFCSTlTUDk5MlJjcjNhSmtmeDNYaHpSTFNDYnZkRmRHSFVxOEUraFczOTVhUWFxQXRWN3hNTCtvQkVDUlliNit1Q2ZSdm9JdWVRWndpNllzMG1rR0t2a0N1TUxJRFZyaUgxUGMwUytFMHRkMjBCdmdGTDFGN29yRUtad2dUeVVpak1mclNiV3RpL1VuWWFlcjl3bzlnUDZCcjVDZWtGeDhnYy9VZXVzdGpoRytNamQ3Rm9hNzd5S2J3Q0xuNzZHSFVtL1Rid2VGRWw5NmpPN0tEbzRraXMwZlJ1NE5qWTNkMlhUMERnOXBmWWVJM292dzdFZndEYjVKRFpUeEdGWDhsRkFvTjUzWXArTHFXa2VzbXJ1TWNoZ21wbitwa0FTUG82cDBsV3FNazBiUXVOa09VTFl3OHd2Rzc2THZUTmtKbU1zNDI0Y2ZvU1pOa25GcWVySi9BRzBsL2dRQzE3aEk1ZUpaR3B5aHEvV2g4TWlSOWxURE93MFllMlg4QVVFc0RCQlFBQUFnSUFJU1FhRStBdk5oYU1RNEFBSjB6QUFBb0FBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VTJsdGNHeGxVM1J2Y21GblpTNWpiR0Z6YzgxYUNXQWNWM24rM21xbGtkWmp4Wlp0MlhLY0tMRmxSNGZsbmQzWlM0N2lva2l5WTVDVlZGSnNGR2lUMGN5c3RQRnFWK3lPWkR1a3BiUUVRaURoUGhLTzBGS2dMYVVOUnlRYkpaQkNTd3U5QzcwTHZVL29BVzFwRzlyUS81K1pQYlRhdFVhV0VrZTIzcnp6LzcvL2UvLzczNXMzK3Nwem4vMGNnSWpvQzhDSEp5UjhzaEdmQ3VBMmZKcVR6M0R5SkNlTEVwWWFrWlp3TVlCTCtLeUVaUWxQQmJBVlR3ZlFpTTlKK0R5UGY2WVJPUW0vRk1BT2ZDR0FMK0tYdWZKWEdyRWc0VXNCN01IVFRWVCtWYTc4TlFsZjNvS3Y0TmNEMklmZjROeHZic0Z2NGJjNStSMEp2eXZoOXdJNGdLOEdzQjlmYTZMYzczUHVEN2pqSDI1QkFIL0VkWC9NeVord2hEOWx3WCsyQlYvSE55VDhlUUJCeHZVWCtFc0pmOFhhL2pxQU1QNG1nTC9GMzNIdTc3bnVIemo1UjA3K2laTnZjdkt0QVA0Wi84SzVmK1hrM3pqNU5pZmZrZkR2amZnUENmOFp3Q0MrSytHL0Foakdkd01Zd0g5TCtCK0I2OGV0Yk00MGhqUkxHNXpSTXRPbU1ieGdacXd4TXorWHplUk5BZmxrSm1QbUJ0TmFQbS9tQlJwdVBUazZNRFlwMERKeXI3YWdCZE0wSmpodTVWS1o2WnNGdGc3U0lFdkxXS2UxOUR3TnZ1YjRuYU9EZDQ5UDNENDJQRFEwTURFZzBPalVERThVc2ljNHU3dlVaZkMyZ2RFVHcwTjNENThlSHFXVzlwRnNianA0enB4Uzd3MXFVNm1nUVVDdEMzTm1QbWpqSkowTi9hbE15am9tY0tGek5hU3kwWE81ckpYVnMrbmdHUzZXdCtpNUMzTldOamhJUEpESWxKYk8zK3hJbXRXc21lQ3RxZW1UR2N1Y05uTTFhcnRPQy9nSHN3YmJPNUxLbUtQenMxTm1ia0tiU3B0TVUxYlgwcWUxWElyTGJxWGZta2tSbHgwanFXeHdMcTFaeVd4dU5oWTB6TmxzTUs4SHgxT3pjMm1UNTBXYk5zbkFhL1JzeHNwcHVqVmdHRGt6VHdQcmJkd0NlMnViSjdCRkw5bEQ4M3g1ZTJrMnByWDhIYm1VVHZCYXE5dnA5QmxKemFZc2djQ1FPWmN6ZGMweURZRzJzWG1TTTJ1ZVR1VlRaT0JBSnBPbFdVcVJMeFNGMlpOU0drUEM4cHM1WGFWVzYzeVFVQVlIWGM1T3NGWFpoWlRoVHRRT2ZYV0R3Q0Z2QWdUdXYxTFFKSFVpcDJYeUpKRjRPYVZsdE5vT1Zkdk5XcXhWTWdSdVhGT053TUltNC9iTWR5QmZqQzlFYzJkWE5hVTY5UWlPa2ZkYjVxQ1dUck9qSmVjenRrS0IvVFVEd0hHM0QvVnZHazlOWnpSclBrZmVlOHlUa3Y3cUpCOGpZWFY1a3h5OHY3UEdOSGkwSUdPZWM0UGdxemNncWI5bW4xblRtc2thK1dET2pkVGwwelJtNm1acXpuS3NtV1pyOWxKYVBkTFRFcjI5YzBOYXVoeno1cTFVT2ppU3luTk0zc296WkpRMmtVRVBrYTdqOGpzUlJ6U1RLMnhXQ1hYTGNLbDBKbVhOakdTbkJicFhlbWJCS3p0Vzk3MTU1V3B5alJHNFpVTmNrQ3N1c0JibVFXRGJhbWFhQ3FQSmdsMWx6UU81bkhiQjdkTzZjczhnS3QxOW83OUNYcjkzYTlrVjdxcW1yMzhUcG9hRmJ4MjNOUDNzS1czT3hpcmhXVG9vU2ZpZXdEczMxN3MyQysvMSthcDlqcWV6NXh5eVI3emdmaFZSYkFXSHJabmpxYlJscjJsQ2x6UFpoQVh6ZkxBZ2pZOHBTYnVIZ0hvRllnWGV0b2xvTm92Q2M3VXhEWmxKYlQ1dDNack82bWZ2MEhJYVlWeTViWGpwWHB0TTJsVzBuTk5kSUxoT3NSU2N6WXpoRG43cTZ0aXdXVlBnVDJjMU9vQzkvMm9kZmIyZFlCKy9pcWNtYndqZi9jSWZScjBCZS9TcUhOeThZV3N3ekxsMDlvTEFZMVVYMGVaeHRhR1RtTXl2aHluZVQrM1RXSXVaMGVsZHpiRGZWSFB6T2xrajhNeUwxZ0F2Z2NLT0JCL3dac0pHM0dKRDAvREZGek0renl4LzZNb2RaUjFCYTBORWYrbEZEdEV6MXgvZWtNZThVSFIvK2NXUDBqUGpBVTNYelh5K1ExRVVPNkI0R0xiRzlaejNveisvcEhTdEpPenliMisrOHdvbklVN0NBa2ZXcDRvT2dmMTYycjA1ck91MHJ5ckdzL001M2FTek0yOFRLOHc4d3R6TCtGLzhuOEQrdFZrUnZseE1TU2d4SmFKRXcyb2tvWVNpc1pDaWhKUm9QRWJjSnBTa0VaMktPdTBoYWdtcGZXcENvZjlPUHFIU2J5aEJlVWRDVEFrcmlWRElsYUtxSzZXUUJDcEZvekVsNlVoUUlqR3VVZnM0VGFwSmN4VVdxcTVFb2tSVUdocFRWTjFwVWFtWHFZUjBHcW1HdFpDVzFJMitVSVNraEtKeHJpTnRaaVErRmVLNmFKOWJaMFIwTTZicVhCZVBSdVBScVpJT0drbHk0MVBSbUoybjJtaW9MNVFJUjhQMEpPdjZTQ1hicVZBdXFYS2Z1TXFvRWx5dGxqR2d4SXlWMkJscElzUnlpUVZYejFUQzBVTTFFYWZOR1VHbE1PbU1Pc3ozS1lSQWRYN2pTYzJNUjJKcVhBbUhURlhSaU1KSU9ONm5ScFJRS0JGTmh2Vkl4TkNUOUU0YVMranhVS2d2a2RDMWhLTEZrNm9lRHlmRDhUakowbFNhRGFXa3VZL3lTVk1MeDZLeGNGeWpmMkZWaVNiQ2loWUphUWFCTVVLSzBSZU5rV2dsb3VzNlVhRkZUTVV3b3BHb0VUTUpaVmd6WW9vUmpwaEdyQzgwcFU1RlEwU1FHb2xGaUp0a1RJK3BFWlVWS1JyVmhtV000emxPdms4SkhYc29FUUkzckhWN0pyQ3ZWaGUrZVpDRVR4WjF3aTl3N2NwdTNEaG1KczBjbmFkb3ZYUjRlSjlSR1ZNOUp3MENPNnVGTTFsSW9sR2dxeGFpYVROajV2aitPSGhuS21PRm96RVcxaVNKZ0N5MkNGa1dXMFd6TnlnUkdUK0lNVnJSNGhxQkhWV3VSU1E4SzR0dFlqc3JhSkhGRHJGVHd2ZGtzVXUweW1LMzJDUFE2VFZVQ1F4cytGMlBwL1VUc21nVGUyVnhMVDR1aTMxa0xSYkVkYks0WHV5UlJUdnVrV0ZSSW00UU44cDRCVjRwaWYyeU9JQ0h2ZEVSbFVTSExBNktRd0toZFY4enlPSW0wY2s4ZFVtaVd4WTk0ckFzZXNVUkdXL0d3d3g4Z3BNWlRtdzd6a29pS0F0RmhHUVJGaW9uRVU2aW5NUUVycnZzaGlLd2ZSVlQza3dNTWNLNHQ3Njhsa1JDWUZmVk9SWm9YbmtsUmJ0RnFlS2t4UjdLTHhYWG1lZnQvamJ3NG8xQXlTMHVkRjY5emZOTjFWNHJyOXJYc3dlZVh6U2VQMVk4c25rNE51ZDd6NFBQT3lEUDNHeXJDSkw4TFppL0JyTDdIK3g4UlJtcTI2ZnVOZldxbndWdThuU2taRzNSbW9hWDVGV1dlZHgrODd5cHoxdG02ZkE3VGtQVHB1My9ZNlkxbjZNTlQ2dTk4SXJmbE1yVTI5KysxenhvRjBhNnJ3VnR0VDc2RU1oZEplQ0QyWFRhMU4xUHBVM203Sngxd1kwb25WWDQyN2ZLdXJJcEZiakRnMTNyTkNPemVUSEsyNWNqZno1MW4ybWZ5RTlTb2ZNazg5V1lLc2JVMWhXMEZHSXRqWk5tdFB3b0JWeDc2RjAwTkdNWGRoYjZsM3NtZWU2MGFka3hXTG5NeDhJYTd3MTFhUjY0alNTY3pCZzBJVWJoZzlRdVFsdE5XU04xZFMrZkdyTnB3ODNXYVliQlk2b3NISUsvcDlhU3BzM0h0SU40NlVQRnJxbzN6S1JoVnBzVE9OcTU4Z2E2OEdWMWhVL1V1bWR2SWVpRGxYOTlzSkxUNHQ5KzVKL25tL1RWT3RrMzlxNTBUOXNwaCswYlB2S1dCdWV1VDBCZHk0MnJXdFJNVStTRWo0bnNYRW9YR0tvU2xiejRqM05nS243THFUamlGT2FoQ0h1N0EzdkZEV1ZINTZwd1Z3M3lOdWRLdGhRZ0JDNTFyb3BsTDhSbDUrVzNMSStYSzA5ZElmYU4zeUp1Q3Z6UGJ5TDE2NzRwMmhRTHZyQzVFM0IxalBCMzNzV2g0cUNITTBYWGFkd0lIMjREVUkrOWVCbEdJSENLU2o3VW9RMmpaZVVtS3Q5ZVZtNmg4aDFsNWQxVXBuZE15dStFbjErRFNNS2RWTXBBUWdNOW03dGI2bm9POTdiNTIrcVg0UCtrUGVZMHBmeG5lNENLcllqZ0RPV09PYjN4Y2t3Q2R1NHVXd3ZuNkVYUDd0Mk1IOElQazN6TzNZMTdTQi9uTk1yVlk4b2VwZE52QTQweTZNbG9UTW96bWltcXJhZW5YRUN6aFBwS0xIRnNRY0xHRW5INkZySElSU3h5RVl0Y3hDSWppV25TeHZwbUxtZDlRNlhHZnJMK2xuVlluOEs5NjdMK2JHM3JwVW9zTHlIckI5WmhmUUZMd1hxQk5HYXBqZldkZFdYMkxLTnhzcVdwN21rRUxtS0wvMm5JazNYTDJEclp2WVRtY2FwWndqVWozVDB0MnhheC9Za2luQmJic0NId1gzRHV3M0Vjd0FrYlZxc2owb1YxQUkxRWNwYlV6dGtqWDBXNUhQSXVnQ3k1TFlNN2FBTm9JYzBCMXJ4anNtY0pPMW56UmV3aTVhZTZEeStpdFZMMXk3Q0xmSHNQcllKMjhueFdmWU1qck1qSVFiNkVJSVh0eEN1RDhMa2c1cWx1b1FZTHV5dFkyTU1zdEszQndqaUptQ0FXN2lSN1QzdGs0UnpPT3dERUxRUmJvdnFIdWorRnZUMkx1UGJVTXZaTkhyNkU2d1NXY1AwbzVkcnA1T1J2ODEvQ0RRS1BZb3B6TndvOGcvMUg2NWR4WUhJSkhVY2IyaHJhNmhkeDhFa2NjbkkzMVYxQ3A0ODZCUzZoaXp0dmV4TGRicE4vZFZOUGIxdkRJZzZmK2RqM0grdDl3blpNdHErYkxBTTVWaE81MUc1eXFpZ3RwMk8wb0c0ajE5YUozQjhseDM2QUhQZEJLaFVXeURIeWhBdTRqM0pSQ2tHdnhvL1lqdnBRY1ZvZW9sR3ZJUWFhOEZyOEdQMXljTXJqeC9FVHhNUHJYTzZjdGdlS2JhK250amRRMjNiNG5rTzdoQWNsdkZIQ1E4L1NTbllvZlJNSmZETWVkdWYwcFFTZko2QzErelBvN2JtRUl6NHNJOGhUcVN3aVZKcStCbnU5VEpkTldXc1JaaXNld1Z1S1UvWldXLzdiaW81YmIwOTgrekxDa3oySHV4ZWhMaUV5MmtzVGVCSFJSY1RPZFBjdUlsNVMxR3k3NWp3OUZ5Z1FuN01WZGpzaWlncmI4WGE4d3diVWpuZFN6a2U5dDlzZzZsd1E3eUplM28zM3VNSHJIdklhWnJaNUdiN0piamRnSkNxTnU3OHNXRGpoQ3NWd0pZckIybGNNVjNYRmNPV3ZFcTVZLzNzdnA3K3ZVdjlyMTlUUElXbzkraDkxdytVRTFUS0Rja0gvRW81V2FuK2dqR201cUYwdWFwZUwxanNCc3M3VzhGaHREVGRYYW5qam1ob0s5cFUwdkEvdmR4M3BQamZrZDVSaVgyOHg5dlVmOWJmNFNHMUxYWnYvSW00cGFYWUMxc08wTmg0cFk3ZkQxZ2s3eDFZSk84YzZmWGJ1QXphN3Uya3oreUNoOUxzKzliaU41MFByeDNPc0VzL2JTZlk3YXVCaERyemgrVWtiejA5Um1mRzgzdDJnRDVYd3NKY1ZBZFhiZ0hvSlVmMUYvRUFsb3ZmUzl2Qm8yY1o5cUlqb1VKR2hRN2JYK2V5YzV2cmZJUnVibjBZMzI5Z0tHN2VEOE1NVkh2aysvUFNWb0gxSkpkb1BrcjdIYTZBdDhMZCt0QjhwUjd1dEVSL0Z4MXp2SHFiUlBGNGlUSXNRbFk3ZFViYW5TdmdaTjBoSitGazZSUW83OTNQNE9JMW94TS9qRTY3SWx4SWQvTk85aklISmxsdnIzVTEwY0pKWUdCcWY5QzlqbUxQSG5mMzB4S2V4bDg4M29peEU5cExHSStpaXB3Ky9ZQ1A2UlpJS0hDVjlCNmgwa2pRRTRmenNjWjliM2Vld25UWmkwSDN1cDIzcWZqVDlQMUJMQXdRVUFBQUlDQUNFa0doUHNsOGJkVmNEQUFBWUNBQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl5TG1Oc1lYTnp4VlZwVHhOQkdINm1GQmJLU3VzQjNoZFc3WUVzb3VMUmV0QktCYTBuaHNRUVk2YmJzU3paN3BiZFdSUi9rcDgwRWZGSWpKLzk2djh4dnJNMEFxVXFSaFBUZG1mbW1mZDRubmZlMlg3NTl1RVRnTE80MVlNK0RLdUhFVU1jSXpFTTRiU0cwVjZjd1ZrTjUzcWhZVXpEZVEwWE5GeU1vUk9YWW1TYzA1RFhjRm5ERlFaOWtkdkpwNEZqU3N0MUdBYkxybGN6bm9uS21YbURWeXlqeWlXWFN3M2hHNldtVFk2aFM4NVpmbktFSVZ1MlhLTmhjL25VOWVwalJsWFVYY00zalFkaUlSQytMTG5lL2NBbGYvTHlsVnZlY2l4Sk9lK2wvc0R2OTRUU013elJvbHNWRFBHeTVZZzdRYjBpdkllOFloT3lvK3lhM0o3aG5xWFdUVENxQkpEMktjY1JYdEhtdmk5b09ieDFWc25SVVJJVXBjZzJ3L0ZVZWgxSkdUUnNZbGNURkpwTFVUVWVLdUFjbVd1ZThBTmJVcVpFZVo0dmNpT1FsbTJVTFYvUzVzQkducVN3eVhXa3hUYi8wNElvcDl3VmloV2JlRzZLUmtoVXcxV0dubW1yNW5BWmVCUnVhU3RrODZzNTYxek9HUVdyTnVWSVVSTmViaFcxdVZNenBxVm5PYlZjZTd2WndtWkx4V3NYNVY3YnVGdVpGNmFTL25JenVFNno2VHBtNEhuQ2tVYVJ5cTJLa3Y5UENzTGFUcnVCWjRxU3BjNW1iN3ZlR0ZhZTFJb1RqbW03UG5uZUZuTE9yV3E0cG1NY0JSMDdzVXZIZHV6UTBZK2lqdXVZWURqNlcwVWFTanB1WUpMaHdLOGFRTWNVVGxLcDI4bWl4bXRWeFJDWkxTZ2lOM1VjeENHR29UKzVBeHNDcmg0ZHc4RmZuaDNEempXWEgzM0trTjV5WG9idW1wQnFUY0ZTcWRuQytvWnVlSzUwVFZlbDlnUzUxOGxLcGFhVDYwaXBGMFdNbTZidy9lVHBFWHAvUGZuSEw2TE4xN3B2STBJc2lEdERmMnFxN1ZWUXltYTRIWkN5eDZtZlhZdS9SOUl6T0VML0EzSFFBU0tTU0todUJHaWsxcVEvbGc3NjlXT0FkbmZUckloSWlNUXoyV1d3ek5BeUlwa1ZkTHdtS0lJOTlPd2lRMkFCZStrNVFCaVpZaDhPQU9GTWhXVDBvZTZpTUNyZ1YzU0hWZ3VaTnhUdkRTTHZFQzEvUk9lamJNZDdkRVh3R2RwN2RETWFlN0xSRmlTVzdkeGswOVdDOU5JM3E3VTZya0IvRldwVGxBZUpBaUNoSXlEbGkwamlHY2J3SEpOWXdtTzhRSVB3TlRrTFRUazZCQTVUNWVpNmhpdldSQVpwZG95UUtJMUpIQThMY3lJeFRwSlAwa3hKTnNJU0FKMlp0OWoycW0zbDlGV0RacXExY05GbXdCVFM0WmhCTnR3YndpbnNwMW1NclByQ1d1TTdVRXNEQkJRQUFBZ0lBSVNRYUUrV0FBRmh2eEFBQUJNdEFBQWZBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlZHVnpkQzVqYkdGemM4VmFoM3NjeDNWL1M1UUZUa2Vib2dSSklHVTEyakpJRWJ6dEJWUmxpNkNBcEVUU1ZDZ3BzYmFDSngvdTRMc0RKVHFPN1NST2NYcHpFaXZWY2hJbGNtekxTa0pDVnV3NFBYR2EwM3V2ZjBPK0wzRitiMmIzNmg0T292eDlBWGw3czdOdlh2M05temQ3ODRYLy9jem5pTWlpL3lwUmhjSVNSUlNYS0tHVVc2c2x1a2pWRWoxRDd5cFJqZFptcVU2TkVxM1R1L20yeVE5YVROZG11ZzIrWE9MTHMvemd1Um02WEtMMzBOZnk1YjA4Nk90SzlENTYvd3g5b0VSZlQ5OHdTOTlJSHl6Uk45RTN6OUMzcVBTdEpkcExIN3FPdm8yK2ZZYStZNGErczBUZlJkL05sKzlSNlh0TGRCZnI5bjMwL1NYNkFmb3d0Mzd3T3ZvaCttRytmRVNsNTduN1Ivam1SMVg2c1JJZHBCOVg2U2RVK2ttRnB1K3QxcXZ0K3hXYVdOaC9YcUhKbzQwNFVlak5LOVY2Y21wakxVeWE1NEt3aHA3ZEs0MG9xSjBQbWxXK3p6b24yeGVyTFlYMnJsUWJsZlZhMEU0YnpUV25FaWRyalVvcnFweExXdTNESUZvTHFuV0ZibHA0Y3VXWjRGSlFxUVgxMWNyWmRyTmFYejBzUkFiTlZUQzVvZUN4UWpNMUZudXE4YXhDOC9KNXU3cVdWSVF5eDRKMmNnNTNJRk9xRUNDZnJ3WHRpNVVqMWRYbGVqdFpUWnA0T0ZFZkhQNUVvNTdFUGNOM1ZERytuTFF2SHExVmszcjdIV2RXMk9BQ2RhYWVUVUx6R1lYMnJEU2FxeFZ4VTFsdk50cU5xRkdyUE02M0lMb3VhaVl4MkZTREd1eTZyWWMwYWw1ZWJ6Y3FSN3ZQUVQ1OVpQblVRMmN1c0FMUHRadEIxRDUrQ1E4VmVucWhaMlFRVml0eDBBN2FsOWVUVmtWUUhCNVdzTURCQXp6RXlQTkJiU05oMFZPWHVOV3ZZNytrYzdpeWY1ZEJuRWk5YmgramxrS3p0Y2JxdWNaNk5ZTDVLdHJ3ZEFBNzIxblhYRktQZ0xKWWtKK3RydGFEOWtZVFd1eXMxdVBrdVNTVzZpbTBTNXF6MGE3V0tpdFZnYVZkOVVaOXVaL3ErbXpVbzBFeldFdmFTYlBGVU9nREs1VExBS3NOc0x4M2E4UHZoOGpUWTRZdzRaa2tUWnF3S2huTGp6bnVQTnNPb25lZEROYUZVaW90cWZSUmxWNVE2V01LbGM0Mk5wcFJjcUxLMnM3eUREckU0c3Vra2E3U1Q1WHBBZnBwbFg2bVRDL1N6NWJwNStnbGxUNWVwcCtuVDZqMHlUSjlpbDVXNmRObGVvVitRYVZmTE5NdjBSV1ZycFpwazE0dDAyZm81VEs5UnI5Y3BzL1M1NWpScjVUcDg4emxzL1NyZlBzSlNMK012OFdUSnhmaldLVmZLOU92MDIrVTZUZnB0NWpEYjZ2ME8yWDZYZnFDUWdmUG5IanNUQklsMVV0SnZCQmViaWN0M1RtNFVhMGZxaURZZCtDdmJkak93WlpBNEg2VmZxOU12MDkvb05JZmx1bVA2TFJLWHl6VEg5T2ZLSFR6eFhaN2ZhbFMwVjNqa0c0ZTBnNFoycEpuVzdaQyt3cG1GeE5YSHNibGJOSzhWSTBTZGdsMCt0TXkvUm45dVhMcmc0N21hWTVtYWJaaFdwNm0yNDZ1YWJwbXU0Nm00VWthMjZHTjV4cWUyUmErZFVjTCtON0FsNm43dW1PYXV1dHJObytMa3dTOE1ONDBlTFRwOHpVMTA2UXJnem1aSUdFcXo3VmRONEt3YS93VE1tek5ja3pOU3l6SVNUMWR0d1RueUhZaDBkVHR4RXlnb3VqVjRTTFJhMFpwYXNWMkpIb054NUM5bnVlNVZtZ1lzamNNWkc4WU9aRWRScEt2NlNXeU45WXRQZkpOVC9TQ3EreE5YZFAzbzBDVHZXNUdtd1phcE51NjFNSHlUVkNIWGQ5MmZlNTdBejVIWDVSNTNuVDR2NkhCdm93NlNQdXBUVnZHeHV1TERVdU1MTnRoaWZDKzdtbWU1ZWtjQlFQVVRDdStUUjREM3Jya0hjUDJOT0V4YWFvN1BmU2dnUThNMjJBdTZOZTd6M3pkaG14Yjl6T2VQdTQ4VTNEVzdCQ3RYSE5kWjI5aHBNYmp3VTNyOEdEWmFjcmEycHI4NTRzUDB6SmZuYlhKdUZnaWxoaHRzbFFuc3dKY0dGeU1xTXdEL1JveVo5L0t1ZHRhN2hVZmR2bEFhazg4d0hNb0hycm5qWWlIN3JyYmpJY2RwWDN4Y0FyaUljWjI0cUVIeG9oNFdFNDY3azlJM1JaVkQxOXphSjQ3d3oyRnVIQ3VHUmVHWVc2QkMwTUx0NFVMQTArdkZSZE9GeGRqc0dFNHlSQTJqTURweFliVHhZYmgyVVBaZEFBWm5tN2FvSGVnbUVDVmhuc2ZrdEVqOU9CN2NISmhYNFlkNFZQZ1E3Zlo3K3hmRHgrSlN2Wkt2NzZSTTA1ZnIwZmZPTzZsTHREV3lMUTFoclRWaFc2RzZORzdFZkpFUzNoRlBIT3NidGJ2NEJ5Y2UrVXlwWXdkdDNJYUkreWowVmh5SGtmUGt2R0d4eTBlMFNmRlJJY3JlVmg5OXZrU2t3SkhtdlEveDl6U2N2UUpIUGlaQmJ5RzRibnBHOUsrM2xtRGY5RFZzMHpCM1RkWUovWUw0b003M3haKzk4MjROd054UER0eE12M2dkZURLRFBYeGNSckFsSjVIeE9uWXMxVkVFbU44UkZMckRVZkUwcDMveDRpRS91aUlvTFlZaW9qbFJGenJhRW4vWE56R1BMUzg0ZmhtM0hTclg2NmZEbE1HbnFBTWV1VU81bVZZWnlDN2pkU2xBQ1h3a01qdkhkOUpuM01MTW5TMExPYkttUEhoUzI1MXhodHkzc3ZhSnZYSDROR1NjbGl2cnB4Y3FzWGNvYjhoVmdpdTFuZ2srNVZYUnR2eUhGZ2s4bzVjRmNGSVZKa3dUT1FpMWhIZUJHWVlGOUNUWjQzRjJaZnZtQXp4NXNyRnNnM085VUFDeHJBa0lNVEkvRzc3c2FqYWVFMWhuOXN1endBaGpiV3lMVVlodmcwNXF4aFAyU2hIemc5ZnpDNU5reGprbHNHclZRZ2JSZVVsbm1aelVLNzVQQStZaDhjcmx5SGpKVlkwd1MxZjg0YTlDWHVjSW45bXZwVFNoUjk5eTBjV1lMUXpuelRGU0ZONFRNL3h2aTFVbUZ1akFyRVRueTRmRVJFalF3ZTZ4NkJqMEJvaEw3K0RSVHA3UjFpbGl4VStSNGdoWXBnanhCeUpFSjRiWmc5Q2JJRVFXNVBqN1I2RVlQYWdHdGNFcHZRQmhEaEIwb2NReHpPM2dSQWU5VVlSZ2hodWhaQkNqR0JuNXJ0RmZ1WE1rQ1BGMTQyc21oSWU1YmlLTmxEalFWdFhva2FzK0k2MFZGQllmWG5BenVYMzFvalk3V2hqVUdadUwvZjBZRXJ2WU1vMWpUR1lBdWlLck8vT0VidlBpZ3c1cnAzMDg4MXpiU1M4eFBnb3dpOTdTR0JBMWtVYVp4M1BaYm1vQUhXWjFiRG5OU1RuckY3MnRHenRrQnpCMCtQYW42UGpoWjZJSFdoOXJvWk5rNzNMYmZuY3Q3TnhKdmdiSEd0SWRVVDFiUTE0ek9KYzRYT1ZadXN1cU5FUzJaVHpvdWhGajhrNjhrcm1DOThtUHZ0ZDVrODVFd1Ftc1FJWmdhekY4M3BPckVKbW5xZkZMc1dYT3dhdTd6dlZCQlNTK3hqNFdid3hzR1ZsT01UQjFjYnRWK1Mwa2xqc3N4VHpPMXNKRExuU1orOG00TGNNMVhvWDRVS1dPWFp6MUx1VEtseHQreVZwUmZYOUlBcEhaR3E1dyt2YmpYdUJMcjJtVy9JK2xwamY1dHJhUDh1bG5ONG9kVFVYODhmSTMvSndyTm1hM2lwallHYTVzczZRR0pVMUlWZGlJb3Eyd0dkQmZjTHozZGRkRkkybWxyZ09VT1JxdWhIck9sUkV0Z2xDYktTeDE3Tk5DelM2RzZXYWtTU2FiUm9SOGtoc3hWRnNtYUh2YW41UGRlT0lGSTlkc216eE81YWVXcTVRZCtzTlpCM2ZHYmMvMG9yWHNqRlp4L2Y5YThnNmJtSFc4VVRXd1lxWXR5VXVNZGJ0eVM1T2xsMjhudXpTeVQ2K2xlc3VLeWF1TjhEZkhwRmZlS2ZCWGtQUVFHOW5lMi9vTXBSWkFybHovREptbHNBMGl6T0xwM2Q0bUo2ZWMrblBGM21sc0wyczA2bWRlT2E3WWk4aHM0c3BiTTJ6UzJlV0RlUUxpelBCNjhrNVdYMmQ1NWJCNlBzYy9XRWtkMnRxeGdPdjdyNHo1RU91ZnZYY0JpL0R2S1puOXhiaUplc1l3NHQ1cGd2NytJNzlHTWk4SW5lUjhwMmlCd2pBUGtQTVFIN0xabmllNkhGNTVYRlRPd3gwenpkTkN6QUlrelFCcEJ6VERlekF0S3dFUHNYUzZMZ09OajVhWUNkV0V2bW00L3FHRzZFRVNaSXdkYkZhUmZnaytNVHk0M091NTZvend4R2ozUmZvNWVxZlAzMXZtRUx4L25mVUc2YlFqTGIxaG9ucnRHdDl3MlNQZnIvVXlWNzI0RjZVRVNXUXBQa0ZGWllwM3l1SG9mdTZLeUY5R3prcFRNeHhlN29jZ1NOM2RVQVY1eVdCTDFObUhEa2V1WWF6aFFtMDVXdUc3ZkVyQzEyTGpDeEhpSWphdy9saDFQcTM5VHdvV3YrRXpBejdRaGRkN0NJWXZ6Sm51RG5XZlpIUE9LdHc1U2JtUjU3QkRGbmp1V21FNmtXendzUnpYTTFCL1J0SGtlWVlUaHBhWG9KbEk3VE5NSXFqTkk2UW04TlljOUxZQ3JIQytZRVhRMlFZWTc3NDNZL0FkN1lTOWFOY3JuNkZPSThpYnd1Y1I2RzJMWnhIcWYzbGY4T09Xa2FpSExPMkQrR2EyUHZJdHRIVHRncCtjOElUWDVPN3FUekhla0svM24xZjlzNmFkMHRXMFg2cisyNUo3QUxaZnV6eE9ydTZHSldKSyszTzNvN0RDL3piQmRmTy9Cd2xYYWFCcHN0NmlaOWd6NXcvZGVXYkMwR1RyMU9pSCtzNHIrVjJkMy9ZcytNRGpSdG5HRWM3c09RdVhiUTkyUzl0RjdQQjViSDh6ZzF5TXdsQi9qWk9sK3VGaUhuTXU4ODB3Y0pyTzRZYjRKOWhhanpwTkRNMElqUGcxeTZXWXhrR3Y4VHhJaWMwN2RnMjBpUUNHT3hVUzFJN05UVmtYOE95MGpCeUF5dTI0QndOU1FVT1ZrZzVxTkpIeS9RWDlKZGwraXY2YTRWdTZQN3krMUN6R1Z6bW4zOVZlcUZNZjBOL3E5TGZsZW52NlIvSzlJOTg4N0V5L1JQOWM1bitoZjVWb2IxYi9FSmNwbitqZnkvVGZ6RC8rWkcvemZPUG0vOEpncEhuS2hUYTFmMnQvM1Q0VEJMMWQ4bWYveFY2eTVhLzFTdjBwdjRmdHhXNmVjUWhDMWkxc0grTEV4aTcrazlYTE1jSzdXeGRicldUdFdOSkdtelV3UHJHUGdhU2lzOC9CRzF1SzdTNE1QeDRjRVR2cVkyYlJ6eFNhTGJkV0s2MzJnRmJPTmNuTmV2RzZPdUhPaFVxdHh2SDF4dlJ4WlBWV3EwcWpzUThBcldManBVb3BJcXpFNmRUUkduaGtmMmp6cDcwaGtSNEExd2JHNnlXSElFQVA0cEl0Ukd2SkZnN25HT3V2eHZDMXZtdVZtZHpWZ1lETDA3UnpOWWE5ZFh6OGpoSHVaSDJtbkZUUjc4QkY4dzIwbzdwRHk0VWtHd2RqMEVJN0IyS2IyKzAxTlVraS9NMWlCcGtkbGYzRWMrTm9GM0pINTRRdDIyT0VNeDdWRFRoTm0raDZHek1lQzZNVC9sTUliOVhiNFJ5dmRFTWFwaU5zdkZRRkNXdFZxT1pzKzAvT0RSWEpCOWh1NjF3aHA4NThkaFpUTlNORnFSZnlzNjU3RnZZLzJUeE9hc09OY3NaT216MGNOQzZxRkNwZFRFdzg2Unc5MmhuOUd1OXYxaGU4bTVvMUlhUEh0dG9RSEMxVWVkek9Id281UGpSNDh2bmp4OTc1L0h6eDArZFUyaFBRWUk3TGc3L0lEelQ4aGlRUXVhNGcwNkZ1dDB5NmdTV1FsUGhScldHQkhUZndzaGpXdGtoa3I3elVVTUh1YVphNjdVcUF2LzJJbjhWSGxlYmhtdkVxYS9DYWZvRWNoWm13YW5PR2FiZU0wdTc4OW5UZTk1cFg3OWpUbXpVSTNiM21hUzkwYXdmUzNKUHhvbjBwRldnNkNEVEFpazNRcWtDalNaYjFmY2tJZ3N1NHdvYU5tdDUvN0JoVUY1cTBIczBTNkhUUmRwc3NUUU9IVlliT29ZMkVjUXh6NFJCRTRac1BFOTMwaUdxRVA5TmtNS25wM0ExY0ZmQnQ0THZxUU5YU2ZrMEdqdkl4SFZhZE41S0ZxNWxTVUEyT2ZpZUpaYzhPVmhaQTdOWjlIMXFrM2FzM0xOSkUxZG84Z3BOWGFIcFRWSlB2a0l6OTF5aFdYd2R2RUtsVGJvT0JKdFVSdGNtN1R5MTJDRmNtZ1RKb3FTY241U2t1SDNUSnIxWmRtN1NMdG5ZZmYwbTdjYWpHNjdRamFKL2JzTEludHkwU1RmTDNsZm9sazJhUjN2M25xV3AxMmp2aGZtcHEzVHJKcjFsYVZwWlVuZmZ0alRUTmZNUjJvM3JiVFJKdDlNYzNRR0Q3NFJIOXVIWlcra0JlaHVkb0x2cFNWcWdtQTVRaXc3UysvRDBRL0RlaDBIeEVUam5SVGpsSmJqbGszQUt1K29wNlE3eWFRbmZrL1J4T2t6M3dsbHo5RHpkUi9jTHFlOEY1d2ZodUFkb25SNUMzeVE0M1VSSDZDaGMvQ0xOMERFNkR2ZS9oTHNUOUJXa2dyZENEK1BwREhndlEyUHArdmRqWEFreU51N1pmZnNWdXVQVUFkaThOTGs0WWJBSDczeWVwcFNYWDZPN0xseWxmVXRUQnc5Y29iZHUwdHVXcHRHNGUwbWRjR2JtWnViVlYrbnRDcjFBQnhiblppYWZOdWJWdVpsWGFXRUhmWjcyYjlLQnBkbjVxZm5aVittZUhmVDRCMmVVRjcvMHhkZm9JRnc1UDMyVkZsOFd4ckVERGFDRFlLd0tRM2ZDeEZ0ZzBCNll0UThHTGNJVUU4WWNnU0VYWUVxRWRoVUdzS05TS0g4Qm42K2tGWmpsZ080K09na1RZUkNkb3RNQ3FCdjBLTXhXUk9zeHRIWkFTcDNPUU5vRVpGMmtzK2liaEtRemRJN2VBWGN0d2szbjBab0d0eVAwT0ZvcWZSVkczd0Y2U1hXaFEzV2hRL1VFcUo0RTFTR2ErQi9hbzlKVEtuMzFsMmd2emFyME5XaUsvMCtKNnp2bGZ5ajAzN0Jib2FjRmpJTC9BMUJMQXdRVUFBQUlDQUNFa0doUEhQN08zS0FCQUFEbkFnQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl3TG1Oc1lYTnpsVkpCVHhReEZQNjZERHZzT3NxS2lDSnFQSERZQmJORk5Gd2dlMkFqaVdZMUVjaGVPSFZuSGtQSmJMdTJIUTAvaXdNeDhlQVA4RWNaMzR3ZWpERUcwclR2dmZiN1hyK3Y2ZmNmWDc4QmVJV25MY3hocFkwSUQySThqTEVxMEF4bjJxOXZDV3lPdEpXelFvVlQ2Nlk3TXFPcGxUNlZoL1N4SkI4T3JQdFEycUNDdHNidk1tMVBHeDBHQXYzdURYaTlzVUEwdEJrSkxJNjBvZmZsZEVMdVdFMEszbGthMlZRVlkrVjBWZi9lakNwNUFza2JZOGdOQytVOWNkbS8vcDNyMjFzc3QzV2tjNk5DNmJqbDI1RjF1ZnhNazVmblVrMjBQTDZZMFNHZGtpT1QwdDVmaDVuaVBnendNaWRXb0FKbGN2OGlrSCt4c3p2Z3h1MGpXN3FVRG5RbGR2VmZBdnJuNnBOaXY2OU5XbGl2VGY2T3dwbk5ZanhLc0liSENlYlJUQkRqaWNEem03Z1NXUHVQRDRIZXRac0pMT1FVcXBwcDNlN0pmdStQUjVnNUcyeHFDNWxhUjB5Zk1tcW9pb0s5ejNWN1l6empIeFh4NXhLZFR1V2t5bmpHV09EWTRteUFCZytndmJGNUJiSHhCWTFMcmhwbzg5cXNzUmEzZUYzNWhVS0NPMENkemRmbkVSWnJmQWQzNjdpRWV4d2pMT00rYnRjNEZsSXo4Qk5RU3dNRUZBQUFDQWdBaEpCb1QyakJqNXVRQVFBQW5BSUFBRWdBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVJTUmxGRVpXTnNhVzVsWkVWMlpXNTBVbVZ6Y0c5dWMyVXVZMnhoYzNPbFVrMXJGRUVRZmIxSmRqYnJhcjQwSm40Y0JBOG1oL1Fod1lzaXVJa0xDNE9TamVRaUNMMHpsZGxlZXJwbnUzdmk3L0lVOE9BUDhFZUpOWk1GTHdxQ2wzcGRINi9xVmRFL2ZuNzdEdUFFVC90WXdWNkNSd2tlQzZ3WVZ3Z2NwYzRYOGd0TmorZXk4aTY2ekJtWk9VK3lwRGh6ZVpDZVF1VnNJSm02NHBWQUw5UlZaVFI1Z2UxMHJxNlZOTW9XOGlKNmJadjhtcjlhakhPQnpxZWhRTEtvWGFURzdla1Fhc3JmUm9IZFcxcXA0a3dPZFRHMmtRcnlUTzIrMWxiSE55enR4Y0dsd09xcHkwbGdJOVdXM3RmbGxQeEhOVFhVekhXWk1wZks2OFpmQmxmalRBZUJ2Y25vL0l3eXc1ejgzVFhaT0ZuS0Z4aU1yU1YvYWxRSXhKVm5xWGF5TWlwZU9WKytsRG1WVG9aTVRtaFJVNGdqNTg5WnU0cWF5Yy8vMXBSRjl5OWM3VE1hNlViRS9wL1lSODI2QTl6RnZRUlBCSWIvUDFaZzgvZmxQMHpubFBGWkQvNjVMNTZod3o4QldBUGZqUzBZdTBoYTdHRzl4ZjRTNzJEUW9tZ1dZTHZCbm14OTVoL2VRSHpsUndlYmJMdE5VSHpHRnI4SHR3WFl4b00ydjl2YWg3alAyT2RjQi92WXdmb3ZVRXNEQkJRQUFBZ0lBSVNRYUUvZDNiTlJVUUVBQUN3Q0FBQXhBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtPUzVqYkdGemM1VlJ5VW9EUVJCOUhXTVNZOXcxS3JsNk1JcE9RQkZjQ0Vvd0lFVEJSRHprMXBtcHhBNlQ3dGc5NC9KWm5nUVBmb0FmSlZaR1R5S2lEVld2bHRldnEraTM5NWRYQUx0WXlXTU1pMWtzWlZFVXlCd3ByYUtxUUhxOVhiNW1xSm1BQkdZYVN0TkZQT2lRdlpLZGtDdnpEZVBMOEZwYU5jcS9pdW5vUmptQndwbldaR3VoZEk0NDNXb280dzFER1hXTkhleDVBUTJNNTN5dlNiY3h1YWh1N0dWc0loa3BvOTNhL3FGQTZxRWlJTm9DRXkzVjB6S0tMVXNmTjR6dGVmZlUyZWw3c3FPOHE4Y2hOYWxMbHJSUFI5K2FnV1E5SmpqdkpBZ3NPWGRZWmQxOHk4VFdwN29hamJyNjAvUGJmWGtuZWR0VDdZZkdLZDA3cCtqR0JGa3NGNURHdU1EbVB6WVJLUDB5c2tENXoxcW9JTVdmTkRxQ2pTZGh6SEIwd1BVVVkyYWo5QXp4eEZFSzJWR2U4T3JJc1M5K01qQ0J5VVFoZ3dLbXVKL0dkTUtmd1d5Q2M1aFB0QmZZNXhNVHlVMGc5d0ZRU3dNRUZBQUFDQWdBaEpCb1Q1WlNMQmxPQkFBQVZBb0FBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5Tnk1amJHRnpjNjFXVzNQYlJCVCtOckdqMkZGYjAxeGFRaUJjUW5DY2kwSUNEWkFTeUVVT0JzVWhsN3FVUW9zc2Iyd0ZXWEtrZFpvKzg4WWp6MHlmZU9HdE1LU2xNTVAwbVQvQ0RIZjRBUXhuWlJQVHhKM0dNN0dzMWU3NXpuNTd6dEhacy9yeG4rOStBUEFTeWpHY3c2dHhuTWRyTWN4Z05rN05SUVd2eHhHVmtpam00a2poalM2OGlYa0ZDMTJJWTFIQmtrUjBpYVFWTE12Qlc3TEpLSGhiUHQrUmphRmdKVTdrV1FXckN0NVZzTWJRSVVwMk1EVEpNR3JZbmxaeFRMSGwrZVVMV29HWFBTMnd0SFcrVStXQlNIditXdFVUcHJBOU41aWxhUmR0MXhaekRCUEpGdWFONUJnaWkxNkJNNXd4YkpkbnErVTg5emZOdkVPU3M0Wm5tVTdPOUcwNXJnc2owandHTmVPNjNGOTB6Q0RnTkp3NC9wcERVek5rYnRTc1ZKeWJEUDBTNE92YzR2WXVMK2k3M0JYclBLaVFIcTIxbXpROHY2amQ0UG5wYmEzaWU4S3pQRWV6UEo5clpTNUtYaUhRL0xxeVpuakYyWkVXckhqNHVtUmR1K01WcFZNdHJjN1F4U1ZQem5Sb09RVWJGRUc5SWJoc2k1SWhhVlAvb3hWNzJxTG5DdCsweE5CUlhhSThKVzVXZUtFUmt2Ukp1VGljTkxiTlhWTnpUTGVvcmVhM3VTVW9ma2RFREhGOXorS1ZrRkhCSmtOc3d5NjZwcWo2Wk0yWFJ5ZEkrM3hPL3RDaWU5cFcxYlhDcVZxNjNydllXbEJQeHQwNTZjZUdWL1V0bnJabEZqL2VqR0ZDT2tNYlFYY3R4d3RzdDdnU1dxVGdrb29jTHF2b3h4TXFCdkNlaWl0NFg4VlZmTUN3ZEJJR3FuZ0JTUlVmNHBxQzZ5bytBcGt4MElpVG1iZTFna2swbEF1QnRrbXRpandzaGtRai9CdkNKNHRWRkVEZ0ZxNHh0RjFkVUZIRXNvb1NsaGw2UXQyeUtVcmFnbDNNdUlJWHVhL0N4cmFLajBFeEdXdmx4YWdZd2pETmFXWGJQMkJ2TFYwWUJoK1JMd29jaHVSeGR3eERkMk9KZzhSbEdEbTJuVlNTZG82OHA3VGozYWlWUCtNNEpTbGsxWFJSb21RVDNLL1ZwWWFULzdISlFwT1VGYmg3N2RMcXByNnVMK3Fabkw1MFhjL3BXZHBvZzhiRE1pQzBTYWEwYVZrOENJYW1KK200K0tLVnV2OEk2bGJMYmdzRkxWSGtJdU1XK0I0djFDQ3Frc2w2NGFrSzI5RU1PNUMrblg1UVFxR2lpUXk5eVV6VEt0VkphTWhIaVo1c3JoRlU2Y2l4dVM4UHRzUDdodkJ1WXNoNjdpSGJvdjdXVHFiQW9JUkpJWHVkZGhCVWVXR2VqT2t6bXUwcCtWcXJlY3JhM3FaaHdkTjA0SjhIMVNDd1JFTFdGUHJJYUtkN0FFK1M5Q25xemFHTkxpQ2VHdDBIUzkxRjIxYzBhc01ndFIya0EveEVMRUJmVFF2UDREa2c3RWsyUmhkdHpob1g2eUR1Q0dHM1V0K0FmWTMyMFc4Uldma2UwU3QzMFpFZEozNWxmT3dPT3R2dklkYUcrNGpmUXhlanA3cVBVeEk0ZlJnNFEvOTlKRUlzMGhSN0xNU2loN0N6KytnT2dZNmpLL1dNM3o3d2J4Z3hhbitHaWwvUWcxOHBTcjloQ3I4aml6K3dqVC94Q2Y3QzUvZzc5RDlWOCt6QS8xdXlqSkxmS2o3RENNYUlzUWVmWWh3VGFFL01VMHcwa3NqNFR0ZmpHMHVOM2tmdkhmVGRiaHBlTmV6SDZ2U1RkRWRJOGlLMVU2SCtOSDBieXVmTHVCQmlNM2dGejFLdm4wSitEclZmbEtUUEUwY0s2eGhGN0Y5UVN3TUVGQUFBQ0FnQWhKQm9UN0Rna1BHYkFRQUE0QUlBQURJQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE9DNWpiR0Z6YzVWU1VXc1RRUkQrTnIzbW1uaWFXTFZhcTlLSFBpU3RaQlZGQ2kxNU1GZ1FvbUJUODlLbnpXV1Nicm5zeEwwOXhaL2xnd2crK0FQOFVlTGM2WU9JU011eU96TTczemN6SDh6M0gxKy9BWGlLQncyc1lLT0pDTGRqM0lteHFWQVBaemJmZWFTd043U3NsNWtKTS9hTFozcEtDOVo1cW8vcFhVRjVPR0wvcHVCZ2dtV1hId2p0MERvYitncTl6aVY0M2JGQ05PQXBLYlNHMXRIcllqRWhmMkltbWZ5c0R6azEyZGg0VzhhL1A2TnlQSVhrcFhQa0I1bkpjNUt3ZC9HZU80LzNaZHpHeU02ZENZV1hrb01oKzduK1FKTW41OXBNckQ3NXVLUmptcEVubDlMaFg4bXBrVG9DeVBYYk1Oc2ZCVy9kL0tBdkZac2pMbnhLUjdhY2N2TmZuWHZuNXIwUm9TOWNtbkV1dkZjVXpuZ2E0MjZDTGR4THNJcDZnaGozRlI1ZVJvN0MxbjhFS0hRdlhFeGhiVTZoaklYVzZadys3LzZoZnVrNWNNcVpUdG1UMEJlQ0dwZ3NFKzBybmU0WTI3SktrV3lWYXJkTEphVW5OOGFhMklaNGZkVGtBTTNkdmM5UXUxOVEreVJSRFUxNTZ4V1djVVhlalY4b0pMZ0dWTjVxbFkvUXF2QnRYSy9zT202SWpYQVR0M0Mxd3NrZ0ZRTS9BVkJMQXdRVUFBQUlDQUNFa0doUGVLK2lsNXdCQUFEaUFnQUFNZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREkxTG1Oc1lYTnpsVkxSVGhReEZEMWRoaDEySFdWRlFSRTFQaEN6QzJackJIMkJiTlNOSkNhcmlVRDJ2VHR6V1VwbTI2WHRRUGdxd2dNeDhjRVA4S09NZDBZZWpERUcwclQzM3ZiYzAzT2Evdmo1N1R1QVRUeHRZQVpMVFVSNEVPTmhqR1dCZWpqVWZ2V2x3UHBBV3puTlZUaXdidkpHWmpTeDBxZHlsNDRMOG1ISHVpK0ZEU3BvYS93V3QyMXJvME5Qb051K1FWOW5LQkQxYlVZQzh3TnQ2SE14R1pIYlY2T2NkeFlHTmxYNVVEbGQxbGViVVNsUElQbG9ETGwrcnJ3bkxydlh2M1AxMVd1VzI5alRZNk5DNFpqeTdjQzZzVHlsMGNhUlZDTXQ5OCttdEVzSDVNaWt0UDNYWWFhWWh3RmV2c3N5Ujk1djlaaXV1V2NMbDlLT0xpVXUvK3ZhN3BFNlVlenlnMGx6NjdVWmY2SndhTE1ZanhLczRIR0NXZFFUeEhnaThPSW1YZ1JXL3FOZW9ITnRNaFkzcHZDK09DTjNaVTNnZWJ2emgvK3BzOEdtTnBlcGRjUWNFeHVvci9LY0gyQ20zUm5pR1grbWlQK1ZhTFZLTzJYR004WWN4d1puUGRSNEFNMjE5VXVJdGErb1hYQlZRNVBYZW9VOXh5MWVsMzZqa09BT1VHV3oxWG1FK1FyZnd0MHFMdUFleHdqM3NZamJGWTZGVkIzNEJWQkxBd1FVQUFBSUNBQ0VrR2hQVHRleTNaVUJBQUN3QWdBQVNnQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpGRjFiM1JsVW1WalpXbDJaV1JGZG1WdWRGSmxjM0J2Ym5ObExtTnNZWE56clZMTGJoTXhGRDFPbWs0YUFpMEZDaTBQcVJJTHlxSmVnTmlBS3RGQ3BFZ2pIaW5xaHBWbjVuYml5R05QYkUvNExsWklYZlFEK0NoVWV6b1NHNUJZc0xubkh0LzN2Zjc1NitJU3dFczhHYUdQM1FRUEV6eGk2Q3RUTWh5bXhwYjhHMlV2RnJ5MnhwdmNLSjRiUzd3aVB6ZUY0NVpjYmJRam5wcnlOY1BRTlhXdEpGbUc3WFFoVm9Jcm9VdCs2cTNVMFQ2dzU4dHB3ZEQ3ZXN5UUxCdmpLZEtoZEs2aDRxMW4yTGtPcTRTZjgyTlpUcldua213STdUZVpZbGgvSTdYMFI0RStPemhqV0RzeEJURnNwbExUaDZiS3lINFJtYUpZM2VSQ25Ra3JJKzhlMS94Y09vYTl6N0h1akhLU0t5cmVyMGo3V1RjR3czaXFOZGtUSlp5ajREdEpwZUcxRXY3YzJPb1ZMNmd5M09WOFJzdUduSjhZRzNNSkwwUHcwNytuRGUyUFRrMWpjNXJJMk1qdW4rSVA0K0JqM01KbWdzY003LzVIWVlhdDMxZjRtQzBvRHlzKytPZk0yRWN2L0FwZ0hXRjdHQVF0bkFCSmkwTnN0RGpxOEFiR0xkN3M3Q3lPRXVSV1lMemx3T0Q1RDdEdlFlbmhkcGNXN0JPMmd6Nitkc0FkN0xUMis2MThnSHNCUjhIV3d4N3VZdU1LVUVzREJCUUFBQWdJQUlTUWFFOFQ5SnZHWVFFQUFGWUNBQUJIQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVMmx0Y0d4bFUzUnZjbUZuWlNSVGRHOXlaV1JFWVhSaFEyaGhibWRsWkVWMlpXNTBVbVZ6Y0c5dWMyVXVZMnhoYzNPbFVibE9BekVRZlE1SFFnajMzU0NCS0lBQ0Z5QWFFQklFa0pCV0lCR1UzdGtkTm82OGR1UjF3di93QjFSSUZId0FINFdZWGRMUVFFSGhONGVmWjk2TVB6N2YzZ0VjWWFPT01TeFhzVnJGbXNDWWNhbkFRZVI4S3Arb2M5aVRmZStDaTUyUnNmTWtNd3BkbCtUU1U5NTNOaWNadWZSRW9PWk0wbFptUUFLclVVOE5sY3hVNk1vTG5kN1lRQ241Z21QcGFjU1pQTlZXaHpOdXQ3dlhGaGh2dW9TemM1RzJkRHZJT3VRZlZNZHdaakZ5c1RKdDVYVVJqNUxqb2F0emdjMVdZRUhKcFFxcTJWVTJwZVJxU0RiY2o0UUpORzZzSmQ4MEtzK0orYzFJTzlrM0tqdzZueDNMaERJbjgxaTJkTlkzVk5SU0tlMzhYcE9IcUxmY3dNZDByVXQ1UHg0ZkZITTNNSVY2RmVzQzUvOXVKekJmcnRMd2xienI5Q2dPQXR0L2w4VVdLdnluNE1QYndnUjd2SEpVUzFzYldWRUlaWnptU0pZeE1MSC9DdkhDVGdVTnhza3krWXdaeHNZM0FiTllLTzhYUzF6Q1BOdWlUQVVybU1QVUYxQkxBd1FVQUFBSUNBQ0VrR2hQeElMbjRFSUJBQUFhQWdBQU1RQUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpEZ3VZMnhoYzNPVlVVdEx3MEFRbnUwcmJZMVc2d1BFcXdlcjZBcUtGRnA2c0ZnUW9tQmJlOThrMDNaTHVsczNHOFdmNVVudzRBL3dSNG1UNkVsRWRHQmUzOHg4TzhPK3ZiKzhBc0FwYkZVaEQzVUgxaDNZWUZCcVN5VnRoMEYrcnpGaVVPanFFQm5VUEtud09wbjdhSWJDandpcGV6b1EwVWdZbWVaZllNRk9aY3pBdlZRS1RUY1NjWXlVSG5wUzgwVWs3RmliK1JrUGNhNTVIUEErM2lVWTI1NDJONG0yd2txdDR0MW1pMEZsSUNkSzJNUVFZOWZUWnNJZjBEK1pjZUZMUG54Y1lCL0hhRkFGMlA1V0RBWFJVRVBNYisyNE9iQkdxa21yUTR6VmdVNU1nRDJaTHJuOTA4TkhNM0V2Nk00TEZVUTZwcmtydEZNZE9yRHBRZ0dLREE3K2NRT0RuVisyWnRENE14Y2NRNDUrSnhWR1NwdVFMMUhFeWFkSWNmOFoyQk1GT1hESWxqTHdITXBrM2M4R3FNQlNOdXBtWGN1d2t2a2FyR2JvR3RscXBvelFWTW9mVUVzREJCUUFBQWdJQUlTUWFFK2FTNDNKbVFFQUFOMENBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpFdVkyeGhjM09WVXRGT0UwRVVQVk9XTHEyclZGUVFVY01ERHkyWWpncnhCZEtvalNRbWxVUWdmZUZwdW5zcFE3WXpkV1pXdzJmeFFFaDg4QVA4S01QZDFRZGppSUZNWnU2OWM4KzVjMDR5UDM5OS93RmdDODhibU1GaUV4R1dZanlPc1N4UUR5ZmFyNzBVMkJob0s2ZTVDc2ZXVGQ3SWpDWlcrbFR1MDVlQ2ZOaTE3bk5oZ3dyYUdyL050QjF0ZE9nSmROdTM0SFdHQWxIZlppUXdQOUNHOW9ySmlOeWhHdVY4c3pDd3FjcUh5dW15L25NWmxmSUVrby9Ha092bnludmlzbnZ6TjlkZXYySzVqUU05TmlvVWprZStIVmczbHQ5b3RIa3ExVWpMdzdNcDdkTXhPVElwN2Z6VHpCVFBZWUNYNzdMTWtmZmJQUjdYUExDRlMybFhseEtYcjN1MmU2cStLbmI1d2FTNTlkcU1QMUU0c1ZtTUp3bFc4RFRCTE9vSllqd1RlSEViTHdJci8xRXYwTG54TUlHNU1ZV3labHE3ZmZTKzg1ZjFxYlBCcGphWHFYWEU5QW1qK2lyUDJmdE11elBFS3YramlMK1VhTFZLSjJYR084WWN4d1puUGRSNEFjMzFqUXVJOVV2VXpybXFvY2xudmNKYTNPRno4VGNLQ2U0QlZUWmI5U1BNVi9nVzdsZHhBUTg0Um5pSVI3aGI0VmhJeGNBVlVFc0RCQlFBQUFnSUFJU1FhRS9Ga3M0NW93RUFBT1lDQUFBeUFBQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VW1WeGRXVnpkRVp2Y2xGMWIzUmhkR2x2Ym5Na01qTXVZMnhoYzNPVlVsMVBFMEVVUFZPV3JxMnJGRkFVVWVNRElTMllqZ0hsQmRLWHhpYWFxcUZnMzJkM2I4dVE3VXlabmRYNGMvd0pQaGdTSHZ3Qi9pamozZFVIWTR5QlRPWit6Sng3NTV5YitmN2o4aHVBNTNqY3dBTFdtZ2h3TDhUOUVPc0NkWCtxODgxbkFqdERiZVU4VTM1aTNXeGZwalN6TWsva2lNNEx5djNBdXFQQ2V1VzFOZmtCbHgxcW8zMVBvTnUrUmwxbkxCRDBiVW9DUzBOdDZHMHhpOG1kcURqams1V2hUVlEyVms2WCtlL0RvS1FuRUwweWhsdy9VM2xPbkhhdi91Ym03aDdUYlJ6cnFWRytjTnp5OWRDNnFmeEk4ZDZaVkxHV0o1L21OS0lKT1RJSkhmNTFtU3J1dzRCY1Rva1pLRStwZksrTjMzMnhmOURqeHMxalc3aUVCcm9rdS80dkF0MHo5VUd4M3BjbXlXeXV6ZlFOK1ZPYmhuZ1FZUU1QSXl5aUhpSEVJNEduMTFFbHNQRWZIUUtkS3pmajhaall2WnVNQmtjY2I3VTdmOHhnN3F5M2ljMWtZaDF4OWN4NjZxc3NZK2tMN2M0WVQvaERCZnkzUkt0VkNpa2ozaUZ1c0c5dzFFT05GOURjM3ZrS3NYMkIyaGZPYW1peXJWZll6N2pKZHUwWENoRnVBMVcwV04wSFdLcndMU3hYZmdXcjdBUGN3VjNjcW5CTXBLckFUMUJMQXdRVUFBQUlDQUNFa0doUFkxSTdsVkVCQUFBYUFnQUFLZ0FBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTWk1amJHRnpjNDFSeXk0RVFSUTlOY2IwR01ONGs5aUpDQlpLeG1PQjJBZ0pHUllHQzd2cTdqdXRwTHRxVWwzajhWbFdFZ3NmNEtQRW5XYkRBcFhjT3ZkeDZ0eDdVMi92TDY4QU5qRlh3d0NtQWt3SG1CR283R21qL2I1QWVmbDY1WXJod01ZazBHaHBRMmU5TENSM29jS1VNeE10RzZuMFNqbmRqNytTWlgramM0SDZzVEhrRGxLVjU4VGhVa3RiMlUyVjcxaVhiY3VZTWl2elNMWjExazJwN2ExVENTMDJkd1ZLRCtzQzRscGdxSzBUbzN6UHNlWkp5N3BFM2xPNGNTdFZxT1hGWTVmT3FVT09URVI3UDRxeDhzb3pJWmNKOFFqS1V5d3Z0ZkhOcmUzZGZlNVFhOXVlaStoSUZ5dDhtMkR0VnQwcDN2VFFSS25OdFVsT3lkL1lPTUJzSFdVTUNpeitad3VCK1YvR0ZWajRXd1RyS1BHWDlJOWc0OTZNRmZaMk9GOWlyS3pPUDBNOHNWZEMwSThMM2hxcWZNOThNakNFNFVLaGdqcEd1RjdHYU1GdllLekFjVXdVMnBOODF3b1R4VXVnK2dGUVN3TUVGQUFBQ0FnQWhKQm9UMmd5SWFkSUFRQUFJd0lBQURJQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE1pNWpiR0Z6YzVWUlMwOENNUkNleW1NQlYxRjhKTWFyQnpHR0tpb1hDQmNpaVdZMUVaQjcyUjJnWkdteDI5WDRzenlaZVBBSCtLT01zNnNuWTR4T01xOXZwbCsrU2QvZVgxNEI0QlMyUzVDQmlnTWJEbXd5eUxla2tyYk5JTE5mSFRMSWRuU0FETXFlVkhnZHowZG9CbUlVRWxMeHRDL0NvVEF5NmIvQXJKM0tpSUY3b1JTYVRpaWlDS210ZVZMelJTanNXSnQ1Z3djNDF6enllUS92WW94c1Y1dWJXRnRocFZiUjNuRzl5YURZbHhNbGJHeUk4dExUWnNJZmNIUXk0MklrK2VCeGdUMGNvMEhsWSt2Yk1CREVRd3NSbnlBcEVCWURmaXVWclo4MW1tMGlMdlYxYkh6c3lrVHN6azhDYWpOeEwramVjK1dIT3BKcWNvVjJxZ01IdGx6SVFvN0I0WDl1WWJEN2kzb0cxVCtUd1JFczBUY2x4c2hKQ3VVOFZaeHlndVFPbm9FOVViRUVEc1Y4Q25haFFOSDlYSUFpTEtkUDNYUnJCVmJUWElhMUZGMm5XRXFkRVpwWTRRTlFTd01FRkFBQUNBZ0FoSkJvVCtkOEJseEdBUUFBSVFJQUFERUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UTJMbU5zWVhOemxWRkxUd0l4RUo3eUJsRVVING54NmtFMFdvMkdDNFFEUkJMTmFpSVE3bVYzZ0pLbHhiYXI0V2Q1TXZIZ0QvQkhHV2RYVDhZWW5XUmVYNmRmdjBuZjNsOWVBZUFDZGtxUWhtb2VOdk93eFNEWGxFcTZGb1AwUVczSUlOUFJBVEtvZUZMaGJUUWZvUm1JVVVoSTFkTytDSWZDeUxqL0FqTnVLaTJEOHBWU2FEcWhzQmFwUGZhazVvdFF1TEUyOHpvUGNLNjU5WGtQN3lPMHJxdk5YYVNkY0ZJcnUxOXZNQ2oyNVVRSkZ4bGl2UGEwbWZCSEhKM1B1QmhKUGxndXNJZGpOS2g4Ykg0N0RBVFIwSURsRXlRQndtSEEyMHVIOXF6ZWFCRnhxYThqNDJOWHhscDNmM3IvWkNZZUJLMTdxZnhRVzZrbU4raW1Pc2pEZGhreWtHVnc5STlWR096OUlwNUI3YzljY0FvcCtxVFlHRGtwb1p5amlsT09rZXpoTTdBbktsS1FwNWhMd0RZVUtKWS9CNkFJSzhuVmNqSzFDbXRKcnNCNmdtNVFMQ1hPQ0kydDhBRlFTd01FRkFBQUNBZ0FoSkJvVDNJdHpmMUhBUUFBSXdJQUFESUFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhNQzVqYkdGemM1VlJTMHRDUVJRK2syKzdaZGtEb20yTGpIQ1V3bzNpSWtrb0xFakYvWGp2VVVldU16WXp0L0JudFFwYTlBUDZVZEc1dDFZUlVRZk82enRuUHI3RHZMMi92QUxBT2V3WElRWGxIT3prWUpkQnRpV1ZkRzBHcWVQS2lFRzZvd05rVU9wSmhiZlJZb3htS01ZaEllV2U5a1U0RWtiRy9SZVlkak5wR1hoWFNxSHBoTUphcExiYWs1b3ZRK0VtMml3YVBNQ0Y1dGJuZmJ5UDBMcXVObmVSZHNKSnJleFJ2ZFprVUJqSXFSSXVNa1I1M2RObXloOXhmRGJuWWl6NWNMWEVQazdRb1BLeDlXMFlDT0toQmN1blNBcUV3NEJmckJ6YWVxUFpKdUxpUUVmR3g2Nk14Ujc4SktBNkZ3K0M3cjFVZnFpdFZOTWJkRE1kNUdEUGd6UmtHSnorNXhZR2g3K29aMUQ1TXhuVVlJMitLVFpHVGxJb1o2bmlsR01rYy9JTTdJbUtOY2hSekNaZ0YvSVV2YzhGS01CNjh0Ukx0alpnTThrbDJFclFiWXJGeEJtaHNlVS9BRkJMQXdRVUFBQUlDQUNFa0doUEVKL016MUVCQUFBc0FnQUFNUUFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKRFF1WTJ4aGMzT1ZVY2xLQTBFUWZSMWpOcVBScUZISjFZTUxPZ0dEQnhPQ0doU0VLTGpnd1Z0bnBvd2RKdDJ4ZThibHN6d0pIdndBUDBxc2pKNUVSQnVxWGkydlgxZlJiKzh2cndEcVdDeGdESE5aekdkUkVjZzBsVlpSU3lDOWNyVjZ5ZEEyQVFtVU9rclRTVHpva3IyUTNaQXI1WTd4WlhncHJScmxYOFYwZEtPY1FQRklhN0x0VURwSG5HNTBsUEdHb1l5dWpSMXNld0VOak9kODc0eHVZM0xSb2JHbnNZbGtwSXgyeS9XR1FPcWhKaUN1QlBMbnFxZGxGRnVXM3UwWTIvUHVxYnZWOTJSWGVSZVBRenFqYTdLa2ZXcCthd2FTOVpqZ3ZMMGdzT1JjbzhXNmhYTVRXNThPMVdqVXBaK2UzK3pMTzhuYkhtZy9ORTdwM2pGRk55YklZcUdJTk1ZRjF2K3hpVUQxbDVFRlZ2K3NoUnBTL0Vtakk5aDRFc1lNUnp0Y1R6Rm0xcXJQRUU4Y3BaQWQ1UWx2SHpuMmxVOEc4cGhJRkRJb1lwTDdhVXdsL0JLbUU1eEJPZEdlWlY5SVRDUTNnZHdIVUVzREJCUUFBQWdJQUlTUWFFOXFiRXVyTkFJQUFCb0VBQUFrQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVa1pSVTNSaGRIVnpMbU5zWVhOempWTHZUOU5RRkQxdjY5YXVsTUVxb2lBaXY1UnRJQVdjZnRsQ0lBZ0p5UUpDY2NsaS9OQjFqMW5TdGFZLzluZkpTTVJvTkh6Mmp6TGVWeGNEa1lDdnliMDU3NTU3N25tdjcrZXZyejhBVkZESlFjS2lpaUpLTXNaa2xGWGtzU1RDc29JUmxZckxndkZjUVVIa0ZRVzZ5SWFNVlFibGlOdmM2ZkUydzB6ZDhZMlByaFdkK0VIM2xkSG1YZDhJYmVObzk5Q01yQ2dPcThSK3pXM1g4UVI3K0REMkkvNG04SHRPVzJCNW9iRlZmN3RqTXN5K3Uxc28yN1BjbUljTTg4WFNmOUNsYmIvTkdVYnFOSHMvN3JaNGNHeTFYTnFSRTUyREU0WktzWDVxOVN6RHRieU9ZVWFCNDNXcXBidVY5YnB2VzI3RENod2hPRkNWUEt2TFJlMGZSWEplY3p3bjJtQVl2MkhnWHFsQjNkRUhoMDZXTTUyT1IxTUNVa29YUlVHcGljdExtdGV2OU81NGNiZDJsOU1OR3EyYWZoellmTmNSSG5QSFBJeFdoSXFHZStLM2oybFl3enJEOU8xS0dpYndRc00wbm1nWXdhaUdnZ2c2UmhueTF6MHhaR3pYOTJqV1dMRjB4ZTlCNjVUYkVmbDVlZlVHdGwwckRLczMvWVBycXRYTlZYcDhlWHE1MHVhRWNBQlFMZ3l5THZMb3BEaVJZQ0NIK3hnSHd3TkNjNVRGVXZ0Z241RzZSUG9USVlhSEZMTkpiWi80RTVnYzhDdElKYnVxTHBXL0lITUpTZkJUMS9pUEtHcC9XSmpDNDZST1YwTlJLS3doVFI4Z2w1ZW1McEE5dTZWZHhveXdqdG1FTXdjRjg0bGhJZk9lRGlMVzFqZElUVjFPWDBBNVJ5NEJxcFNBb1FSb21RUU1aNzhUU3ZmcEJUV2xQb2JNWnFhUFlmTWM3T3p2ZVZVYUFoeGdrVXlrQmtNWDhEVEp6MzREVUVzREJCUUFBQWdJQUlTUWFFKzZva1Fla3dFQUFMUUNBQUFxQUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVMmx0Y0d4bFUzUnZjbUZuWlNRMExtTnNZWE56alZKTGJ4TXhFUDZjYkxOTldHZ29VQjRGVkZWUlNWb0pJL3E0dE1vbEFna1VPRFJ0N3M3dWRPdktzU092QStyUDZxR3F4S0UvZ0I5VmRiTDBBQndnc2p3dmZ6UHpqVFUvYjM1Y0E5akI2enFxV0drZ3d0TVl6Mkk4RjZpRlUxMjAzZ20wK3RySmlWSGh4UG54bnN4bzdHU1J5b0VlVHd3Tmd2TXFwMzNHSDJpclExZmdUWHVlaE01UUlPcTVqQVNXK3RyUzErbDRSUDVJalF4SGx2c3VWV2Fvdko3NWQ4Rm9Sa2dnK1dRdCtaNVJSVUhzYnN6UnJMWEQvT29EblZzVnBwNUxmZTQ3bjh2dk5ObytrMnFrNWRINWhBN3BoRHpabEE3K2VzeFVVSUVCaGN5Sk82dEFtVHpXTnJ6ZjNkdnZjdUhHd0UxOVNoOTF5ZnlQeG0vUDFEZkZBMzZ3cVhHRnR2a1hDcWN1aS9FaXdTcGVKbGhBTFVHTVYvekw4NHdoc1BvUDRnTHIveThpVU0wcDhMKzFPNy9OT2ZFdXVOUVptVHBQOHBBVEEvV1VNVHhldGQwWllvM1hJK0pORWMzbWpQUE00aHRqa1hXZHJTNHFmSURHNXRZbHhPWVZLaGZzVmRCZ1dTdXh4N2pIY3VVWENna2VBS1cxVUw1SFdDcnhUVHdzOVRJZXNZN3dHRTl3djhReGtUSUR0MUJMQXdRVUFBQUlDQUNFa0doUDJJYjcwSUVCQUFDQ0FnQUFTQUFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKRkpHVVZKbFkyVnBkbVZrUlhabGJuUlNaWE53YjI1elpTNWpiR0Z6YzZWUlRVOFVRUkI5dmJ1d3NLN3lvU0tvRnhNUDRvRStTTHhvVEZ4a0U1S0poc1Z3OGRRelU4ejJacVpyN2U1WmY1Y25FZzc4QUg2VXNXWWc4UUtKQ1pmM3FybysrdlhycXo4WGx3RDI4WEtBTHA3MXNkUEhjNFZ1eVlYQ1hzSyswTDhvZlRmVGM4K1JNeTUxeHA1MFJYSEtlZENld3B4ZElKMXc4VUdoWTNPQkh5T0ZGUnRDVGZubnFMQ1Z6TXpDNk1yRXFSN1o0c2hGS3NoTGQ3ZE9TNFhONjNKcFhLRlBvcmV1V2JUODBUb2JQMG5QbTkxVGhkNEI1NlN3bGxoSFgrc3FKZi9kcENVMXc1eVo4dFI0MitRM2g3MDR0VUZoZXpJK25sQkdka0g1NFlKY25OeUlWUmdlT1VmK29EUWhrSFIrU1N6cmVXbmlHZnZxdmM2cFloMHlQYUdmTllVNFpuOWNjelRSeXZEcnU1YUs2TUVKMXo2anNXMUU3TncydmRjOGRZZ2hIdmJ4UW1GMC8yc1Yxdi9aOXkyZFVTYU83LzczWHJ4Q1IvNGQ2RUY4dzVKRVlqNzZMYTlndGVVQkhyU3NHdUdDanlUVGJRNHN2VDJIK2kxQkIydUN5ODJoR21OZDR1RjFBemJ3cEswL2JYRUxqNFVIVXV0Z0c1dFkvUXRRU3dNRUZBQUFDQWdBaEpCb1R5RmN6aUtlQVFBQTNnSUFBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TkM1amJHRnpjNVZTWFU4VFFSUTlVNVl1cmFzVVVCQlI0d01QTFpBT0JrSk1JSDJ3c1lsSk5hSEZ2cENZVExlM1pjaDJwc3pPU3Z4WlBoZ1NIL3dCL0NqQzNkVUhZNHlCVEdidXg1eHo3ejJadWI3NThSUEFQbDVXTUlmVktnS3NoWGdhWWwyZzdNOTB1cmtyc04zVlZzNFM1Y2ZXVFEva2lLWldwckhzMFVWR3FlOVlkNXhacjd5MkpqMWsycEUyMnJjRW12Vjc4Qm9EZ2FCdFJ5U3cyTldHUG1iVElia1ROVXc0czl5MXNVb0d5dWs4L3AwTTh2RUVvdmZHa0dzbktrMkp3K2JkZTI2KzN1ZHhLMzA5TWNwbmprdTJ1OVpONUNVTjk4NmxHbXA1OG5WR1BScVRJeFBUMFYrWEk4VjFHSkRLVDM3OHB1K2ROcFBERmxlczltM21ZdXJvZk1yMWYzVnVucXN2aW9XK00zRmlVK1o5SUg5bVJ5R2VSZGpBOHdqektFY0k4VUpnNXo1eUJEYitJMENnY2VkaS9Jd1Q4cjNPc1VDOWZ2cTI4WWYybWJQZXhqYVJzWFhFNUtuMTFGWkp3c3JuNm8wQlh2RkhDdmhQaVZvdDE1Rjd2RU1zc0sydzEwS0pGMURkMnY0T3NYV0YwamVPU3FqeVdTNnduL0dBejlWZktFUjRCQlRlZkhFZllMSEExN0JVMkdXc3NBM3dHRS93c01EeElBVUR0MUJMQXdRVUFBQUlDQUNFa0doUDVIMWU4RWNCQUFBaEFnQUFNUUFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREl1WTJ4aGMzT1ZVVXRQQWpFUW52SmF3RlVVSDRueDZrRTBXb1BLQmNLRlNLSkJFd0c1ZDNjSEtGbGE3SFkxL2l4UEpoNzhBZjRvNCt6cXlSaWprOHpyNi9Uck4rbmIrOHNyQUp6Q1ZobXlVSFZnM1lFTkJvV1dWTksyR1dUM2FpTUd1WTRPa0VHbEp4VmV4M01QelZCNElTSFZudlpGT0JKR0p2MFhtTE5UR1RGd0w1UkMwd2xGRkNHMWh6MnArU0lVZHF6TnZNRURuR3NlK2J5UGR6Rkd0cXZOVGF5dHNGS3JhTGZlWkZBYXlJa1NOamJFZU5uVFpzSWYwRHVaY2VGSlBueGNZQi9IYUZENTJQcDJHQWlpb1lHSVQ1QUVDSXNCdjVYSzFzOGF6VFlSbHdjNk5qNTJaYUoxKzZmM2oyYmlYdEM2NThvUGRTVFY1QXJ0VkFjT2JMcVFnenlEZzMrc3dtRG5GL0VNYW4vbWdtUEkwQ2NseHNoSkNlVUNWWnh5Z3VUM240RTlVWkVCaDJJaEJkdFFwT2grRGtBSmx0S3JianExREN0cHJzQnFpcTVSTEtmT0NFMnMrQUZRU3dNRUZBQUFDQWdBaEpCb1Q4b2pLbVkrQXdBQWt3Y0FBRElBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4Tmk1amJHRnpjNzFWNjA0VFFSVCtwaFJXeW9wVkVlOEtpTm9Mc2lpS2wxWlVLdFdTZXNXUUdIL29kRHNzUzdZN2RYY1c5VVY4QWg5QUUrOG14dDgrbFBITTBzakZDcGdZMDNSbjVwdHp2dk9kTTJkbnYvLzQvQlhBV1ZTNnNSMm45R00waFY1WUtlUXhadUIwRDg1ZzNNRFpIaGc0WjJEQ3dQa1VPbkVoUlpZWERWd3lVREJRWkRDWHVEYzhIL20yY3FYUE1GU1ZnV005RTdYeFJZdlhYS3ZPRlZjdm1pSzB5aTJiQWtPWFduREQ0VEdHZk5XVlZ0UGphbDRHalFtckxoclNDbTNydm5nYWlWQ1ZaWEF2a3VSUFhxRjJLN3ErcXlZWjdtYit3bTl6UWRrNWhtUkoxZ1hEanFycmk5dFJveWFDQjd6bUViS3JLbTN1emZIQTFlc1dtTlFKVU80VjN4ZEJ5ZU5oS0dnNXVuVlZ3NmNuS0tFa01Yc014elBaVlNKVjFQUkluU09JbWl0UnR4NW9ZSnpNalVDRWthY29VcnE2eUplNEZTblhzNnB1cUdpemY2MU95ckNsZFd5ZGJmR1BCZEZPaFVuaVNrMC90MFV6Rm1yZ01rUDNyT3Y0WEVVQjBZbXRpQzB1eDJ4d3RXQk51VTdGVjhJUlFXRVo5Ymp2V0xNcWNIMm4wTjVPYStpak9Ddm1kMnFMd3RacHZ2d2RYSldmTFgwN0NnTGhLNnRFcGRVRktQNEh0WEhOWm1VVTJLTHM2cHJ2YjNmbW85cWJXbXphdHowWkV0OHRvUlprM2NDa2lTdTRhbUlYZHB0SVk2ZUpQbHd6TVlVU3crQ202ZzFjTnpHTk1zT2hqUTdXeEEyY29MSzJTNEVhYW4ydVdzTk5FNGR3bUdIa2I5cDZEZGZ5Q1RFYzN2Q0lHSGF2dVB4cVBZYnNsdVBTM2VBSWRiOThqeUdUZVRTMXVrT2JnVlRTbGpwd0lNaTVJWlhRZ2VuSU9qTDZ6VTl4MnhZaFhVZGpkQ0U5L3NjM3krL3ZhZTlhaEZTUWNvWTltVXJiZnQ5R3UzUGNpNmhJRnpOLzZ2Mk5rZXdjQnVqUzdnWDFIaExwdEc0eGdFYnFOL29FZE5DL0QzdG90NTltSlNSaVpFY3UvdzRzTi9JT2lkd0hkTHdoS0lHOTlPd2lRK0FKOXRHem56QXl4WDRjQk9LWnBtVDBvNzRoR2szNGlqeTAxVXp1TGZHOVJlSWprdFV2Nkh5WTcvaUVyZ1Mrd2ZpRWJZekc3bnh5SFpMS2Q2NjMrWUNlMTdGb3JlVUFjUU0yVE5RcHNzQXc1akVCQnhWYXIraWJhZWt6TVlrak9FcnFCdUlWYXlHRE5Cc2lKRW5qTWVMUW1SNVBYNk1jVHRCTTUyREZPUUdkdWZjd1g3Y3RoYmxzMEFxMVFwZHNFWjVFSmg2enlNVjdlWXlRZkNCRlZ0dmo0dUVuVUVzREJCUUFBQWdJQUlTUWFFL25BdDdZUmdFQUFDRUNBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTlM1amJHRnpjNVZSUzA4Q01SQ2U4Z1pSRkIrSjhlcEJORnFOeWdYQ0FTS0paalVSQ1BleU8wTEowbUxiMWZDelBKbDQ4QWY0bzR5enF5ZGpqRTR5cjYvVHI5K2tiKzh2cndCd0Jsc2xTRU0xRCt0NTJHQ1FhMG9sWFl0QmVxODJaSkRwNkFBWlZEeXA4Q2FhamRBTXhDZ2twT3BwWDRSRFlXVGNmNEVaTjVHV1FmbFNLVFNkVUZpTDFCNTZVdk41S055ZE5yTTZEM0NtdWZWNUQrOGp0SzZyelcya25YQlNLN3Q3M21CUTdNdXhFaTR5eEhqbGFUUG1qemc2blhJeGtueXdtR01QNzlDZzhySDU3VEFRUkVNRGxvK1JCQWlIQVc4dkhOcVRlcU5GeEtXK2pveVBYUmxyM2Y3cC9hT3BlQkMwN29YeVEyMmxHbCtqbStnZ0Q1dGx5RUNXd2NFL1ZtR3c4NHQ0QnJVL2M4RXhwT2lUWW1Qa3BJUnlqaXBPT1VheSs4L0FucWhJUVo1aUxnSGJVS0JZL2h5QUlpd2xWOHZKMURLc0pMa0Nxd202UnJHVU9DTTB0c0lIVUVzREJCUUFBQWdJQUlTUWFFL2lOenMrUndFQUFDTUNBQUF5QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTVRFdVkyeGhjM09WVVV0TFFrRVVQdVBycWxtV1BTRGF0c2dJSnluY0tDNlNoTUtDVk55UDl4NTE1RHBqTTNNTGYxYXJvRVUvb0I4Vm5YdHJGUkYxNEx5K2MrYmpPOHpiKzhzckFKekRYaEhTVVBGZzI0TWRCcm1XVk5LMUdhU1BxaU1HbVk0T2tFRzVKeFhlUm9zeG1xRVloNFJVZXRvWDRVZ1lHZmRmWU1iTnBHVlF1bElLVFNjVTFpSzF0WjdVZkJrS045Rm0wZUFCTGpTM1B1L2pmWVRXZGJXNWk3UVRUbXBsRCt2MUpvUENRRTZWY0pFaHl1dWVObFAraU9Pek9SZGp5WWVySmZaeGdnYVZqNjF2dzBBUUR5MVlQa1ZTSUJ3Ry9HTGwwTllielRZUkZ3YzZNajUyWlN4Mi95Y0J0Ymw0RUhUdnBmSkRiYVdhM3FDYjZjQ0QzUkprSU12ZzVEKzNNRGo0UlQyRDZwL0o0QlJTOUUyeE1YS1NRamxIRmFjY0k5bmpaMkJQVktUQW81aEx3QzdrS1pZK0Y2QUFhOG5UVXJLMURodEpMc05tZ201UkxDYk9DSTB0L3dGUVN3TUVGQUFBQ0FnQWhKQm9UeStNdk9CUkFRQUFHZ0lBQUNvQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlUYVcxd2JHVlRkRzl5WVdkbEpERXVZMnhoYzNPTlVjdE9RakVRUFVVRVFSU2ZhT0xPR0tNdXFPK0ZHalpFRXcyNkVIWGhydHc3WEVvdUxla3RQajdMbFlrTFA4Q1BNZzVYTjdwUW0welBQRTdQektSdjd5K3ZBSGF4V01RSTV2S1l6Nk1pa0R2U1J2dWFRSGJ0ZHYyR29XNURFaWczdEtHTFFhOUY3a3ExWXM3TU5HeWc0aHZsOUREK1NtWjlSeWNDcFZOanlOVmpsU1RFNFdwRFc5bVBsVzliMTl1WElmV3NUQUxaMUwxK1RFMXZuWXBvWmV0UUlQT3dLU0J1QlFwTkhSbmxCNDQxenhyV1JmS2VXanRkcVZwYVhqMzI2WkxhNU1nRWRQU2pHQ3F2UEJNU0dSR1BvRHlGOGxvYnY3MjNmMWpqRHNXbUhiaUFUblM2d3JjSnFsMTFwM2pUWXhQRU50RW1PaWZmc1dFZUN5VmtNU3F3OHA4dEJKWitHVmRnK1c4UmJDTERYekk4Z28xN00rYllPK0I4aGpHM3NmUU04Y1JlQnZsaG5QS3FHT083OHNsQUFlT3BRZzRsVEhBOWk4bVVYOFpVaXRPWVNiVm4rUzZtSnRLWHdOZ0hVRXNEQkJRQUFBZ0lBSVNRYUU4Qk5QVzZsd0VBQUxzQ0FBQXFBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlUybHRjR3hsVTNSdmNtRm5aU1F6TG1Oc1lYTnpqVkpCVDFOQkVQNjJQUHBzZlVwRlFBVXh4alRhWXVJYVVDNlFYaW9ra01xQll1L2I5NGJIa3UxdXMyOEw4V2R4SUNZZStBSCtLT1AweVVFOGFMUFpuWm5kYjJhK2J6TS9mbjYvQWZBQkwycVl3MG9kRVo3RWVCcmptVUExbk9taStWNmcyZE5Pam8wS3A4NlB0bVZHSXllTFZQYjFhR3lvSDV4WE9lMHdmbGRiSFRvQ2IxcXpKTFFIQWxIWFpTU3cwTk9Xamlhaklma1ROVFI4czloenFUSUQ1ZlUwdnIyTXBvUUVrZ05yeVhlTktncmk4UFVNelpwYnpLL1cxN2xWWWVLNTFHSFArVnhlMG5EclhLcWhsaWRmeDNSTXArVEpwclQ3MTJPbWdnb01LR1JPM0ZrRnl1UVhiY1BteCsyZERoZXU5OTNFcDdTdlMrWjNHcjg3VnhlS0JlN1oxTGhDMi93emhUT1h4VmhOc0libkNlWlJUUkJqblg5NUZoa0NhLzhnTHZEcS8wV1liOEVlWlo5WUZuOWZxLzJIM0xGM3dhWE95SlFSOHBqekEzV1ZNYXh5cnRVZTRDVlBTY1FESXhxTktmV3B4enZHUGJZMTlqcW84QUxxRzIrdklUYStvWExGVVFWMVBxc2xkaC8zK1Z6NWpVS0NoMERwelpmdkVSWktmQU9QU3J1SXgyd2pMR0VaRDBvY0V5a3o4QXRRU3dNRUZBQUFDQWdBaEpCb1Q2SXkxK2RJQVFBQUlRSUFBREVBQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVEzTG1Oc1lYTnpsVkZMVHdJeEVKN0tZd0ZSRkIrSjhlcEJORnJqQXc4UURoSkpOS3VKZ056TDdyQ1VMQzEydXhwL2xpY1RELzRBZjVSeGR2VmtqTkZKNXZWMSt2V2I5TzM5NVJVQWptRzlCQm1vT3JEaXdDcURmRk1xYVZzTU10dTFBWU5zVy92SW9PSktoZGZ4ZElpbUw0WWhJVlZYZXlJY0NDT1QvZ3ZNMnJHTUdKUXZsRUxURGtVVUliVjdydFI4RmdvNzBtWmE1ejVPTlk4ODNzVzdHQ1BiMGVZbTFsWllxVlcwZGRwZ1VPekpRQWtiRzJLOGRMVUorQU1PanlaY0RDWHZQODZ3aXlNMHFEeHNmanYwQmRIUVFNUURKQUhDb3M5dnBiS0hKL1ZHaTRoTFBSMGJEenN5MGJyeDAvdjdFM0V2YU4xejVZVTZraXE0UWp2V3ZnTnJaY2hDanNIdVAxWmhzUG1MZUFhMVAzUEJBY3pSSnlYR3lFa0o1VHhWbkhLQzVIYWVnVDFSTVFjT3hYd0tua0dCWXZsekFJb3duMTR0cDFNTHNKam1DaXlsNkRMRlV1cU0wTVFLSDFCTEF3UVVBQUFJQ0FDRWtHaFBmWUtxKzZRQkFBRGxBZ0FBTWdBQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFekxtTnNZWE56bFZKTmJ4TXhFSDFPdDFrU0Zob0tMWlFDNHRCRDBxSVk2TWVsVlE1RVJBSUZwS1lsRnlRa1ozZTZkYld4ZzljTDRtZjFVRlhpd0Evb2o2cVlYVGdnaEZBcnk1NForODM0UFhzdUxyLy9BTENGSnczTVlibUpBUGREUEFpeElsRDN4enBmZXk2d01kUld6akxsajZ5YjdzaUVwbGJtc1J6UjU0SnlQN0J1djdCZWVXMU52c3RwZTlwbzN4UG90cStSMXhrTEJIMmJrTURDVUJ0Nlgwd241QTdWSk9PZHhhR05WVFpXVHBmeDc4MmdwQ2NRdlRHR1hEOVRlVTRjZHE5KzU5cUxUYWJiT05DcFViNXdYUEx0MExwVWZxWEo1b2xVRXkwUHY4MW9SRWZreU1TMDk5ZGhvcmdPQTNLWkVqTlFuaEw1UVJ2L2NudG50OGVGbXdlMmNERU5kRWwyNVY4RXVpZnFpMks5cjAyYzJWeWI5QjM1WTV1RWVCaGhGWThpektNZUljUmpnV2ZYVVNXdytoOGRBcDByRitQZlRNbVBCdnNDN2ZiSFY1MC9ubURtckxleHpXUnNIWEh5MUhycXF5eGo1WFB0emhoUHVaOENiaTNSYXBVNlNvOW5pQnRzRyt6MVVPTUJOTmMzemlEV3oxRTc1YWlHSnEvMUN2c0pOM2xkL29WQ2hOdEE1YzFYNXdFV0tud0xkeXE3aUx0c0E5ekRFbTVWT0NaU1plQW5VRXNEQkJRQUFBZ0lBSVNRYUUvSHJ4VkRvZ0VBQU9jQ0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNVGN1WTJ4aGMzT1ZVbDFQRkRFVVBWMkdIWFlkWlFWRUVUVTg4TEFMWml1bytBRFpCemVTUUZZVCtkZ1hucm96bDZGa3RsMDdIWWcveXdkajRvTS93QjlsdkRQNlFJZ3hrS2E5OTdibjNKN1Q5T2V2N3o4QXZNS3pCcWF3MkVTQWh5RWVoVmdTcVBzem5hKytFRmdmYUNzbm1mS24xbzIzWkVKaksvTllIdENuZ25LL2E5M0h3bnJsdFRYNU50TjJ0TkcrSjlCdDM0TFhHUW9FZlp1UXdPeEFHL3BRakVma2p0UW80NTI1Z1kxVk5sUk9sL1hmemFDVUp4RHRHVU91bjZrOEp5NjdONzl6ZGVNTnkyMGM2dFFvWHpodXVUK3dMcFdYTkhwNUx0Vkl5NlBQRXpxZ1UzSmtZdHE1ZHBnbzdzT0FYS2JFQ3BTblJCNXI0emRmYjIzM3VISHowQll1cGwxZGlsMzZsNER1dWJwUTdQZWRpVE9iYTVPK0ozOW1reENQSXl6alNZUnAxQ09FZUNydy9EYXVCSmIvNDBPZ2MrTm1Bak1wK2JKbVdydDk4clp6NVJFbXpub2IyMHpHMWhIVHg0enFxeXhqNzFQdHpoQXIvS01DL2x5aTFTcWRsQm5QRURNY0c1ejFVT01CTk5mV3YwS3NmVVB0QzFjMU5IbXRWMWlMTzd3dS9rRWh3ajJneXFhcjh3Q3pGYjZGKzFXY3d6ekhBQXQ0Z0xzVmpvVlVEUHdHVUVzREJCUUFBQWdJQUlTUWFFK2JWOGVZUWdFQUFCb0NBQUF4QUFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTXk1amJHRnpjNVZSUzBzRE1SQ2U5TFZ0WGEzV0I0aFhEMWJSQ0JVUldub3BGb1JWc0syOXA3dlRtckpOYXBKVi9GbWVCQS8rQUgrVU9MdDZFaEVkbU5jM00xOW15TnY3eXlzQW5NQldGZkpROTJEZGd3MEdwYlpVMG5VWTVQY2FJd2FGcm82UVFTMlFDcStTK1JqTlVJeGpRdXFCRGtVOEVrYW0rUmRZY0xmU012QXZsRUxUallXMVNPbGhJRFZmeE1KTnRKbWY4Z2pubXR1UTkvRXVRZXQ2Mmx3bjJna250Yks3elJhRHlrQk9sWENKSWNadW9NMlVQK0M0T2VOaUxQbndjWUY5bktCQkZXTDdXekVTUkVNTmx0KzR5ZG5BR2FtbXJRNHhWZ2M2TVNIMlpMcms5azhQSDgzRXZhQTd6MVVZYTB0emwraHVkZVRCcGc4RktESTQrTWNOREhaKzJacEI0ODljY0F3NStwMVVHQ2x0UXI1RUVTZWZJc1g5WjJCUEZPVEFJMXZLd0E2VXlmcWZEVkNCcFd6VXo3cVdZU1h6TlZqTjBEV3kxVXdab2FtVVB3QlFTd01FRkFBQUNBZ0FoSkJvVDNHYlNaRFNBd0FBT3drQUFDb0FBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5VGFXMXdiR1ZUZEc5eVlXZGxKRFV1WTJ4aGMzT3RWZTl6MjBRUWZSZmJVZTJvclFsSkNxVzBwVFdwNC95NGxMU0ZraEJ3SGFjTlZSeUlqVXVBR1VhUnJyS0NMQm5wbktSL0RGK1o0VnRoYUV0aGh1bG4vaWlHUGRuRXRESEVHV3FOVDlMZTdydTNlM3RQZi96NTYrOEFydUdyTkY3QlFnYWp1SmJHVlZ6UDBIQkR3N3NacEpRbGhmY3l5T0htQ043SG9vYWxFV1R3Z1labE5mT2hHajdTVU13UXhDME5KUTByR3NvTXc3TGhScmw1aHB6aEJyemxtZkorRURadmNGczBBeDVadk9vMlc1Nm95aUEwSGJGSS9rdXU3OHBsaGl2NVFRS202Z3pKVW1BTGh0T0c2NHRLdTdrdHdwcTU3WkZsMUFnczA2dWJvYXZldThha0lzU2dyL20rQ0V1ZUdVV0NYaWNIV0N4M25maWx6RmJMZThCd1hobUZ2V0pLczlRd2ZVZlk1VjNoeTAwUnRRSS9vbldpdkJHRUR0OFQyd3M3dkJVR01yQUNqMXNVeEp0Q05nSTc0bUhYbVJ1QnN6ZzFDSVAvWHBUb0piekFZWmc3M3RJTUkwTGgxRTJ2TFNJTnQ2bDA1WjdobmlzYmhvSXQvQU5XN3ZOUzRNdlF0R1R1c0M5Qm5wUVBXc0x1MWFQMFV2S2J6QnM3NXE3SlBacmxHOXM3d3BKVXVVTW1oa3g1M3hJdDZWS2NoanNNNmFycitLWnNoMFRsKzhNQmlsd29LQmwzVit6eisyM2Zpa1A1YXZkcDZYZ1ZmUW01THFza3FrRTd0TVNxRzNmemMrRnpLZ1ZxK3JKdmVVSGsrczU2ekVQRG1vNlBjVmZIR01aMVRNRFFzWTZLamcxOHdsRDgzN1IwdklWTE9qN0Zwb2FxamhvK1l6alhLNDI1N1hLYlF0WGVSN3hHbzQ0NjdqR014UlZ2bXJMQmI3bk9taStGSTBJZG4yTkx4eGZZWXBnNVRuMTFuTWRGa3BSQnppeEQ5c1hkWnJod3hIWnIrSkloUDJpM003emFXK0tnN3hndUhjMlBoQ1RxVy9CVkw5anJDSll4aUpCOFMyd2tMOHNHOVlvVVlVZE5laG4ramFZVUlxODA4MHkxdHJGWlhsa3Axb3FsTzhYSzdmTEsxK1Y2dVZLajBoai90cDB4TDlXVnBtV0ppRVI5bm1UOXU0RmsrZ2pNNHlybE1XUW82d2k1NXR0aVg5aWRLVHBJK2E1aXRLWHJjY09OVkZLbm5yZFFuU2lRWVR5LzFsZGVUdEJzakVldG5lL3ZFWGgyMTJQQzZOZjl5c2NYZTEyZjhiNDU0U0o5VGtkQkRRYVd6YW96VFIvcUJQMG5jSWFzcjlIVE1vYm9BaktGNlVkZ2hTY1krcEhlaHZBNmpjUGtBemc0RzBmRVhuZ0Rid0x4azBKamRORlo2bUw5UU5oSnVxOFhmZ2I3Q1lucFg1QmMvdzJwclNjWXJzd1N2alk3OHhnbkVrK1JIc0l6Wko1aWhORmRmNFNUOFVUeThNU3AyWWNIZE00U0lXQUhPcjZoeFQyeU5mRU9mTnhGRUZNc2RCWS9vTGl1eElhbzZTamlNaVlKWlF3M2NRVjVKTEpGb2oxRkZrVjdvVnVDZEdINkdVNC9SdlpoM3dybzhYTzZDMStnZjVJczB6VE94UDZ6bUl2dkhQUHgzRlVpZHk2bW5hQmQ2UHhTWkwxQUdEbXM0bTJrL3dKUVN3TUVGQUFBQ0FnQWhKQm9UNE1FOW9hakFRQUE0d0lBQURJQUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE5TNWpiR0Z6YzVWU3dXNFRNUkI5VHJmWkppdzBGRm9vQmNTaGg2UkZNUWhhVldxVkF4RVJTQUdwYWNrRkNjblpuVzVkYmV6VTZ3WHhXUndRVWcvOWdINVV4ZXpDQVNHRVdsbjJ6SGplak4remZYRjVkZzdnSlI0M01JZVZKZ0xjQzNFL3hLcEEzUi9yZlAyWndPWlFXem5MbEQreWJyb3RFNXBhbWNkeVJLY0Y1WDVnM1g1aHZmTGFtbnlYeS9hMDBiNG4wRzFmbzY0ekZnajZOaUdCeGFFMjlMNllUc2dkcWtuR08wdERHNnRzckp3dTQ5K2JRVWxQSUhwckRMbCtwdktjT094ZS9jejE1MXRNdDNHZ1U2Tjg0YmpsbTZGMXFmeENreGNuVWsyMFBQdzZveEVka1NNVDA5NWZ5VVJ4SHdia01pVm1vRHdsOG9NMmZtZTN4MjJiQjdad01RMTBTWFgxWDhkM1Q5Um54V3BmbXppenVUYnBPL0xITmdueElNSWFIa2FZUnoxQ2lFY0NUNitqU1dEdFB5b0VPbGR1eG0rWmtoOE45Z1hhN1krdk9uOWN3TXhaYjJPYnlkZzY0dUtwOWRSWFdjYks1OXFkTVo3d2J3cjRZNGxXcTlSUmVqeERMTEJ0c05kRGpRZlEzTmo4RHJIeEE3VnZITlhRNUxWZVlUL2hCcThydjFDSWNBdW92UGtxSDJDeHdyZHd1N0pMdU1NMndGMHM0MmFGWXlKVkJYNENVRXNEQkJRQUFBZ0lBSVNRYUUraFp4K3pSZ0VBQUNFQ0FBQXhBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNUzVqYkdGemM1VlJTMDhDTVJDZThnWlJGQitKOGVwQk5GcUpoZ3VFZzBRU3pXb2lFTzVsZDRDU3BjVzJxK0ZuZVRMeDRBL3dSeGxuVjAvR0dKMWtYbCtuWDc5SjM5NWZYZ0hnSEhaS2tJWnFIamJ6c01VZzE1Skt1amFEOUVGdHlDRFQwUUV5cUhoUzRXMDBINkVaaUZGSVNOWFR2Z2lId3NpNC93SXpiaW90Zy9LVlVtZzZvYkFXcVQzMnBPYUxVTGl4TnZNR0QzQ3V1ZlY1RCs4anRLNnJ6VjJrblhCU0s3dGZieklvOXVWRUNSY1pZcnoydEpud1J4eWR6YmdZU1Q1WUxyQ0hZelNvZkd4OU93d0UwZENBNVJNa0FjSmh3QytXRG0yOTBXd1RjYW12SStOalY4WmFkMzk2LzJRbUhnU3RlNm44VUZ1cEpqZm9wanJJdzNZWk1wQmxjUFNQVlJqcy9TS2VRZTNQWEhBS0tmcWsyQmc1S2FHY280cFRqcEhzNFRPd0p5cFNrS2VZUzhBMkZDaVdQd2VnQ0N2SjFYSXl0UXByU2E3QWVvSnVVQ3dsemdpTnJmQUJVRXNEQkJRQUFBZ0lBSVNRYUUrZDl1dUJMd1FBQUJrS0FBQXlBQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNamd1WTJ4aGMzT3RWbTFURzFVVWZpNGtMQWxMRzk2bHJiWldyQ0c4TEZMRUtvanlrbWgwU2VWRmFtMjFibll2eVRMTDNyQjdRK0d6MDMvaWpGK3JJNjIxTTA0LyswLzhFNDduYmlLeGtFN0oyQ1I3WDg0NTk3blBPWHZ1dWZuejc5Ly9BRENEblFRR2NTT0pJWHlRd0N3K1RGSXpwMkUraWJpU3hQRlJFcU5ZNk1MSCtFVERZaGVTV05Ld3JEUXJTcFBWa0ZPVFQxWHptWWE4NmovWDhFV1NjRTBOcXhvS0dtNHlkTWl5RzQ1TU1ZeVpyakFxbmlXM1JiQTdhemg4VnhpaGJhenp2U29QWlU0RWExVWhMZWtLUDV5alpmT3U3OG9GaHNsMEMrdEd0eGhpeThMaERPZE4xK2VGNm02UkI1dFcwU05Kcnlsc3k5dXlBbGZONjhLWW9zZWc1MzJmQjh1ZUZZYWNwcE5uMzNOaytnYlJqVnVWaW5mSThOcDZibTJGMng3dDdXVDN1Uy9YZVZnaEs5cEpwazBSbEl6N3ZIaDl4NmdFUWdwYmVJWXRBbTdzY2xrV1RtZ0VkV1BERktXNTBSWTR2R2hYWXRidWlaSnlxS1c5R2JxNHd0bXlQTnBNd3hwRkw5c1EzSEpsMlZTd21mL0F5Z05qV2ZneXNHdzVjdHFXSUx2bFlZVTdqWUNzdkJvSHI2WE5IV3ZmTWp6TEx4azNpenZjbGhTN1V5S0daUGJBNXBVSVQ4TTZRMkxETGZtV3JBYkU1YWZUQ3hTN2dKTTM3ajQvTUxhcnZoMHROWEwxMFh4cklYMFZ6aTRvTHpaRU5iQjV6bFhaTzl4cy9hUnloUTVBMXJjOUVicCthVFhpbzJGRHh5YSswakdNQ3pvdVlrdkhMWHl0NHphK1lWajYvL1IwWE1NN091N2dyb1p2ZFh5SGV3eVhHakd5aXE3aFdBUkNXUkFhbTlUcStCNUVOTlVJL1lZTWlLK09JbXdkRHU0eXROMVowc0dSMDdHTkhFTi9aTHRyeWJLeDVKYnl2dVFsSHVnb29jd3czc3I3MFBFVzNxWTFyWnp6NTZqV3NvVGg4a3ZTUklQTGtEN3JNV0hvYTJ4eG5LOE1vMmZtU1RVb09QR0NjcDY0WDZ0MjVsbHFVSVJwWkdXWmNrenlvRmFJR2k3K2k2WnFTMW9WM0I2VkVObGxNMS9JcnR6TGJtVUxteFFWODBVdlBtS2s4dGl5YlI2R0l6TlRkRGY4MkVxUmZ3bDBxMVcyaFFxV0tuR1o5eDErd0oyYWlzcGl1bDVycXRMMUROTU5sVy9ubnBkUW9HZ2h3MEE2MzdRd2RaSTJ3cVA4VGplM0NLdDB2N2c4VUxmWXllTkMrajVDS0FqL0JMZDRzTDJYZHhpMFBRb2VWNk5PTnd5cjNGa2tNb05tczZORVdBTk5BNElyZEs4UGdiSUxMSlZTSllUK1JyVFRjeEdYU1BvNmpSYlFSbDhnbVJrN0FzczhSdHZQTkd2REc5UjJrQTFZTnk3VGVMQm1SWWhYZ1dpazBCaDk2VWpXc2Y0aTdCajFEeksvZ3YyQzlySGZFRnQ5aXZqdHgrZ29UQkMrTmpIK0NKM3RUNUJvd3pNa242Q0xVYThmb1ZzcHpwMVVuS2ZmRVZLUkx0WlUxeFBwNGlkMHZVZm9tM2g0N01aVmRKSWJLZWlzQi8yc0Y4T3NEOU9zSHdVMmdCMDJpQi9ZVU9SaXBrYisyTVVIcWpTU2F6b09rY1lZb2ZWakQrT1lRSHRxa2R5ZUpJbHkrM285aEluTTJEUDBQOExBdzZZUjFOVVlpVHE4UVUrTUpGUFV2aHZaVHhPUTZtZndYcVNieGZ0NGswWVhLS3FEcUgzaUpCMGhqRkY4U1hRVC93QlFTd01FRkFBQUNBZ0FoSkJvVDdndUFNTVZIQUFBV1drQUFDOEFBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5NWpiR0Z6YzlWY0NZQWNSYm4rSzd2WjNwMU1RbGhJSUlBSlI4RE41dGkrcHpza2tleG1BeXNoZ1d3U1hCQ3dwNmRuTTJRenM4ek1oa1I5eXFtSWdDQWlJc29oQ0tqSW9aQVFBaUtvcU9DSm9uaUw5L1h1UzNudjZmdi82dXFlbm10M0pobGVlSVR0cXE3alA3LzY2Nitlbm5udXI0OS9EZ0IwOXFjWXRER1pMb3JFMUU2bXhlQldwdFBGb0l0Smw0VEVyRTc0aXNSc2lTMlBRWnlkSEdNcjJFcUpyWkxZRzJJd201MGlzZFV4NktheVB3YUhzMU5pME1VR0pMWkdZb014T0pLdGpjRVI3TlJPK0piRVRvdkJNVFJ1S0FienFYeGpESTZsOHZRWUhFL2x1aGdzcFBLTUdKekUxbmJDQ3hKYkg0TkZiRU9NbmNuT0lqazNkc0wzSlRZY2cyVnNVeWY4cUJOK0tySE5NVkJwMWhZYWNIWW52Q3l4TjhVZ3dVN3BoRjlJYkNRR3k2bjNuQzdzUFplR3ZGbGk1ODFnNTdNTFl2QUc5aGFxT1ROWWtybDBTVW5NazFnNkJtdlphQXdHMmRZdXJHV29kaUVOM0RZRFpyQXhDWjZuNXUxMHlkSWxSNVRHaWNGRk0xaWVGU1JXak1FbXRBU2JZRHNrZGpGeDNSbURzOW11R0hzcmV4dlYzazV0ZjBkVDNpR3hkOGJnZkRiYWhSZk82aEtxWFVxWHkraHlPVjJ5ZE1sSjdJb1lqSktKMjlpVk5QbGRFbnQzRExiUjVHMHNRNWRMNlhJWlhTNm5TMVppVjhVZzcwOTVEMTJ1cHN0NzZYSU5YYTd0Wk5kUitUNjZYRStYRytqeWZvbmQyTWsrSUxHYlluQUpHNVhZQjJOd0daVTN4K0FLc3MwNzJJYzYyUzBTKzNBTXJtSzNTdXdqTWJpYStqOGFnMnVvdkMwRzExRjVld3l1WjZPZDdBNkozUm1ERzJub3gySndFM1hkRllPYnFidzdCcmRRK1hFR1IyNWNlOVlhengzTFpMM1U0QTR2Vzl6b0ZjWnoyWUxISUQ2VXpYcjVnVEduVVBBS0RJNDZheUpYOURaNnJwZlpVVFdXeU5UcDZ1Z2ZXcjk2NHdpRDduVVhPanVjdmpFbk85bzNYTXhuc3FNbk01ZzVnS09LVHJhNHhSbWJ3TkV6MW01ZVAzREJxWU9ia0NEMkJuZG5iZDZ3YVpEQklmeCt6ZURBdXFIMWczekViTjR5dkxuL2pLRmcwS3hJRXgvak42enYzN2hoTGQ0UEI1TjRBNStEVFljSG5QbzNqd3h1WEwxbXpjYkJZV3crbFBRYUhCZ2Myaks0NW9MQkxZUHJOekZZc0M2WEgrMjcyRXRxRi9ZNXlVeGZ5aWs2eFYzalhxR1BhNDVLSGNhcFZzNGpXa0wwc0sxalJTYWJLYTVpc0t1bjJqb1JQdVA1WERIbjVzYjZ6cWJiYUkrYjN6VmV6UFVONUwwVU1zODRZNFdUZlVyYm5lTFd2djdNNkZDMjZJMTYrVHF0aTdZd2FCL0lwZEQwaDZ4REVLeWYySjcwOHB1YzVKaEhIc3U1enRnV0o1K2hlOUhZWHR5YVFUZ3NYcGZKOVkyUE9jVjBMci9kN0V0NTIzTjlCYmR2bzNmUmhGY29yczNsQ1M1T01ZUHVSWXNjNHVheXhiempGbGVuVW5tdmdQT25jL0VSVnZXMVJEUzRKYlVZeko5Y2JRYWRvMDdoekh6R1JTbm4xbGJYSDdNdXN6MVRaQkJiNDQzblBkY3BlaWtHOHpaT0lKM3QzcFpNSVlONnJzNW1BL0ZEWXR3M3BUbElyTkJLcjVWNml6djdVTXErQVdHelUwbXIzSTVNU3Zqck1MZTZnOEZKalJGZzhQYjlGUnFwYnNvNzJRSlNSTHVjNFdTZCtyaXFqN2J1WWhVTkJzZE55WWJCamhiTDNiQzlPMGE5SWc4a1BUM245aStxeGRMTjVUMkUvbllNa0FQTzJCZ0tPeTJEbUpwMmJqOENMajJSNVl3WkhGODNjcXdWWTNCbTEzQm1OT3NVSi9LSTRtc2JaTGdpcXN6RStCaFNIUFV3ZUJOTSt6WlJnN1ppTWorVm1iVG11Rlg0anhhUFYrVGJBSU03V3lhYWNZQ2luZHRmUGRJWE41YnlkemJ1dkZOUTRHQm9GUzRiYytyMGZQcWlJZlJyWjZaUW1QQlNxekdHdlBNQXFhNm9PMmE3Vjl5YVN4WDY4bUlualdLWWI3WGpSYTdrak1KRUVzT1pjTXZHU2VTcE5sT0RlcmROSk1jWTNOQnkwZ2V1ZkpldlBIZndtVDB0Vi94OUxTYlpBb1d6eWZ5R05PcUwyOUpKUFEycXNhcWhnWFdXSWNjWTU4b2hobndQd1NqUVA3SEx5NGViK2ZKbUdKU3ZVMHk5L1BCYWxqNGl6UTA5QjJTc1JUNnppV0ptckc5ZHBrQnAyVXlLdGFsU1pycW04UlJtWWIzOGxvempVUVBQWDFIczdzSFMzZG1aNHRaMXVWRUd2ZVdiVGJEUkxLd2VlM0w1QmltMFliRHlnSXlCdU5sQlhNZ1FtUDVXbTZZcm1JMGF6SWwwcjg3bm5WMWl6Tnp5YkJCdEtUTENGUlgwVmpTdUxmbi8zRnI4VnJUQ04wUjk1bkRSY2JlZDRZeHpZU1YyRHg1R0pYWXZnNXRhaTYrV0NYeGt2cUozN1ZqdVl0L1E2eG9SbWZQckd5eHVYWnNaSy9KZENBWExleVQ5RG05blgwQU5PWFdrK1FnRzJuNlFaZkQrRmtyVE11dGRYRitvTlY3YW1SZ3I5by9sM0cxbk9ua0hoU3hQQXhzWlh0K2FNVHpHNXYzaERQcWFKSXM1aFpkTmljbFBIaHdkV3VhRHVVR1dXQm5TMXpiQm9mN1RCdVJ3M29HR2pFbW9rd1kzSDd6WU1JVmtSMTFVMVYrS0R4ODRTQ3R5Q3BtZmV1M2plUW9OUklwUzlxQ3MwSFFDVWZNNVc0czJ3TnEwU2ZhRHU4L1ZsNHYydWJMZUVvNFA0czVTWDk3L0gxRzV2dnp0WXprSHo2NTNIYXdIalUwOUw3em5JRDZqYWtyUWovN2ZQd0ZzU3I0N0RzcERzNlpFN0VoNTQyTzVYUXl1cUxuQ1dtbTVoazdMRDc4R3hHaGkxZlBGL2U3R1pENHdwelprdlVkZUc1STBhOENyOTkvcFRjV1dobXk0NXpValRMTm12UGFBdk45NlN6NytXcEtuV1dQR0hOZjFDb1dGc2l3enVLQ25pZGxUZjg1UTQvSFl0SjB5WFJSa1BMalQ5Y1k1S1luZFZ4SkVJVUdDRzVWdTdtNkpWUDducG8ybnFmVGthRkc1K3laL3BEWnRwOHBnV1hNTVNwcHFVYlYxdXVsY1FWa1cvK0MyclljK0lvb041eWJ5cm9lcHFFY2ZKZGJRZmhuWk84NCt3VDRaWjU5aTl6TlkxTERoMkZIUG1ySWxtN0l1RzZxbVc3SmltT2dLUlRZU0ptTERrdE1wSTJsZ3Y0eDlobzZsNHY4NXNwS1VOY1ZXVEUxVEVyWnMwTHlVcGlBdG5LK3BORnV6NlpyVzBsNmpQRFRzb0Q3TDh2czB3NVE5V1hGeHRwWjBUZGRJdW9xaTBBaWNrU2hyMWJGVjAyMi9OYVhvaW10ckZtOUZ0bjVyT3FIWnRvdVM4MVlsTFZvZDJWVU1SZk5iMVFSeTlpVXdqU1QxeTVhbm93NXAzaTliS1grV1luaWFoOHJ6VmtXMy9GYk5UYWYxbE9IeVZsVkwrSzJXWlNYMHBLcjZyWlpxSkl4a1NYT2ltdFI5QzJzbS9hL0tscUlJS3psYXVaWElJb0VQck5BSEpMbWVKSW01bGRFTGxtNHBoa3EwWlBLSlh5SnQ1SThXOUdtN25wRkllelFIdFRNajQzR01yS0djS2xIQmRxWFVaeXNHOGpVVVc5QzA4YzdTT0dYMENkWUN5UldaUElRelpacVAxT1NRQnZGT2F5U3RJZnYvYlA1SFk0bXVRdElJS2hxM0xNN1dpS3NwdEVBcUd1ZUJCdkl0VUM0aFViYjFnTG9oQjFheFVTK2JlSlBWRlROZHgrcm8zQWF0YmhoYW1kWE5HbGJuYzBPcks1WmR4K3A2VFI0MTJpSnp0S29WYVZhMzFQU3N1ZitlVFZ1VGVGYng1SVk4cTZyR2ZudldMSG0ycm5kVjA0dDYxeXg1VjhVVldobDVLbXhzS1pxQjQwMWt6M0dCT0RSc3BJOHRuQnZkVTZoQzJZVDN1ZVhRdzRwQjFpVXJXdmpuNDRwMHJ5MlZGWkhLdHFKUzFaQkpGVEtwVlRJcFhBS1Z0eWdsYTF1OHhuWG5mYWJPN2NyL0MvR29wdlFvWHhycCs0RnF3UmpQTEJzakUrZkFKejV1TFEwamkwNHp5cmhvMkpEZ05EQ09SbW5ZUHI0NEptVGZ5dVEvWFE2UXhIMXFDdzFvNThCK3pWWjkvYUlyQVAraHJKYXVjZXEyU2pLUlhkQUxlR2NiQnUwb2xwMkt4Z1B1dGNrd29obnBxYjFSZ1E4bHNMc1pTajJKM1JHcFU5cGRjOVFEdDd1ckgwUzdPeW0zaHQxMU9ZVlhWN2ZLVjgra0t5ZVk0d1UwMURUZEczcVVSbVhzUTNsVWpDRDE2VmI3RlhYaU1UVFUxcmNTMVpDSGdqV2RxSktYYmRTZWFqVFhYNGwrRHBGSVRZRWQzZWRBRXBVNEJQeDBvb3VTcXp6K0loekp6eXBaaC9ZVVE3ZE0xSVZIQXJIUHlqTFB0bEFsSGgxSU9sa24vNUlQVVVKQ09QclhNdWlPaHFGdmFHZlhEWlVpS1hvTjV4QW45S1lxb3JPaEtqeDNvWWhOZnRUVEpzK0xLQVBDc1laT2lNRlM5VmNBK1Y3TU1uMHMyM3dseUxLUEY2cXB0QmNrVVVlZW1mQmVzVjc4M1pJd1N6Umt4S3VsK3A3aSt3V25GdXdvMWRaRWZjeGE5aFMyOUxsek85cTZqU3VXa0VsMDBtbWNxWEdMS1NFMkc4R0ROamtlMEhmOGoyajQzbENTQWhtRzVVeUJqRXBOT0svZ0RyVlJ5REpjSTRYdm5RRTZWTzYvQUIxYVhYVFFpdEFpNkRBNE9nelpuMjlFMElGckJuY2tYd09sQWgyWUZKZWh3NlFNZTBwMDBLd0RSWWVKNGJSWmRGaTFiRXF4SUVDSXJhZ2lSK0hXSkgveXVwMndiWnRiZ2REQzkxNmhKUitoaTVWdlJ2a0dPUmRGUGZKOUpPN1Z3cGJXV0t5aEdNMGpUSUFrMDVscWY4THR0cGJlcFZWaENQa0ZVc3hVUmY0UlJGU1hXNGJ3VUF1dlpCWHVjejhya1NuQ1dBbmlhQms4SXlia0pQaGM2dlV6VDBzVzBkNm5odlFzeXBESkkxYlNTcERjdEVkWlRtbFAwVFN5TGJYNDQyelQ1NG5abzBsSTliMkluTWlTdW0zajhjL3lJd042VWJZVFNnTGxRYlR6MkVsUjBPQklOMnlOcEtUZHh5YTdKa3dlMGYxbzZXT2ZveEIzR2xQMzg5b2duK0s3alJaRVpaN05pM3lkY3VWd255ZGI4SHhmVnYxenN1Rm5acXFmUDNNYVl1MXlYVlhGRGRjdEw0WEZyUkRQdEJEOEV6ZGFSR0JWS2VHMjFqbmQzd2VyVCs5K3U4Q1dvQ25YV0VWVldLb1RZZjB6VGRrcGswSUcxeCtQNVB4ZTgzT2FCdmZFOGxYcTg0bmF1eVE1WHdWcW9EMTVqYlNwekFzaTZ5UGhad1krM3Z5OGk3SWQ3bEdEWTZ4R1JrRXIxbFlTYWQzUVpDOWhJaDRTc3FLbUZBVkZSTVE1eVVUQ3dKT3ZvZWs0UmttNGFVeWU4VVNrcVM2aU9LV24zSlN1SmUyRWJFZnlFWk9IWjh6MS9KcU9tSlNuaUJ2NmZzWU55MDFPR1RkcTdrRjE0NGFWMXZjamJpUnF4ZzJMeHczY3c0SzZqMGFjbDRqRUJ6T01EM1pWZkxERCtHQUl6aHF1ZTVWaUFISXhSWFN3TURwUVZLQU0zdVJSSW9IWmtDRk9vU2hKVlZ3Z2o3VTJMdGowSkdtcXVHQ0o5VXlaeFpSeFFRdXlQNktITnZIamc4YjFDZUtEVmljKzZHS0ZWOGVIU0xTcDhxSk5YcXpHWVNtVEpiL1MzbXFiVmRhZ25GTUpKTFVFWW1WRjNPdG9lVCtEVUswVXJWT3VCZDJSUlJ3L0t2am5MUDlKbDRYT1JDMVV2bjdvMlk5cVdid0ZWemM5Y0RHU2ptTFpta1pCTnVtbFBkeEFUQzNoR0k2bTZ4NWFEamNwazRKL1duWU1UL2RjV3pNVHRwcHdMVnZ4dkdRNmdYaHk4Yy9EdjVUL2gzeFVPaGtGaUNEVTJoeDlsSFBUWDlsVEU4ZldKbmxxNGlTU0RUMDFjVng1djUrYUdQV2ZtWVN4eDZnNnJTRnVPRjVrdTBhV28vblBQNTIwMlhRMm9rd2FWWkxLVlBtTkhtQ3Y3aWtLOFVTUmhTTkxFekdEQW9TTHExMURqQVZ4M3JEb0tJODhUYkhHdVIrTjZ2VmRiOCthSFAyMTlpek9VeUNleTZMd3JKMVE2Ni81UklCd204Y2ppZ3FVT2ZGVkVVUWcxYyt4RW1sWFQ2Q1hrcDVsSm1RVGMveVU2OHFtYXFhVHV1VmhrRWthV3RKTnVla1VIcmpOWkVvMjB5azlpYnVTN1ZncFpKbE00U3F4UzM4YzFXTDNLTWUydjJQVlJMY3JxNU9nTytrNURhSGJWZE90ZjlycktBTGJXa1UyTHZPemhsOVhJM1c5eHVjYzJHT0wwMHNRUHkwK0luck9FazlmNlhTaTF6cmZsSjY1OEZNWDZZOW5xdkFVNVRyOGlTanA3ZU9FbnJBZ0I1NjVVbjlLRFNUd3BTUDhFbzZWb0RmaFB5WGdZNEo5aHJmalhrZzdzVkU2ajBWT1dEZ21tUkFZcC9HZWZ5S211cWY2N1hidzVBYjNJSnBMejZLUWI4QWhlRnF1K0xzRTk3bnJXWWFaOWh6Vk5FdzE0ZUEvRmM5L0tKNnRwL1cwSnFzSk9hR2tVZzRlUEhUYjBiMTB5bE13WlVnYW5wMUtZd0tmeEVtWWFKbHBoVExVdElyeDJFUVNadExVRTVxWk5sMVQwelV5TWJwSTF0UTRQTWcrVFpjSDZQSWdYUjVpY094VUgxWXlPS2JlRUhvTG5jR2lldDJsYnhyMTd5cDZCY1VrbGc5TDdETng5bG4yQ0lPanl5Y1N0WTI0NytTOUxIMkhjRW5qYjE0cEdsRit0TGs1ZW5QRERXS3htOEh4VTMvUzNCeGhicFU5ZEhtc3VZbUo1b1pielEyM214cXV5czBOVjVvYnJqYUVzczJaYkJGWEk1bHlyOFFlajdOOTdJazRlNUo5cnN4cjViTTNGOU9XLzJJV1RYdXFPYkUwQm9mWGVoOGh6ajdQbm02T1ZITm9WQTBHc3l2ZkxJdkRwK0IrK296N0dRYUgxWGluVldMM3hOa1gyQmRKMFMvRjJiUHN5eEs3Tjg2K3dyNGFaOCt4NXhuME5QcVpQb1ArQTM5Wm5jUllHbWRmWTErUHMyK3dSWEgyVGZMV3Q5aTM0K3dGOW53Y25nTzh2QWhQeE9FSGNHZWNmWWQ5Tnc1NzRER0p2UmhuMzROWG1yT1hLYkh2eDlsTDdBY01sS1pmYm8yekg3SWZrYmcvbHRoUDR1eW43R2R4OW5QMmNoeitBcS9FNGROd1A0TTFyWGpaT2M1K1FTYjRKYW9MMzBYdDJhL2crZWJVVE1TWlJESTlRREkxNTZNNlAwUFFESGNyem1ZUjl3ZmhJYm9RME9CcHVueVpBY1RacjlsdjZQSmJ1dnlPTHI5bjhMcEpYMHBoTUNPQ0hnYUxtNGhmVFkxV214ck5kNXMvTUpoWjVzcW1TT2hFNG85TlRUR2FHbTAyTlRyUjFHakw5MHVBbUtibU5yZXRLTTF0SzBwejI0cUNicDlUTStZeG1GWCtnaGFEN2xMRFVKRTJuRncrQ0xQSWNXaEQrTklXZ3RyYnlhbHdESWV2bUplQzU2NmVnL2N1MW54dnArZE8rSG5LR1JOanhjejRtTWZIYlBTS0Uza1VYcTh2M0dTdnI3MjMxcHZPQiswM05hNThkYVZwK0xjTHJtdWRISzM1K1llclhuV0JHcmJOZFBvSmd5MUJIbE5LVlFvTU91aEhRbWpSbmRoemJrUzZEY2tMUGJmbWQ0dVhOZk1pSkRFMTZ0cWhSTGJ5bnVhZDJlTDNRSkhrOFQwUlJtNHU2MDdrOFFSVTdLTVZ5ci9jU0lQbTlkVDM2WnpTOUlIYzJKam5pdDlONmZLMmp4ZDNpZWpWVThOcXg0aFlVRHE1UkJ6S2RXMGdFa3grSEFvR2loZUM1OVF3TzdkQmxTVEQyRlVSbVp3RzVJbVE1eitkMUt5QTJkYUY1c2ErRmQ5ZXlMelY0Kyt4RHVGTnp4Qlpvek1UYmpCenkvd1diRHc0VDlycUZOYmpQc09ubm9OVHMvem04R0I4ZE1INHY2SEN0eDU1a3A4S3FQTWVidHNZVFR3TUthelBaWWV5S1hSVkt2aTZmUnUya2xlSGFuS2wzeXNSUHl6VjVxUlNGZTRQVmpNS2YyUzllSVA3c01kM3J0SzMwK2JVL0o0V2N0anVqTk5QSVpSL2p5djQ5WmN5eU5iN0RuRTN5anRRK1V0SjVSWU5mem1yOENwL0g2MzJPam1xSEp3Y2tvTlpOOGQvZ3FqRDR6VUcybFFncnFuUkxIU1J2K28yNWNZekxwNXBhaTNXaHI4YUdINVJmVFphdFFJMm5ZV0o4Zkd4REFrdDhXL1Uwcys2elBhL2lCUjlqTEszcDJvOXY3cDdkaU9iWTRQZmZYaGlQMlUva0cyMWhlSS8xVUxUTjVHanRGQ0RaMXJyZ0lPanhJa041Q244UitSNnpsbTBCWTZETnJnVjhLd05SOEVkY0NjdytCamVUWU4ybUFkM1JlNWplSDkzNVA1b3ZQOTQ1TDRINysrSjNDL0YrM3NqOXpMZTN4ZTVWL0QrRTVGN0UrOC9HYm0zOGY1VGNEL1c1OUhqRWw0K3dNc1RVTFlINFNHVSsyRzh5NElFSFZqTzZ1MXVYN3hrNmJ6MmVkUDN3UFNIT1kzUDREV0dKY0RwTUJQV3dXZXh0c29mRFkvQW93Qzh0cHR6cGRvZWVJeVBuZ1Y3NFhHa1Q3Vjk4QVR5bzlxVFdKc09uK096bnNLL0RwejFlU3hKbXFleFRqeVQyRHFkckJsSXN3YzZLbVhaQURQZ1RDNkw3bzhOWlltSHNzUkRXZUtoTEhGNEJyNkEzSWpmRnlmVFhxcmt1QW0xMzl5RTlsK0NaNXZTL3N2MXRlK3NsT1ZOcVAxSUU5b0hzZ1RhTS9nS2ZCWDdpTzd0U0pQNk51K0RycEh1V1B1VE1HT2tiUi9FUnhidmdabkRqOEdzamlmaEVHcVpQZEs3Qnc0ZEhtbmZCOTFVUFd4NFpQbytPSnlxYzJqY0hwaDd4ajQ0WW1RZkhEblN1MlFQek5zRFJ6MFVDdDdOVGZCbW1BUG53VW80SDliQUJWeUJZMzNtb1FLYjZma2pDcmdHRG9XdndkZHg5amM0alc5aTI3ZENvUjhWUW0valFoOWRMWFNuRVBvWUV1OTFYT2o1VkYzQWhUNldxc2NOajNUc2crT3Blc0x3aUxRUEZsTDF4SEpWVHVLcXZMNkdLdHRSbFN3TVF3N09nZkdJS3R0Q1ZiWUpWYzZwVU9YYjJQWUNmRWVvY2l0MGNSK3U1S3IwZEpTclFvTEhSNWJ3S2dxK2FHVHBIdWdsRVI4RDdKKzd2TDEzWHZ0dVdGSXAzQ1d3R0M2RFpYQWxob1IzUllDeU1oUnVwUkNPYXQvRjJqUmVleEVCMm9aekpDNXd1eEQ0ZXpqdSsvQ1NFUGhoRkpnV3dCQVhlS25VaU1CazZXVWpoT1craVBEVGUrZE5yeUg4MVpDQWEyQTVYQS85Y0VOa3hRMkZ3ZytGd2crRndnOEo0YW4yQTF3RDdUamJWMk82VU9PSE9PTkg4T09hZHBkcjJIMFJxZEhMMVZoR2F2Uk5iZmViME80M285MC9qRGE4ZFVxN2s4QyszVW5nYXJ2L0JNZjlGSDRtQk40bUZ2OWlMckRTaGdLalBPMEM2Q3FCVnhQZ1hkZTd1RnZmRFVhbGVMVFc3NEJqa05rSnVFT1FlSE45a2tLOEU2Q1RDOENFQUQvSDJzdDFCREFyQkVpUUFOWVVBdHlESk81RkFlNURWcDlvVUlCZjFCSEFyaEJnT1Fsd2NrU0FGVFVFK0RTU2VBQUZlQkJaUGRTQUFML0UycS9nMTc0QTdBSjBrb1R0OS9WK0JsWXUzZzJyTUVxOFlXVEpYamlGWWJSZHZSNXIvWGdXYXAvWHZoY0dHTndDbDFCdERRWDV3ZVVJbzdVamUrRFU1UjN6T2dqM3B6MEtRMzd0alcxNzRmUnBPR2pHWGxoSGc4L0EveCtGOWFLM3ZhSlhmeFEyaUs3cEZWMHJIb1V6bDg3cjJBMW5uWDN2Mzk2KzlDRyt0NUQyeTNESEFOU3hDN1U4QXZjSUErVmRoZnZEYWJnenBuRnZ2QlIzcVk4Z0hPL0NQZW9lM0tHQ1ZiY0tQUGdOL0JackJrYTczOEVmT0p6dkMrRjhIL3dSL29RMjZrSnMvVDM4QTlycENGeXovd2ovaEpiNloyRmR2Kzlmd3I1L3hiNS93NzVEWWRwZllZRUUveTdCZjBqd242OWdwUEtOL21jaytCZDRSWGo5amFnQ3VXaHU3eU93Y2ZGZUdKNkdzbTRpWjIvZURWdEtEdTdncStxWmlGUG5obUxPaGYrQy93NmQraitjL2w4Ri9SeXFSTkJZc0EvT0hsbThwSGMzdkdrUGpLeGZpaTUrRE03WkRlZWUzYnQwTjd5NXhHZ1dqekxmeHZJRnpLZSt3eG4yK2lSQ2hndmdieWdOQ2JTQU1VWXpaNkcrSkVTYkx3U2JCb3kxaGNpNlF5RHJaVVRXZVkwZ2EyODVzczVIWkYwUVFkWmIvSnBUaVN3RVNISlMwTGwxUU9mM3B1cmdEaUhwaWE2T2FvN3BFSklERVVpYW1GQUI3aXRkdUxNY2dSSFF3QUM5Q2dQMGFSaWlYWXg5bDJMc3V4M1gvdU1ZQlY3RU1QUmpIZ2wrR1lIbWJmQWIxczZoZVc4SXpaZERGN3djUXZPbEVKclBWVUh6cFJDYTJNZW0xNFBtVThKckNETDZwRzh5YUk0U05MZldnT1p2cDRZbTYrVDBwNGJtZVJGb1ppcWgrV2NzLzRMUWZHVS9vZG1GUXNSQ2FGNHFvUGtzUXZQQ1JxQjVXemswdHlFMHh5TFEzRjRmbXRsSm9abWJGSnJqOWFGNVVZaS84eVA0VXpFZEJqUjFGL3dOamtBN0dHaU1WYmdzVDhObDZTS3VMa1UwM0k0T2Z4d2Q4alE2NW90b2x4TDJMa2ZzemVEWXV5YkUzck9oalo4TnNmZGtpTDBIcTdEM1pJZzk3R1B4ZXRpN1c3aGxKcnBsMXVUWXl4UDJDdFhZdzdsVFkrOFFUbjlxN0YwWXdWNnhBbnZzZFRDTHpZZDViTUYrWW04MmRMRkRXYmM0bXIwRmtVZVduYlVQMmtaNnhYRm9vbEs1aFpGTXl6K01BUVNITWY5WVJzYy8vMWkyVHlTSi9tR3N2Y1poalBnZk5obi9IWlg4RjAzSm53NWd6ZkEvWEJ3R04yRXJXVEFlOE44REYxZHlYeHF4ZER6a0hnKzV4MFB0L2VOZkcrY3dwejZIblpVY2xDazVCUHFWT014bFJ3Z2duWTVVU09PWjNXMUl2N3U5ZTlkajhOWktGa2JrQkRXVEV3WmVJOUVacnhGaGNZSmlSM0lHOHlaaDhMWktCbllkQmlSNU5ZT2pPSU9qVVdOaXNBVlJ3QS93bk1GU244UGJLem1zaWxocFZzaGhWcWlDNy90cG9lL2JoTzk5anNkVVlHQXVycVJKdVA5ZEpmZUJPdHdEL1NiblBqL0tmWFluVzhDT0ZjWmRqaVhONnVqRjBEK3Rja3ZyallTVkRuYWNXT1VkN0hoS29ka0pRTEdXc1lWSThjU1dVenlKdlY1Z2VCQzFJYjlLYUovZHdHcVQ5RjB2aFNRbEpIay83NWRZRHk3aGFVaXl0L1VrRjdlWUpIU3lKYmprZlpLL3drMkUvbnRrSDd4anBQdWR3Wk9hUzNESHZaUWZZUy9EMnVYOEJIc0YxcTcwRDBmditpd2RlbkhDdTRPbkpGZU5ZRmg3RDU5eE5ZNTdMNTl4RGRhdTVTZjM2N0QyUHY2STVIcXMzUkJTT1k5VGViOGtxTnhJVkQ3QXFkeUU0ejdJcWR5TXRROXhLcmRnN2NQaDNBdEpmc2IxbjgvVGk1WFFnOXVxQXF2eG5ORVBGNk81UGdscjBTYURDTTlsSEtSOThGR2NNZzF0dEEydDlCSFUvWHdzYjhOeUxaYTNZNWtILzc5UlVXNFM1WEpSSmtTcGl2SWtVUzRVNWZHaVBGYVU4MFY1akNpUEZPWGhvdXdXNVd4UjNzS3ZuWEN6S0c4UzVZMml2RjZVMTRueUdsRmVMY3FyUkhtRktDOFQ1U1dpSElSYjRmZlE5YjlRU3dNRUZBQUFDQWdBZzVCb1R6VWczZlhhQUFBQTBRRUFBQkVBQUFCVGFXMXdiR1ZUZEc5eVlXZGxMbk52YkcyUHpZN0NNQXlFNzNrS0gwRkNDQTU3UXB5V042akVFU2trM3E2bE5La1NoeCt0ZVBjMUtTMHRjTFRIbnZtbWpicHVOS1RneUJKZjRiQmFmaTNYRzZXVUNaNmpOZ3dWTmEzRGlvT2NJdndwZ0V5ZW9jMUhSd2FTN05IdU5HdDVBc0FUaWxZTnkrOWY3V3Uwcy9KQzN1SUZMUVJuOTlwbFhNQms3ZkZjMXZQaUpQbUpZelppMVg4VGszYmRTUjkveDRFUkJHd25keHVSYjNlM24rd05VL0NRa0R1N0lXMXFWYlFlVU56Ry9kNmllbzhDTE9VYit0VDlXWGZVOEpXckZxNEI1VVI0aG9pY28wL1E0Y29rci9NSFphZTl3SW5oVGYwRFVFc0RCQlFBQUFnSUFJT1FhRThTa3hyNG9nTUFBR29RQUFBWUFBQUFVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk11YzI5czdWZE5iOXN3REwzblZ3ZzlKVzJXdElmdFVtUkF0NkZBRDBYWERqME4yMkJiZENiTXNWeFp6aG9NL2UrakpNdVMvQkduV0xmVGZHbGpVUlQ1K0I0cEZ5SmFieUpTOG94UkpuZms2K25pOWVMc2ZES1pKRHlYSWtva3VZT0hDa3A1eWNWdHhXVWtHYzlMOG1zeUlmZ3NqOGtyL3lGM2w3ZmttbFBJV3UrUGwyWUQ1TlZHR1gxQ1J4VzZ1WU1FMkJib25IeUFKR081K2s4ZEF4OEYzeklLOU1uc0s2V28rbVBCVUVqOXhEc0o1ZGtid3VnNVdTN0pmUWxwbFpHVUMxSUlLQ0ZQZ0d4QnNKUWxlbWV6cjJLNUpLd3NLNkFYOHJ4NWpXZXlmRTJxT0hQdlhPaWwvbU5XNmlCaEMrZ0lUV3hXVXhmUlBEeGw3bm1mS2JoNzBkUklqT09welN5aU4ya0tvb0V6aE0vNCs2ZUErYkg1a1BuSGkvVGhpcnJYRWFWNE9wcFhSWkV4RUQwWWE2OE55bllEeXlrOEFtMDJ6c01UM004SHRmMXFwQ1pCUlMwN1grcXM0Wm9yQlNtOFlLRGkyazJCSWJLRTVMRzRTWEVEWW1xY0xjbDFWSlJFZmdlc0taRmMvNGNHZW5VVEZRV20xNUJ5OWJaUFR6T1ZRRGxDeVdjRnFMZnNEMUdETkJTazNqOHpOc09CS2R5U0tDYzh6M1lrQml4TXZHRlNZb25pSFlsSVhPMUFERVJzYTFvSXRsVjVhZHM2WG15RFJqeGNUR2MyTFU5QjJ1MktiTXIxQWdWRFcyeE5xenpSVFdvTjhwMHl2VEJIT1ZkYkJqK0pBRmtKN0txV1hUUHZCTE5tWS9KOGJ6aEZaZUxwS21QdGZCcnVlNmlZZ0ttTGpLeFd4czNNYWUxYjQzSVkxWXl2TWRCKzZQd0UwZFpyZUFNWjl2ZVFlYnVIYkdERHhVNHAwUzIxZTY5ZThGUFczUHFoU2kvQU1wL0FJeXRsMllGRmtmd3pvMThXU0VMRUJlT3RDNjRlR3hZVzF0bDEyaDBHNXhzRWJjOUU2Qy8zeklzR1BNUFZFTCtoNXVTUWFSQnVDT0JnampuUFJxRmhwYWNTclJ1T0xYOE1xdFBIVXgrcllGVk5rcDRWQjJjWFJSOC9OQWhRYklHSHl3MEhGcmI3ZTZFMDdmRGt4UGtBekMrWXlRcGFoMm85ZjEzT1dtMm9lQmhSaG1tRWgycERXLzlWZFhRSHJWc0xSOVBnb0IwWGxPN0JRNUl5RGZvUVVmbVdBN0x5VFBxRjVSbTA3eFU2emRDa2RjV3dHYmY4OUYwNFdpSnRGN0l6OXc5VzdmTzB1cStONlpNdDZQcUhqL3RBRVE4VWY2ZW9MZm1qOS9jQzFOUjBycU1jNzBVNE1QRVFPVWkybnFHcEhuY2VHaGl3TzRLZCsyUmYxQmZlR243cnZoWGpmVUZ0akFrWEdFakJjNm9LWXk5SE5XOGFNSHM2VHZCZDBtNDc1cExUYVR6aFJkVmRGdXRvbjkyTEFrWlNjeWx0ejQxOWhQelB2ajlqMzlGUlNMNzZ1K0JGNk1kU011MmpZTi9VOHl0MkFIWHQ1NHZMOU9rdy92cWZQbnZaTzBMY3A4bHZVRXNEQkJRQUFBZ0lBSDJRYUUrS2VlazZvd0lBQUV3SkFBQkRBQUFBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2WkdWdGJ5MWhjSEF0YzIxaGNuUXRZMjl1ZEhKaFkzUXZjRzl0TG5odGJLMVdXMC9iTUJSKzc2K29xajBoeFM2M0NTRVRYaGdTRW15VFlOTmVqWE1hM01VWDJVNExtdmJmNTlocG1yUkpLTkw2MW5PK2MvK09UOGoxcXlpbUt6Q1dLM2sxTzBiejJSUWtVeG1YK2RYc3g5TnRjakc3VGlkRUc3VUU1cVllTGUzVjdNVTVmWW14b0N1UWlHcktYZ0FwaytQdjN4N3dHWnA3TDVQcDVoZE1MbDh0Yjh6VzZ6VmFud2FEay9uOEdQOTZ1SC8wSGdSTnVMU09TZ1p0YzhzdmJkRGVLMFpkU1BQZDhOTWh4S3ZOb2pBSk9PVC96OUlRakFpVlFmRXpkaUlOV29JN3NrbkU1VWFWK2k1TG1SS0lDbG80aFhSQjNVSVo4Wm5nalRaaXFYRjhRWm56Z2d5RVNxaldpUlZlbWpBbG5mRWFnbHVZYUZSUEl6MUdKd1N2dXNIOUhEUjRBN0JwMHlJU3EvVDVhRjZBUVZhVmhvRTN2eUM0WHpWbzZxakp3ZldhMXFxWUJtN25FVVVaYUpDWjUwNDN0MGI4dGhWMjJ1aW5ndGJ3ZkxyYzZWMERiUFdIS1FQN0RXdVFxMlo0NStpODFib0dnSGV6YVVsYXBUeVh2R2o1SnJvb2M4L01uV2hSMmhYdVZWWlRML2F5OWpOUTZHNnhrYVpMYXBKb04xeDRwL2hUZEZJeGQ2LzRCdWladCtCNWFjSXU3ZXZyTk5nTFgwRy9OaUt5N0tGSzhBWXNNMXc3WlZKbnltbzYrNHBoTDRKS3ZnRHJoaUdiWURld29HWGg3b1F1UUlCMElmc3Zmb2VxdVRXUlIxR0h4bmpVd1BpQ3M5RVF2YURoUXZIN2xUYk5PQ3pmYm8zSkRYV1Fmdm9UaVJZSWpCd1gzaHNWK2kvQmZlZ0RzaDFOcFNMa0FFMElIbUdaZnoxNlZ1ZXdmUnA3S1FLNHRTTUJtOFExK3RBS25mMlBGZktMLzV2bThKVUtTSG5yUktEcUVDRExmQmRhaUg0ZjhibjJtK1M0akxHc1lYNDRYT0lsWFZGTThENWl5RlBCTSs3ZUhnUCsxci9vWTJ6TnVQSEhYcG0zYlR3RE1aUi92YmJhWVE5Y3NxTE0zaVZ4RFV1UGp2Q1JQMDRGd1J2SkNEbkhmVmM5T2FEV0R6SjBJN0didTFIZmlFazRoZFduVVRyNUIxQkxBd1FVQUFBSUNBQ0VrR2hQajBCSHNrZ0FBQUJNQUFBQVNnQUFBRTFGVkVFdFNVNUdMMjFoZG1WdUwyTnZiUzVoYldGc2RHOHVjR3hoZEdadmNtMDJMMlJsYlc4dFlYQndMWE50WVhKMExXTnZiblJ5WVdOMEwzQnZiUzV3Y205d1pYSjBhV1Z6RGNuQkRZQWdEQVhRTzd0QW9nZHZET0FZUHdVTUNhVk5xYzR2Ny9wZzNodkk3NUpMWllsUWpZdGhIa21tMjU3d21MeTZuNFFUR01NbDZZQTNNYjdDVjIxMW1mbElaL2dCVUVzQkFoUURGQUFBQ0FnQWhKQm9UMUN4SFgyaEFBQUFFd0VBQUJRQUFBQUFBQUFBQUFBQUFLU0JBQUFBQUUxRlZFRXRTVTVHTDAxQlRrbEdSVk5VTGsxR1VFc0JBaFFEQ2dBQUNBQUFoSkJvVHdBQUFBQUFBQUFBQUFBQUFBa0FBQUFBQUFBQUFBQVFBTzFCMHdBQUFFMUZWRUV0U1U1R0wxQkxBUUlVQXdvQUFBZ0FBSVNRYUU4QUFBQUFBQUFBQUFBQUFBQURBQUFBQUFBQUFBQUFFQUR0UWZvQUFBQnBieTlRU3dFQ0ZBTUtBQUFJQUFDRWtHaFBBQUFBQUFBQUFBQUFBQUFBRFFBQUFBQUFBQUFBQUJBQTdVRWJBUUFBYVc4dmNHeGhkR1p2Y20wMkwxQkxBUUlVQXdvQUFBZ0FBSVNRYUU4QUFBQUFBQUFBQUFBQUFBQVNBQUFBQUFBQUFBQUFFQUR0UVVZQkFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OVFTd0VDRkFNS0FBQUlBQUNFa0doUEFBQUFBQUFBQUFBQUFBQUFGUUFBQUFBQUFBQUFBQkFBN1VGMkFRQUFhVzh2Y0d4aGRHWnZjbTAyTDJSbGJXOHZjMk12VUVzQkFoUURDZ0FBQ0FBQWhKQm9Ud0FBQUFBQUFBQUFBQUFBQUE4QUFBQUFBQUFBQUFBUUFPMUJxUUVBQUUxRlZFRXRTVTVHTDIxaGRtVnVMMUJMQVFJVUF3b0FBQWdBQUlTUWFFOEFBQUFBQUFBQUFBQUFBQUFrQUFBQUFBQUFBQUFBRUFEdFFkWUJBQUJOUlZSQkxVbE9SaTl0WVhabGJpOWpiMjB1WVcxaGJIUnZMbkJzWVhSbWIzSnROaTlRU3dFQ0ZBTUtBQUFJQUFDRWtHaFBBQUFBQUFBQUFBQUFBQUFBUEFBQUFBQUFBQUFBQUJBQTdVRVlBZ0FBVFVWVVFTMUpUa1l2YldGMlpXNHZZMjl0TG1GdFlXeDBieTV3YkdGMFptOXliVFl2WkdWdGJ5MWhjSEF0YzIxaGNuUXRZMjl1ZEhKaFkzUXZVRXNCQWhRREZBQUFDQWdBaEpCb1Q5anpwOENpQVFBQTZBSUFBRElBQUFBQUFBQUFBQUFBQUtTQmNnSUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpESTBMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FoSkJvVDgvQ29FMmdBUUFBNVFJQUFESUFBQUFBQUFBQUFBQUFBS1NCWkFRQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRFNUxtTnNZWE56VUVzQkFoUURGQUFBQ0FnQWhKQm9UOG93ODc0R0JBQUF3QWtBQURJQUFBQUFBQUFBQUFBQUFLU0JWQVlBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREkyTG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBaEpCb1Q0QzgyRm94RGdBQW5UTUFBQ2dBQUFBQUFBQUFBQUFBQUtTQnFnb0FBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFOcGJYQnNaVk4wYjNKaFoyVXVZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQ0VrR2hQc2w4YmRWY0RBQUFZQ0FBQU1nQUFBQUFBQUFBQUFBQUFwSUVoR1FBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTWpJdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FDRWtHaFBsZ0FCWWI4UUFBQVRMUUFBSHdBQUFBQUFBQUFBQUFBQXBJSElIQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlZHVnpkQzVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUU4Yy9zN2NvQUVBQU9jQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ2NRdEFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReU1DNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRTlvd1krYmtBRUFBSndDQUFCSUFBQUFBQUFBQUFBQUFBQ2tnYlF2QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVJTUmxGRVpXTnNhVzVsWkVWMlpXNTBVbVZ6Y0c5dWMyVXVZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQ0VrR2hQM2QyelVWRUJBQUFzQWdBQU1RQUFBQUFBQUFBQUFBQUFwSUdxTVFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rT1M1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUlTUWFFK1dVaXdaVGdRQUFGUUtBQUF5QUFBQUFBQUFBQUFBQUFDa2dVb3pBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXlOeTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUUrdzRKRHhtd0VBQU9BQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ2VnM0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE9DNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRTk0cjZLWG5BRUFBT0lDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnZE01QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF5TlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUlTUWFFOU8xN0xkbFFFQUFMQUNBQUJLQUFBQUFBQUFBQUFBQUFDa2diODdBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UlJkVzkwWlZKbFkyVnBkbVZrUlhabGJuUlNaWE53YjI1elpTNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRThUOUp2R1lRRUFBRllDQUFCSEFBQUFBQUFBQUFBQUFBQ2tnYnc5QUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVRhVzF3YkdWVGRHOXlZV2RsSkZOMGIzSmxaRVJoZEdGRGFHRnVaMlZrUlhabGJuUlNaWE53YjI1elpTNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRS9FZ3VmZ1FnRUFBQm9DQUFBeEFBQUFBQUFBQUFBQUFBQ2tnWUkvQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVE0TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBaEpCb1Q1cExqY21aQVFBQTNRSUFBRElBQUFBQUFBQUFBQUFBQUtTQkUwRUFBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpESXhMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FoSkJvVDhXU3pqbWpBUUFBNWdJQUFESUFBQUFBQUFBQUFBQUFBS1NCL0VJQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRJekxtTnNZWE56VUVzQkFoUURGQUFBQ0FnQWhKQm9UMk5TTzVWUkFRQUFHZ0lBQUNvQUFBQUFBQUFBQUFBQUFLU0I3MFFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxTnBiWEJzWlZOMGIzSmhaMlVrTWk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUlTUWFFOW9NaUduU0FFQUFDTUNBQUF5QUFBQUFBQUFBQUFBQUFDa2dZaEdBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhNaTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUUvbmZBWmNSZ0VBQUNFQ0FBQXhBQUFBQUFBQUFBQUFBQUNrZ1NCSUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lRMkxtTnNZWE56VUVzQkFoUURGQUFBQ0FnQWhKQm9UM0l0emYxSEFRQUFJd0lBQURJQUFBQUFBQUFBQUFBQUFLU0J0VWtBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpKREV3TG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBaEpCb1R4Q2Z6TTlSQVFBQUxBSUFBREVBQUFBQUFBQUFBQUFBQUtTQlRFc0FBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpEUXVZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQ0VrR2hQYW14THF6UUNBQUFhQkFBQUpBQUFBQUFBQUFBQUFBQUFwSUhzVEFBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVa1pSVTNSaGRIVnpMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FoSkJvVDdxaVJCNlRBUUFBdEFJQUFDb0FBQUFBQUFBQUFBQUFBS1NCWWs4QUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVa05DNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRS9ZaHZ2UWdRRUFBSUlDQUFCSUFBQUFBQUFBQUFBQUFBQ2tnVDFSQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVJTUmxGU1pXTmxhWFpsWkVWMlpXNTBVbVZ6Y0c5dWMyVXVZMnhoYzNOUVN3RUNGQU1VQUFBSUNBQ0VrR2hQSVZ6T0lwNEJBQURlQWdBQU1nQUFBQUFBQUFBQUFBQUFwSUVrVXdBQWFXOHZjR3hoZEdadmNtMDJMMlJsYlc4dmMyTXZVbVZ4ZFdWemRFWnZjbEYxYjNSaGRHbHZibk1rTVRRdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FDRWtHaFA1SDFlOEVjQkFBQWhBZ0FBTVFBQUFBQUFBQUFBQUFBQXBJRVNWUUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtNaTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUUvS0l5cG1QZ01BQUpNSEFBQXlBQUFBQUFBQUFBQUFBQUNrZ2FoV0FBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE5pNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRS9uQXQ3WVJnRUFBQ0VDQUFBeEFBQUFBQUFBQUFBQUFBQ2tnVFphQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVExTG1Oc1lYTnpVRXNCQWhRREZBQUFDQWdBaEpCb1QrSTNPejVIQVFBQUl3SUFBRElBQUFBQUFBQUFBQUFBQUtTQnkxc0FBR2x2TDNCc1lYUm1iM0p0Tmk5a1pXMXZMM05qTDFKbGNYVmxjM1JHYjNKUmRXOTBZWFJwYjI1ekpERXhMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FoSkJvVHkrTXZPQlJBUUFBR2dJQUFDb0FBQUFBQUFBQUFBQUFBS1NCWWwwQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVa01TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRThCTlBXNmx3RUFBTHNDQUFBcUFBQUFBQUFBQUFBQUFBQ2tnZnRlQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVRhVzF3YkdWVGRHOXlZV2RsSkRNdVkyeGhjM05RU3dFQ0ZBTVVBQUFJQ0FDRWtHaFBvakxYNTBnQkFBQWhBZ0FBTVFBQUFBQUFBQUFBQUFBQXBJSGFZQUFBYVc4dmNHeGhkR1p2Y20wMkwyUmxiVzh2YzJNdlVtVnhkV1Z6ZEVadmNsRjFiM1JoZEdsdmJuTWtOeTVqYkdGemMxQkxBUUlVQXhRQUFBZ0lBSVNRYUU5OWdxcjdwQUVBQU9VQ0FBQXlBQUFBQUFBQUFBQUFBQUNrZ1hGaUFBQnBieTl3YkdGMFptOXliVFl2WkdWdGJ5OXpZeTlTWlhGMVpYTjBSbTl5VVhWdmRHRjBhVzl1Y3lReE15NWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRS9IcnhWRG9nRUFBT2NDQUFBeUFBQUFBQUFBQUFBQUFBQ2tnV1ZrQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4Tnk1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUlTUWFFK2JWOGVZUWdFQUFCb0NBQUF4QUFBQUFBQUFBQUFBQUFDa2dWZG1BQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXpMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FoSkJvVDNHYlNaRFNBd0FBT3drQUFDb0FBQUFBQUFBQUFBQUFBS1NCNkdjQUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMU5wYlhCc1pWTjBiM0poWjJVa05TNWpiR0Z6YzFCTEFRSVVBeFFBQUFnSUFJU1FhRStEQlBhR293RUFBT01DQUFBeUFBQUFBQUFBQUFBQUFBQ2tnUUpzQUFCcGJ5OXdiR0YwWm05eWJUWXZaR1Z0Ynk5ell5OVNaWEYxWlhOMFJtOXlVWFZ2ZEdGMGFXOXVjeVF4TlM1amJHRnpjMUJMQVFJVUF4UUFBQWdJQUlTUWFFK2haeCt6UmdFQUFDRUNBQUF4QUFBQUFBQUFBQUFBQUFDa2dmVnRBQUJwYnk5d2JHRjBabTl5YlRZdlpHVnRieTl6WXk5U1pYRjFaWE4wUm05eVVYVnZkR0YwYVc5dWN5UXhMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FoSkJvVDUzMjY0RXZCQUFBR1FvQUFESUFBQUFBQUFBQUFBQUFBS1NCaW04QUFHbHZMM0JzWVhSbWIzSnROaTlrWlcxdkwzTmpMMUpsY1hWbGMzUkdiM0pSZFc5MFlYUnBiMjV6SkRJNExtTnNZWE56VUVzQkFoUURGQUFBQ0FnQWhKQm9UN2d1QU1NVkhBQUFXV2tBQUM4QUFBQUFBQUFBQUFBQUFLU0JDWFFBQUdsdkwzQnNZWFJtYjNKdE5pOWtaVzF2TDNOakwxSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpMbU5zWVhOelVFc0JBaFFERkFBQUNBZ0FnNUJvVHpVZzNmWGFBQUFBMFFFQUFCRUFBQUFBQUFBQUFBQUFBS1NCYTVBQUFGTnBiWEJzWlZOMGIzSmhaMlV1YzI5c1VFc0JBaFFERkFBQUNBZ0FnNUJvVHhLVEd2aWlBd0FBYWhBQUFCZ0FBQUFBQUFBQUFBQUFBS1NCZEpFQUFGSmxjWFZsYzNSR2IzSlJkVzkwWVhScGIyNXpMbk52YkZCTEFRSVVBeFFBQUFnSUFIMlFhRStLZWVrNm93SUFBRXdKQUFCREFBQUFBQUFBQUFBQUFBQ2tnVXlWQUFCTlJWUkJMVWxPUmk5dFlYWmxiaTlqYjIwdVlXMWhiSFJ2TG5Cc1lYUm1iM0p0Tmk5a1pXMXZMV0Z3Y0MxemJXRnlkQzFqYjI1MGNtRmpkQzl3YjIwdWVHMXNVRXNCQWhRREZBQUFDQWdBaEpCb1Q0OUFSN0pJQUFBQVRBQUFBRW9BQUFBQUFBQUFBQUFBQUtTQlVKZ0FBRTFGVkVFdFNVNUdMMjFoZG1WdUwyTnZiUzVoYldGc2RHOHVjR3hoZEdadmNtMDJMMlJsYlc4dFlYQndMWE50WVhKMExXTnZiblJ5WVdOMEwzQnZiUzV3Y205d1pYSjBhV1Z6VUVzRkJnQUFBQUEyQURZQUtSTUFBQUNaQUFBQUFBPT1cIixcInRhcmdldFJvb3RcIjpcIiR7UDZfREFUQX1cIixcInRhcmdldFBhdGhcIjpcIi9saWIvZGVtby1hcHAtc21hcnQtY29udHJhY3QtMS4yLmphclwiLFwicHJvcHNcIjp7fSxcImRlcGxveWVkXCI6ZmFsc2UsXCJoYXNCeXRlc0F0dGFjaG1lbnRcIjp0cnVlLFwiYXR0YWNobWVudE5hbWVcIjpcImRlbW8tYXBwLXNtYXJ0LWNvbnRyYWN0LTEuMi5qYXJcIixcImF0dGFjaG1lbnRTaXplXCI6NDQwOTV9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1Mzg5NDYyfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmJ1bmRsZWRyZXNvdXJjZXMiLCJuYW1lIjoiUE9SZXZpZXciLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJQT1Jldmlld1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUZW1wbGF0ZSBmaWxlIGZvciBlbWFpbCBub3RpZmljYXRpb24gZnJvbSB0aGUgd29ya2Zsb3cgc2VydmljZSBmb3IgUHVyY2hhc2VPcmRlclwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM4OTQ3NixcInJldmlzaW9uSWRcIjpcImE2NDdmMmFjMTJiMDNlNGNiYmMxNzAzMWViMjNjZDM5XCIsXCJpdGVtQnl0ZXNcIjpcIlBDRmtiMk4wZVhCbElHaDBiV3crQ2p4b2RHMXNJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHhPVGs1TDNob2RHMXNJaUI0Yld4dWN6cDJQU0oxY200NmMyTm9aVzFoY3kxdGFXTnliM052Wm5RdFkyOXRPblp0YkNJZ2VHMXNibk02YnowaWRYSnVPbk5qYUdWdFlYTXRiV2xqY205emIyWjBMV052YlRwdlptWnBZMlU2YjJabWFXTmxJajRLQ1R4b1pXRmtQZ29KQ1R3aExTMGdUa0ZOUlRvZ01TQkRUMHhWVFU0Z0xTQkNRVTVFUlVRZ0xTMCtDZ2tKUENFdExWdHBaaUJuZEdVZ2JYTnZJREUxWFQ0S0NRazhlRzFzUGdvSkNRazhienBQWm1acFkyVkViMk4xYldWdWRGTmxkSFJwYm1kelBnb0pDUWs4YnpwQmJHeHZkMUJPUnk4K0Nna0pDVHh2T2xCcGVHVnNjMUJsY2tsdVkyZytPVFk4TDI4NlVHbDRaV3h6VUdWeVNXNWphRDRLQ1FrSlBDOXZPazltWm1salpVUnZZM1Z0Wlc1MFUyVjBkR2x1WjNNK0Nna0pQQzk0Yld3K0Nna0pQQ0ZiWlc1a2FXWmRMUzArQ2drSlBHMWxkR0VnWTJoaGNuTmxkRDBpVlZSR0xUZ2lQZ29KQ1R4dFpYUmhJR2gwZEhBdFpYRjFhWFk5SWxndFZVRXRRMjl0Y0dGMGFXSnNaU0lnWTI5dWRHVnVkRDBpU1VVOVpXUm5aU0krQ2drSlBHMWxkR0VnYm1GdFpUMGlkbWxsZDNCdmNuUWlJR052Ym5SbGJuUTlJbmRwWkhSb1BXUmxkbWxqWlMxM2FXUjBhQ3dnYVc1cGRHbGhiQzF6WTJGc1pUMHhJajRLQ1FrOGRHbDBiR1UrU1c1amIyMXBibWNnVUhWeVkyaGhjMlVnVDNKa1pYSWdkRzhnVW1WMmFXVjNQQzkwYVhSc1pUNEtDUWtLQ1FrOGMzUjViR1VnZEhsd1pUMGlkR1Y0ZEM5amMzTWlQZ29KQ1FrSmNIc0tDUWtKQ1FsdFlYSm5hVzQ2TVRCd2VDQXdPd29KQ1FrSkNYQmhaR1JwYm1jNk1Ec0tDUWtKQ1gwS0NRa0pDWFJoWW14bGV3b0pDUWtKQ1dKdmNtUmxjaTFqYjJ4c1lYQnpaVHBqYjJ4c1lYQnpaVHNLQ1FrSkNYMEtDUWtKQ1dneExHZ3lMR2d6TEdnMExHZzFMR2cyZXdvSkNRa0pDV1JwYzNCc1lYazZZbXh2WTJzN0Nna0pDUWtKYldGeVoybHVPakE3Q2drSkNRa0pjR0ZrWkdsdVp6b3dPd29KQ1FrSmZRb0pDUWtKYVcxbkxHRWdhVzFuZXdvSkNRa0pDV0p2Y21SbGNqb3dPd29KQ1FrSkNXaGxhV2RvZERwaGRYUnZPd29KQ1FrSkNXOTFkR3hwYm1VNmJtOXVaVHNLQ1FrSkNRbDBaWGgwTFdSbFkyOXlZWFJwYjI0NmJtOXVaVHNLQ1FrSkNYMEtDUWtKQ1dKdlpIa3NJMkp2WkhsVVlXSnNaU3dqWW05a2VVTmxiR3g3Q2drSkNRa0phR1ZwWjJoME9qRXdNQ1U3Q2drSkNRa0piV0Z5WjJsdU9qQTdDZ2tKQ1FrSmNHRmtaR2x1Wnpvd093b0pDUWtKQ1hkcFpIUm9PakV3TUNVN0Nna0pDUWw5Q2drSkNRa2piM1YwYkc5dmF5Qmhld29KQ1FrSkNYQmhaR1JwYm1jNk1Ec0tDUWtKQ1gwS0NRa0pDV2x0WjNzS0NRa0pDUWt0YlhNdGFXNTBaWEp3YjJ4aGRHbHZiaTF0YjJSbE9tSnBZM1ZpYVdNN0Nna0pDUWw5Q2drSkNRbDBZV0pzWlhzS0NRa0pDUWx0YzI4dGRHRmliR1V0YkhOd1lXTmxPakJ3ZERzS0NRa0pDUWx0YzI4dGRHRmliR1V0Y25Od1lXTmxPakJ3ZERzS0NRa0pDWDBLQ1FrSkNTNVNaV0ZrVFhOblFtOWtlWHNLQ1FrSkNRbDNhV1IwYURveE1EQWxPd29KQ1FrSmZRb0pDUWtKTGtWNGRHVnlibUZzUTJ4aGMzTjdDZ2tKQ1FrSmQybGtkR2c2TVRBd0pUc0tDUWtKQ1gwS0NRa0pDWEFzWVN4c2FTeDBaQ3hpYkc5amEzRjFiM1JsZXdvSkNRa0pDVzF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT21WNFlXTjBiSGs3Q2drSkNRbDlDZ2tKQ1FsaFcyaHlaV1plUFhSbGJGMHNZVnRvY21WbVhqMXpiWE5kZXdvSkNRa0pDV052Ykc5eU9tbHVhR1Z5YVhRN0Nna0pDUWtKWTNWeWMyOXlPbVJsWm1GMWJIUTdDZ2tKQ1FrSmRHVjRkQzFrWldOdmNtRjBhVzl1T201dmJtVTdDZ2tKQ1FsOUNna0pDUWx3TEdFc2JHa3NkR1FzWW05a2VTeDBZV0pzWlN4aWJHOWphM0YxYjNSbGV3b0pDUWtKQ1MxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9qRXdNQ1U3Q2drSkNRa0pMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9qRXdNQ1U3Q2drSkNRbDlDZ2tKQ1FrdVJYaDBaWEp1WVd4RGJHRnpjeXd1UlhoMFpYSnVZV3hEYkdGemN5QndMQzVGZUhSbGNtNWhiRU5zWVhOeklIUmtMQzVGZUhSbGNtNWhiRU5zWVhOeklHUnBkaXd1UlhoMFpYSnVZV3hEYkdGemN5QnpjR0Z1TEM1RmVIUmxjbTVoYkVOc1lYTnpJR1p2Ym5SN0Nna0pDUWtKYkdsdVpTMW9aV2xuYUhRNk1UQXdKVHNLQ1FrSkNYMEtDUWtKQ1dGYmVDMWhjSEJzWlMxa1lYUmhMV1JsZEdWamRHOXljMTE3Q2drSkNRa0pZMjlzYjNJNmFXNW9aWEpwZENBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hSbGVIUXRaR1ZqYjNKaGRHbHZianB1YjI1bElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSlptOXVkQzF6YVhwbE9tbHVhR1Z5YVhRZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1FsbWIyNTBMV1poYldsc2VUcHBibWhsY21sMElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSlptOXVkQzEzWldsbmFIUTZhVzVvWlhKcGRDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNXeHBibVV0YUdWcFoyaDBPbWx1YUdWeWFYUWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKQ1M1MFpXMXdiR0YwWlVOdmJuUmhhVzVsY25zS0NRa0pDUWx0WVhndGQybGtkR2c2TmpBd2NIZ2dJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKQ1dFdWJXTnVRblYwZEc5dWV3b0pDUWtKQ1dScGMzQnNZWGs2WW14dlkyczdDZ2tKQ1FsOUNna0pDUWt1YldOdVNXMWhaMlY3Q2drSkNRa0pkbVZ5ZEdsallXd3RZV3hwWjI0NlltOTBkRzl0T3dvSkNRa0pmUW9KQ1FrSkxtMWpibFJsZUhSRGIyNTBaVzUwZXdvSkNRa0pDWGR2Y21RdFluSmxZV3M2WW5KbFlXc3RkMjl5WkRzS0NRa0pDWDBLQ1FrSkNTNXRZMjVVWlhoMFEyOXVkR1Z1ZENCcGJXZDdDZ2tKQ1FrSmFHVnBaMmgwT21GMWRHOGdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKQ1M1dFkyNUVhWFpwWkdWeVFteHZZMnQ3Q2drSkNRa0pkR0ZpYkdVdGJHRjViM1YwT21acGVHVmtJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1VHRm5aUW9KQ1FsQWMyVmpkR2x2YmlCQ1lXTnJaM0p2ZFc1a0lGTjBlV3hsQ2drSkNVQjBhWEFnVTJWMElIUm9aU0JpWVdOclozSnZkVzVrSUdOdmJHOXlJR0Z1WkNCMGIzQWdZbTl5WkdWeUlHWnZjaUI1YjNWeUlHVnRZV2xzTGlCWmIzVWdiV0Y1SUhkaGJuUWdkRzhnWTJodmIzTmxJR052Ykc5eWN5QjBhR0YwSUcxaGRHTm9JSGx2ZFhJZ1kyOXRjR0Z1ZVNkeklHSnlZVzVrYVc1bkxnb0pDUWtxTHdvSkNRa0pZbTlrZVN3alltOWtlVlJoWW14bGV3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWlZV05yWjNKdmRXNWtMV052Ykc5eU9pTm1NbVl5WmpJN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVR0ZuWlFvSkNRbEFjMlZqZEdsdmJpQkNZV05yWjNKdmRXNWtJRk4wZVd4bENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUdGdVpDQjBiM0FnWW05eVpHVnlJR1p2Y2lCNWIzVnlJR1Z0WVdsc0xpQlpiM1VnYldGNUlIZGhiblFnZEc4Z1kyaHZiM05sSUdOdmJHOXljeUIwYUdGMElHMWhkR05vSUhsdmRYSWdZMjl0Y0dGdWVTZHpJR0p5WVc1a2FXNW5MZ29KQ1FrcUx3b0pDUWtKSTJKdlpIbERaV3hzZXdvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5aWIzSmtaWEl0ZEc5d09qQTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnVUdGblpRb0pDUWxBYzJWamRHbHZiaUJJWldGa2FXNW5JREVLQ1FrSlFIUnBjQ0JUWlhRZ2RHaGxJSE4wZVd4cGJtY2dabTl5SUdGc2JDQm1hWEp6ZEMxc1pYWmxiQ0JvWldGa2FXNW5jeUJwYmlCNWIzVnlJR1Z0WVdsc2N5NGdWR2hsYzJVZ2MyaHZkV3hrSUdKbElIUm9aU0JzWVhKblpYTjBJRzltSUhsdmRYSWdhR1ZoWkdsdVozTXVDZ2tKQ1VCemRIbHNaU0JvWldGa2FXNW5JREVLQ1FrSktpOEtDUWtKQ1dneGV3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWpiMnh2Y2pvak5qQTJNRFl3T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMV1poYldsc2VUcEJjbWxoYkN3Z0owaGxiSFpsZEdsallTQk9aWFZsSnl3Z1NHVnNkbVYwYVdOaExDQnpZVzV6TFhObGNtbG1Pd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TXpCd2VEc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZabTl1ZEMxemRIbHNaVHB1YjNKdFlXdzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGQyVnBaMmgwT21KdmJHUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFeU5TVTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhsZEhSbGNpMXpjR0ZqYVc1bk9pMHhjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNSbGVIUXRZV3hwWjI0NmJHVm1kRHNLQ1FrSkNYMEtDUWtKTHlvS0NRa0pRSFJoWWlCUVlXZGxDZ2tKQ1VCelpXTjBhVzl1SUVobFlXUnBibWNnTWdvSkNRbEFkR2x3SUZObGRDQjBhR1VnYzNSNWJHbHVaeUJtYjNJZ1lXeHNJSE5sWTI5dVpDMXNaWFpsYkNCb1pXRmthVzVuY3lCcGJpQjViM1Z5SUdWdFlXbHNjeTRLQ1FrSlFITjBlV3hsSUdobFlXUnBibWNnTWdvSkNRa3FMd29KQ1FrSmFESjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTTJNRFl3TmpBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0Wm1GdGFXeDVPa2hsYkhabGRHbGpZVHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMXphWHBsT2pJMGNIZzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMzUjViR1U2Ym05eWJXRnNPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYZGxhV2RvZERwaWIyeGtPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE1qVWxPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzWlhSMFpYSXRjM0JoWTJsdVp6b3RNWEI0T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5MFpYaDBMV0ZzYVdkdU9teGxablE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1VHRm5aUW9KQ1FsQWMyVmpkR2x2YmlCSVpXRmthVzVuSURNS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlHRnNiQ0IwYUdseVpDMXNaWFpsYkNCb1pXRmthVzVuY3lCcGJpQjViM1Z5SUdWdFlXbHNjeTRLQ1FrSlFITjBlV3hsSUdobFlXUnBibWNnTXdvSkNRa3FMd29KQ1FrSmFETjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTTJNRFl3TmpBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0Wm1GdGFXeDVPa2hsYkhabGRHbGpZVHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMXphWHBsT2pFNGNIZzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMzUjViR1U2Ym05eWJXRnNPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYZGxhV2RvZERwaWIyeGtPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE1qVWxPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzWlhSMFpYSXRjM0JoWTJsdVp6b3RNWEI0T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5MFpYaDBMV0ZzYVdkdU9teGxablE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1VHRm5aUW9KQ1FsQWMyVmpkR2x2YmlCSVpXRmthVzVuSURRS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlHRnNiQ0JtYjNWeWRHZ3RiR1YyWld3Z2FHVmhaR2x1WjNNZ2FXNGdlVzkxY2lCbGJXRnBiSE11SUZSb1pYTmxJSE5vYjNWc1pDQmlaU0IwYUdVZ2MyMWhiR3hsYzNRZ2IyWWdlVzkxY2lCb1pXRmthVzVuY3k0S0NRa0pRSE4wZVd4bElHaGxZV1JwYm1jZ05Bb0pDUWtxTHdvSkNRa0phRFI3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU0yTURZd05qQTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdFptRnRhV3g1T2tobGJIWmxkR2xqWVRzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qRTJjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjM1I1YkdVNmJtOXliV0ZzT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcGliMnhrT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hNalVsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c1pYUjBaWEl0YzNCaFkybHVaem90TVhCNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdVSEpsYUdWaFpHVnlDZ2tKQ1VCelpXTjBhVzl1SUZCeVpXaGxZV1JsY2lCVGRIbHNaUW9KQ1FsQWRHbHdJRk5sZENCMGFHVWdZbUZqYTJkeWIzVnVaQ0JqYjJ4dmNpQmhibVFnWW05eVpHVnljeUJtYjNJZ2VXOTFjaUJsYldGcGJDZHpJSEJ5WldobFlXUmxjaUJoY21WaExnb0pDUWtxTHdvSkNRa0pJM1JsYlhCc1lYUmxVSEpsYUdWaFpHVnlld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlpWVdOclozSnZkVzVrTFdOdmJHOXlPaU5tWm1abVptWTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMkp2Y21SbGNpMTBiM0E2TURzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlltOXlaR1Z5TFdKdmRIUnZiVG93T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5d1lXUmthVzVuTFhSdmNEb3ljSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNCaFpHUnBibWN0WW05MGRHOXRPakp3ZURzS0NRa0pDWDBLQ1FrSkx5b0tDUWtKUUhSaFlpQlFjbVZvWldGa1pYSUtDUWtKUUhObFkzUnBiMjRnVUhKbGFHVmhaR1Z5SUZSbGVIUUtDUWtKUUhScGNDQlRaWFFnZEdobElITjBlV3hwYm1jZ1ptOXlJSGx2ZFhJZ1pXMWhhV3duY3lCd2NtVm9aV0ZrWlhJZ2RHVjRkQzRnUTJodmIzTmxJR0VnYzJsNlpTQmhibVFnWTI5c2IzSWdkR2hoZENCcGN5QmxZWE41SUhSdklISmxZV1F1Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWUWNtVm9aV0ZrWlhJZ0xtMWpibFJsZUhSRGIyNTBaVzUwTENOMFpXMXdiR0YwWlZCeVpXaGxZV1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFnY0hzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlkyOXNiM0k2SXpZMU5qVTJOVHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Wm05dWRDMW1ZVzFwYkhrNlZHRm9iMjFoTENCV1pYSmtZVzVoTENCVFpXZHZaU3dnYzJGdWN5MXpaWEpwWmpzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qRXdjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRTFNQ1U3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNSbGVIUXRZV3hwWjI0NmJHVm1kRHNLQ1FrSkNYMEtDUWtKTHlvS0NRa0pRSFJoWWlCUWNtVm9aV0ZrWlhJS0NRa0pRSE5sWTNScGIyNGdVSEpsYUdWaFpHVnlJRXhwYm1zS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlIbHZkWElnWlcxaGFXd25jeUJ3Y21Wb1pXRmtaWElnYkdsdWEzTXVJRU5vYjI5elpTQmhJR052Ykc5eUlIUm9ZWFFnYUdWc2NITWdkR2hsYlNCemRHRnVaQ0J2ZFhRZ1puSnZiU0I1YjNWeUlIUmxlSFF1Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWUWNtVm9aV0ZrWlhJZ0xtMWpibFJsZUhSRGIyNTBaVzUwSUdFc0kzUmxiWEJzWVhSbFVISmxhR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZENCd0lHRjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTTJOVFkxTmpVN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0ZDJWcFoyaDBPbTV2Y20xaGJEc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZkR1Y0ZEMxa1pXTnZjbUYwYVc5dU9uVnVaR1Z5YkdsdVpUc0tDUWtKQ1gwS0NRa0pMeW9LQ1FrSlFIUmhZaUJJWldGa1pYSUtDUWtKUUhObFkzUnBiMjRnU0dWaFpHVnlJRk4wZVd4bENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCaVlXTnJaM0p2ZFc1a0lHTnZiRzl5SUdGdVpDQmliM0prWlhKeklHWnZjaUI1YjNWeUlHVnRZV2xzSjNNZ2FHVmhaR1Z5SUdGeVpXRXVDZ2tKQ1NvdkNna0pDUWtqZEdWdGNHeGhkR1ZJWldGa1pYSjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMkpoWTJ0bmNtOTFibVF0WTI5c2IzSTZJMll5WmpKbU1qc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZbTl5WkdWeUxYUnZjRG93T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5aWIzSmtaWEl0WW05MGRHOXRPakE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNCaFpHUnBibWN0ZEc5d09qSXdjSGc3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDNCaFpHUnBibWN0WW05MGRHOXRPakl3Y0hnN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdTR1ZoWkdWeUNna0pDVUJ6WldOMGFXOXVJRWhsWVdSbGNpQlVaWGgwQ2drSkNVQjBhWEFnVTJWMElIUm9aU0J6ZEhsc2FXNW5JR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdhR1ZoWkdWeUlIUmxlSFF1SUVOb2IyOXpaU0JoSUhOcGVtVWdZVzVrSUdOdmJHOXlJSFJvWVhRZ2FYTWdaV0Z6ZVNCMGJ5QnlaV0ZrTGdvSkNRa3FMd29KQ1FrSkkzUmxiWEJzWVhSbFNHVmhaR1Z5SUM1dFkyNVVaWGgwUTI5dWRHVnVkQ3dqZEdWdGNHeGhkR1ZJWldGa1pYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MElIQjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMk52Ykc5eU9pTXpNek16TXpNN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0Wm1GdGFXeDVPbFJoYUc5dFlTd2dWbVZ5WkdGdVlTd2dVMlZuYjJVc0lITmhibk10YzJWeWFXWTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94Tm5CNE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TlRBbE93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOTBaWGgwTFdGc2FXZHVPbXhsWm5RN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdTR1ZoWkdWeUNna0pDVUJ6WldOMGFXOXVJRWhsWVdSbGNpQk1hVzVyQ2drSkNVQjBhWEFnVTJWMElIUm9aU0J6ZEhsc2FXNW5JR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdhR1ZoWkdWeUlHeHBibXR6TGlCRGFHOXZjMlVnWVNCamIyeHZjaUIwYUdGMElHaGxiSEJ6SUhSb1pXMGdjM1JoYm1RZ2IzVjBJR1p5YjIwZ2VXOTFjaUIwWlhoMExnb0pDUWtxTHdvSkNRa0pJM1JsYlhCc1lYUmxTR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZENCaExDTjBaVzF3YkdGMFpVaGxZV1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFnY0NCaGV3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWpiMnh2Y2pvak9EbGlZelUxT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5bWIyNTBMWGRsYVdkb2REcHViM0p0WVd3N0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzUmxlSFF0WkdWamIzSmhkR2x2YmpwMWJtUmxjbXhwYm1VN0Nna0pDUWw5Q2drSkNTOHFDZ2tKQ1VCMFlXSWdRbTlrZVFvSkNRbEFjMlZqZEdsdmJpQkNiMlI1SUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0JpYjNKa1pYSnpJR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdZbTlrZVNCaGNtVmhMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsUW05a2VYc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2pSa1pHUmtaR093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdGRHOXdPakE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKdmNtUmxjaTFpYjNSMGIyMDZNRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292Y0dGa1pHbHVaeTEwYjNBNk9YQjRPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTl3WVdSa2FXNW5MV0p2ZEhSdmJUb3hNbkI0T3dvSkNRa0pmUW9KQ1Frdktnb0pDUWxBZEdGaUlFSnZaSGtLQ1FrSlFITmxZM1JwYjI0Z1FtOWtlU0JVWlhoMENna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWW05a2VTQjBaWGgwTGlCRGFHOXZjMlVnWVNCemFYcGxJR0Z1WkNCamIyeHZjaUIwYUdGMElHbHpJR1ZoYzNrZ2RHOGdjbVZoWkM0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpVSnZaSGtnTG0xamJsUmxlSFJEYjI1MFpXNTBMQ04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwSUhCN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyTnZiRzl5T2lNek16TXpNek03Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRabUZ0YVd4NU9sUmhhRzl0WVN3Z1ZtVnlaR0Z1WVN3Z1UyVm5iMlVzSUhOaGJuTXRjMlZ5YVdZN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzJsNlpUb3hOSEI0T3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5c2FXNWxMV2hsYVdkb2REb3hOVEFsT3dvSkNRa0pDUzhxUUdWa2FYUmhZbXhsS2k5MFpYaDBMV0ZzYVdkdU9teGxablE3Q2drSkNRbDlDZ2tKQ1M4cUNna0pDVUIwWVdJZ1FtOWtlUW9KQ1FsQWMyVmpkR2x2YmlCQ2IyUjVJRXhwYm1zS0NRa0pRSFJwY0NCVFpYUWdkR2hsSUhOMGVXeHBibWNnWm05eUlIbHZkWElnWlcxaGFXd25jeUJpYjJSNUlHeHBibXR6TGlCRGFHOXZjMlVnWVNCamIyeHZjaUIwYUdGMElHaGxiSEJ6SUhSb1pXMGdjM1JoYm1RZ2IzVjBJR1p5YjIwZ2VXOTFjaUIwWlhoMExnb0pDUWtxTHdvSkNRa0pJM1JsYlhCc1lYUmxRbTlrZVNBdWJXTnVWR1Y0ZEVOdmJuUmxiblFnWVN3amRHVnRjR3hoZEdWQ2IyUjVJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndJR0Y3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJOdmJHOXlPaU00T1dKak5UVTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGQyVnBaMmgwT201dmNtMWhiRHNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292ZEdWNGRDMWtaV052Y21GMGFXOXVPblZ1WkdWeWJHbHVaVHNLQ1FrSkNYMEtDUWtKTHlvS0NRa0pRSFJoWWlCR2IyOTBaWElLQ1FrSlFITmxZM1JwYjI0Z1JtOXZkR1Z5SUZOMGVXeGxDZ2tKQ1VCMGFYQWdVMlYwSUhSb1pTQmlZV05yWjNKdmRXNWtJR052Ykc5eUlHRnVaQ0JpYjNKa1pYSnpJR1p2Y2lCNWIzVnlJR1Z0WVdsc0ozTWdabTl2ZEdWeUlHRnlaV0V1Q2drSkNTb3ZDZ2tKQ1FramRHVnRjR3hoZEdWR2IyOTBaWEo3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJKaFkydG5jbTkxYm1RdFkyOXNiM0k2STJZeVpqSm1NanNLQ1FrSkNRa3ZLa0JsWkdsMFlXSnNaU292WW05eVpHVnlMWFJ2Y0Rvd093b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOWliM0prWlhJdFltOTBkRzl0T2pBN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwzQmhaR1JwYm1jdGRHOXdPamx3ZURzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmNHRmtaR2x1WnkxaWIzUjBiMjA2T1hCNE93b0pDUWtKZlFvSkNRa3ZLZ29KQ1FsQWRHRmlJRVp2YjNSbGNnb0pDUWxBYzJWamRHbHZiaUJHYjI5MFpYSWdWR1Y0ZEFvSkNRbEFkR2x3SUZObGRDQjBhR1VnYzNSNWJHbHVaeUJtYjNJZ2VXOTFjaUJsYldGcGJDZHpJR1p2YjNSbGNpQjBaWGgwTGlCRGFHOXZjMlVnWVNCemFYcGxJR0Z1WkNCamIyeHZjaUIwYUdGMElHbHpJR1ZoYzNrZ2RHOGdjbVZoWkM0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpVWnZiM1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFzSTNSbGJYQnNZWFJsUm05dmRHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQndld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pOalUyTlRZMU93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFdaaGJXbHNlVHBVWVdodmJXRXNJRlpsY21SaGJtRXNJRk5sWjI5bExDQnpZVzV6TFhObGNtbG1Pd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRKd2VEc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZiR2x1WlMxb1pXbG5hSFE2TVRVd0pUc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZkR1Y0ZEMxaGJHbG5ianBqWlc1MFpYSTdDZ2tKQ1FsOUNna0pDUzhxQ2drSkNVQjBZV0lnUm05dmRHVnlDZ2tKQ1VCelpXTjBhVzl1SUVadmIzUmxjaUJNYVc1ckNna0pDVUIwYVhBZ1UyVjBJSFJvWlNCemRIbHNhVzVuSUdadmNpQjViM1Z5SUdWdFlXbHNKM01nWm05dmRHVnlJR3hwYm10ekxpQkRhRzl2YzJVZ1lTQmpiMnh2Y2lCMGFHRjBJR2hsYkhCeklIUm9aVzBnYzNSaGJtUWdiM1YwSUdaeWIyMGdlVzkxY2lCMFpYaDBMZ29KQ1FrcUx3b0pDUWtKSTNSbGJYQnNZWFJsUm05dmRHVnlJQzV0WTI1VVpYaDBRMjl1ZEdWdWRDQmhMQ04wWlcxd2JHRjBaVVp2YjNSbGNpQXViV051VkdWNGRFTnZiblJsYm5RZ2NDQmhld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlqYjJ4dmNqb2pOalUyTlRZMU93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhkbGFXZG9kRHB1YjNKdFlXdzdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMM1JsZUhRdFpHVmpiM0poZEdsdmJqcDFibVJsY214cGJtVTdDZ2tKQ1FsOUNna0pDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMXBiaTEzYVdSMGFEbzNOamh3ZUNsN0Nna0pDUWt1ZEdWdGNHeGhkR1ZEYjI1MFlXbHVaWEo3Q2drSkNRa0pkMmxrZEdnNk5qQXdjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pDV0p2Wkhrc2RHRmliR1VzZEdRc2NDeGhMR3hwTEdKc2IyTnJjWFZ2ZEdWN0Nna0pDUWtKTFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPbTV2Ym1VZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1dKdlpIbDdDZ2tKQ1FrSmQybGtkR2c2TVRBd0pTQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNXMXBiaTEzYVdSMGFEb3hNREFsSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUWtqWW05a2VVTmxiR3g3Q2drSkNRa0pjR0ZrWkdsdVp5MTBiM0E2TVRCd2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSmZRb0pDUWw5Q1VCdFpXUnBZU0J2Ym14NUlITmpjbVZsYmlCaGJtUWdLRzFoZUMxM2FXUjBhRG9nTkRnd2NIZ3Bld29KQ1FrSkxtMWpia2x0WVdkbGV3b0pDUWtKQ1hkcFpIUm9PakV3TUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1M1dFkyNURZWEowUTI5dWRHRnBibVZ5TEM1dFkyNURZWEIwYVc5dVZHOXdRMjl1ZEdWdWRDd3ViV051VW1WalEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2l3dWJXTnVRMkZ3ZEdsdmJrSnZkSFJ2YlVOdmJuUmxiblFzTG0xamJsUmxlSFJEYjI1MFpXNTBRMjl1ZEdGcGJtVnlMQzV0WTI1Q2IzaGxaRlJsZUhSRGIyNTBaVzUwUTI5dWRHRnBibVZ5TEM1dFkyNUpiV0ZuWlVkeWIzVndRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051UTJGd2RHbHZia3hsWm5SVVpYaDBRMjl1ZEdWdWRFTnZiblJoYVc1bGNpd3ViV051UTJGd2RHbHZibEpwWjJoMFZHVjRkRU52Ym5SbGJuUkRiMjUwWVdsdVpYSXNMbTFqYmtOaGNIUnBiMjVNWldaMFNXMWhaMlZEYjI1MFpXNTBRMjl1ZEdGcGJtVnlMQzV0WTI1RFlYQjBhVzl1VW1sbmFIUkpiV0ZuWlVOdmJuUmxiblJEYjI1MFlXbHVaWElzTG0xamJrbHRZV2RsUTJGeVpFeGxablJVWlhoMFEyOXVkR1Z1ZEVOdmJuUmhhVzVsY2l3dWJXTnVTVzFoWjJWRFlYSmtVbWxuYUhSVVpYaDBRMjl1ZEdWdWRFTnZiblJoYVc1bGNuc0tDUWtKQ1FsdFlYZ3RkMmxrZEdnNk1UQXdKU0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDWGRwWkhSb09qRXdNQ1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pDUzV0WTI1Q2IzaGxaRlJsZUhSRGIyNTBaVzUwUTI5dWRHRnBibVZ5ZXdvSkNRa0pDVzFwYmkxM2FXUjBhRG94TURBbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1FrdWJXTnVTVzFoWjJWSGNtOTFjRU52Ym5SbGJuUjdDZ2tKQ1FrSmNHRmtaR2x1WnpvNWNIZ2dJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkNTNXRZMjVEWVhCMGFXOXVUR1ZtZEVOdmJuUmxiblJQZFhSbGNpQXViV051VkdWNGRFTnZiblJsYm5Rc0xtMWpia05oY0hScGIyNVNhV2RvZEVOdmJuUmxiblJQZFhSbGNpQXViV051VkdWNGRFTnZiblJsYm5SN0Nna0pDUWtKY0dGa1pHbHVaeTEwYjNBNk9YQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNRa3ViV051U1cxaFoyVkRZWEprVkc5d1NXMWhaMlZEYjI1MFpXNTBMQzV0WTI1RFlYQjBhVzl1UW14dlkydEpibTVsY2lBdWJXTnVRMkZ3ZEdsdmJsUnZjRU52Ym5SbGJuUTZiR0Z6ZEMxamFHbHNaQ0F1YldOdVZHVjRkRU52Ym5SbGJuUjdDZ2tKQ1FrSmNHRmtaR2x1WnkxMGIzQTZNVGh3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSkNRbDlDVUJ0WldScFlTQnZibXg1SUhOamNtVmxiaUJoYm1RZ0tHMWhlQzEzYVdSMGFEb2dORGd3Y0hncGV3b0pDUWtKTG0xamJrbHRZV2RsUTJGeVpFSnZkSFJ2YlVsdFlXZGxRMjl1ZEdWdWRIc0tDUWtKQ1Fsd1lXUmthVzVuTFdKdmRIUnZiVG81Y0hnZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKQ1M1dFkyNUpiV0ZuWlVkeWIzVndRbXh2WTJ0SmJtNWxjbnNLQ1FrSkNRbHdZV1JrYVc1bkxYUnZjRG93SUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKY0dGa1pHbHVaeTFpYjNSMGIyMDZNQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pmUW9KQ1FsOUNVQnRaV1JwWVNCdmJteDVJSE5qY21WbGJpQmhibVFnS0cxaGVDMTNhV1IwYURvZ05EZ3djSGdwZXdvSkNRa0pMbTFqYmtsdFlXZGxSM0p2ZFhCQ2JHOWphMDkxZEdWeWV3b0pDUWtKQ1hCaFpHUnBibWN0ZEc5d09qbHdlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDWEJoWkdScGJtY3RZbTkwZEc5dE9qbHdlQ0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pmUW9KQ1FsOUNVQnRaV1JwWVNCdmJteDVJSE5qY21WbGJpQmhibVFnS0cxaGVDMTNhV1IwYURvZ05EZ3djSGdwZXdvSkNRa0pMbTFqYmxSbGVIUkRiMjUwWlc1MExDNXRZMjVDYjNobFpGUmxlSFJEYjI1MFpXNTBRMjlzZFcxdWV3b0pDUWtKQ1hCaFpHUnBibWN0Y21sbmFIUTZNVGh3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hCaFpHUnBibWN0YkdWbWREb3hPSEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUWt1YldOdVNXMWhaMlZEWVhKa1RHVm1kRWx0WVdkbFEyOXVkR1Z1ZEN3dWJXTnVTVzFoWjJWRFlYSmtVbWxuYUhSSmJXRm5aVU52Ym5SbGJuUjdDZ2tKQ1FrSmNHRmtaR2x1WnkxeWFXZG9kRG94T0hCNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSmNHRmtaR2x1WnkxaWIzUjBiMjA2TUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1hCaFpHUnBibWN0YkdWbWREb3hPSEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUWt1YldOd2NtVjJhV1YzTFdsdFlXZGxMWFZ3Ykc5aFpHVnlld29KQ1FrSkNXUnBjM0JzWVhrNmJtOXVaU0FoYVcxd2IzSjBZVzUwT3dvSkNRa0pDWGRwWkhSb09qRXdNQ1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pMeW9LQ1FrSlFIUmhZaUJOYjJKcGJHVWdVM1I1YkdWekNna0pDVUJ6WldOMGFXOXVJRWhsWVdScGJtY2dNUW9KQ1FsQWRHbHdJRTFoYTJVZ2RHaGxJR1pwY25OMExXeGxkbVZzSUdobFlXUnBibWR6SUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNXZ3hld29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTltYjI1MExYTnBlbVU2TVRod2VDQWhhVzF3YjNKMFlXNTBPd29KQ1FrSkNTOHFRR1ZrYVhSaFlteGxLaTlzYVc1bExXaGxhV2RvZERveE1qVWxJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRbDlDZ2tKQ1gwSlFHMWxaR2xoSUc5dWJIa2djMk55WldWdUlHRnVaQ0FvYldGNExYZHBaSFJvT2lBME9EQndlQ2w3Q2drSkNTOHFDZ2tKQ1VCMFlXSWdUVzlpYVd4bElGTjBlV3hsY3dvSkNRbEFjMlZqZEdsdmJpQklaV0ZrYVc1bklESUtDUWtKUUhScGNDQk5ZV3RsSUhSb1pTQnpaV052Ym1RdGJHVjJaV3dnYUdWaFpHbHVaM01nYkdGeVoyVnlJR2x1SUhOcGVtVWdabTl5SUdKbGRIUmxjaUJ5WldGa1lXSnBiR2wwZVNCdmJpQnpiV0ZzYkNCelkzSmxaVzV6TGdvSkNRa3FMd29KQ1FrSmFESjdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMlp2Ym5RdGMybDZaVG94Tm5CNElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FrSkx5cEFaV1JwZEdGaWJHVXFMMnhwYm1VdGFHVnBaMmgwT2pFeU5TVWdJV2x0Y0c5eWRHRnVkRHNLQ1FrSkNYMEtDUWtKZlFsQWJXVmthV0VnYjI1c2VTQnpZM0psWlc0Z1lXNWtJQ2h0WVhndGQybGtkR2c2SURRNE1IQjRLWHNLQ1FrSkx5b0tDUWtKUUhSaFlpQk5iMkpwYkdVZ1UzUjViR1Z6Q2drSkNVQnpaV04wYVc5dUlFaGxZV1JwYm1jZ013b0pDUWxBZEdsd0lFMWhhMlVnZEdobElIUm9hWEprTFd4bGRtVnNJR2hsWVdScGJtZHpJR3hoY21kbGNpQnBiaUJ6YVhwbElHWnZjaUJpWlhSMFpYSWdjbVZoWkdGaWFXeHBkSGtnYjI0Z2MyMWhiR3dnYzJOeVpXVnVjeTRLQ1FrSktpOEtDUWtKQ1dnemV3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhOcGVtVTZNVFp3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TWpVbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1M4cUNna0pDVUIwWVdJZ1RXOWlhV3hsSUZOMGVXeGxjd29KQ1FsQWMyVmpkR2x2YmlCSVpXRmthVzVuSURRS0NRa0pRSFJwY0NCTllXdGxJSFJvWlNCbWIzVnlkR2d0YkdWMlpXd2dhR1ZoWkdsdVozTWdiR0Z5WjJWeUlHbHVJSE5wZW1VZ1ptOXlJR0psZEhSbGNpQnlaV0ZrWVdKcGJHbDBlU0J2YmlCemJXRnNiQ0J6WTNKbFpXNXpMZ29KQ1FrcUx3b0pDUWtKYURSN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzJsNlpUb3hObkI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUVKdmVHVmtJRlJsZUhRS0NRa0pRSFJwY0NCTllXdGxJSFJvWlNCaWIzaGxaQ0IwWlhoMElHeGhjbWRsY2lCcGJpQnphWHBsSUdadmNpQmlaWFIwWlhJZ2NtVmhaR0ZpYVd4cGRIa2diMjRnYzIxaGJHd2djMk55WldWdWN5NGdWMlVnY21WamIyMXRaVzVrSUdFZ1ptOXVkQ0J6YVhwbElHOW1JR0YwSUd4bFlYTjBJREUyY0hndUNna0pDU292Q2drSkNRa3ViV051UW05NFpXUlVaWGgwUTI5dWRHVnVkRU52Ym5SaGFXNWxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNMbTFqYmtKdmVHVmtWR1Y0ZEVOdmJuUmxiblJEYjI1MFlXbHVaWElnTG0xamJsUmxlSFJEYjI1MFpXNTBJSEI3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJadmJuUXRjMmw2WlRveE5IQjRJQ0ZwYlhCdmNuUmhiblE3Q2drSkNRa0pMeXBBWldScGRHRmliR1VxTDJ4cGJtVXRhR1ZwWjJoME9qRTFNQ1VnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDWDBLQ1FrSmZRbEFiV1ZrYVdFZ2IyNXNlU0J6WTNKbFpXNGdZVzVrSUNodFlYZ3RkMmxrZEdnNklEUTRNSEI0S1hzS0NRa0pMeW9LQ1FrSlFIUmhZaUJOYjJKcGJHVWdVM1I1YkdWekNna0pDVUJ6WldOMGFXOXVJRkJ5WldobFlXUmxjaUJXYVhOcFltbHNhWFI1Q2drSkNVQjBhWEFnVTJWMElIUm9aU0IyYVhOcFltbHNhWFI1SUc5bUlIUm9aU0JsYldGcGJDZHpJSEJ5WldobFlXUmxjaUJ2YmlCemJXRnNiQ0J6WTNKbFpXNXpMaUJaYjNVZ1kyRnVJR2hwWkdVZ2FYUWdkRzhnYzJGMlpTQnpjR0ZqWlM0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpWQnlaV2hsWVdSbGNuc0tDUWtKQ1FrdktrQmxaR2wwWVdKc1pTb3ZaR2x6Y0d4aGVUcHViMjVsSUNGcGJYQnZjblJoYm5RN0Nna0pDUWw5Q2drSkNYMEpRRzFsWkdsaElHOXViSGtnYzJOeVpXVnVJR0Z1WkNBb2JXRjRMWGRwWkhSb09pQTBPREJ3ZUNsN0Nna0pDUzhxQ2drSkNVQjBZV0lnVFc5aWFXeGxJRk4wZVd4bGN3b0pDUWxBYzJWamRHbHZiaUJRY21Wb1pXRmtaWElnVkdWNGRBb0pDUWxBZEdsd0lFMWhhMlVnZEdobElIQnlaV2hsWVdSbGNpQjBaWGgwSUd4aGNtZGxjaUJwYmlCemFYcGxJR1p2Y2lCaVpYUjBaWElnY21WaFpHRmlhV3hwZEhrZ2IyNGdjMjFoYkd3Z2MyTnlaV1Z1Y3k0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpWQnlaV2hsWVdSbGNpQXViV051VkdWNGRFTnZiblJsYm5Rc0kzUmxiWEJzWVhSbFVISmxhR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZENCd2V3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhOcGVtVTZNVEp3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TlRBbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1M4cUNna0pDVUIwWVdJZ1RXOWlhV3hsSUZOMGVXeGxjd29KQ1FsQWMyVmpkR2x2YmlCSVpXRmtaWElnVkdWNGRBb0pDUWxBZEdsd0lFMWhhMlVnZEdobElHaGxZV1JsY2lCMFpYaDBJR3hoY21kbGNpQnBiaUJ6YVhwbElHWnZjaUJpWlhSMFpYSWdjbVZoWkdGaWFXeHBkSGtnYjI0Z2MyMWhiR3dnYzJOeVpXVnVjeTRLQ1FrSktpOEtDUWtKQ1NOMFpXMXdiR0YwWlVobFlXUmxjaUF1YldOdVZHVjRkRU52Ym5SbGJuUXNJM1JsYlhCc1lYUmxTR1ZoWkdWeUlDNXRZMjVVWlhoMFEyOXVkR1Z1ZENCd2V3b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOW1iMjUwTFhOcGVtVTZNVFp3ZUNBaGFXMXdiM0owWVc1ME93b0pDUWtKQ1M4cVFHVmthWFJoWW14bEtpOXNhVzVsTFdobGFXZG9kRG94TlRBbElDRnBiWEJ2Y25SaGJuUTdDZ2tKQ1FsOUNna0pDWDBKUUcxbFpHbGhJRzl1YkhrZ2MyTnlaV1Z1SUdGdVpDQW9iV0Y0TFhkcFpIUm9PaUEwT0RCd2VDbDdDZ2tKQ1M4cUNna0pDVUIwWVdJZ1RXOWlhV3hsSUZOMGVXeGxjd29KQ1FsQWMyVmpkR2x2YmlCQ2IyUjVJRlJsZUhRS0NRa0pRSFJwY0NCTllXdGxJSFJvWlNCaWIyUjVJSFJsZUhRZ2JHRnlaMlZ5SUdsdUlITnBlbVVnWm05eUlHSmxkSFJsY2lCeVpXRmtZV0pwYkdsMGVTQnZiaUJ6YldGc2JDQnpZM0psWlc1ekxpQlhaU0J5WldOdmJXMWxibVFnWVNCbWIyNTBJSE5wZW1VZ2IyWWdZWFFnYkdWaGMzUWdNVFp3ZUM0S0NRa0pLaThLQ1FrSkNTTjBaVzF3YkdGMFpVSnZaSGtnTG0xamJsUmxlSFJEYjI1MFpXNTBMQ04wWlcxd2JHRjBaVUp2WkhrZ0xtMWpibFJsZUhSRGIyNTBaVzUwSUhCN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyWnZiblF0YzJsNlpUb3hOSEI0SUNGcGJYQnZjblJoYm5RN0Nna0pDUWtKTHlwQVpXUnBkR0ZpYkdVcUwyeHBibVV0YUdWcFoyaDBPakUxTUNVZ0lXbHRjRzl5ZEdGdWREc0tDUWtKQ1gwS0NRa0pmUWxBYldWa2FXRWdiMjVzZVNCelkzSmxaVzRnWVc1a0lDaHRZWGd0ZDJsa2RHZzZJRFE0TUhCNEtYc0tDUWtKTHlvS0NRa0pRSFJoWWlCTmIySnBiR1VnVTNSNWJHVnpDZ2tKQ1VCelpXTjBhVzl1SUVadmIzUmxjaUJVWlhoMENna0pDVUIwYVhBZ1RXRnJaU0IwYUdVZ1ptOXZkR1Z5SUdOdmJuUmxiblFnZEdWNGRDQnNZWEpuWlhJZ2FXNGdjMmw2WlNCbWIzSWdZbVYwZEdWeUlISmxZV1JoWW1sc2FYUjVJRzl1SUhOdFlXeHNJSE5qY21WbGJuTXVDZ2tKQ1NvdkNna0pDUWtqZEdWdGNHeGhkR1ZHYjI5MFpYSWdMbTFqYmxSbGVIUkRiMjUwWlc1MExDTjBaVzF3YkdGMFpVWnZiM1JsY2lBdWJXTnVWR1Y0ZEVOdmJuUmxiblFnY0hzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdlptOXVkQzF6YVhwbE9qRXpjSGdnSVdsdGNHOXlkR0Z1ZERzS0NRa0pDUWt2S2tCbFpHbDBZV0pzWlNvdmJHbHVaUzFvWldsbmFIUTZNVFV3SlNBaGFXMXdiM0owWVc1ME93b0pDUWtKZlFvSmZUd3ZjM1I1YkdVK1BDOW9aV0ZrUGdvSlBHSnZaSGtnYzNSNWJHVTlJbWhsYVdkb2REb2dNVEF3SlR0dFlYSm5hVzQ2SURBN2NHRmtaR2x1WnpvZ01EdDNhV1IwYURvZ01UQXdKVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN1ltRmphMmR5YjNWdVpDMWpiMnh2Y2pvZ0kyWXlaakptTWpzaVBnb0pDVHhqWlc1MFpYSStDZ2tKUEhSaFlteGxJR0ZzYVdkdVBTSmpaVzUwWlhJaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCb1pXbG5hSFE5SWpFd01DVWlJSGRwWkhSb1BTSXhNREFsSWlCcFpEMGlZbTlrZVZSaFlteGxJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHRvWldsbmFIUTZJREV3TUNVN2JXRnlaMmx1T2lBd08zQmhaR1JwYm1jNklEQTdkMmxrZEdnNklERXdNQ1U3WW1GamEyZHliM1Z1WkMxamIyeHZjam9nSTJZeVpqSm1NanNpUGdvSkNRazhkSEkrQ2drSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSjBiM0FpSUdsa1BTSmliMlI1UTJWc2JDSWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlR0b1pXbG5hSFE2SURFd01DVTdiV0Z5WjJsdU9pQXdPM0JoWkdScGJtYzZJREE3ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFhSdmNEb2dNRHNpUGdvSkNRa0pDVHdoTFMwZ1FrVkhTVTRnVkVWTlVFeEJWRVVnTHk4Z0xTMCtDZ2tKQ1FrSlBIUmhZbXhsSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlNVEF3SlNJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGlkRzl3SWlCcFpEMGlkR1Z0Y0d4aGRHVklaV0ZrWlhJaUlITjBlV3hsUFNKdGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3WW1GamEyZHliM1Z1WkMxamIyeHZjam9nSTJZeVpqSm1NanRpYjNKa1pYSXRkRzl3T2lBd08ySnZjbVJsY2kxaWIzUjBiMjA2SURBN2NHRmtaR2x1WnkxMGIzQTZJREl3Y0hnN2NHRmtaR2x1WnkxaWIzUjBiMjA2SURJd2NIZzdJajRLQ1FrSkNRa0pDUWs4SVMwdFcybG1JR2QwWlNCdGMyOGdPVjArQ2drSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSmpaVzUwWlhJaUlHSnZjbVJsY2owaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCM2FXUjBhRDBpTmpBd0lpQnpkSGxzWlQwaWQybGtkR2c2TmpBd2NIZzdJajRLQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGlkRzl3SWlCM2FXUjBhRDBpTmpBd0lpQnpkSGxzWlQwaWQybGtkR2c2TmpBd2NIZzdJajRLQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUltTmxiblJsY2lJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWRHVnRjR3hoZEdWRGIyNTBZV2x1WlhJaUlITjBlV3hsUFNKaWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE8yMWhlQzEzYVdSMGFEb2dOakF3Y0hnZ0lXbHRjRzl5ZEdGdWREc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdkbUZzYVdkdVBTSjBiM0FpSUdOc1lYTnpQU0pvWldGa1pYSkRiMjUwWVdsdVpYSWlJSE4wZVd4bFBTSnRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNDhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVTVzFoWjJWQ2JHOWpheUlnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNUlHTnNZWE56UFNKdFkyNUpiV0ZuWlVKc2IyTnJUM1YwWlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKd1lXUmthVzVuT2lBd2NIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SWdZMnhoYzNNOUltMWpia2x0WVdkbFFteHZZMnRKYm01bGNpSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUIzYVdSMGFEMGlNVEF3SlNJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUdOc1lYTnpQU0p0WTI1SmJXRm5aVU52Ym5SbGJuUkRiMjUwWVdsdVpYSWlJSE4wZVd4bFBTSnRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR05zWVhOelBTSnRZMjVKYldGblpVTnZiblJsYm5RaUlIWmhiR2xuYmowaWRHOXdJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp5MXlhV2RvZERvZ01IQjRPM0JoWkdScGJtY3RiR1ZtZERvZ01IQjRPM0JoWkdScGJtY3RkRzl3T2lBd08zQmhaR1JwYm1jdFltOTBkRzl0T2lBd08zUmxlSFF0WVd4cFoyNDZJR05sYm5SbGNqdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThhVzFuSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0ZzZEQwaUlpQnpjbU05SW1oMGRIQnpPaTh2ZDNkM0xuQnNZWFJtYjNKdE5pNXBieTkzY0MxamIyNTBaVzUwTDNWd2JHOWhaSE12TWpBeE9DOHdPUzlzYjJkdkxYQnNZWFJtYjNKdE5pMW9aV0ZrWlhJdGNtVjBhVzVoTG5CdVp5SWdkMmxrZEdnOUlqSTJNQ0lnYzNSNWJHVTlJbTFoZUMxM2FXUjBhRG9nTWpZd2NIZzdjR0ZrWkdsdVp5MWliM1IwYjIwNklEQTdaR2x6Y0d4aGVUb2dhVzVzYVc1bElDRnBiWEJ2Y25SaGJuUTdkbVZ5ZEdsallXd3RZV3hwWjI0NklHSnZkSFJ2YlR0aWIzSmtaWEk2SURBN2FHVnBaMmgwT2lCaGRYUnZPMjkxZEd4cGJtVTZJRzV2Ym1VN2RHVjRkQzFrWldOdmNtRjBhVzl1T2lCdWIyNWxPeTF0Y3kxcGJuUmxjbkJ2YkdGMGFXOXVMVzF2WkdVNklHSnBZM1ZpYVdNN0lpQmpiR0Z6Y3owaWJXTnVTVzFoWjJVaVBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK0Nna0pDUWtKQ1FrSkNRa0pDUWs4TDNSaFlteGxQand2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JR2QwWlNCdGMyOGdPVjArQ2drSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNUd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbU5sYm5SbGNpSWdkbUZzYVdkdVBTSjBiM0FpSUdsa1BTSjBaVzF3YkdGMFpVSnZaSGtpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdZbUZqYTJkeWIzVnVaQzFqYjJ4dmNqb2dJMFpHUmtaR1JqdGliM0prWlhJdGRHOXdPaUF3TzJKdmNtUmxjaTFpYjNSMGIyMDZJREE3Y0dGa1pHbHVaeTEwYjNBNklEbHdlRHR3WVdSa2FXNW5MV0p2ZEhSdmJUb2dNVEp3ZURzaVBnb0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ1ozUmxJRzF6YnlBNVhUNEtDUWtKQ1FrSkNRazhkR0ZpYkdVZ1lXeHBaMjQ5SW1ObGJuUmxjaUlnWW05eVpHVnlQU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJSGRwWkhSb1BTSTJNREFpSUhOMGVXeGxQU0ozYVdSMGFEbzJNREJ3ZURzaVBnb0pDUWtKQ1FrSkNRazhkSEkrQ2drSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKMGIzQWlJSGRwWkhSb1BTSTJNREFpSUhOMGVXeGxQU0ozYVdSMGFEbzJNREJ3ZURzaVBnb0pDUWtKQ1FrSkNRa0pDVHdoVzJWdVpHbG1YUzB0UGdvSkNRa0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpWTJWdWRHVnlJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlqRXdNQ1VpSUdOc1lYTnpQU0owWlcxd2JHRjBaVU52Ym5SaGFXNWxjaUlnYzNSNWJHVTlJbUp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3YldGNExYZHBaSFJvT2lBMk1EQndlQ0FoYVcxd2IzSjBZVzUwT3lJK0Nna0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCMllXeHBaMjQ5SW5SdmNDSWdZMnhoYzNNOUltSnZaSGxEYjI1MFlXbHVaWElpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajQ4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051VkdWNGRFSnNiMk5ySWlCemRIbHNaVDBpYldsdUxYZHBaSFJvT2lBeE1EQWxPMkp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIa2dZMnhoYzNNOUltMWpibFJsZUhSQ2JHOWphMDkxZEdWeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQmpiR0Z6Y3owaWJXTnVWR1Y0ZEVKc2IyTnJTVzV1WlhJaUlITjBlV3hsUFNKd1lXUmthVzVuTFhSdmNEb2dPWEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZV3hwWjI0OUlteGxablFpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUIzYVdSMGFEMGlNVEF3SlNJZ2MzUjViR1U5SW5kcFpIUm9PakV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnZDJsa2RHZzlJall3TUNJZ2MzUjViR1U5SW5kcFpIUm9Pall3TUhCNE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdjM1I1YkdVOUltMWhlQzEzYVdSMGFEb2dNVEF3SlR0dGFXNHRkMmxrZEdnNklERXdNQ1U3WW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051VkdWNGRFTnZiblJsYm5SRGIyNTBZV2x1WlhJaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdkbUZzYVdkdVBTSjBiM0FpSUdOc1lYTnpQU0p0WTI1VVpYaDBRMjl1ZEdWdWRDSWdjM1I1YkdVOUluQmhaR1JwYm1jNklEQndlQ0F4T0hCNElEbHdlRHRtYjI1MExXWmhiV2xzZVRvZ1ZHRm9iMjFoTENCV1pYSmtZVzVoTENCVFpXZHZaU3dnYzJGdWN5MXpaWEpwWmp0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3ZDI5eVpDMWljbVZoYXpvZ1luSmxZV3N0ZDI5eVpEdGpiMnh2Y2pvZ0l6TXpNek16TXp0bWIyNTBMWE5wZW1VNklERTBjSGc3YkdsdVpTMW9aV2xuYUhRNklERTFNQ1U3ZEdWNGRDMWhiR2xuYmpvZ2JHVm1kRHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeG9NeUJ6ZEhsc1pUMGlkR1Y0ZEMxaGJHbG5iam9nYkdWbWREdGthWE53YkdGNU9pQmliRzlqYXp0dFlYSm5hVzQ2SURBN2NHRmtaR2x1WnpvZ01EdGpiMnh2Y2pvZ0l6WXdOakEyTUR0bWIyNTBMV1poYldsc2VUb2dTR1ZzZG1WMGFXTmhPMlp2Ym5RdGMybDZaVG9nTVRod2VEdG1iMjUwTFhOMGVXeGxPaUJ1YjNKdFlXdzdabTl1ZEMxM1pXbG5hSFE2SUdKdmJHUTdiR2x1WlMxb1pXbG5hSFE2SURFeU5TVTdiR1YwZEdWeUxYTndZV05wYm1jNklDMHhjSGc3SWo1SmJtSnZkVzVrSUZCMWNtTm9ZWE5sSUU5eVpHVnlJSFJ2SUhKbGRtbGxkend2YURNK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEdScGRpQnpkSGxzWlQwaWRHVjRkQzFoYkdsbmJqb2diR1ZtZERzaVBqeGljajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ05wWmlCMWMyVnlMbVpwY25OMFRtRnRaVDgvSUNZbUlIVnpaWEl1Wm1seWMzUk9ZVzFsUDJoaGMxOWpiMjUwWlc1MFBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdQQ05wWmlCMWMyVnlMbXhoYzNST1lXMWxQejhnSmlZZ2RYTmxjaTVzWVhOMFRtRnRaVDlvWVhOZlkyOXVkR1Z1ZEQ0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JJWld4c2J5QWtlM1Z6WlhJdVptbHljM1JPWVcxbGZTd0tJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHdqWld4elpUNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCSVpXeHNieUFrZTNWelpYSXVabWx5YzNST1lXMWxmU3dLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUR3dkkybG1QZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThJMlZzYzJVK0NpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQklaV3hzYnlBa2UzVnpaWEl1WlcxaGFXeDlMQW9nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQThMeU5wWmo0S0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEdKeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOFluSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNWbHZkU0JvWVhabElHRWdibVYzSUdsdVltOTFibVFnVDNKa1pYSWdkRzhnY21WMmFXVjNMaUJRYkdWaGMyVWdQR0VnYUhKbFpqMGlKSHRvY21WbWZTSWdkR0Z5WjJWMFBTSmZZbXhoYm1zaVBteHZaeUJ2YmlCaGJtUWdZV05qWlhCMElHOXlJSEpsYW1WamRDNDhMMkUrUEdKeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1NadVluTndPend2WkdsMlBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExWdHBaaUJ0YzI5ZFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hXMlZ1WkdsbVhTMHRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElWdGxibVJwWmwwdExUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDRLQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0ZpYkdVK1BIUmhZbXhsSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJrUnBkbWxrWlhKQ2JHOWpheUlnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPM1JoWW14bExXeGhlVzkxZERvZ1ptbDRaV1FnSVdsdGNHOXlkR0Z1ZERzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJ0UGRYUmxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1kyeGhjM005SW0xamJrUnBkbWxrWlhKQ2JHOWphMGx1Ym1WeUlpQnpkSGxzWlQwaWJXbHVMWGRwWkhSb09pQXhNREFsTzNCaFpHUnBibWM2SURWd2VDQXhPSEI0TzIxemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRMjl1ZEdWdWRDSWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJ6ZEhsc1pUMGliV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxMGIzQXRkMmxrZEdnNklESndlRHRpYjNKa1pYSXRkRzl3TFhOMGVXeGxPaUJ1YjI1bE8ySnZjbVJsY2kxMGIzQXRZMjlzYjNJNklDTkZRVVZCUlVFN1ltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhjM0JoYmo0OEwzTndZVzQrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMwS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmpiR0Z6Y3owaWJXTnVSR2wyYVdSbGNrSnNiMk5yU1c1dVpYSWlJSE4wZVd4bFBTSndZV1JrYVc1bk9pQXhPSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHaHlJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRMjl1ZEdWdWRDSWdjM1I1YkdVOUltSnZjbVJsY2kxaWIzUjBiMjB0WTI5c2IzSTZibTl1WlRzZ1ltOXlaR1Z5TFd4bFpuUXRZMjlzYjNJNmJtOXVaVHNnWW05eVpHVnlMWEpwWjJoMExXTnZiRzl5T201dmJtVTdJR0p2Y21SbGNpMWliM1IwYjIwdGQybGtkR2c2TURzZ1ltOXlaR1Z5TFd4bFpuUXRkMmxrZEdnNk1Ec2dZbTl5WkdWeUxYSnBaMmgwTFhkcFpIUm9PakE3SUcxaGNtZHBiaTEwYjNBNk1Ec2diV0Z5WjJsdUxYSnBaMmgwT2pBN0lHMWhjbWRwYmkxaWIzUjBiMjA2TURzZ2JXRnlaMmx1TFd4bFpuUTZNRHNpSUM4K0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkxTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrQ2drSkNRa0pDUWtKQ1FrSkNRazhMM1JoWW14bFBqd3ZkR1ErQ2drSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSlBDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRazhJUzB0VzJsbUlHZDBaU0J0YzI4Z09WMCtDZ2tKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWs4ZEhJK0Nna0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKMGIzQWlJR2xrUFNKMFpXMXdiR0YwWlVadmIzUmxjaUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdGlZV05yWjNKdmRXNWtMV052Ykc5eU9pQWpaakptTW1ZeU8ySnZjbVJsY2kxMGIzQTZJREE3WW05eVpHVnlMV0p2ZEhSdmJUb2dNRHR3WVdSa2FXNW5MWFJ2Y0RvZ09YQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQTVjSGc3SWo0S0NRa0pDUWtKQ1FrOElTMHRXMmxtSUdkMFpTQnRjMjhnT1YwK0Nna0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pqWlc1MFpYSWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQjNhV1IwYUQwaU5qQXdJaUJ6ZEhsc1pUMGlkMmxrZEdnNk5qQXdjSGc3SWo0S0NRa0pDUWtKQ1FrSlBIUnlQZ29KQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQjNhV1IwYUQwaU5qQXdJaUJ6ZEhsc1pUMGlkMmxrZEdnNk5qQXdjSGc3SWo0S0NRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWVd4cFoyNDlJbU5sYm5SbGNpSWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGlkR1Z0Y0d4aGRHVkRiMjUwWVdsdVpYSWlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPMjFoZUMxM2FXUjBhRG9nTmpBd2NIZ2dJV2x0Y0c5eWRHRnVkRHNpUGdvSkNRa0pDUWtKQ1FrSkNRazhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlHTnNZWE56UFNKbWIyOTBaWEpEYjI1MFlXbHVaWElpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajQ4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051Um05c2JHOTNRbXh2WTJzaUlITjBlV3hsUFNKdGFXNHRkMmxrZEdnNklERXdNQ1U3WW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlU0JqYkdGemN6MGliV051Um05c2JHOTNRbXh2WTJ0UGRYUmxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDVHgwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSWdjM1I1YkdVOUluQmhaR1JwYm1jNklEbHdlRHR0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUJqYkdGemN6MGliV051Um05c2JHOTNRbXh2WTJ0SmJtNWxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnWTJ4aGMzTTlJbTFqYmtadmJHeHZkME52Ym5SbGJuUkRiMjUwWVdsdVpYSWlJSE4wZVd4bFBTSnRhVzR0ZDJsa2RHZzZJREV3TUNVN1ltOXlaR1Z5TFdOdmJHeGhjSE5sT2lCamIyeHNZWEJ6WlR0dGMyOHRkR0ZpYkdVdGJITndZV05sT2lBd2NIUTdiWE52TFhSaFlteGxMWEp6Y0dGalpUb2dNSEIwT3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlITjBlV3hsUFNKd1lXUmthVzVuTFd4bFpuUTZJRGx3ZUR0d1lXUmthVzVuTFhKcFoyaDBPaUE1Y0hnN2JYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdjM1I1YkdVOUltMXBiaTEzYVdSMGFEb2dNVEF3SlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwTnZiblJsYm5RaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGlkRzl3SWlCemRIbHNaVDBpY0dGa1pHbHVaeTEwYjNBNklEbHdlRHR3WVdSa2FXNW5MWEpwWjJoME9pQTVjSGc3Y0dGa1pHbHVaeTFzWldaME9pQTVjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKalpXNTBaWElpSUdKdmNtUmxjajBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUdObGJHeHpjR0ZqYVc1blBTSXdJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCdGMyOWRQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaVkyVnVkR1Z5SWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0krQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoVzJWdVpHbG1YUzB0UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJUzB0VzJsbUlHMXpiMTArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUltTmxiblJsY2lJZ2RtRnNhV2R1UFNKMGIzQWlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZV0pzWlNCaGJHbG5iajBpYkdWbWRDSWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlITjBlV3hsUFNKa2FYTndiR0Y1T2lCcGJteHBibVU3WW05eVpHVnlMV052Ykd4aGNITmxPaUJqYjJ4c1lYQnpaVHR0YzI4dGRHRmliR1V0YkhOd1lXTmxPaUF3Y0hRN2JYTnZMWFJoWW14bExYSnpjR0ZqWlRvZ01IQjBPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUhaaGJHbG5iajBpZEc5d0lpQnpkSGxzWlQwaWNHRmtaR2x1WnkxeWFXZG9kRG9nTVRCd2VEdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ09YQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lJR05zWVhOelBTSnRZMjVHYjJ4c2IzZERiMjUwWlc1MFNYUmxiVU52Ym5SaGFXNWxjaUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwTnZiblJsYm5SSmRHVnRJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXTnZiR3hoY0hObE9pQmpiMnhzWVhCelpUdHRjMjh0ZEdGaWJHVXRiSE53WVdObE9pQXdjSFE3YlhOdkxYUmhZbXhsTFhKemNHRmpaVG9nTUhCME95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdKdlpIaytQSFJ5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKc1pXWjBJaUIyWVd4cFoyNDlJbTFwWkdSc1pTSWdjM1I1YkdVOUluQmhaR1JwYm1jdGRHOXdPaUExY0hnN2NHRmtaR2x1WnkxeWFXZG9kRG9nTVRCd2VEdHdZV1JrYVc1bkxXSnZkSFJ2YlRvZ05YQjRPM0JoWkdScGJtY3RiR1ZtZERvZ09YQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWVdKc1pTQmhiR2xuYmowaWJHVm1kQ0lnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSGRwWkhSb1BTSWlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJbTFwWkdSc1pTSWdkMmxrZEdnOUlqSTBJaUJqYkdGemN6MGliV051Um05c2JHOTNTV052YmtOdmJuUmxiblFpSUhOMGVXeGxQU0p0YzI4dGJHbHVaUzFvWldsbmFIUXRjblZzWlRvZ1pYaGhZM1JzZVRzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOFlTQm9jbVZtUFNKb2RIUndPaTh2ZDNkM0xtRnRZV3gwYnk1amIyMHZJaUIwWVhKblpYUTlJbDlpYkdGdWF5SWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBqeHBiV2NnYzNKalBTSm9kSFJ3T2k4dlkyUnVMV2x0WVdkbGN5NXRZV2xzWTJocGJYQXVZMjl0TDJsamIyNXpMM052WTJsaGJDMWliRzlqYXkxMk1pOWpiMnh2Y2kxc2FXNXJMVFE0TG5CdVp5SWdjM1I1YkdVOUltUnBjM0JzWVhrNklHSnNiMk5yTzJKdmNtUmxjam9nTUR0b1pXbG5hSFE2SUdGMWRHODdiM1YwYkdsdVpUb2dibTl1WlR0MFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUc1dmJtVTdMVzF6TFdsdWRHVnljRzlzWVhScGIyNHRiVzlrWlRvZ1ltbGpkV0pwWXpzaUlHaGxhV2RvZEQwaU1qUWlJSGRwWkhSb1BTSXlOQ0lnWTJ4aGMzTTlJaUkrUEM5aFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdsdWJHbHVaVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKd1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SWdZMnhoYzNNOUltMWpia1p2Ykd4dmQwTnZiblJsYm5SSmRHVnRRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR0ZpYkdVZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQmpiR0Z6Y3owaWJXTnVSbTlzYkc5M1EyOXVkR1Z1ZEVsMFpXMGlJSE4wZVd4bFBTSmliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ1lXeHBaMjQ5SW14bFpuUWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQnpkSGxzWlQwaWNHRmtaR2x1WnkxMGIzQTZJRFZ3ZUR0d1lXUmthVzVuTFhKcFoyaDBPaUF4TUhCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBMWNIZzdjR0ZrWkdsdVp5MXNaV1owT2lBNWNIZzdiWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdkMmxrZEdnOUlpSWdjM1I1YkdVOUltSnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJrSUdGc2FXZHVQU0pqWlc1MFpYSWlJSFpoYkdsbmJqMGliV2xrWkd4bElpQjNhV1IwYUQwaU1qUWlJR05zWVhOelBTSnRZMjVHYjJ4c2IzZEpZMjl1UTI5dWRHVnVkQ0lnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4aElHaHlaV1k5SW1oMGRIQnpPaTh2ZDNkM0xtWmhZMlZpYjI5ckxtTnZiUzloYldGc2RHOTBaV05vYm05c2IyZHBaWE1pSUhSaGNtZGxkRDBpWDJKc1lXNXJJaUJ6ZEhsc1pUMGliWE52TFd4cGJtVXRhR1ZwWjJoMExYSjFiR1U2SUdWNFlXTjBiSGs3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStQR2x0WnlCemNtTTlJbWgwZEhBNkx5OWpaRzR0YVcxaFoyVnpMbTFoYVd4amFHbHRjQzVqYjIwdmFXTnZibk12YzI5amFXRnNMV0pzYjJOckxYWXlMMk52Ykc5eUxXWmhZMlZpYjI5ckxUUTRMbkJ1WnlJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdKc2IyTnJPMkp2Y21SbGNqb2dNRHRvWldsbmFIUTZJR0YxZEc4N2IzVjBiR2x1WlRvZ2JtOXVaVHQwWlhoMExXUmxZMjl5WVhScGIyNDZJRzV2Ym1VN0xXMXpMV2x1ZEdWeWNHOXNZWFJwYjI0dGJXOWtaVG9nWW1samRXSnBZenNpSUdobGFXZG9kRDBpTWpRaUlIZHBaSFJvUFNJeU5DSWdZMnhoYzNNOUlpSStQQzloUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCaGJHbG5iajBpWTJWdWRHVnlJaUIyWVd4cFoyNDlJblJ2Y0NJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnYzNSNWJHVTlJbVJwYzNCc1lYazZJR2x1YkdsdVpUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVQ0OGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdkbUZzYVdkdVBTSjBiM0FpSUhOMGVXeGxQU0p3WVdSa2FXNW5MWEpwWjJoME9pQXhNSEI0TzNCaFpHUnBibWN0WW05MGRHOXRPaUE1Y0hnN2JYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBOdmJuUmxiblJKZEdWdFEyOXVkR0ZwYm1WeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcwaUlITjBlV3hsUFNKaWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVQ0OGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbXhsWm5RaUlIWmhiR2xuYmowaWJXbGtaR3hsSWlCemRIbHNaVDBpY0dGa1pHbHVaeTEwYjNBNklEVndlRHR3WVdSa2FXNW5MWEpwWjJoME9pQXhNSEI0TzNCaFpHUnBibWN0WW05MGRHOXRPaUExY0hnN2NHRmtaR2x1Wnkxc1pXWjBPaUE1Y0hnN2JYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWlJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlIWmhiR2xuYmowaWJXbGtaR3hsSWlCM2FXUjBhRDBpTWpRaUlHTnNZWE56UFNKdFkyNUdiMnhzYjNkSlkyOXVRMjl1ZEdWdWRDSWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHhoSUdoeVpXWTlJbWgwZEhCek9pOHZkM2QzTG14cGJtdGxaR2x1TG1OdmJTOWpiMjF3WVc1NUwyRnRZV3gwYnkxMFpXTm9ibTlzYjJkcFpYTWlJSFJoY21kbGREMGlYMkpzWVc1cklpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK1BHbHRaeUJ6Y21NOUltaDBkSEE2THk5alpHNHRhVzFoWjJWekxtMWhhV3hqYUdsdGNDNWpiMjB2YVdOdmJuTXZjMjlqYVdGc0xXSnNiMk5yTFhZeUwyTnZiRzl5TFd4cGJtdGxaR2x1TFRRNExuQnVaeUlnYzNSNWJHVTlJbVJwYzNCc1lYazZJR0pzYjJOck8ySnZjbVJsY2pvZ01EdG9aV2xuYUhRNklHRjFkRzg3YjNWMGJHbHVaVG9nYm05dVpUdDBaWGgwTFdSbFkyOXlZWFJwYjI0NklHNXZibVU3TFcxekxXbHVkR1Z5Y0c5c1lYUnBiMjR0Ylc5a1pUb2dZbWxqZFdKcFl6c2lJR2hsYVdkb2REMGlNalFpSUhkcFpIUm9QU0l5TkNJZ1kyeGhjM005SWlJK1BDOWhQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWW05a2VUNDhMM1JoWW14bFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJUzB0VzJsbUlHMXpiMTArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHdoTFMxYmFXWWdiWE52WFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JoYkdsbmJqMGlZMlZ1ZEdWeUlpQjJZV3hwWjI0OUluUnZjQ0krQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJoWW14bElHRnNhV2R1UFNKc1pXWjBJaUJpYjNKa1pYSTlJakFpSUdObGJHeHdZV1JrYVc1blBTSXdJaUJqWld4c2MzQmhZMmx1WnowaU1DSWdjM1I1YkdVOUltUnBjM0JzWVhrNklHbHViR2x1WlR0aWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdRZ2RtRnNhV2R1UFNKMGIzQWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYSnBaMmgwT2lBeE1IQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQTVjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUlnWTJ4aGMzTTlJbTFqYmtadmJHeHZkME52Ym5SbGJuUkpkR1Z0UTI5dWRHRnBibVZ5SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051Um05c2JHOTNRMjl1ZEdWdWRFbDBaVzBpSUhOMGVXeGxQU0ppYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFltOWtlVDQ4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHUWdZV3hwWjI0OUlteGxablFpSUhaaGJHbG5iajBpYldsa1pHeGxJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp5MTBiM0E2SURWd2VEdHdZV1JrYVc1bkxYSnBaMmgwT2lBeE1IQjRPM0JoWkdScGJtY3RZbTkwZEc5dE9pQTFjSGc3Y0dGa1pHbHVaeTFzWldaME9pQTVjSGc3YlhOdkxXeHBibVV0YUdWcFoyaDBMWEoxYkdVNklHVjRZV04wYkhrN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaFlteGxJR0ZzYVdkdVBTSnNaV1owSWlCaWIzSmtaWEk5SWpBaUlHTmxiR3h3WVdSa2FXNW5QU0l3SWlCalpXeHNjM0JoWTJsdVp6MGlNQ0lnZDJsa2RHZzlJaUlnYzNSNWJHVTlJbUp2Y21SbGNpMWpiMnhzWVhCelpUb2dZMjlzYkdGd2MyVTdiWE52TFhSaFlteGxMV3h6Y0dGalpUb2dNSEIwTzIxemJ5MTBZV0pzWlMxeWMzQmhZMlU2SURCd2REc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmliMlI1UGp4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSa0lHRnNhV2R1UFNKalpXNTBaWElpSUhaaGJHbG5iajBpYldsa1pHeGxJaUIzYVdSMGFEMGlNalFpSUdOc1lYTnpQU0p0WTI1R2IyeHNiM2RKWTI5dVEyOXVkR1Z1ZENJZ2MzUjViR1U5SW0xemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeGhJR2h5WldZOUltaDBkSEJ6T2k4dmRIZHBkSFJsY2k1amIyMHZRVzFoYkhSdklpQjBZWEpuWlhROUlsOWliR0Z1YXlJZ2MzUjViR1U5SW0xemJ5MXNhVzVsTFdobGFXZG9kQzF5ZFd4bE9pQmxlR0ZqZEd4NU95MXRjeTEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95MTNaV0pyYVhRdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHNpUGp4cGJXY2djM0pqUFNKb2RIUndPaTh2WTJSdUxXbHRZV2RsY3k1dFlXbHNZMmhwYlhBdVkyOXRMMmxqYjI1ekwzTnZZMmxoYkMxaWJHOWpheTEyTWk5amIyeHZjaTEwZDJsMGRHVnlMVFE0TG5CdVp5SWdjM1I1YkdVOUltUnBjM0JzWVhrNklHSnNiMk5yTzJKdmNtUmxjam9nTUR0b1pXbG5hSFE2SUdGMWRHODdiM1YwYkdsdVpUb2dibTl1WlR0MFpYaDBMV1JsWTI5eVlYUnBiMjQ2SUc1dmJtVTdMVzF6TFdsdWRHVnljRzlzWVhScGIyNHRiVzlrWlRvZ1ltbGpkV0pwWXpzaUlHaGxhV2RvZEQwaU1qUWlJSGRwWkhSb1BTSXlOQ0lnWTJ4aGMzTTlJaUkrUEM5aFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBqd3ZkR0ZpYkdVK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdKdlpIaytQQzkwWVdKc1pUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSa1Bnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrS0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQmhiR2xuYmowaVkyVnVkR1Z5SWlCMllXeHBaMjQ5SW5SdmNDSStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENGYlpXNWthV1pkTFMwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdsdWJHbHVaVHRpYjNKa1pYSXRZMjlzYkdGd2MyVTZJR052Ykd4aGNITmxPMjF6YnkxMFlXSnNaUzFzYzNCaFkyVTZJREJ3ZER0dGMyOHRkR0ZpYkdVdGNuTndZV05sT2lBd2NIUTdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWW05a2VUNDhkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnZG1Gc2FXZHVQU0owYjNBaUlITjBlV3hsUFNKd1lXUmthVzVuTFhKcFoyaDBPaUF3TzNCaFpHUnBibWN0WW05MGRHOXRPaUE1Y0hnN2JYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJZ1kyeGhjM005SW0xamJrWnZiR3h2ZDBOdmJuUmxiblJKZEdWdFEyOXVkR0ZwYm1WeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHRmliR1VnWW05eVpHVnlQU0l3SWlCalpXeHNjR0ZrWkdsdVp6MGlNQ0lnWTJWc2JITndZV05wYm1jOUlqQWlJSGRwWkhSb1BTSXhNREFsSWlCamJHRnpjejBpYldOdVJtOXNiRzkzUTI5dWRHVnVkRWwwWlcwaUlITjBlV3hsUFNKaWIzSmtaWEl0WTI5c2JHRndjMlU2SUdOdmJHeGhjSE5sTzIxemJ5MTBZV0pzWlMxc2MzQmhZMlU2SURCd2REdHRjMjh0ZEdGaWJHVXRjbk53WVdObE9pQXdjSFE3TFcxekxYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3TFhkbFltdHBkQzEwWlhoMExYTnBlbVV0WVdScWRYTjBPaUF4TURBbE95SStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBZbTlrZVQ0OGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhkR1FnWVd4cFoyNDlJbXhsWm5RaUlIWmhiR2xuYmowaWJXbGtaR3hsSWlCemRIbHNaVDBpY0dGa1pHbHVaeTEwYjNBNklEVndlRHR3WVdSa2FXNW5MWEpwWjJoME9pQXhNSEI0TzNCaFpHUnBibWN0WW05MGRHOXRPaUExY0hnN2NHRmtaR2x1Wnkxc1pXWjBPaUE1Y0hnN2JYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmhZbXhsSUdGc2FXZHVQU0pzWldaMElpQmliM0prWlhJOUlqQWlJR05sYkd4d1lXUmthVzVuUFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ2QybGtkR2c5SWlJZ2MzUjViR1U5SW1KdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQSFJpYjJSNVBqeDBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR0ZzYVdkdVBTSmpaVzUwWlhJaUlIWmhiR2xuYmowaWJXbGtaR3hsSWlCM2FXUjBhRDBpTWpRaUlHTnNZWE56UFNKdFkyNUdiMnhzYjNkSlkyOXVRMjl1ZEdWdWRDSWdjM1I1YkdVOUltMXpieTFzYVc1bExXaGxhV2RvZEMxeWRXeGxPaUJsZUdGamRHeDVPeTF0Y3kxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeTEzWldKcmFYUXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzaVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHhoSUdoeVpXWTlJbWgwZEhCek9pOHZkM2QzTG5sdmRYUjFZbVV1WTI5dEwyTm9ZVzV1Wld3dlZVTTVWMWd0YWtWaFExaHRPRlJXTTNKa1kwTnBOMk4zSWlCMFlYSm5aWFE5SWw5aWJHRnVheUlnYzNSNWJHVTlJbTF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc2lQanhwYldjZ2MzSmpQU0pvZEhSd09pOHZZMlJ1TFdsdFlXZGxjeTV0WVdsc1kyaHBiWEF1WTI5dEwybGpiMjV6TDNOdlkybGhiQzFpYkc5amF5MTJNaTlqYjJ4dmNpMTViM1YwZFdKbExUUTRMbkJ1WnlJZ2MzUjViR1U5SW1ScGMzQnNZWGs2SUdKc2IyTnJPMkp2Y21SbGNqb2dNRHRvWldsbmFIUTZJR0YxZEc4N2IzVjBiR2x1WlRvZ2JtOXVaVHQwWlhoMExXUmxZMjl5WVhScGIyNDZJRzV2Ym1VN0xXMXpMV2x1ZEdWeWNHOXNZWFJwYjI0dGJXOWtaVG9nWW1samRXSnBZenNpSUdobGFXZG9kRDBpTWpRaUlIZHBaSFJvUFNJeU5DSWdZMnhoYzNNOUlpSStQQzloUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFltOWtlVDQ4TDNSaFlteGxQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwWkQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmliMlI1UGp3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1J5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0tDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVMwdFcybG1JRzF6YjEwK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aExTMWJhV1lnYlhOdlhUNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3aFcyVnVaR2xtWFMwdFBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSaWIyUjVQand2ZEdGaWJHVStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUmtQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHSnZaSGsrUEM5MFlXSnNaVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHUStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBjajRLQ1FrSkNRa0pDUWtKQ1FrSkNRazhMM1JpYjJSNVBnb0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFlXSnNaVDQ4ZEdGaWJHVWdZbTl5WkdWeVBTSXdJaUJqWld4c2NHRmtaR2x1WnowaU1DSWdZMlZzYkhOd1lXTnBibWM5SWpBaUlIZHBaSFJvUFNJeE1EQWxJaUJqYkdGemN6MGliV051UkdsMmFXUmxja0pzYjJOcklpQnpkSGxzWlQwaWJXbHVMWGRwWkhSb09pQXhNREFsTzJKdmNtUmxjaTFqYjJ4c1lYQnpaVG9nWTI5c2JHRndjMlU3YlhOdkxYUmhZbXhsTFd4emNHRmpaVG9nTUhCME8yMXpieTEwWVdKc1pTMXljM0JoWTJVNklEQndkRHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN2RHRmliR1V0YkdGNWIzVjBPaUJtYVhobFpDQWhhVzF3YjNKMFlXNTBPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrZ1kyeGhjM005SW0xamJrUnBkbWxrWlhKQ2JHOWphMDkxZEdWeUlqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNUeDBaQ0JqYkdGemN6MGliV051UkdsMmFXUmxja0pzYjJOclNXNXVaWElpSUhOMGVXeGxQU0p0YVc0dGQybGtkR2c2SURFd01DVTdjR0ZrWkdsdVp6b2dOWEI0SURFNGNIZ2dNakJ3ZUR0dGMyOHRiR2x1WlMxb1pXbG5hSFF0Y25Wc1pUb2daWGhoWTNSc2VUc3RiWE10ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUc3RkMlZpYTJsMExYUmxlSFF0YzJsNlpTMWhaR3AxYzNRNklERXdNQ1U3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JqYkdGemN6MGliV051UkdsMmFXUmxja052Ym5SbGJuUWlJR0p2Y21SbGNqMGlNQ0lnWTJWc2JIQmhaR1JwYm1jOUlqQWlJR05sYkd4emNHRmphVzVuUFNJd0lpQjNhV1IwYUQwaU1UQXdKU0lnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdGliM0prWlhJdGRHOXdMWGRwWkhSb09pQXljSGc3WW05eVpHVnlMWFJ2Y0MxemRIbHNaVG9nYzI5c2FXUTdZbTl5WkdWeUxYUnZjQzFqYjJ4dmNqb2dJMFZGUlVWRlJUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEhSaWIyUjVQangwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJSE4wZVd4bFBTSnRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHh6Y0dGdVBqd3ZjM0JoYmo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBaRDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4TDNSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0OEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUENFdExRb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJR05zWVhOelBTSnRZMjVFYVhacFpHVnlRbXh2WTJ0SmJtNWxjaUlnYzNSNWJHVTlJbkJoWkdScGJtYzZJREU0Y0hnN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhhSElnWTJ4aGMzTTlJbTFqYmtScGRtbGtaWEpEYjI1MFpXNTBJaUJ6ZEhsc1pUMGlZbTl5WkdWeUxXSnZkSFJ2YlMxamIyeHZjanB1YjI1bE95QmliM0prWlhJdGJHVm1kQzFqYjJ4dmNqcHViMjVsT3lCaWIzSmtaWEl0Y21sbmFIUXRZMjlzYjNJNmJtOXVaVHNnWW05eVpHVnlMV0p2ZEhSdmJTMTNhV1IwYURvd095QmliM0prWlhJdGJHVm1kQzEzYVdSMGFEb3dPeUJpYjNKa1pYSXRjbWxuYUhRdGQybGtkR2c2TURzZ2JXRnlaMmx1TFhSdmNEb3dPeUJ0WVhKbmFXNHRjbWxuYUhRNk1Ec2diV0Z5WjJsdUxXSnZkSFJ2YlRvd095QnRZWEpuYVc0dGJHVm1kRG93T3lJZ0x6NEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa3RMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0S0NRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdGaWJHVStQSFJoWW14bElHSnZjbVJsY2owaU1DSWdZMlZzYkhCaFpHUnBibWM5SWpBaUlHTmxiR3h6Y0dGamFXNW5QU0l3SWlCM2FXUjBhRDBpTVRBd0pTSWdZMnhoYzNNOUltMWpibFJsZUhSQ2JHOWpheUlnYzNSNWJHVTlJbTFwYmkxM2FXUjBhRG9nTVRBd0pUdGliM0prWlhJdFkyOXNiR0Z3YzJVNklHTnZiR3hoY0hObE8yMXpieTEwWVdKc1pTMXNjM0JoWTJVNklEQndkRHR0YzI4dGRHRmliR1V0Y25Od1lXTmxPaUF3Y0hRN0xXMXpMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0xYZGxZbXRwZEMxMFpYaDBMWE5wZW1VdFlXUnFkWE4wT2lBeE1EQWxPeUkrQ2drSkNRa0pDUWtKQ1FrSkNRazhkR0p2WkhrZ1kyeGhjM005SW0xamJsUmxlSFJDYkc5amEwOTFkR1Z5SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWs4ZEhJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFpDQjJZV3hwWjI0OUluUnZjQ0lnWTJ4aGMzTTlJbTFqYmxSbGVIUkNiRzlqYTBsdWJtVnlJaUJ6ZEhsc1pUMGljR0ZrWkdsdVp5MTBiM0E2SURsd2VEdHRjMjh0YkdsdVpTMW9aV2xuYUhRdGNuVnNaVG9nWlhoaFkzUnNlVHN0YlhNdGRHVjRkQzF6YVhwbExXRmthblZ6ZERvZ01UQXdKVHN0ZDJWaWEybDBMWFJsZUhRdGMybDZaUzFoWkdwMWMzUTZJREV3TUNVN0lqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGliR1ZtZENJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzYzNCaFkybHVaejBpTUNJZ1kyVnNiSEJoWkdScGJtYzlJakFpSUhkcFpIUm9QU0l4TURBbElpQnpkSGxzWlQwaWQybGtkR2c2TVRBd0pUc2lQZ29KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MGNqNEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHgwWkNCMllXeHBaMjQ5SW5SdmNDSWdkMmxrZEdnOUlqWXdNQ0lnYzNSNWJHVTlJbmRwWkhSb09qWXdNSEI0T3lJK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhJVnRsYm1ScFpsMHRMVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R4MFlXSnNaU0JoYkdsbmJqMGliR1ZtZENJZ1ltOXlaR1Z5UFNJd0lpQmpaV3hzY0dGa1pHbHVaejBpTUNJZ1kyVnNiSE53WVdOcGJtYzlJakFpSUhOMGVXeGxQU0p0WVhndGQybGtkR2c2SURFd01DVTdiV2x1TFhkcFpIUm9PaUF4TURBbE8ySnZjbVJsY2kxamIyeHNZWEJ6WlRvZ1kyOXNiR0Z3YzJVN2JYTnZMWFJoWW14bExXeHpjR0ZqWlRvZ01IQjBPMjF6YnkxMFlXSnNaUzF5YzNCaFkyVTZJREJ3ZERzdGJYTXRkR1Y0ZEMxemFYcGxMV0ZrYW5WemREb2dNVEF3SlRzdGQyVmlhMmwwTFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdJaUIzYVdSMGFEMGlNVEF3SlNJZ1kyeGhjM005SW0xamJsUmxlSFJEYjI1MFpXNTBRMjl1ZEdGcGJtVnlJajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOGRHSnZaSGsrUEhSeVBnb0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBIUmtJSFpoYkdsbmJqMGlkRzl3SWlCamJHRnpjejBpYldOdVZHVjRkRU52Ym5SbGJuUWlJSE4wZVd4bFBTSndZV1JrYVc1bkxYUnZjRG9nTUR0d1lXUmthVzVuTFhKcFoyaDBPaUF4T0hCNE8zQmhaR1JwYm1jdFltOTBkRzl0T2lBNWNIZzdjR0ZrWkdsdVp5MXNaV1owT2lBeE9IQjRPMjF6Ynkxc2FXNWxMV2hsYVdkb2RDMXlkV3hsT2lCbGVHRmpkR3g1T3kxdGN5MTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsT3kxM1pXSnJhWFF0ZEdWNGRDMXphWHBsTFdGa2FuVnpkRG9nTVRBd0pUdDNiM0prTFdKeVpXRnJPaUJpY21WaGF5MTNiM0prTzJOdmJHOXlPaUFqTmpVMk5UWTFPMlp2Ym5RdFptRnRhV3g1T2lCVVlXaHZiV0VzSUZabGNtUmhibUVzSUZObFoyOWxMQ0J6WVc1ekxYTmxjbWxtTzJadmJuUXRjMmw2WlRvZ01USndlRHRzYVc1bExXaGxhV2RvZERvZ01UVXdKVHQwWlhoMExXRnNhV2R1T2lCalpXNTBaWEk3SWo0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUW9KQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSlBHUnBkaUJ6ZEhsc1pUMGlkR1Y0ZEMxaGJHbG5iam9nWTJWdWRHVnlPeUkrVUd4bFlYTmxJR1J2SUc1dmRDQnlaWEJzZVNCMGJ5QjBhR2x6SUdVdGJXRnBiQzRnVkdobElITmxibVJsY2lCbGJXRnBiQ0JoWkdSeVpYTnpJR2x6SUc1dmRDQnRiMjVwZEc5eVpXUXVQR0p5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVVp2Y2lCaGJua2djWFZsYzNScGIyNHNJSEJzWldGelpTQThZU0JvY21WbVBTSnRZV2xzZEc4NlkyOXVkR0ZqZEVCd2JHRjBabTl5YlRZdWFXOGlJSFJoY21kbGREMGlYMkpzWVc1cklpQnpkSGxzWlQwaWJYTnZMV3hwYm1VdGFHVnBaMmgwTFhKMWJHVTZJR1Y0WVdOMGJIazdMVzF6TFhSbGVIUXRjMmw2WlMxaFpHcDFjM1E2SURFd01DVTdMWGRsWW10cGRDMTBaWGgwTFhOcGVtVXRZV1JxZFhOME9pQXhNREFsTzJOdmJHOXlPaUFqTmpVMk5UWTFPMlp2Ym5RdGQyVnBaMmgwT2lCdWIzSnRZV3c3ZEdWNGRDMWtaV052Y21GMGFXOXVPaUIxYm1SbGNteHBibVU3SWo1elpXNWtJSFZ6SUdFZ2JXVnpjMkZuWlR3dllUNHVQR0p5UGdvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHhpY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWs4YzNSeWIyNW5QbEJzWVhSbWIzSnRJRFlnWW5rZ1FXMWhiSFJ2SUZSbFkyaHViMnh2WjJsbGN6d3ZjM1J5YjI1blBqeGljajRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRazhZbkkrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRbkNxU1p1WW5Od095UjdMbTV2ZHo5emRISnBibWN1ZVhsNWVYMG1ibUp6Y0R0RGIzQjVjbWxuYUhRdUlFRnNiQ0J5YVdkb2RITWdjbVZ6WlhKMlpXUXVQQzlrYVhZK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDVHd2ZEdRK0Nna0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd3ZkR0p2WkhrK1BDOTBZV0pzWlQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNUd2hMUzFiYVdZZ2JYTnZYVDRLQ1FrSkNRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQ0ZiWlc1a2FXWmRMUzArQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FvSkNRa0pDUWtKQ1FrSkNRa0pDUWtKQ1FrOElTMHRXMmxtSUcxemIxMCtDZ2tKQ1FrSkNRa0pDUWtKQ1FrSkNRa0pQQzkwY2o0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKQ1R3dmRHRmliR1UrQ2drSkNRa0pDUWtKQ1FrSkNRa0pDUWs4SVZ0bGJtUnBabDB0TFQ0S0NRa0pDUWtKQ1FrSkNRa0pDUWtKUEM5MFpENEtDUWtKQ1FrSkNRa0pDUWtKQ1FrOEwzUnlQZ29KQ1FrSkNRa0pDUWtKQ1FrSlBDOTBZbTlrZVQ0S0NRa0pDUWtKQ1FrSkNRa0pQQzkwWVdKc1pUNDhMM1JrUGdvSkNRa0pDUWtKQ1FrSkNUd3ZkSEkrQ2drSkNRa0pDUWtKQ1FrOEwzUmhZbXhsUGdvSkNRa0pDUWtKQ1FrSlBDRXRMVnRwWmlCbmRHVWdiWE52SURsZFBnb0pDUWtKQ1FrSkNRazhMM1JrUGdvSkNRa0pDUWtKQ1R3dmRISStDZ2tKQ1FrSkNRazhMM1JoWW14bFBnb0pDUWtKQ1FrSlBDRmJaVzVrYVdaZExTMCtDZ2tKQ1FrSkNUd3ZkR1ErQ2drSkNRa0pQQzkwY2o0S0NRa0pDVHd2ZEdGaWJHVStDZ2tKQ1FrOElTMHRJQzh2SUVWT1JDQlVSVTFRVEVGVVJTQXRMVDRLQ1FrSlBDOTBaRDRLQ1FrOEwzUnlQZ29KUEM5MFlXSnNaVDRLQ1R3dlkyVnVkR1Z5UGdvOEwySnZaSGsrQ2p3dmFIUnRiRDRLXCIsXCJ0YXJnZXRSb290XCI6XCIke1A2X0RBVEF9XCIsXCJ0YXJnZXRQYXRoXCI6XCIvcmVzb3VyY2VzL3RlbXBsYXRlcy9wNmRlbW9fUE9SZXZpZXcuZnRsXCIsXCJwcm9wc1wiOnt9LFwiZGVwbG95ZWRcIjpmYWxzZSxcImhhc0J5dGVzQXR0YWNobWVudFwiOnRydWUsXCJhdHRhY2htZW50TmFtZVwiOlwicDZkZW1vX1BPUmV2aWV3LmZ0bFwiLFwiYXR0YWNobWVudFNpemVcIjo0ODA4NH0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzODk0NzZ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuYnVuZGxlZHJlc291cmNlcyIsIm5hbWUiOiJUYWJsZUl0ZW1zRGF0YSIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRhYmxlSXRlbXNEYXRhXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkNTViBmaWxlIHRvIGltcG9ydCBpbnRvIHRhYmxlIEl0ZW1zXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5NDQyLFwicmV2aXNpb25JZFwiOlwiNGUyNzBkNjAwM2ZkNzhkYTZhOGQ3ZDA1MjdlYmIyNmFcIixcIml0ZW1CeXRlc1wiOlwiU1dRc1JHVnpZM0pwY0hScGIyNHNWVzVwZEZCeWFXTmxMRU4xY25KbGJtTjVMRlZQVFN4RFlYUmxaMjl5ZVFvd01ETTBNelExTEZOcGJIWmxjaUJJWld4dFpYUXNNakFzVlZORUxFVkJMRWhsYkcxbGRBb3hNVEV4TVRFc1UyeHZkSFJsWkNCVFkzSmxkMlJ5YVhabGNpd3lOU3hWVTBRc1JVRXNVMk55Wlhka2NtbDJaWElLTVRNNU5EVXhNVEVzVUd4aGMzUnBZeUJJWld4dFpYUXNNVE1zVlZORUxFVkJMRWhsYkcxbGRBb3hOamMyTnpnc1EyeGhkeUJJWVcxdFpYSXNNVFVzVlZORUxFVkJMRWhoYlcxbGNnb3lNakl5TWpJc1VHaHBiR2x3Y3lCVFkzSmxkMlJ5YVhabGNpd3lOeXhWVTBRc1JVRXNVMk55Wlhka2NtbDJaWElLTWpJeU1qSTBMRkJ2ZW1sa2NtbDJJRk5qY21WM1pISnBkbVZ5TERNd0xGVlRSQ3hGUVN4VFkzSmxkMlJ5YVhabGNnbzBORFExTmpZc1EyeDFZaUJJWVcxdFpYSXNNakFzVlZORUxFVkJMRWhoYlcxbGNnbzRPVE15TWpNc1UyeGxaR2RsSUVoaGJXMWxjaXd4TURBc1ZWTkVMRVZCTEVoaGJXMWxjZ289XCIsXCJ0YXJnZXRSb290XCI6XCIke1RNUH1cIixcInRhcmdldFBhdGhcIjpcIi9wNl9kZW1vX2l0ZW1zLmNzdlwiLFwicHJvcHNcIjp7fSxcImRlcGxveWVkXCI6ZmFsc2UsXCJoYXNCeXRlc0F0dGFjaG1lbnRcIjp0cnVlLFwiYXR0YWNobWVudE5hbWVcIjpcInRhYmxlX3A2X2RlbW8uSXRlbXNfZGF0YV9leHBvcnQuY3N2XCIsXCJhdHRhY2htZW50U2l6ZVwiOjM4Nn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzODk0NDJ9XSwicGxhdGZvcm02LmNvdW50ZXJzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5jb3VudGVycyIsIm5hbWUiOiJDb3VudFJGUXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJDb3VudFJGUXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiIyBvZiBSRlFzIHdpdGggXFxcIlJlY2VpdmVkXFxcIiB0ZWNobmljYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5NTQ3LFwicmV2aXNpb25JZFwiOlwiMzIxMThhODg0NGEyZTY1ZTA5MjZlNzk2YTdlZjdhM2VcIixcImxhc3RTeW5jRGF0ZVwiOm51bGwsXCJ2YWx1ZVwiOm51bGwsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9UcmFuc2FjdGlvbkluZm9bVHJhbnNhY3Rpb25UeXBlID0gXFxcIlJlcXVlc3QgRm9yIFF1b3RhdGlvblxcXCIgXVtUZWNobmljYWxTdGF0dXNDb2RlID0gXFxcIlJlY2VpdmVkXFxcIiBdW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA8IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MG19XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMywyKSldW2NvbmNhdChzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEsOCksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMCwyKSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEzLDIpKSA+IGNvbmNhdChzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxLDgpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEzLDIpKV1cIixcInRhcmdldFwiOlwiVHJhbnNhY3Rpb25cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzODk1NDd9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYuY291bnRlcnMiLCJuYW1lIjoiQ291bnRRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJDb3VudFF1b3Rlc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFF1b3RlcyB3aXRoIFxcXCJTZW50XFxcIiB0ZWNobmljYWwgc3RhdHVzIChvdmVyIHRoZSBwYXN0IDkwIGRheXMpXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5NTY0LFwicmV2aXNpb25JZFwiOlwiMmQ2MTg4NmQwMmI3ZWU0NTA2NzIzNmJiMzA0OTcyNTBcIixcImxhc3RTeW5jRGF0ZVwiOm51bGwsXCJ2YWx1ZVwiOm51bGwsXCJ0eXBlXCI6XCJDT1VOVFwiLFwicXVlcnlcIjpcIi9UcmFuc2FjdGlvbkluZm9bVHJhbnNhY3Rpb25UeXBlID0gXFxcIlF1b3RlXFxcIiBdW1RlY2huaWNhbFN0YXR1c0NvZGUgPSBcXFwiU2VudFxcXCIgXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPCBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBtfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEwLDIpLHN1YnN0cmluZyhcXFwiJHtEQVRFLTBtfVxcXCIsMTMsMikpXVtjb25jYXQoc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxLDgpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTAsMiksc3Vic3RyaW5nKENyZWF0aW9uRGF0ZSwxMywyKSkgPiBjb25jYXQoc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMSw4KSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS05MGR9XFxcIiwxMywyKSldXCIsXCJ0YXJnZXRcIjpcIlRyYW5zYWN0aW9uXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1Mzg5NTY0fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmNvdW50ZXJzIiwibmFtZSI6IkNvdW50RmFpbGVkUm91dGluZ09yZGVycyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkNvdW50RmFpbGVkUm91dGluZ09yZGVyc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIEZhaWxlZCBSb3V0aW5nIE9yZGVyc1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM4OTU3NixcInJldmlzaW9uSWRcIjpcIjY0NTNlZmFiODk1MzJkMzAzOTkwMzE2ZDViY2MzYTZjXCIsXCJsYXN0U3luY0RhdGVcIjpudWxsLFwidmFsdWVcIjpudWxsLFwidHlwZVwiOlwiQ09VTlRcIixcInF1ZXJ5XCI6XCIvcm91dGluZ09yZGVyXCIsXCJ0YXJnZXRcIjpcIkZhaWxlZFJvdXRpbmdPcmRlclwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM4OTU3Nn0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5jb3VudGVycyIsIm5hbWUiOiJDb3VudFJlamVjdGVkUE9zIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRSZWplY3RlZFBPc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFB1cmNoYXNlIE9yZGVycyB3aXRoIFxcXCJSZWplY3RlZFxcXCIgZnVuY3Rpb25hbCBzdGF0dXMgKG92ZXIgdGhlIHBhc3QgOTAgZGF5cylcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzODk1OTAsXCJyZXZpc2lvbklkXCI6XCIyN2JlMWIxMGRhMTk5YzlhM2MzZDgzYWJlZjc2NTJiOFwiLFwibGFzdFN5bmNEYXRlXCI6bnVsbCxcInZhbHVlXCI6bnVsbCxcInR5cGVcIjpcIkNPVU5UXCIsXCJxdWVyeVwiOlwiL1RyYW5zYWN0aW9uSW5mb1tUcmFuc2FjdGlvblR5cGUgPSBcXFwiUHVyY2hhc2UgT3JkZXJcXFwiIF1bRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSBcXFwiUmVqZWN0ZWRcXFwiIF1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpIDwgY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwbX1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEzLDIpKV1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpID4gY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTMsMikpXVwiLFwidGFyZ2V0XCI6XCJUcmFuc2FjdGlvblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM4OTU5MH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5jb3VudGVycyIsIm5hbWUiOiJDb3VudEFjY2VwdGVkUE9zIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiQ291bnRBY2NlcHRlZFBPc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCIjIG9mIFB1cmNoYXNlIE9yZGVycyB3aXRoIFxcXCJBY2NlcHRlZFxcXCIgZnVuY3Rpb25hbCBzdGF0dXMgKG92ZXIgdGhlIHBhc3QgOTAgZGF5cylcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzODk1MjksXCJyZXZpc2lvbklkXCI6XCJhODk2NzBhYTllMGNmNmUxZTU0ZWM1NGQ5YTYyYzAxOFwiLFwibGFzdFN5bmNEYXRlXCI6bnVsbCxcInZhbHVlXCI6bnVsbCxcInR5cGVcIjpcIkNPVU5UXCIsXCJxdWVyeVwiOlwiL1RyYW5zYWN0aW9uSW5mb1tUcmFuc2FjdGlvblR5cGUgPSBcXFwiUHVyY2hhc2UgT3JkZXJcXFwiIF1bRnVuY3Rpb25hbFN0YXR1c0NvZGUgPSBcXFwiQWNjZXB0ZWRcXFwiIF1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpIDwgY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwbX1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtMG19XFxcIiwxMCwyKSxzdWJzdHJpbmcoXFxcIiR7REFURS0wbX1cXFwiLDEzLDIpKV1bY29uY2F0KHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMSw4KSxzdWJzdHJpbmcoQ3JlYXRpb25EYXRlLDEwLDIpLHN1YnN0cmluZyhDcmVhdGlvbkRhdGUsMTMsMikpID4gY29uY2F0KHN1YnN0cmluZyhcXFwiJHtEQVRFLTkwZH1cXFwiLDEsOCksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTAsMiksc3Vic3RyaW5nKFxcXCIke0RBVEUtOTBkfVxcXCIsMTMsMikpXVwiLFwidGFyZ2V0XCI6XCJUcmFuc2FjdGlvblwifSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM4OTUyOX1dLCJwbGF0Zm9ybTYudmlld3MiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnZpZXdzIiwibmFtZSI6IlRyYW5zYWN0aW9ucyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlRyYW5zYWN0aW9uc1wiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJUcmFuc2FjdGlvbnMgZm9yIHA2X2RlbW9cIixcIkZSXCI6XCJUcmFuc2FjdGlvbnMgcG91ciBwNl9kZW1vXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1MzkwNDM1LFwicmV2aXNpb25JZFwiOlwiYjdhOTFmZDkwYjdkYWE5YmYwMTk1NjcxYjc2YWFjOTNcIixcInR5cGVcIjpcIlRSQU5TQUNUSU9OU1wiLFwieG1sVmlld1wiOlwiPFZpZXc+XFxuICAgIDxTbWFydFRhZ3M+XFxuICAgICAgICA8VHJhbnNhY3Rpb25UeXBlPlRyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvblR5cGU8L1RyYW5zYWN0aW9uVHlwZT5cXG4gICAgICAgIDxUcmFuc2FjdGlvbkZvcm1hdD5UcmFuc2FjdGlvbkluZm8vUGl2b3REb2N1bWVudEZvcm1hdDwvVHJhbnNhY3Rpb25Gb3JtYXQ+XFxuICAgIDwvU21hcnRUYWdzPlxcbiAgICA8RGF0YVR5cGU+cDZfZGVtby5UcmFuc2FjdGlvbkluZm88L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPnA2X2RlbW8uVHJhbnNhY3Rpb25JbmZvPC9EYXRhTW9kZWw+XFxuICAgIDxEYXRhUGFydGl0aW9uPlRSQU5TQUNUSU9OPC9EYXRhUGFydGl0aW9uPlxcbiAgICA8UmVwcm9jZXNzUm91dGVVcmk+ZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fRGlzcGF0Y2hlcjwvUmVwcm9jZXNzUm91dGVVcmk+XFxuICAgIDxMaXN0T2ZLZXlzPlxcbiAgICAgICAgPEtleT5cXG4gICAgICAgICAgICA8TmFtZT5JZDwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5JZDwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5JZDwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0lkPC9YUGF0aD5cXG4gICAgICAgIDwvS2V5PlxcbiAgICA8L0xpc3RPZktleXM+XFxuICAgIDxMaXN0T2ZTZWFyY2hhYmxlcz5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkxvYWREYXRlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkxvYWQgRGF0ZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5EYXRlIGRlIGNyw6lhdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0NyZWF0aW9uRGF0ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+UmFuZ2VPZkRhdGVzKHl5eXlNTWRkJ1QnSEg6bW06c3MpPC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+U3RhdHVzRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UZWNoLiBTdGF0dXMgRGF0ZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5EYXRlIGRlIG1vZGlmLiBTdGF0dXQgVGVjaC48L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNEYXRlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5SYW5nZU9mRGF0ZXMoeXl5eU1NZGQnVCdISDptbTpzcyk8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UcmFuc2FjdGlvblR5cGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGRlIHRyYW5zYWN0aW9uPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgICAgICA8Q2hvaWNlIGZpZWxkLWxpbmUtaGVpZ2h0PVxcXCIxXFxcIiBtdWx0aS1zZWxlY3Q9XFxcInRydWVcXFwiIG11bHRpLXNlbGVjdC1kZWxpbWl0ZXI9XFxcInxcXFwiPlJlcXVlc3QgZm9yIFF1b3RhdGlvbiwgUXVvdGUsIFB1cmNoYXNlIE9yZGVyPC9DaG9pY2U+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UcmFuc2FjdGlvbk51bWJlcjwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UcmFuc2FjdGlvbiBOdW1iZXI8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+TnVtw6lybyBkZSB0cmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uTnVtYmVyPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkJ1eWVyTmFtZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5CdXllciBOYW1lPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk5vbSBkZSBsJ2FjaGV0ZXVyPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vS2V5VmFsdWVbLi9LZXkgPSBcXFwiQnV5ZXIgTmFtZVxcXCJdL1ZhbHVlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPktleXdvcmRzPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPktleXdvcmRzPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk1vdHMgY2xlZnM8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mbzwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5UZWNobmljYWxTdGF0dXNDb2RlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlRlY2huaWNhbCBTdGF0dXM8L0VOPlxcbiAgICAgICAgICAgICAgICA8RlI+U3RhdHV0IHRlY2huaXF1ZTwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0NvZGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZ0NvbnRhaW5zPC9UeXBlPlxcbiAgICAgICAgICAgIDxDaG9pY2UgZmllbGQtbGluZS1oZWlnaHQ9XFxcIjJcXFwiIG11bHRpLXNlbGVjdD1cXFwidHJ1ZVxcXCIgbXVsdGktc2VsZWN0LWRlbGltaXRlcj1cXFwifFxcXCI+SGFuZGxlZCxSZWNlaXZlZCxTZW50PC9DaG9pY2U+XFxuICAgICAgICA8L1NlYXJjaGFibGU+XFxuICAgICAgICA8U2VhcmNoYWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5GdW5jdGlvbmFsU3RhdHVzQ29kZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5GdW5jdGlvbmFsIFN0YXR1czwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgZm9uY3Rpb25uZWw8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9GdW5jdGlvbmFsU3RhdHVzQ29kZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nQ29udGFpbnM8L1R5cGU+XFxuICAgICAgICAgICAgPENob2ljZSBmaWVsZC1saW5lLWhlaWdodD1cXFwiMlxcXCIgbXVsdGktc2VsZWN0PVxcXCJ0cnVlXFxcIiBtdWx0aS1zZWxlY3QtZGVsaW1pdGVyPVxcXCJ8XFxcIj5BY2NlcHRlZCxEZWNsaW5lZCxRdW90ZSBwcm92aWRlZCxSZWplY3RlZDwvQ2hvaWNlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICA8L0xpc3RPZlNlYXJjaGFibGVzPlxcbiAgICA8TGlzdE9mVmlld2FibGVzPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkxvYWREYXRlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkxvYWQgRGF0ZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5EYXRlIGRlIGNyw6lhdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0NyZWF0aW9uRGF0ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+RGF0ZSh5eXl5TU1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+U3RhdHVzRGF0ZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5TdGF0dXMgRGF0ZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5EYXRlIHN0YXR1dDwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0RhdGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eU1NZGQnVCdISDptbTpzcyk8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlRyYW5zYWN0aW9uVHlwZTwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UcmFuc2FjdGlvbiBUeXBlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlR5cGUgZGUgdHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvblR5cGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+VHJhbnNhY3Rpb25OdW1iZXI8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VHJhbnNhY3Rpb24gIzwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5OwrAgZGUgdHJhbnNhY3Rpb248L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPlRyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvbk51bWJlcjwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5TZWxsZXJOYW1lPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPlNlbGxlciBOYW1lPC9FTj5cXG4gICAgICAgICAgICAgICAgIDxGUj5Ob20gdmVuZGV1cjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlW0tleT1cXFwiU2VsbGVyIE5hbWVcXFwiXS9WYWx1ZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+U3RyaW5nPC9UeXBlPlxcbiAgICAgICAgPC9WaWV3YWJsZT5cXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5CdXllck5hbWU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+QnV5ZXIgTmFtZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5Ob20gZGUgbCdhY2hldGV1cjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0tleVZhbHVlW0tleT1cXFwiQnV5ZXIgTmFtZVxcXCJdL1ZhbHVlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPlRlY2huaWNhbFN0YXR1c0NvZGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+VGVjaC4gU3RhdHVzPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlN0YXR1dCB0ZWNoLjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0NvZGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+RnVuY3Rpb25hbFN0YXR1c0NvZGU8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+RnVuY3QuIFN0YXR1czwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5TdGF0dXQgZm9uY3QuPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vRnVuY3Rpb25hbFN0YXR1c0NvZGU8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPlN0cmluZzwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+RnVuY3Rpb25hbFN0YXR1c01lc3NhZ2U8L05hbWU+XFxuICAgICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgICAgICA8RU4+RnVuY3QuIFN0YXR1cyBNc2cuPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPlN0YXR1dCBGb25jdC4gTXNnLjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL0Z1bmN0aW9uYWxTdGF0dXNNZXNzYWdlPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkRvY3VtZW50PC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvY3VtZW50PC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjY8OocyBkb2MuPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5UcmFuc2FjdGlvbkluZm8vVGFyZ2V0RG9jdW1lbnRVUkk8L1hQYXRoPlxcbiAgICAgICAgICAgICA8VHlwZT5VUkk8L1R5cGU+XFxuICAgICAgICA8L1ZpZXdhYmxlPlxcbiAgICAgICAgXFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgPE5hbWU+aXRlbUxpbms8L05hbWU+XFxuICAgICAgICAgPERlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxFTj5Xb3JrIEl0ZW08L0VOPlxcbiAgICAgICAgICAgIDxGUj5UcmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICA8WFBhdGg+VHJhbnNhY3Rpb25JbmZvL1dvcmtmbG93L0luc3RhbmNlL2ZsaW5rPC9YUGF0aD5cXG4gICAgICAgICA8VHlwZT5JdGVtTGluazwvVHlwZT5cXG4gICAgICA8L1ZpZXdhYmxlPlxcbiAgICA8L0xpc3RPZlZpZXdhYmxlcz5cXG48L1ZpZXc+XFxuXCJ9IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1MzkwNDM1fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnZpZXdzIiwibmFtZSI6IldvcmtmbG93IFRhc2tzIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiV29ya2Zsb3cgVGFza3NcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiV29ya2Zsb3cgVGFza3MgZm9yIHA2X2RlbW9cIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzOTA0NTEsXCJyZXZpc2lvbklkXCI6XCIzNjc5NTBjODY5YWYyM2FmMzFkMmRhNWJmZDVmNGQ2ZVwiLFwidHlwZVwiOlwiV09SS0lURU1TXCIsXCJ4bWxWaWV3XCI6XCI8Vmlldz5cXG4gICAgPFNtYXJ0VGFncy8+XFxuICAgIDxEYXRhVHlwZT5Xb3JrZmxvd1Rhc2s8L0RhdGFUeXBlPlxcbiAgICA8RGF0YU1vZGVsPldvcmtmbG93VGFzazwvRGF0YU1vZGVsPlxcbiAgICA8RGF0YVBhcnRpdGlvbj5UUkFOU0FDVElPTjwvRGF0YVBhcnRpdGlvbj5cXG4gICAgPFJlcHJvY2Vzc1JvdXRlVXJpLz5cXG4gICAgPExpc3RPZktleXM+XFxuICAgICAgICA8S2V5PlxcbiAgICAgICAgICAgIDxOYW1lPklkPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPklkPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPklkPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaWQ8L1hQYXRoPlxcbiAgICAgICAgPC9LZXk+XFxuICAgIDwvTGlzdE9mS2V5cz5cXG4gICAgPExpc3RPZlNlYXJjaGFibGVzPlxcbiAgICAgICAgPFNlYXJjaGFibGU+XFxuICAgICAgICAgICAgPE5hbWU+RG9jLiBUeXBlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UeXBlIGR1IERvYzwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25UeXBlXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkRvYy4gTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkRvYy4gTnVtYmVyPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPk7CsCBkdSBEb2M8L0ZSPlxcbiAgICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgPFhQYXRoPldvcmtmbG93VGFzay9pdGVtQXR0cmlidXRlc1trZXk9XFxcIlRyYW5zYWN0aW9uTnVtYmVyXFxcIl0vdmFsdWVzL190ZXh0PC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5TdHJpbmdDb250YWluczwvVHlwZT5cXG4gICAgICAgIDwvU2VhcmNoYWJsZT5cXG4gICAgICAgIDxTZWFyY2hhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPkFzc2lnbmVlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPkFzc2lnbmVlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRlc3RpbmF0YWlyZTwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2Fzc2lnbmVlcy9hc3NpZ25lZTwvWFBhdGg+XFxuICAgICAgICAgICAgPFR5cGU+SW5MaXN0PC9UeXBlPlxcbiAgICAgICAgPC9TZWFyY2hhYmxlPlxcbiAgICA8L0xpc3RPZlNlYXJjaGFibGVzPlxcbiAgICA8TGlzdE9mVmlld2FibGVzPlxcbiAgICAgICAgPFZpZXdhYmxlPlxcbiAgICAgICAgICAgIDxOYW1lPldGU3RhcnREYXRlPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBTdGFydCBEYXRlPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkRhdGUgZGUgZMOpYnV0PC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJTdGFydERhdGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPkRhdGUoeXl5eS1NTS1kZCdUJ0hIOm1tOnNzKTwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgIDxOYW1lPkRvY1R5cGU8L05hbWU+XFxuICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgPEVOPkRvYy4gVHlwZTwvRU4+XFxuICAgICAgICAgICAgIDxGUj5UeXBlPC9GUj5cXG4gICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgPFhQYXRoPi9Xb3JrZmxvd1Rhc2svaXRlbUF0dHJpYnV0ZXNba2V5PVxcXCJUcmFuc2FjdGlvblR5cGVcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgPE5hbWU+RG9jTnVtYmVyPC9OYW1lPlxcbiAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgIDxFTj5Eb2MuIE51bWJlcjwvRU4+XFxuICAgICAgICAgICAgIDxGUj5OwrAgZG9jLjwvRlI+XFxuICAgICAgICAgIDwvRGVzY3JpcHRpb24+XFxuICAgICAgICAgIDxYUGF0aD4vV29ya2Zsb3dUYXNrL2l0ZW1BdHRyaWJ1dGVzW2tleT1cXFwiVHJhbnNhY3Rpb25OdW1iZXJcXFwiXS92YWx1ZXMvX3RleHQ8L1hQYXRoPlxcbiAgICAgICAgICA8VHlwZT5TdHJpbmc8L1R5cGU+XFxuICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICBcXG4gICAgICAgIDxWaWV3YWJsZT5cXG4gICAgICAgICAgICA8TmFtZT5pdGVtTGluazwvTmFtZT5cXG4gICAgICAgICAgICA8RGVzY3JpcHRpb24+XFxuICAgICAgICAgICAgICAgIDxFTj5UcmFuc2FjdGlvbjwvRU4+XFxuICAgICAgICAgICAgICAgIDxGUj5UcmFuc2FjdGlvbjwvRlI+XFxuICAgICAgICAgICAgPC9EZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICA8WFBhdGg+V29ya2Zsb3dUYXNrL2ZsaW5rPC9YUGF0aD5cXG4gICAgICAgICAgICA8VHlwZT5JdGVtTGluazwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgICAgICA8Vmlld2FibGU+XFxuICAgICAgICAgICAgPE5hbWU+V29ya2Zsb3dTdGVwPC9OYW1lPlxcbiAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5cXG4gICAgICAgICAgICAgICAgPEVOPldGLiBBY3Rpb25zPC9FTj5cXG4gICAgICAgICAgICAgICAgPEZSPkFjdGlvbnMgV0YuPC9GUj5cXG4gICAgICAgICAgICA8L0Rlc2NyaXB0aW9uPlxcbiAgICAgICAgICAgIDxYUGF0aD5Xb3JrZmxvd1Rhc2svc3RlcC9Xb3JrZmxvd1N0ZXA8L1hQYXRoPlxcbiAgICAgICAgICAgIDxUeXBlPldvcmtmbG93U3RlcDwvVHlwZT5cXG4gICAgICAgIDwvVmlld2FibGU+XFxuICAgIDwvTGlzdE9mVmlld2FibGVzPlxcbjwvVmlldz5cXG5cIn0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzOTA0NTF9XSwicGxhdGZvcm02LnRhYmxlcyI6W3sic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYudGFibGVzIiwibmFtZSI6Ikl0ZW1zIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiSXRlbXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiSXRlbXNcIn0sXCJjb250ZW50TW9kZVwiOlwiRURJVFwiLFwibGFzdE1vZGlmaWVkQnlcIjpcImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbVwiLFwibGFzdE1vZGlmaWVkRGF0ZVwiOjE1ODUxNTUzOTAzNjYsXCJyZXZpc2lvbklkXCI6XCJmYTI3NTU1N2ZjNGJkNzdjMGY4MDhhMWExMzZlODM5NFwiLFwiZmllbGRzXCI6W1wiSWRcIixcIkRlc2NyaXB0aW9uXCIsXCJVbml0UHJpY2VcIixcIkN1cnJlbmN5XCIsXCJVT01cIixcIkNhdGVnb3J5XCJdLFwia2V5c1wiOltcIklkXCJdfSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM5MDM2Nn1dLCJwbGF0Zm9ybTYucm91dGVzIjpbeyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5yb3V0ZXMiLCJuYW1lIjoiUm91dGluZ1J1bGVEaXNwYXRjaGVyIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiUm91dGluZ1J1bGVEaXNwYXRjaGVyXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkRpc3BhdGNoZXIgdG8gUkZRLCBRdW90ZSBvciBQTyBSb3V0aW5nIFJ1bGVzXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5NzM4LFwicmV2aXNpb25JZFwiOlwiMjA4MjYyYjAxOGFmNzBjYWRjY2ZlNDMyNzExYmI2NjlcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX0Rpc3BhdGNoZXInKVxcbiAgICAgICAgICAgIC5jaG9pY2UoKVxcbiAgICAgICAgICAgICAgICAud2hlbih4cGF0aChcXFwiL1RyYW5zYWN0aW9uSW5mby9UcmFuc2FjdGlvblR5cGU9J1JlcXVlc3QgRm9yIFF1b3RhdGlvbidcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC50bygnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUmVxdWVzdEZvclF1b3RhdGlvbicpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RyYW5zYWN0aW9uVHlwZT0nUXVvdGUnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAudG8oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1F1b3RlJylcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVHJhbnNhY3Rpb25UeXBlPSdQdXJjaGFzZSBPcmRlcidcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC50bygnZGlyZWN0OnA2cm91dGVyLnA2X2RlbW9fUHVyY2hhc2VPcmRlcicpXFxuICAgICAgICAgICAgICAgIC5vdGhlcndpc2UoKVxcbiAgICAgICAgICAgICAgICAgICAgLnRocm93RXhjZXB0aW9uKGlvLnBsYXRmb3JtNi5jb21tb24udXRpbC5QNkV4Y2VwdGlvbiwnTm8gbWF0Y2hpbmcgcnVsZSBmb3VuZCBmb3IgaXRlbSEnKVxcbiAgICAgICAgICAgIC5lbmQoKVxcbiAgICAgICAgICAgIC5yb3V0ZUlkKFxcXCJwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlclxcXCIpXFxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFJvdXRpbmcgUnVsZXMgRGlzcGF0Y2hlclxcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1Mzg5NzM4fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJTY2hlZHVsZXJGb3JSRlFDcmVhdGlvbiIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNjaGVkdWxlckZvclJGUUNyZWF0aW9uXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlNjaGVkdWxlZCBjcmVhdGlvbiBvZiBSZXF1ZXN0cyBmb3IgUXVvdGF0aW9uXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5NzgwLFwicmV2aXNpb25JZFwiOlwiOTFmNWU2MTAyYjYzMmNhNTY1NmU4NGI5ZjJlYjI1NGVcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcImRlZiByb3V0ZUlkID0gXFxcInA2X2RlbW8gU2NoZWR1bGVkIGNyZWF0aW9uIG9mIFJGUXNcXFwiXFxuXFxudHJ5IHtcXG4gICAgcDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuICAgICAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgICAgICBmcm9tKFxcXCJ0aW1lcjovL215VGltZXI/cGVyaW9kPTEwbVxcXCIpXFxuICAgICAgICAgICAgICAgIC50bygncDZjbWI6Ly9zY3JpcHRzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1leGVjdXRlJmlkPXA2X2RlbW8uQ3JlYXRlUkZRVHJhbnNhY3Rpb24nKVxcbiAgICAgICAgICAgICAgICAucm91dGVJZChyb3V0ZUlkKVxcbiAgICAgICAgICAgICAgICAuZGVzY3JpcHRpb24ocm91dGVJZClcXG4gICAgICAgIH1cXG4gICAgfSlcXG5cXG4gICAgcDYudXRpbHMucGF1c2UoKVxcbn0gZmluYWxseSB7XFxuICBwNi5jYW1lbC5kZXN0cm95Um91dGUocm91dGVJZClcXG59XFxuXCIsXCJ0eXBlXCI6XCJzY2hlZHVsZXJcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1Mzg5NzgwfSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJSb3V0aW5nUnVsZXNGb3JQdXJjaGFzZU9yZGVycyIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlJvdXRpbmdSdWxlc0ZvclB1cmNoYXNlT3JkZXJzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlJvdXRpbmcgcnVsZXMgZm9yIFB1cmNoYXNlIE9yZGVyc1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM4OTcyMixcInJldmlzaW9uSWRcIjpcImUwOWM4N2Q3ZWY1MGNhMmVkOWQ1ZWU2NDkxNjlhZGRmXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG5cXG4gICAgdm9pZCBjb25maWd1cmUoKSB7XFxuXFxuICAgICAgICBmcm9tKCdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19QdXJjaGFzZU9yZGVyJylcXG4gICAgICAgICAgICAuY2hvaWNlKClcXG4gICAgICAgICAgICAgICAgLndoZW4oeHBhdGgoXFxcIi9UcmFuc2FjdGlvbkluZm8vVGVjaG5pY2FsU3RhdHVzQ29kZT0nUmVjZWl2ZWQnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJwbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb25cXFwiKS5jb25zdGFudChcXFwiaW52b2tlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcInN0YXR1c1xcXCIpLmNvbnN0YW50KFxcXCJSZWNlaXZlZFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJzdGVwXFxcIikuY29uc3RhbnQoXFxcIkhhbmRsZVB1cmNoYXNlT3JkZXJcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiYXBwa2V5XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiZmxvd25hbWVcXFwiKS5jb25zdGFudChcXFwiVVVJRFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAudG8oXFxcInA2cm91dGU6Ly9wbGF0Zm9ybTYud29ya2Zsb3dzdGVwc1xcXCIpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzJylcXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUHVyY2hhc2UgT3JkZXJzXFxcIilcXG4gICAgfVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJ4bWxfcm91dGluZ1wiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzODk3MjJ9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlNjaGVkdWxlckZvckNvdW50ZXJzUmVmcmVzaCIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIlNjaGVkdWxlckZvckNvdW50ZXJzUmVmcmVzaFwiLFwiYXBwS2V5XCI6XCJwNl9kZW1vXCIsXCJkZXNjcmlwdGlvblwiOntcIkVOXCI6XCJTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRlcnNcIixcIkZSXCI6XCJBY3R1YWxpc2F0aW9uIHBsYW5pZmnDqWUgZGVzIGNvbXB0ZXVyc1wifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM4OTc2OCxcInJldmlzaW9uSWRcIjpcIjlmOGZhN2FlMThhOWQ2YzQ3MTZkYWQ3NDAwMmIyOGZlXCIsXCJhdXRvU3RhcnRcIjp0cnVlLFwidGVtcGxhdGVUZXh0XCI6XCJwNi5jYW1lbC5nZXRDdHgoKS5hZGRSb3V0ZXMobmV3IFJvdXRlQnVpbGRlcigpIHtcXG5cXHRkZWYgdm9pZCBjb25maWd1cmUoKSB7XFxuXFx0XFx0ZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X1JGUXM/Y3Jvbj0wKzErKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRSRlFzJylcXG5cXHRcXHRcXHQucm91dGVJZCgncDZfZGVtbyBSZWZyZXNoIENvdW50UkZRcycpXFxuXFx0XFx0XFx0LmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFNjaGVkdWxlZCByZWZyZXNoIG9mIHRoZSBDb3VudFJGUXMgY291bnRlclxcXCIpXFxuXFxuXFx0XFx0ZnJvbShcXFwicXVhcnR6MjovL3BsYXRmb3JtNi9wNnJvdXRlX0NvdW50X1F1b3Rlcz9jcm9uPTArMisqKyorKis/KypcXFwiKVxcblxcdFxcdFxcdC50bygncDZjbWI6Ly9jb3VudGVycz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249c3luY2hyb25pemUmaWQ9cDZfZGVtby5Db3VudFF1b3RlcycpXFxuXFx0XFx0XFx0LnJvdXRlSWQoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudFF1b3RlcycpXFxuXFx0XFx0XFx0LmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFNjaGVkdWxlZCByZWZyZXNoIG9mIHRoZSBDb3VudFF1b3RlcyBjb3VudGVyXFxcIilcXG5cXG4gICAgICAgIGZyb20oXFxcInF1YXJ0ejI6Ly9wbGF0Zm9ybTYvcDZyb3V0ZV9Db3VudF9QT3NfQWNjZXB0ZWQ/Y3Jvbj0wKzMrKisqKyorPysqXFxcIilcXG5cXHRcXHRcXHQudG8oJ3A2Y21iOi8vY291bnRlcnM/cGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uPXN5bmNocm9uaXplJmlkPXA2X2RlbW8uQ291bnRBY2NlcHRlZFBPcycpXFxuXFx0XFx0XFx0LnJvdXRlSWQoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudEFjY2VwdGVkUE9zJylcXG5cXHRcXHRcXHQuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gU2NoZWR1bGVkIHJlZnJlc2ggb2YgdGhlIENvdW50QWNjZXB0ZWRQT3MgY291bnRlclxcXCIpXFxuXFxuICAgICAgICBmcm9tKFxcXCJxdWFydHoyOi8vcGxhdGZvcm02L3A2cm91dGVfQ291bnRfUE9zX1JlamVjdGVkP2Nyb249MCs0KyorKisqKz8rKlxcXCIpXFxuXFx0XFx0XFx0LnRvKCdwNmNtYjovL2NvdW50ZXJzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1zeW5jaHJvbml6ZSZpZD1wNl9kZW1vLkNvdW50UmVqZWN0ZWRQT3MnKVxcblxcdFxcdFxcdC5yb3V0ZUlkKCdwNl9kZW1vIFJlZnJlc2ggQ291bnRSZWplY3RlZFBPcycpXFxuXFx0XFx0XFx0LmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIFNjaGVkdWxlZCByZWZyZXNoIG9mIHRoZSBDb3VudFJlamVjdGVkUE9zIGNvdW50ZXJcXFwiKVxcblxcblxcdFxcdGZyb20oXFxcInF1YXJ0ejI6Ly9wbGF0Zm9ybTYvcDZyb3V0ZV9Db3VudF9GYWlsZWRSb3V0aW5nT3JkZXJzP2Nyb249MCswLzE1KyorKisqKz8rKlxcXCIpXFxuXFx0XFx0XFx0LnRvKCdwNmNtYjovL2NvdW50ZXJzP3BsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvbj1zeW5jaHJvbml6ZSZpZD1wNl9kZW1vLkNvdW50RmFpbGVkUm91dGluZ09yZGVycycpXFxuXFx0XFx0XFx0LnJvdXRlSWQoJ3A2X2RlbW8gUmVmcmVzaCBDb3VudEZhaWxlZFJvdXRpbmdPcmRlcnMnKVxcblxcdFxcdFxcdC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBTY2hlZHVsZWQgcmVmcmVzaCBvZiB0aGUgQ291bnRGYWlsZWRSb3V0aW5nT3JkZXJzIGNvdW50ZXJcXFwiKVxcblxcdH1cXG59KVxcblwiLFwidHlwZVwiOlwic2NoZWR1bGVyXCIsXCJzY3JpcHRTZWdtZW50c1wiOnt9fSIsImNvbnRlbnRNb2RlIjoiRURJVCIsImxhc3RNb2RpZmllZEJ5IjoiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tIiwibGFzdE1vZGlmaWVkRGF0ZSI6MTU4NTE1NTM4OTc2OH0seyJzZXJ2aWNlTmFtZSI6InBsYXRmb3JtNi5yb3V0ZXMiLCJuYW1lIjoiQmxvY2tjaGFpbkV2ZW50SGFuZGxlciIsImFwcEtleSI6InA2X2RlbW8iLCJpdGVtRm9ybWF0VmVyc2lvbiI6MCwiaXRlbUFzSnNvbiI6IntcIm5hbWVcIjpcIkJsb2NrY2hhaW5FdmVudEhhbmRsZXJcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiQmxvY2tjaGFpbiBFdmVudCBIYW5kbGVyXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5ODAzLFwicmV2aXNpb25JZFwiOlwiNTE4MTdhOWY4ZWNjNjc1Zjk2OWJmZDIwY2EzZjc4YzZcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcIi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4vLyBEZWZpbmUgcm91dGVzIHdpdGggcHJlLXByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zIChpZS4gdG8gZGVmaW5lIGFuZCByZWdpc3RlciBiZWFucykuXFxuLy9cXG4vLyBQYXJhbWV0ZXJzOlxcbi8vICAgIHByZVByb2Nlc3NpbmdTdGF0ZW1lbnQ6ICAgUHJlLXByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zXFxuLy8gICAgYWRkUm91dGVzOiAgICAgICAgICAgICAgICBUaGUgcm91dGUgZGVmaW5pdGlvbnNcXG4vL1xcbi8vIEV4YW1wbGU6XFxuLy8gICAgcDYuY2FtZWwucmVnaXN0ZXJCZWFuKFxcXCJteUJlYW5cXFwiLCBTZXJ2aWNlQmVhbiApXFxuLy9cXG4vLyBNb3JlIGluZm9ybWF0aW9uIG9uIGh0dHBzOi8vZG9jdW1lbnRhdGlvbi5hbWFsdG8uY29tL3BsYXRmb3JtNi9sYXRlc3QvZGV2ZWxvcC1hcHAvYnVpbHQtaW4tc2VydmljZXMvcm91dGVzL3JvdXRlcy1kc2wvI2dyb292eS1iZWFuLWV4ZWN1dGlvblxcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG5cXG5cXG4ke3ByZVByb2Nlc3NpbmdTdGF0ZW1lbnR9XFxuXFxucDYuY2FtZWwuZ2V0Q3R4KCkuYWRkUm91dGVzKG5ldyBSb3V0ZUJ1aWxkZXIoKSB7XFxuXFxuICAgIHZvaWQgY29uZmlndXJlKCkge1xcblxcbiAgICAgICAgJHthZGRSb3V0ZXN9XFxuXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwid2ViM2pcIixcInNjcmlwdFNlZ21lbnRzXCI6e1wiYWRkUm91dGVzXCI6XCJmcm9tKFxcXCJ3ZWIzajovL1xcXCIgKyBldGhDbGllbnRVUkwgKyBcXFwiP2FkZHJlc3M9XFxcIiArIGNvbnRyYWN0QWRkcmVzcyArIFxcXCImb3BlcmF0aW9uPUVUSF9MT0dfRkxPV0FCTEVcXFwiKVxcbiAgICAgICAgICAgIC50byhcXFwiYmVhbjovL2xvZ1RvSlNPTj9tZXRob2Q9dG9KU09OXFxcIilcXG4gICAgICAgICAgICAudG8oXFxcInA2Y21iOi8vc2NyaXB0cz9wbGF0Zm9ybTYucmVxdWVzdC5hY3Rpb249ZXhlY3V0ZSZpZD1wNl9kZW1vLkJsb2NrY2hhaW5FdmVudEhhbmRsZXJcXFwiKVxcbiAgICAgICAgICAgIC5yb3V0ZUlkKFxcXCJwNl9kZW1vIFdlYjNqIC0gQmxvY2tjaGFpbkV2ZW50SGFuZGxlclxcXCIpXFxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uKFxcXCJwNl9kZW1vIEJsb2NrY2hhaW4gRXZlbnQgSGFuZGxlclxcXCIpXCIsXCJwcmVQcm9jZXNzaW5nU3RhdGVtZW50XCI6XCJpbXBvcnQgY29tLmZhc3RlcnhtbC5qYWNrc29uLmRhdGFiaW5kLk9iamVjdE1hcHBlclxcbmltcG9ydCBvcmcud2ViM2oucHJvdG9jb2wuY29yZS5tZXRob2RzLnJlc3BvbnNlLkxvZ1xcblxcbmNsYXNzIExvZ1RvSlNPTiB7XFxuICAgIGRlZiBTdHJpbmcgdG9KU09OKExvZyBsb2cpIHtcXG4gICAgICAgIHJldHVybiBuZXcgT2JqZWN0TWFwcGVyKCkud3JpdGVWYWx1ZUFzU3RyaW5nKGxvZyk7XFxuICAgIH1cXG59XFxuXFxucDYuY2FtZWwucmVnaXN0ZXJCZWFuKFxcXCJsb2dUb0pTT05cXFwiLCBMb2dUb0pTT04pXFxuXFxuZGVmIGV0aENsaWVudFVSTCA9IHA2LmFwcGNvbmZpZy5nZXQoJ2V0aENsaWVudFVSTCcpXFxuZGVmIGNvbnRyYWN0QWRkcmVzcyA9ICBwNi5hcHBjb25maWcuZ2V0KCdjb250cmFjdEFkZHJlc3MnKVxcblwifX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzODk4MDN9LHsic2VydmljZU5hbWUiOiJwbGF0Zm9ybTYucm91dGVzIiwibmFtZSI6IlJvdXRpbmdSdWxlc0ZvclJGUXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSb3V0aW5nUnVsZXNGb3JSRlFzXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIlJvdXRpbmcgcnVsZXMgZm9yIFJlcXVlc3RGb3JRdW90YXRpb25zXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5NzU0LFwicmV2aXNpb25JZFwiOlwiYmJiZmZjOTJhMjI0MzNmODNmYjA5YWUxODgwYWExMzlcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcblxcbiAgICB2b2lkIGNvbmZpZ3VyZSgpIHtcXG4gICAgICAgIGZyb20oJ2RpcmVjdDpwNnJvdXRlci5wNl9kZW1vX1JlcXVlc3RGb3JRdW90YXRpb24nKVxcbiAgICAgICAgICAgIC5jaG9pY2UoKVxcbiAgICAgICAgICAgICAgICAud2hlbih4cGF0aChcXFwiL1RyYW5zYWN0aW9uSW5mby9UZWNobmljYWxTdGF0dXNDb2RlPSdSZWNlaXZlZCdcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcInBsYXRmb3JtNi5yZXF1ZXN0LmFjdGlvblxcXCIpLmNvbnN0YW50KFxcXCJpbnZva2VcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwic3RhdHVzXFxcIikuY29uc3RhbnQoXFxcIlJlY2VpdmVkXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC5zZXRIZWFkZXIoXFxcInN0ZXBcXFwiKS5jb25zdGFudChcXFwiSGFuZGxlUmVxdWVzdEZvclF1b3RhdGlvblxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJhcHBrZXlcXFwiKS5jb25zdGFudChcXFwicDZfZGVtb1xcXCIpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKFxcXCJmbG93bmFtZVxcXCIpLmNvbnN0YW50KFxcXCJVVUlEXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC50byhcXFwicDZyb3V0ZTovL3BsYXRmb3JtNi53b3JrZmxvd3N0ZXBzXFxcIilcXG4gICAgICAgICAgICAgICAgLm90aGVyd2lzZSgpXFxuICAgICAgICAgICAgICAgICAgICAudGhyb3dFeGNlcHRpb24oaW8ucGxhdGZvcm02LmNvbW1vbi51dGlsLlA2RXhjZXB0aW9uLCdObyBtYXRjaGluZyBydWxlIGZvdW5kIGZvciBpdGVtIScpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUmVxdWVzdEZvclF1b3RhdGlvbnNcXFwiKVxcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbihcXFwicDZfZGVtbyBSb3V0aW5nIHJ1bGVzIGZvciBSZXF1ZXN0Rm9yUXVvdGF0aW9uc1xcXCIpXFxuICAgIH1cXG59KVxcblwiLFwidHlwZVwiOlwieG1sX3JvdXRpbmdcIixcInNjcmlwdFNlZ21lbnRzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1Mzg5NzU0fSx7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnJvdXRlcyIsIm5hbWUiOiJSb3V0aW5nUnVsZXNGb3JRdW90ZXMiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJSb3V0aW5nUnVsZXNGb3JRdW90ZXNcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiUm91dGluZyBydWxlcyBmb3IgUXVvdGVzXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5NzkyLFwicmV2aXNpb25JZFwiOlwiZmQwMmNhYTYxNzVmNjY3YzJmYjY5NDQwYTY0MmE1YmZcIixcImF1dG9TdGFydFwiOnRydWUsXCJ0ZW1wbGF0ZVRleHRcIjpcInA2LmNhbWVsLmdldEN0eCgpLmFkZFJvdXRlcyhuZXcgUm91dGVCdWlsZGVyKCkge1xcbiAgICBcXG4gICAgdm9pZCBjb25maWd1cmUoKSB7XFxuICAgICAgICBmcm9tKCdkaXJlY3Q6cDZyb3V0ZXIucDZfZGVtb19RdW90ZScpXFxuICAgICAgICAgICAgLmNob2ljZSgpXFxuICAgICAgICAgICAgICAgIC53aGVuKHhwYXRoKFxcXCIvVHJhbnNhY3Rpb25JbmZvL1RlY2huaWNhbFN0YXR1c0NvZGU9J0NyZWF0ZWQnXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICAuc2V0SGVhZGVyKCAncGxhdGZvcm02LnJlcXVlc3QuYWN0aW9uJykuY29uc3RhbnQoJ2V4ZWN1dGUnKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcihcXFwiYXBwa2V5XFxcIikuY29uc3RhbnQoXFxcInA2X2RlbW9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldEhlYWRlcignaWQnKS5jb25zdGFudCgncDZfZGVtby5TZW5kUXVvdGVUb0Jsb2NrY2hhaW4nKVxcbiAgICAgICAgICAgICAgICAgICAgLnNldFByb3BlcnR5KCdleGVjdXRlLmFzeW5jJykuY29uc3RhbnQodHJ1ZSlcXG4gICAgICAgICAgICAgICAgICAgIC50byhcXFwicDZyb3V0ZTovL3BsYXRmb3JtNi5zY3JpcHRzXFxcIilcXG4gICAgICAgICAgICAgICAgLm90aGVyd2lzZSgpXFxuICAgICAgICAgICAgICAgICAgICAudGhyb3dFeGNlcHRpb24oaW8ucGxhdGZvcm02LmNvbW1vbi51dGlsLlA2RXhjZXB0aW9uLCdObyBtYXRjaGluZyBydWxlIGZvdW5kIGZvciBpdGVtIScpXFxuICAgICAgICAgICAgLmVuZCgpXFxuICAgICAgICAgICAgLnJvdXRlSWQoJ3A2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUXVvdGVzJylcXG4gICAgICAgICAgICAuZGVzY3JpcHRpb24oXFxcInA2X2RlbW8gUm91dGluZyBydWxlcyBmb3IgUXVvdGVzXFxcIilcXG4gICAgfVxcbn0pXFxuXCIsXCJ0eXBlXCI6XCJ4bWxfcm91dGluZ1wiLFwic2NyaXB0U2VnbWVudHNcIjp7fX0iLCJjb250ZW50TW9kZSI6IkVESVQiLCJsYXN0TW9kaWZpZWRCeSI6ImNob3VjcmkuZmFoZWRAYW1hbHRvLmNvbSIsImxhc3RNb2RpZmllZERhdGUiOjE1ODUxNTUzODk3OTJ9XSwicGxhdGZvcm02LnN0b3JlZHByb2NlZHVyZXMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LnN0b3JlZHByb2NlZHVyZXMiLCJuYW1lIjoiRGVsZXRlUDZEZW1vVHJhbnNhY3Rpb25zIiwiYXBwS2V5IjoicDZfZGVtbyIsIml0ZW1Gb3JtYXRWZXJzaW9uIjowLCJpdGVtQXNKc29uIjoie1wibmFtZVwiOlwiRGVsZXRlUDZEZW1vVHJhbnNhY3Rpb25zXCIsXCJhcHBLZXlcIjpcInA2X2RlbW9cIixcImRlc2NyaXB0aW9uXCI6e1wiRU5cIjpcIkRlbGV0ZSBhbGwgcDZfZGVtbyB0cmFuc2FjdGlvbiAtIGF1dG9tYXRpY2FsbHkgY2FsbGVkIHdoZW4gcDZfZGVtbyBhcHBsaWNhdGlvbiBpcyB1bmluc3RhbGxlZFwifSxcImNvbnRlbnRNb2RlXCI6XCJFRElUXCIsXCJsYXN0TW9kaWZpZWRCeVwiOlwiY2hvdWNyaS5mYWhlZEBhbWFsdG8uY29tXCIsXCJsYXN0TW9kaWZpZWREYXRlXCI6MTU4NTE1NTM5MDMyMCxcInJldmlzaW9uSWRcIjpcIjM4MWIyMTc5MDdmYzFmZmFhZDkxNTk0MjJhMTViNTk3XCIsXCJ0eXBlXCI6XCJVc2VyRGVmaW5lZFwiLFwidXNlclF1ZXJ5VmFsdWVcIjpcImRlbGV0ZVxcbmZyb20gcDZjb3JlLnRyYW5zYWN0aW9uXFxud2hlcmUgZGF0YVR5cGUgPSAncDZfZGVtby5UcmFuc2FjdGlvbkluZm8nO1xcblxcbmRlbGV0ZVxcbmZyb20gcDZjb3JlLnRyYW5zYWN0aW9uXFxud2hlcmUgeHBhdGhfZXhpc3RzKCcvV29ya2Zsb3dUYXNrL2ZsaW5rL3ZpZXdbLj1cXFwicDZfZGVtby5UcmFuc2FjdGlvbnNcXFwiXScgLCBjb250ZW50KTtcXG5cIixcImRlZmluZWRQYXJhbWV0ZXJzXCI6e319IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1MzkwMzIwfV0sInBsYXRmb3JtNi5ob21lcGFnZXMiOlt7InNlcnZpY2VOYW1lIjoicGxhdGZvcm02LmhvbWVwYWdlcyIsIm5hbWUiOiJEZW1vIEhvbWUiLCJhcHBLZXkiOiJwNl9kZW1vIiwiaXRlbUZvcm1hdFZlcnNpb24iOjAsIml0ZW1Bc0pzb24iOiJ7XCJuYW1lXCI6XCJEZW1vIEhvbWVcIixcImFwcEtleVwiOlwicDZfZGVtb1wiLFwiZGVzY3JpcHRpb25cIjp7XCJFTlwiOlwiRGVtbyBIb21lXCJ9LFwiY29udGVudE1vZGVcIjpcIkVESVRcIixcImxhc3RNb2RpZmllZEJ5XCI6XCJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb21cIixcImxhc3RNb2RpZmllZERhdGVcIjoxNTg1MTU1Mzg5Njc5LFwicmV2aXNpb25JZFwiOlwiN2ZmZmFhNjRhNzZjZTBmOWM0YTVkYTBmMjhiNjRjMzlcIixcIm1vZHVsZXNcIjpbe1wiaWRcIjpcInA2X2RlbW8uQ291bnRSRlFzXCIsXCJvcmRlclwiOjAsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9LHtcImlkXCI6XCJwNl9kZW1vLkNvdW50UXVvdGVzXCIsXCJvcmRlclwiOjEsXCJ0eXBlXCI6XCJjb3VudGVyc1wiLFwid2lkdGhcIjpcInNtYWxsXCIsXCJoZWlnaHRcIjpcIm1lZGl1bVwiLFwiZGF0YVwiOm51bGx9LHtcImlkXCI6XCJwNl9kZW1vLkNvdW50QWNjZXB0ZWRQT3NcIixcIm9yZGVyXCI6MixcInR5cGVcIjpcImNvdW50ZXJzXCIsXCJ3aWR0aFwiOlwic21hbGxcIixcImhlaWdodFwiOlwibWVkaXVtXCIsXCJkYXRhXCI6bnVsbH0se1wiaWRcIjpcInA2X2RlbW8uQ291bnRSZWplY3RlZFBPc1wiLFwib3JkZXJcIjozLFwidHlwZVwiOlwiY291bnRlcnNcIixcIndpZHRoXCI6XCJzbWFsbFwiLFwiaGVpZ2h0XCI6XCJtZWRpdW1cIixcImRhdGFcIjpudWxsfV19IiwiY29udGVudE1vZGUiOiJFRElUIiwibGFzdE1vZGlmaWVkQnkiOiJjaG91Y3JpLmZhaGVkQGFtYWx0by5jb20iLCJsYXN0TW9kaWZpZWREYXRlIjoxNTg1MTU1Mzg5Njc5fV19", "version": "1.0.2", "installed": false, "signature": "IojW3spgBgfvY2Yx+7Hn7FOE3cvTR9L8C8q6/IuUnr6j4ISXHER8zmuVOoqavADZpEZ5831B/tJbXqiAIJIZIj3j+39moY6je3Ms60pQ0er9cqk4HFvG89rBsELesyF9afvSq6PVcDNxHXD5BeCKI1fYSWIw/tEuUrTe91EgfkE=", "createDate": 1585155431448, "expiryDays": 0, "revisionId": "705d895f9aea5e3650a38ff6745c2000", "contentMode": "READ", "description": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "publisherId": "4d8c4ac1-9db1-44d9-8d4e-604a845478e9", "appProperties": {}, "publisherName": "Platform 6", "lastModifiedBy": "choucri.fahed@amalto.com", "applicationName": {"EN": "Platform 6 Demo App", "FR": "Platform 6 Demo App"}, "componentBundle": null, "installationDate": null, "lastModifiedDate": 1585157960098, "underDevelopment": false, "uninstallScriptId": "UninstallApplication", "maxInstanceVersion": "", "minInstanceVersion": "6.0.2", "preInstallScriptId": "PreInstallApplication", "postInstallScriptId": "PostInstallApplication"} \N 1585157960122 +\. + + +-- +-- Data for Name: table_data; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.table_data (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; +\. + + +-- +-- Data for Name: transaction; Type: TABLE DATA; Schema: p6core; Owner: b2box +-- + +COPY p6core.transaction (datapartition, datatype, iid1, iid2, iid3, iid4, content, inserttime) FROM stdin; +\. + + +-- +-- Name: activeroutingorder activeroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.activeroutingorder + ADD CONSTRAINT activeroutingorder_pkey PRIMARY KEY (name); + + +-- +-- Name: completedroutingorder completedroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.completedroutingorder + ADD CONSTRAINT completedroutingorder_pkey PRIMARY KEY (name); + + +-- +-- Name: failedroutingorder failedroutingorder_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.failedroutingorder + ADD CONSTRAINT failedroutingorder_pkey PRIMARY KEY (name); + + +-- +-- Name: flyway_schema_history flyway_schema_history_pk; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.flyway_schema_history + ADD CONSTRAINT flyway_schema_history_pk PRIMARY KEY (installed_rank); + + +-- +-- Name: instancedata instance_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.instancedata + ADD CONSTRAINT instance_pkey PRIMARY KEY (application, service, type); + + +-- +-- Name: transaction item_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.transaction + ADD CONSTRAINT item_pkey PRIMARY KEY (datapartition, datatype, iid1, iid2, iid3, iid4); + + +-- +-- Name: rawbytes rawbytes_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.rawbytes + ADD CONSTRAINT rawbytes_pkey PRIMARY KEY (id1, id2); + + +-- +-- Name: serviceconfig serviceconfig_pkey; Type: CONSTRAINT; Schema: p6core; Owner: b2box +-- + +ALTER TABLE ONLY p6core.serviceconfig + ADD CONSTRAINT serviceconfig_pkey PRIMARY KEY (id1, id2, id3) WITH (fillfactor='100'); + + +-- +-- Name: aro_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx01 ON p6core.activeroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeScheduled//text()'::text, content))::text[], ' '::text))::bigint)); + + +-- +-- Name: aro_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx02 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: aro_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx03 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: aro_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx04 ON p6core.activeroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: aro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX aro_idx_itempk_datapartition ON p6core.activeroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); + + +-- +-- Name: cro_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx01 ON p6core.completedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeLastRunCompleted//text()'::text, content))::text[], ' '::text))::bigint)); + + +-- +-- Name: cro_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx02 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: cro_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx03 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: cro_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx04 ON p6core.completedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: cro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX cro_idx_itempk_datapartition ON p6core.completedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); + + +-- +-- Name: flyway_schema_history_s_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX flyway_schema_history_s_idx ON p6core.flyway_schema_history USING btree (success); + + +-- +-- Name: fro_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx01 ON p6core.failedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/timeLastRunCompleted//text()'::text, content))::text[], ' '::text))::bigint)); + + +-- +-- Name: fro_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx02 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/conceptName//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: fro_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx03 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/adapter//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: fro_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx04 ON p6core.failedroutingorder USING btree (public.array_to_string_i((xpath('/routingOrder/itemPK/itemIds[1]//text()'::text, content))::text[], ' '::text)); + + +-- +-- Name: fro_idx_itempk_datapartition; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fro_idx_itempk_datapartition ON p6core.failedroutingorder USING btree (((public.array_to_string_i((xpath('/routingOrder/itemPK/dataPartitionPK/dataPartition//text()'::text, content, '{}'::text[]))::text[], ' '::text))::character varying(256))); + + +-- +-- Name: fts_aro_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fts_aro_idx ON p6core.activeroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); + + +-- +-- Name: fts_cro_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fts_cro_idx ON p6core.completedroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); + + +-- +-- Name: fts_fro_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX fts_fro_idx ON p6core.failedroutingorder USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/routingOrder//text()'::text, content))::text[], ' '::text))); + + +-- +-- Name: instance_idx_application_type; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX instance_idx_application_type ON p6core.instancedata USING btree (application, type); + + +-- +-- Name: instance_idx_content; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX instance_idx_content ON p6core.instancedata USING btree (content); + + +-- +-- Name: item_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_idx01 ON p6core.transaction USING btree (datapartition); + + +-- +-- Name: item_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_idx02 ON p6core.transaction USING btree (datatype); + + +-- +-- Name: item_mi_fts_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx01 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx02 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/CreationDate//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx03 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx04 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_fts_idx05; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_fts_idx05 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/MessageInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_idx01 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/CreationDate//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_idx02 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_idx03 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_mi_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_mi_idx04 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/MessageInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datapartition = 'TRANSACTION'::p6core.itempartitiontype) AND ((datatype)::text = 'TransactionInfo'::text)); + + +-- +-- Name: item_ti_fts_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_fts_idx01 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/TransactionInfo//text()'::text, content))::text[], ' '::text))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_fts_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_fts_idx02 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/TransactionInfo/CreationDate//text()'::text, content))::text[], ' '::text))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_fts_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_fts_idx03 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/TransactionInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_fts_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_fts_idx04 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/TransactionInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_fts_idx05; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_fts_idx05 ON p6core.transaction USING gist (to_tsvector('english'::regconfig, public.array_to_string_i((xpath('/TransactionInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_idx01 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/TransactionInfo/CreationDate//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_idx02; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_idx02 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/TransactionInfo/BusinessDocName//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_idx03; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_idx03 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/TransactionInfo/BusinessDocNumber//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: item_ti_idx04; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX item_ti_idx04 ON p6core.transaction USING btree (((public.array_to_string_i((xpath('/TransactionInfo/LastStatusCode//text()'::text, content))::text[], ' '::text))::character varying(256))) WHERE ((datatype)::text = 'TransactionInfo'::text); + + +-- +-- Name: log_datatype_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX log_datatype_idx ON p6core.log USING btree (datatype); + + +-- +-- Name: sconfigjson_idx01; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX sconfigjson_idx01 ON p6core.serviceconfig USING gin (content jsonb_path_ops); + + +-- +-- Name: table_data_datatype_idx; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX table_data_datatype_idx ON p6core.table_data USING btree (datatype); + + +-- +-- Name: xrocswyd3g5rejujxo; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX xrocswyd3g5rejujxo ON p6core.table_data USING btree (public.array_to_string_i((xpath('/DUNS_Internal/DUNSNumber//text()'::text, content))::text[], ' '::text)) WHERE ((datapartition = 'TABLE_DATA'::p6core.itempartitiontype) AND ((datatype)::text = 'DUNS_Internal'::text)); + + +-- +-- Name: xrvlaoi4elt5bbntlz; Type: INDEX; Schema: p6core; Owner: b2box +-- + +CREATE INDEX xrvlaoi4elt5bbntlz ON p6core.table_data USING btree (public.array_to_string_i((xpath('/DUNS_Customers/DUNSNumber//text()'::text, content))::text[], ' '::text)) WHERE ((datapartition = 'TABLE_DATA'::p6core.itempartitiontype) AND ((datatype)::text = 'DUNS_Customers'::text)); + + +-- +-- Name: DATABASE b2box; Type: ACL; Schema: -; Owner: postgres +-- + +GRANT ALL ON DATABASE b2box TO b2box; + + +-- +-- PostgreSQL database dump complete +-- + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 11.7 +-- Dumped by pg_dump version 11.7 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +DROP DATABASE postgres; +-- +-- Name: postgres; Type: DATABASE; Schema: -; Owner: postgres +-- + +CREATE DATABASE postgres WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'en_US.utf8' LC_CTYPE = 'en_US.utf8'; + + +ALTER DATABASE postgres OWNER TO postgres; + +\connect postgres + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: DATABASE postgres; Type: COMMENT; Schema: -; Owner: postgres +-- + +COMMENT ON DATABASE postgres IS 'default administrative connection database'; + + +-- +-- Name: b2head; Type: SCHEMA; Schema: -; Owner: postgres +-- + +CREATE SCHEMA b2head; + + +ALTER SCHEMA b2head OWNER TO postgres; + +-- +-- Name: tablefunc; Type: EXTENSION; Schema: -; Owner: +-- + +CREATE EXTENSION IF NOT EXISTS tablefunc WITH SCHEMA public; + + +-- +-- Name: EXTENSION tablefunc; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION tablefunc IS 'functions that manipulate whole tables, including crosstab'; + + +-- +-- PostgreSQL database dump complete +-- + +-- +-- PostgreSQL database cluster dump complete +-- +